From 4257790d2d96d1cb168ec51ee9134bf7a3bb82a4 Mon Sep 17 00:00:00 2001 From: "henrik.lundin@webrtc.org" Date: Wed, 23 Nov 2011 13:04:05 +0000 Subject: [PATCH] NetEQ-related bug in ACM Fixing a bug when creating new NetEQ slave instances in ACM. The old code called WebRtcNetEQ_GetCurrentDelay() for the master instance to get a delay value for WebRtcNetEQ_SetExtraDelay(). This is wrong, since WebRtcNetEQ_GetCurrentDelay() reports on the current total buffer length, while WebRtcNetEQ_SetExtraDelay() is the extra delay that is desired to in order to sync with video. The fix includes keeping the extra delay value in a member variable in the ACMNetEQ class. Review URL: http://webrtc-codereview.appspot.com/295001 git-svn-id: http://webrtc.googlecode.com/svn/trunk@1001 4adac7df-926f-26a2-2b94-8c16560cd09d --- src/modules/audio_coding/main/source/acm_neteq.cc | 14 ++++---------- src/modules/audio_coding/main/source/acm_neteq.h | 1 + 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/modules/audio_coding/main/source/acm_neteq.cc b/src/modules/audio_coding/main/source/acm_neteq.cc index c50a64e55..0342388d0 100644 --- a/src/modules/audio_coding/main/source/acm_neteq.cc +++ b/src/modules/audio_coding/main/source/acm_neteq.cc @@ -44,6 +44,7 @@ _numSlaves(0), _receivedStereo(false), _masterSlaveInfo(NULL), _previousAudioActivity(AudioFrame::kVadUnknown), +_extraDelay(0), _callbackCritSect(CriticalSectionWrapper::CreateCriticalSection()) { for(int n = 0; n < MAX_NUM_SLAVE_NETEQ + 1; n++) @@ -333,6 +334,7 @@ ACMNetEQ::SetExtraDelay( return -1; } } + _extraDelay = delayInMS; return 0; } @@ -1186,16 +1188,8 @@ ACMNetEQ::AddSlave( _numSlaves = 1; _isInitialized[slaveIdx] = true; - // Set Slave delay as Master delay - WebRtc_UWord16 currentDelayMs; - if(WebRtcNetEQ_GetCurrentDelay(_inst[0], ¤tDelayMs) < 0) - { - LogError("GetCurrentDelay", 0); - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, _id, - "AddSlave: AddSlave Failed, Could not Get Current Delay from Master."); - return -1; - } - if(WebRtcNetEQ_SetExtraDelay(_inst[slaveIdx], currentDelayMs) < 0) + // Set Slave delay as all other instances. + if(WebRtcNetEQ_SetExtraDelay(_inst[slaveIdx], _extraDelay) < 0) { LogError("SetExtraDelay", slaveIdx); WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, _id, diff --git a/src/modules/audio_coding/main/source/acm_neteq.h b/src/modules/audio_coding/main/source/acm_neteq.h index 8d4b2c100..61046f14d 100644 --- a/src/modules/audio_coding/main/source/acm_neteq.h +++ b/src/modules/audio_coding/main/source/acm_neteq.h @@ -401,6 +401,7 @@ private: bool _receivedStereo; void* _masterSlaveInfo; AudioFrame::VADActivity _previousAudioActivity; + WebRtc_Word32 _extraDelay; CriticalSectionWrapper* _callbackCritSect; };