From e7d8c56c560b91ae3a76a60631ea3fda4fa450f3 Mon Sep 17 00:00:00 2001 From: "henrik.lundin@webrtc.org" Date: Fri, 16 Dec 2011 15:40:52 +0000 Subject: [PATCH] Fix for dual decoder in VCM receiver In VCMReceiver::FrameForDecoding, one of the if-cases could sometimes extract an incomplete frame without first copying the state to the dual decoder. Review URL: http://webrtc-codereview.appspot.com/328006 git-svn-id: http://webrtc.googlecode.com/svn/trunk@1221 4adac7df-926f-26a2-2b94-8c16560cd09d --- src/modules/video_coding/main/source/receiver.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/modules/video_coding/main/source/receiver.cc b/src/modules/video_coding/main/source/receiver.cc index c503f98df5..95e875a014 100644 --- a/src/modules/video_coding/main/source/receiver.cc +++ b/src/modules/video_coding/main/source/receiver.cc @@ -275,7 +275,19 @@ VCMReceiver::FrameForDecoding(WebRtc_UWord16 maxWaitTimeMs, { // No time to wait for a complete frame, // check if we have an incomplete - frame = _jitterBuffer.GetFrameForDecoding(); + const bool dualReceiverEnabledAndPassive = (dualReceiver != NULL && + dualReceiver->State() == kPassive && + dualReceiver->NackMode() == kNackInfinite); + if (dualReceiverEnabledAndPassive && + !_jitterBuffer.CompleteSequenceWithNextFrame()) + { + // Jitter buffer state might get corrupt with this frame. + dualReceiver->CopyJitterBufferStateFromReceiver(*this); + frame = _jitterBuffer.GetFrameForDecoding(); + assert(frame); + } else { + frame = _jitterBuffer.GetFrameForDecoding(); + } } if (frame == NULL) {