diff --git a/src/modules/video_coding/main/source/jitter_buffer.cc b/src/modules/video_coding/main/source/jitter_buffer.cc index 820c487057..aafb70113b 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 60e74afd56..3bd1261a9b 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;