VoIP updates

This commit is contained in:
Isaac 2025-03-14 15:36:23 +01:00
parent 1304f0f098
commit 13488b2eaa
2 changed files with 58 additions and 14 deletions

View File

@ -1,4 +1,5 @@
#import <TgVoipWebrtc/OngoingCallThreadLocalContext.h>
#include <cstdint>
#import "MediaUtils.h"
@ -6,7 +7,6 @@
#import "InstanceImpl.h"
#import "v2/InstanceV2Impl.h"
#import "v2/InstanceV2ReferenceImpl.h"
//#import "v2_4_0_0/InstanceV2_4_0_0Impl.h"
#include "StaticThreads.h"
#import "VideoCaptureInterface.h"
@ -507,8 +507,8 @@ public:
) override {
_mutex.Lock();
if (!_audioTransports.empty()) {
for (size_t i = _audioTransports.size() - 1; i < _audioTransports.size(); i++) {
_audioTransports[_audioTransports.size() - 1]->RecordedDataIsAvailable(
for (size_t i = 0; i < _audioTransports.size(); i++) {
_audioTransports[i]->RecordedDataIsAvailable(
audioSamples,
nSamples,
nBytesPerSample,
@ -542,6 +542,48 @@ public:
int32_t result = 0;
if (!_audioTransports.empty()) {
if (_audioTransports.size() > 1) {
size_t totalNumSamples = nSamples * nBytesPerSample * nChannels;
if (_mixAudioSamples.size() < totalNumSamples) {
_mixAudioSamples.resize(totalNumSamples);
}
memset(audioSamples, 0, totalNumSamples);
int16_t *resultAudioSamples = (int16_t *)audioSamples;
for (size_t i = 0; i < _audioTransports.size(); i++) {
int64_t localElapsedTimeMs = 0;
int64_t localNtpTimeMs = 0;
size_t localNSamplesOut = 0;
_audioTransports[i]->NeedMorePlayData(
nSamples,
nBytesPerSample,
nChannels,
samplesPerSec,
_mixAudioSamples.data(),
localNSamplesOut,
&localElapsedTimeMs,
&localNtpTimeMs
);
for (size_t j = 0; j < localNSamplesOut; j++) {
int32_t mixedSample = (int32_t)resultAudioSamples[j] + (int32_t)_mixAudioSamples[j];
resultAudioSamples[j] = (int16_t)std::clamp(mixedSample, INT16_MIN, INT16_MAX);
}
if (i == _audioTransports.size() - 1) {
nSamplesOut = localNSamplesOut;
if (elapsed_time_ms) {
*elapsed_time_ms = localElapsedTimeMs;
}
if (ntp_time_ms) {
*ntp_time_ms = localNtpTimeMs;
}
}
}
nSamplesOut = nSamples;
} else {
result = _audioTransports[_audioTransports.size() - 1]->NeedMorePlayData(
nSamples,
nBytesPerSample,
@ -552,6 +594,7 @@ public:
elapsed_time_ms,
ntp_time_ms
);
}
} else {
nSamplesOut = 0;
}
@ -620,6 +663,7 @@ private:
bool _isStarted = false;
std::vector<webrtc::AudioTransport *> _audioTransports;
webrtc::Mutex _mutex;
std::vector<int16_t> _mixAudioSamples;
};
class WrappedChildAudioDeviceModule : public tgcalls::DefaultWrappedAudioDeviceModule {

@ -1 +1 @@
Subproject commit 4d122958a6bd8aa94437cf26750442b88cc0f5c0
Subproject commit 6f4e6f1b4cdfed02a30a2883a8ecb7586732ddfc