diff options
author | stefan@webrtc.org <stefan@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2013-05-14 12:00:47 +0000 |
---|---|---|
committer | stefan@webrtc.org <stefan@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2013-05-14 12:00:47 +0000 |
commit | 5ba433cad0d4ab117ce24862c4f0cd30015ab096 (patch) | |
tree | 424152d02e6f2d7e0cdafbe9dfa1d77fed160344 | |
parent | 1fc08d3ea04de5616b9070115f0b66f5827de7f3 (diff) | |
download | webrtc-5ba433cad0d4ab117ce24862c4f0cd30015ab096.tar.gz |
Fixes a bug where the render buffer size (and indirectly the non-continuous duration) was computed incorrectly.
BUG=1769
R=mflodman@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/1473004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@4026 4adac7df-926f-26a2-2b94-8c16560cd09d
-rw-r--r-- | modules/video_coding/main/source/jitter_buffer.cc | 9 | ||||
-rw-r--r-- | modules/video_coding/main/source/receiver_unittest.cc | 35 |
2 files changed, 37 insertions, 7 deletions
diff --git a/modules/video_coding/main/source/jitter_buffer.cc b/modules/video_coding/main/source/jitter_buffer.cc index ea26032b..ebfd0946 100644 --- a/modules/video_coding/main/source/jitter_buffer.cc +++ b/modules/video_coding/main/source/jitter_buffer.cc @@ -1000,15 +1000,10 @@ FrameList::iterator VCMJitterBuffer::FindLastContinuousAndComplete( // Search for a complete and continuous sequence (starting from the last // decoded state or current frame if in initial state). VCMDecodingState previous_state; - if (last_decoded_state_.in_initial_state()) { - previous_state.SetState(*start_it); - } else { - previous_state.CopyFrom(last_decoded_state_); - } - bool continuous_complete = true; + previous_state.SetState(*start_it); FrameList::iterator previous_it = start_it; ++start_it; - while (start_it != frame_list_.end() && continuous_complete) { + while (start_it != frame_list_.end()) { start_it = FindOldestCompleteContinuousFrame(start_it, &previous_state); if (start_it == frame_list_.end()) break; diff --git a/modules/video_coding/main/source/receiver_unittest.cc b/modules/video_coding/main/source/receiver_unittest.cc index 40d0de1f..62b7a99c 100644 --- a/modules/video_coding/main/source/receiver_unittest.cc +++ b/modules/video_coding/main/source/receiver_unittest.cc @@ -263,6 +263,41 @@ TEST_F(TestVCMReceiver, NonDecodableDuration_NoTrigger) { EXPECT_EQ(kNackOk, ret); } +TEST_F(TestVCMReceiver, NonDecodableDuration_NoTrigger2) { + // Enable NACK and with no RTT thresholds for disabling retransmission delay. + receiver_.SetNackMode(kNack, -1, -1); + const size_t kMaxNackListSize = 1000; + const int kMaxPacketAgeToNack = 1000; + const int kMaxNonDecodableDuration = 500; + const int kMaxNonDecodableDurationFrames = (kDefaultFrameRate * + kMaxNonDecodableDuration + 500) / 1000; + const int kMinDelayMs = 500; + receiver_.SetNackSettings(kMaxNackListSize, kMaxPacketAgeToNack, + kMaxNonDecodableDuration); + receiver_.SetMinReceiverDelay(kMinDelayMs); + int64_t key_frame_inserted = clock_->TimeInMilliseconds(); + EXPECT_GE(InsertFrame(kVideoFrameKey, true), kNoError); + // Insert enough frames to have too long non-decodable sequence, except that + // we don't have any losses. + for (int i = 0; i < kMaxNonDecodableDurationFrames; + ++i) { + EXPECT_GE(InsertFrame(kVideoFrameDelta, true), kNoError); + } + // Insert an incomplete frame. + EXPECT_GE(InsertFrame(kVideoFrameDelta, false), kNoError); + // Advance time until it's time to decode the key frame. + clock_->AdvanceTimeMilliseconds(kMinDelayMs - clock_->TimeInMilliseconds() - + key_frame_inserted); + EXPECT_TRUE(DecodeNextFrame()); + // Make sure we don't get a key frame request since the non-decodable duration + // is only one frame. + uint16_t nack_list[kMaxNackListSize]; + uint16_t nack_list_length = 0; + VCMNackStatus ret = receiver_.NackList(nack_list, kMaxNackListSize, + &nack_list_length); + EXPECT_EQ(kNackOk, ret); +} + TEST_F(TestVCMReceiver, NonDecodableDuration_KeyFrameAfterIncompleteFrames) { // Enable NACK and with no RTT thresholds for disabling retransmission delay. receiver_.SetNackMode(kNack, -1, -1); |