From bed34a341a44b8893d6ac5c2051cf7573eae605f Mon Sep 17 00:00:00 2001 From: "mikhal@webrtc.org" Date: Thu, 29 Dec 2011 17:37:39 +0000 Subject: [PATCH] video_coding: Updating seq number for old zero size packets. Updating function name to reflect zero size packets and not empty packets. Review URL: http://webrtc-codereview.appspot.com/333009 git-svn-id: http://webrtc.googlecode.com/svn/trunk@1307 4adac7df-926f-26a2-2b94-8c16560cd09d --- src/modules/video_coding/main/source/decoding_state.cc | 5 ++--- src/modules/video_coding/main/source/decoding_state.h | 4 ++-- src/modules/video_coding/main/source/jitter_buffer.cc | 9 ++++++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/modules/video_coding/main/source/decoding_state.cc b/src/modules/video_coding/main/source/decoding_state.cc index 1280a22cbb..cc3615476c 100644 --- a/src/modules/video_coding/main/source/decoding_state.cc +++ b/src/modules/video_coding/main/source/decoding_state.cc @@ -94,11 +94,10 @@ void VCMDecodingState::SetStateOneBack(const VCMFrameBuffer* frame) { init_ = false; } -void VCMDecodingState::UpdateEmptyPacket(const VCMPacket* packet) { +void VCMDecodingState::UpdateZeroSizePacket(const VCMPacket* packet) { assert(packet != NULL); if (packet->sizeBytes == 0 && packet->timestamp == time_stamp_) { - // Empty packet (sizeBytes = 0), make sure we update the last - // decoded sequence number. + // Zero size packet - make sure we update the last decoded sequence number. sequence_num_ = LatestSequenceNumber(packet->seqNum, sequence_num_, NULL); } } diff --git a/src/modules/video_coding/main/source/decoding_state.h b/src/modules/video_coding/main/source/decoding_state.h index a09bfd1730..f4d291474f 100644 --- a/src/modules/video_coding/main/source/decoding_state.h +++ b/src/modules/video_coding/main/source/decoding_state.h @@ -34,8 +34,8 @@ class VCMDecodingState { // Set the decoding state one frame back. void SetStateOneBack(const VCMFrameBuffer* frame); // Update the sequence number if the timestamp matches current state and the - // packet is empty. - void UpdateEmptyPacket(const VCMPacket* packet); + // packet is of zero size. + void UpdateZeroSizePacket(const VCMPacket* packet); void SetSeqNum(uint16_t new_seq_num); void Reset(); uint32_t time_stamp() const; diff --git a/src/modules/video_coding/main/source/jitter_buffer.cc b/src/modules/video_coding/main/source/jitter_buffer.cc index d6012a6dd5..39ffbde2a5 100644 --- a/src/modules/video_coding/main/source/jitter_buffer.cc +++ b/src/modules/video_coding/main/source/jitter_buffer.cc @@ -445,6 +445,13 @@ VCMJitterBuffer::GetFrame(const VCMPacket& packet, VCMEncodedFrame*& frame) _discardedPackets++; _numConsecutiveOldPackets++; } + else + { + // Update last decoded sequence number if packet belongs to a zero + // size frame with a timestamp equal to the last decoded timestamp. + _lastDecodedState.UpdateZeroSizePacket(&packet); + } + if (_numConsecutiveOldPackets > kMaxConsecutiveOldPackets) { FlushInternal(); @@ -1563,7 +1570,7 @@ VCMJitterBuffer::InsertPacket(VCMEncodedFrame* buffer, const VCMPacket& packet) if (frame != NULL) { VCMFrameBufferStateEnum state = frame->GetState(); - _lastDecodedState.UpdateEmptyPacket(&packet); + _lastDecodedState.UpdateZeroSizePacket(&packet); // Insert packet // Check for first packet // High sequence number will be -1 if neither an empty packet nor