From ebeb5a656b2a8d56a717def4e45071a0d152211c Mon Sep 17 00:00:00 2001 From: "mikhal@webrtc.org" Date: Wed, 17 Aug 2011 18:43:21 +0000 Subject: [PATCH] video_coding - JB: Ensuring that every frame is inserted only once to the list Review URL: http://webrtc-codereview.appspot.com/114006 git-svn-id: http://webrtc.googlecode.com/svn/trunk@391 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../video_coding/main/source/jitter_buffer.cc | 13 ++++++------- .../video_coding/main/test/jitter_buffer_test.cc | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/modules/video_coding/main/source/jitter_buffer.cc b/src/modules/video_coding/main/source/jitter_buffer.cc index 820c48705..aafb70113 100644 --- a/src/modules/video_coding/main/source/jitter_buffer.cc +++ b/src/modules/video_coding/main/source/jitter_buffer.cc @@ -1702,13 +1702,12 @@ VCMJitterBuffer::InsertPacket(VCMEncodedFrame* buffer, const VCMPacket& packet) frame->IncrementNackCount(); } - // First packet of a frame - if (state == kStateEmpty) + // Insert each frame once on the arrival of the first packet + // belonging to that frame (media or empty) + if (state == kStateEmpty && + frame->GetHighSeqNum() == packet.seqNum) { - if (bufferReturn > 0) - { - ret = kFirstPacket; - } + ret = kFirstPacket; _frameBuffersTSOrder.Insert(frame); } } @@ -1857,7 +1856,7 @@ VCMJitterBuffer::RecycleFramesUntilKeyFrame() oldestFrame = oldestFrameListItem->GetItem(); } - if(oldestFrame != NULL) + if (oldestFrame != NULL) { foundIFrame = foundIFrame || (oldestFrame->FrameType() != kVideoFrameDelta); diff --git a/src/modules/video_coding/main/test/jitter_buffer_test.cc b/src/modules/video_coding/main/test/jitter_buffer_test.cc index 60e74afd5..3bd1261a9 100644 --- a/src/modules/video_coding/main/test/jitter_buffer_test.cc +++ b/src/modules/video_coding/main/test/jitter_buffer_test.cc @@ -1903,7 +1903,7 @@ int JitterBufferTest(CmdArgs& args) packet.seqNum = seqNum; packet.timestamp = timeStamp; packet.frameType = kVideoFrameDelta; - TEST(kFirstPacket == jb.InsertPacket(frameIn, packet)); + TEST(kIncomplete == jb.InsertPacket(frameIn, packet)); // insert an additional data packet seqNum = 2; packet.isFirstPacket = false;