2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "webrtc/modules/video_coding/main/source/frame_buffer.h"
17 #include "webrtc/modules/video_coding/main/source/jitter_buffer.h"
18 #include "webrtc/modules/video_coding/main/source/media_opt_util.h"
19 #include "webrtc/modules/video_coding/main/source/packet.h"
20 #include "webrtc/modules/video_coding/main/source/test/stream_generator.h"
21 #include "webrtc/modules/video_coding/main/test/test_util.h"
22 #include "webrtc/system_wrappers/interface/clock.h"
26 class TestBasicJitterBuffer : public ::testing::Test {
28 virtual void SetUp() {
29 clock_.reset(new SimulatedClock(0));
31 new VCMJitterBuffer(clock_.get(), &event_factory_));
32 jitter_buffer_->Start();
36 // Data vector - 0, 0, 0x80, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0x80, 3....
41 for (unsigned int i = 3; i < sizeof(data_) - 3; ++i) {
52 packet_.reset(new VCMPacket(data_, size_, seq_num_, timestamp_, true));
55 VCMEncodedFrame* DecodeCompleteFrame() {
56 uint32_t timestamp = 0;
57 bool found_frame = jitter_buffer_->NextCompleteTimestamp(10, ×tamp);
60 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp);
64 VCMEncodedFrame* DecodeIncompleteFrame() {
65 uint32_t timestamp = 0;
66 bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp);
69 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp);
73 void CheckOutFrame(VCMEncodedFrame* frame_out,
76 ASSERT_TRUE(frame_out);
78 const uint8_t* outData = frame_out->Buffer();
82 EXPECT_EQ(0, outData[0]);
83 EXPECT_EQ(0, outData[1]);
84 EXPECT_EQ(0, outData[2]);
85 EXPECT_EQ(1, outData[3]);
89 EXPECT_EQ(size, frame_out->Length());
91 for (; i < size; i++) {
92 if (outData[i] == 0 && outData[i + 1] == 0 && outData[i + 2] == 0x80) {
94 } else if (startCode && outData[i] == 0 && outData[i + 1] == 0) {
95 EXPECT_EQ(0, outData[0]);
96 EXPECT_EQ(0, outData[1]);
97 EXPECT_EQ(0, outData[2]);
98 EXPECT_EQ(1, outData[3]);
101 EXPECT_EQ(count, outData[i]);
114 scoped_ptr<VCMJitterBuffer> jitter_buffer_;
115 scoped_ptr<VCMPacket> packet_;
116 scoped_ptr<SimulatedClock> clock_;
117 NullEventFactory event_factory_;
121 class TestRunningJitterBuffer : public ::testing::Test {
123 enum { kDataBufferSize = 10 };
125 virtual void SetUp() {
126 clock_.reset(new SimulatedClock(0));
127 max_nack_list_size_ = 150;
128 oldest_packet_to_nack_ = 250;
129 jitter_buffer_ = new VCMJitterBuffer(clock_.get(), &event_factory_);
130 stream_generator_ = new StreamGenerator(0, 0, clock_->TimeInMilliseconds());
131 jitter_buffer_->Start();
132 jitter_buffer_->SetNackSettings(max_nack_list_size_,
133 oldest_packet_to_nack_, 0);
134 memset(data_buffer_, 0, kDataBufferSize);
137 virtual void TearDown() {
138 jitter_buffer_->Stop();
139 delete stream_generator_;
140 delete jitter_buffer_;
143 VCMFrameBufferEnum InsertPacketAndPop(int index) {
145 packet.dataPtr = data_buffer_;
146 bool packet_available = stream_generator_->PopPacket(&packet, index);
147 EXPECT_TRUE(packet_available);
148 if (!packet_available)
149 return kGeneralError; // Return here to avoid crashes below.
150 bool retransmitted = false;
151 return jitter_buffer_->InsertPacket(packet, &retransmitted);
154 VCMFrameBufferEnum InsertPacket(int index) {
156 packet.dataPtr = data_buffer_;
157 bool packet_available = stream_generator_->GetPacket(&packet, index);
158 EXPECT_TRUE(packet_available);
159 if (!packet_available)
160 return kGeneralError; // Return here to avoid crashes below.
161 bool retransmitted = false;
162 return jitter_buffer_->InsertPacket(packet, &retransmitted);
165 VCMFrameBufferEnum InsertFrame(FrameType frame_type) {
166 stream_generator_->GenerateFrame(frame_type,
167 (frame_type != kFrameEmpty) ? 1 : 0,
168 (frame_type == kFrameEmpty) ? 1 : 0,
169 clock_->TimeInMilliseconds());
170 VCMFrameBufferEnum ret = InsertPacketAndPop(0);
171 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
175 VCMFrameBufferEnum InsertFrames(int num_frames, FrameType frame_type) {
176 VCMFrameBufferEnum ret_for_all = kNoError;
177 for (int i = 0; i < num_frames; ++i) {
178 VCMFrameBufferEnum ret = InsertFrame(frame_type);
179 if (ret < kNoError) {
181 } else if (ret_for_all >= kNoError) {
188 void DropFrame(int num_packets) {
189 stream_generator_->GenerateFrame(kVideoFrameDelta, num_packets, 0,
190 clock_->TimeInMilliseconds());
191 for (int i = 0; i < num_packets; ++i)
192 stream_generator_->DropLastPacket();
193 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
196 bool DecodeCompleteFrame() {
197 uint32_t timestamp = 0;
198 bool found_frame = jitter_buffer_->NextCompleteTimestamp(0, ×tamp);
202 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp);
203 bool ret = (frame != NULL);
204 jitter_buffer_->ReleaseFrame(frame);
208 bool DecodeIncompleteFrame() {
209 uint32_t timestamp = 0;
210 bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp);
213 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp);
214 bool ret = (frame != NULL);
215 jitter_buffer_->ReleaseFrame(frame);
219 VCMJitterBuffer* jitter_buffer_;
220 StreamGenerator* stream_generator_;
221 scoped_ptr<SimulatedClock> clock_;
222 NullEventFactory event_factory_;
223 size_t max_nack_list_size_;
224 int oldest_packet_to_nack_;
225 uint8_t data_buffer_[kDataBufferSize];
228 class TestJitterBufferNack : public TestRunningJitterBuffer {
230 virtual void SetUp() {
231 TestRunningJitterBuffer::SetUp();
232 jitter_buffer_->SetNackMode(kNack, -1, -1);
235 virtual void TearDown() {
236 TestRunningJitterBuffer::TearDown();
240 TEST_F(TestBasicJitterBuffer, StopRunning) {
241 jitter_buffer_->Stop();
242 EXPECT_TRUE(NULL == DecodeCompleteFrame());
243 EXPECT_TRUE(NULL == DecodeIncompleteFrame());
244 jitter_buffer_->Start();
245 // Allow selective errors.
246 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
248 // No packets inserted.
249 EXPECT_TRUE(NULL == DecodeCompleteFrame());
250 EXPECT_TRUE(NULL == DecodeIncompleteFrame());
252 // Allow decoding with errors.
253 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
255 // No packets inserted.
256 EXPECT_TRUE(NULL == DecodeCompleteFrame());
257 EXPECT_TRUE(NULL == DecodeIncompleteFrame());
260 TEST_F(TestBasicJitterBuffer, SinglePacketFrame) {
261 // Always start with a complete key frame when not allowing errors.
262 jitter_buffer_->SetDecodeErrorMode(kNoErrors);
263 packet_->frameType = kVideoFrameKey;
264 packet_->isFirstPacket = true;
265 packet_->markerBit = true;
266 packet_->timestamp += 123 * 90;
268 // Insert the packet to the jitter buffer and get a frame.
269 bool retransmitted = false;
270 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
272 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
273 CheckOutFrame(frame_out, size_, false);
274 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
277 TEST_F(TestBasicJitterBuffer, DualPacketFrame) {
278 packet_->frameType = kVideoFrameKey;
279 packet_->isFirstPacket = true;
280 packet_->markerBit = false;
282 bool retransmitted = false;
283 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
285 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
286 // Should not be complete.
287 EXPECT_TRUE(frame_out == NULL);
290 packet_->isFirstPacket = false;
291 packet_->markerBit = true;
292 packet_->seqNum = seq_num_;
294 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
297 frame_out = DecodeCompleteFrame();
298 CheckOutFrame(frame_out, 2 * size_, false);
300 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
303 TEST_F(TestBasicJitterBuffer, 100PacketKeyFrame) {
304 packet_->frameType = kVideoFrameKey;
305 packet_->isFirstPacket = true;
306 packet_->markerBit = false;
308 bool retransmitted = false;
309 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
312 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
314 // Frame should not be complete.
315 EXPECT_TRUE(frame_out == NULL);
321 packet_->isFirstPacket = false;
322 packet_->markerBit = false;
323 packet_->seqNum = seq_num_;
325 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
330 // Insert last packet.
332 packet_->isFirstPacket = false;
333 packet_->markerBit = true;
334 packet_->seqNum = seq_num_;
336 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
339 frame_out = DecodeCompleteFrame();
341 CheckOutFrame(frame_out, 100 * size_, false);
342 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
345 TEST_F(TestBasicJitterBuffer, 100PacketDeltaFrame) {
346 // Always start with a complete key frame.
347 packet_->frameType = kVideoFrameKey;
348 packet_->isFirstPacket = true;
349 packet_->markerBit = true;
351 bool retransmitted = false;
352 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
354 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
355 EXPECT_FALSE(frame_out == NULL);
358 packet_->seqNum = seq_num_;
359 packet_->markerBit = false;
360 packet_->frameType = kVideoFrameDelta;
361 packet_->timestamp += 33 * 90;
363 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
366 frame_out = DecodeCompleteFrame();
368 // Frame should not be complete.
369 EXPECT_TRUE(frame_out == NULL);
371 packet_->isFirstPacket = false;
376 packet_->seqNum = seq_num_;
378 // Insert a packet into a frame.
379 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
384 // Insert the last packet.
386 packet_->isFirstPacket = false;
387 packet_->markerBit = true;
388 packet_->seqNum = seq_num_;
390 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
393 frame_out = DecodeCompleteFrame();
395 CheckOutFrame(frame_out, 100 * size_, false);
396 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
399 TEST_F(TestBasicJitterBuffer, PacketReorderingReverseOrder) {
400 // Insert the "first" packet last.
402 packet_->frameType = kVideoFrameKey;
403 packet_->isFirstPacket = false;
404 packet_->markerBit = true;
405 packet_->seqNum = seq_num_;
406 packet_->timestamp = timestamp_;
408 bool retransmitted = false;
409 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
412 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
414 EXPECT_TRUE(frame_out == NULL);
416 // Insert 98 packets.
420 packet_->isFirstPacket = false;
421 packet_->markerBit = false;
422 packet_->seqNum = seq_num_;
424 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
429 // Insert the last packet.
431 packet_->isFirstPacket = true;
432 packet_->markerBit = false;
433 packet_->seqNum = seq_num_;
435 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
438 frame_out = DecodeCompleteFrame();;
440 CheckOutFrame(frame_out, 100 * size_, false);
442 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
445 TEST_F(TestBasicJitterBuffer, FrameReordering2Frames2PacketsEach) {
446 packet_->frameType = kVideoFrameDelta;
447 packet_->isFirstPacket = true;
448 packet_->markerBit = false;
450 bool retransmitted = false;
451 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
454 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
456 EXPECT_TRUE(frame_out == NULL);
459 packet_->isFirstPacket = false;
460 packet_->markerBit = true;
461 packet_->seqNum = seq_num_;
463 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
466 // check that we fail to get frame since seqnum is not continuous
467 frame_out = DecodeCompleteFrame();
468 EXPECT_TRUE(frame_out == NULL);
472 packet_->frameType = kVideoFrameKey;
473 packet_->isFirstPacket = true;
474 packet_->markerBit = false;
475 packet_->seqNum = seq_num_;
476 packet_->timestamp = timestamp_;
478 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
481 frame_out = DecodeCompleteFrame();
483 // It should not be complete.
484 EXPECT_TRUE(frame_out == NULL);
487 packet_->isFirstPacket = false;
488 packet_->markerBit = true;
489 packet_->seqNum = seq_num_;
491 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
494 frame_out = DecodeCompleteFrame();
496 CheckOutFrame(frame_out, 2 * size_, false);
498 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
500 jitter_buffer_->ReleaseFrame(frame_out);
502 frame_out = DecodeCompleteFrame();
504 CheckOutFrame(frame_out, 2 * size_, false);
506 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
509 TEST_F(TestBasicJitterBuffer, DuplicatePackets) {
510 packet_->frameType = kVideoFrameKey;
511 packet_->isFirstPacket = true;
512 packet_->markerBit = false;
513 packet_->seqNum = seq_num_;
514 packet_->timestamp = timestamp_;
516 bool retransmitted = false;
517 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
520 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
522 EXPECT_TRUE(frame_out == NULL);
524 packet_->isFirstPacket = false;
525 packet_->markerBit = true;
527 // Insert a packet into a frame.
528 EXPECT_EQ(kDuplicatePacket, jitter_buffer_->InsertPacket(*packet_,
532 packet_->seqNum = seq_num_;
534 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
537 frame_out = DecodeCompleteFrame();
539 CheckOutFrame(frame_out, 2 * size_, false);
541 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
544 TEST_F(TestBasicJitterBuffer, H264InsertStartCode) {
545 packet_->frameType = kVideoFrameKey;
546 packet_->isFirstPacket = true;
547 packet_->markerBit = false;
548 packet_->seqNum = seq_num_;
549 packet_->timestamp = timestamp_;
550 packet_->insertStartCode = true;
552 bool retransmitted = false;
553 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
556 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
558 // Frame should not be complete.
559 EXPECT_TRUE(frame_out == NULL);
562 packet_->isFirstPacket = false;
563 packet_->markerBit = true;
564 packet_->seqNum = seq_num_;
566 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
569 frame_out = DecodeCompleteFrame();
570 CheckOutFrame(frame_out, size_ * 2 + 4 * 2, true);
571 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
574 // Test threshold conditions of decodable state.
575 TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsThresholdCheck) {
576 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
577 // Always start with a key frame. Use 10 packets to test Decodable State
579 packet_->frameType = kVideoFrameKey;
580 packet_->isFirstPacket = true;
581 packet_->markerBit = false;
582 packet_->seqNum = seq_num_;
583 packet_->timestamp = timestamp_;
585 bool retransmitted = false;
586 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
588 uint32_t timestamp = 0;
589 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
590 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
592 packet_->isFirstPacket = false;
593 for (int i = 1; i < 9; ++i) {
595 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
597 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
598 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
602 packet_->markerBit = true;
605 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
607 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
608 CheckOutFrame(frame_out, 10 * size_, false);
609 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
611 // An incomplete frame can only be decoded once a subsequent frame has begun
612 // to arrive. Insert packet in distant frame for this purpose.
613 packet_->frameType = kVideoFrameDelta;
614 packet_->isFirstPacket = true;
615 packet_->markerBit = false;
616 packet_->seqNum += 100;
617 packet_->timestamp += 33 * 90 * 8;
619 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
621 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
622 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
624 // Insert second frame
625 packet_->seqNum -= 99;
626 packet_->timestamp -= 33 * 90 * 7;
628 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
630 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
631 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
633 packet_->isFirstPacket = false;
634 for (int i = 1; i < 8; ++i) {
636 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
638 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
639 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
643 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
645 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
646 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
648 frame_out = DecodeIncompleteFrame();
649 ASSERT_FALSE(NULL == frame_out);
650 CheckOutFrame(frame_out, 9 * size_, false);
651 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
653 packet_->markerBit = true;
655 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
659 // Make sure first packet is present before a frame can be decoded.
660 TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsIncompleteKey) {
661 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
662 // Always start with a key frame.
663 packet_->frameType = kVideoFrameKey;
664 packet_->isFirstPacket = true;
665 packet_->markerBit = true;
666 packet_->seqNum = seq_num_;
667 packet_->timestamp = timestamp_;
669 bool retransmitted = false;
670 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
672 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
673 CheckOutFrame(frame_out, size_, false);
674 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
676 // An incomplete frame can only be decoded once a subsequent frame has begun
677 // to arrive. Insert packet in distant frame for this purpose.
678 packet_->frameType = kVideoFrameDelta;
679 packet_->isFirstPacket = false;
680 packet_->markerBit = false;
681 packet_->seqNum += 100;
682 packet_->timestamp += 33*90*8;
683 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
686 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
687 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
689 // Insert second frame - an incomplete key frame.
690 packet_->frameType = kVideoFrameKey;
691 packet_->isFirstPacket = true;
692 packet_->seqNum -= 99;
693 packet_->timestamp -= 33*90*7;
695 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
697 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
698 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
700 // Insert a few more packets. Make sure we're waiting for the key frame to be
702 packet_->isFirstPacket = false;
703 for (int i = 1; i < 5; ++i) {
705 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
707 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
708 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
711 // Complete key frame.
712 packet_->markerBit = true;
714 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
716 frame_out = DecodeCompleteFrame();
717 CheckOutFrame(frame_out, 6 * size_, false);
718 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
721 // Make sure first packet is present before a frame can be decoded.
722 TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsMissingFirstPacket) {
723 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
724 // Always start with a key frame.
725 packet_->frameType = kVideoFrameKey;
726 packet_->isFirstPacket = true;
727 packet_->markerBit = true;
728 packet_->seqNum = seq_num_;
729 packet_->timestamp = timestamp_;
731 bool retransmitted = false;
732 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
734 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
735 CheckOutFrame(frame_out, size_, false);
736 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
738 // An incomplete frame can only be decoded once a subsequent frame has begun
739 // to arrive. Insert packet in distant frame for this purpose.
740 packet_->frameType = kVideoFrameDelta;
741 packet_->isFirstPacket = false;
742 packet_->markerBit = false;
743 packet_->seqNum += 100;
744 packet_->timestamp += 33*90*8;
745 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
748 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
749 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
751 // Insert second frame with the first packet missing. Make sure we're waiting
752 // for the key frame to be complete.
753 packet_->seqNum -= 98;
754 packet_->timestamp -= 33*90*7;
756 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
758 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
759 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
761 for (int i = 0; i < 5; ++i) {
763 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
765 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
766 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
769 // Add first packet. Frame should now be decodable, but incomplete.
770 packet_->isFirstPacket = true;
771 packet_->seqNum -= 6;
772 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
774 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
775 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
777 frame_out = DecodeIncompleteFrame();
778 CheckOutFrame(frame_out, 7 * size_, false);
779 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
782 TEST_F(TestBasicJitterBuffer, DiscontinuousStreamWhenDecodingWithErrors) {
783 // Will use one packet per frame.
784 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
785 packet_->frameType = kVideoFrameKey;
786 packet_->isFirstPacket = true;
787 packet_->markerBit = true;
788 packet_->seqNum = seq_num_;
789 packet_->timestamp = timestamp_;
790 bool retransmitted = false;
791 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
793 uint32_t next_timestamp;
794 EXPECT_TRUE(jitter_buffer_->NextCompleteTimestamp(0, &next_timestamp));
795 EXPECT_EQ(packet_->timestamp, next_timestamp);
796 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(next_timestamp);
797 EXPECT_TRUE(frame != NULL);
798 jitter_buffer_->ReleaseFrame(frame);
800 // Drop a complete frame.
801 timestamp_ += 2 * 33 * 90;
803 packet_->frameType = kVideoFrameDelta;
804 packet_->isFirstPacket = true;
805 packet_->markerBit = false;
806 packet_->seqNum = seq_num_;
807 packet_->timestamp = timestamp_;
808 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
810 // Insert a packet (so the previous one will be released).
811 timestamp_ += 33 * 90;
813 packet_->frameType = kVideoFrameDelta;
814 packet_->isFirstPacket = true;
815 packet_->markerBit = false;
816 packet_->seqNum = seq_num_;
817 packet_->timestamp = timestamp_;
818 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
820 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, &next_timestamp));
821 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(&next_timestamp));
822 EXPECT_EQ(packet_->timestamp - 33 * 90, next_timestamp);
825 TEST_F(TestBasicJitterBuffer, PacketLoss) {
826 // Verify missing packets statistics and not decodable packets statistics.
827 // Insert 10 frames consisting of 4 packets and remove one from all of them.
828 // The last packet is an empty (non-media) packet.
830 // Select a start seqNum which triggers a difficult wrap situation
831 // The JB will only output (incomplete)frames if the next one has started
832 // to arrive. Start by inserting one frame (key).
833 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
834 seq_num_ = 0xffff - 4;
836 packet_->frameType = kVideoFrameKey;
837 packet_->isFirstPacket = true;
838 packet_->markerBit = false;
839 packet_->seqNum = seq_num_;
840 packet_->timestamp = timestamp_;
841 packet_->completeNALU = kNaluStart;
843 bool retransmitted = false;
844 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
846 for (int i = 0; i < 11; ++i) {
847 webrtc::FrameType frametype = kVideoFrameDelta;
850 packet_->frameType = frametype;
851 packet_->isFirstPacket = true;
852 packet_->markerBit = false;
853 packet_->seqNum = seq_num_;
854 packet_->timestamp = timestamp_;
855 packet_->completeNALU = kNaluStart;
857 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
860 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
862 // Should not be complete.
863 EXPECT_TRUE(frame_out == NULL);
866 packet_->isFirstPacket = false;
867 packet_->markerBit = true;
868 packet_->seqNum = seq_num_;
869 packet_->completeNALU = kNaluEnd;
871 EXPECT_EQ(jitter_buffer_->InsertPacket(*packet_, &retransmitted),
874 // Insert an empty (non-media) packet.
876 packet_->isFirstPacket = false;
877 packet_->markerBit = false;
878 packet_->seqNum = seq_num_;
879 packet_->completeNALU = kNaluEnd;
880 packet_->frameType = kFrameEmpty;
882 EXPECT_EQ(jitter_buffer_->InsertPacket(*packet_, &retransmitted),
884 frame_out = DecodeIncompleteFrame();
886 // One of the packets has been discarded by the jitter buffer.
887 // Last frame can't be extracted yet.
889 CheckOutFrame(frame_out, size_, false);
892 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
894 EXPECT_EQ(frametype, frame_out->FrameType());
896 EXPECT_FALSE(frame_out->Complete());
897 EXPECT_FALSE(frame_out->MissingFrame());
900 jitter_buffer_->ReleaseFrame(frame_out);
903 // Insert 3 old packets and verify that we have 3 discarded packets
904 // Match value to actual latest timestamp decoded.
905 timestamp_ -= 33 * 90;
906 packet_->timestamp = timestamp_ - 1000;
908 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
911 packet_->timestamp = timestamp_ - 500;
913 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
916 packet_->timestamp = timestamp_ - 100;
918 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
921 EXPECT_EQ(3, jitter_buffer_->num_discarded_packets());
923 jitter_buffer_->Flush();
925 // This statistic shouldn't be reset by a flush.
926 EXPECT_EQ(3, jitter_buffer_->num_discarded_packets());
929 TEST_F(TestBasicJitterBuffer, DeltaFrame100PacketsWithSeqNumWrap) {
931 packet_->frameType = kVideoFrameKey;
932 packet_->isFirstPacket = true;
933 packet_->markerBit = false;
934 packet_->seqNum = seq_num_;
935 packet_->timestamp = timestamp_;
937 bool retransmitted = false;
938 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
941 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
943 EXPECT_TRUE(frame_out == NULL);
948 packet_->isFirstPacket = false;
949 packet_->markerBit = false;
950 packet_->seqNum = seq_num_;
952 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
955 frame_out = DecodeCompleteFrame();
957 EXPECT_TRUE(frame_out == NULL);
963 packet_->isFirstPacket = false;
964 packet_->markerBit = true;
965 packet_->seqNum = seq_num_;
967 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
970 frame_out = DecodeCompleteFrame();
972 CheckOutFrame(frame_out, 100 * size_, false);
974 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
977 TEST_F(TestBasicJitterBuffer, PacketReorderingReverseWithNegSeqNumWrap) {
978 // Insert "first" packet last seqnum.
980 packet_->frameType = kVideoFrameKey;
981 packet_->isFirstPacket = false;
982 packet_->markerBit = true;
983 packet_->seqNum = seq_num_;
985 bool retransmitted = false;
986 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
988 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
990 // Should not be complete.
991 EXPECT_TRUE(frame_out == NULL);
997 packet_->isFirstPacket = false;
998 packet_->markerBit = false;
999 packet_->seqNum = seq_num_;
1001 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
1004 frame_out = DecodeCompleteFrame();
1006 EXPECT_TRUE(frame_out == NULL);
1009 } while (loop < 98);
1011 // Insert last packet.
1013 packet_->isFirstPacket = true;
1014 packet_->markerBit = false;
1015 packet_->seqNum = seq_num_;
1017 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1020 frame_out = DecodeCompleteFrame();
1021 CheckOutFrame(frame_out, 100 * size_, false);
1022 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1025 TEST_F(TestBasicJitterBuffer, TestInsertOldFrame) {
1029 // t = 3000 t = 2000
1032 packet_->frameType = kVideoFrameKey;
1033 packet_->isFirstPacket = true;
1034 packet_->markerBit = true;
1035 packet_->timestamp = timestamp_;
1036 packet_->seqNum = seq_num_;
1038 bool retransmitted = false;
1039 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1042 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1043 EXPECT_EQ(3000u, frame_out->TimeStamp());
1045 CheckOutFrame(frame_out, size_, false);
1047 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1049 jitter_buffer_->ReleaseFrame(frame_out);
1053 packet_->frameType = kVideoFrameDelta;
1054 packet_->isFirstPacket = true;
1055 packet_->markerBit = true;
1056 packet_->seqNum = seq_num_;
1057 packet_->timestamp = timestamp_;
1059 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
1063 TEST_F(TestBasicJitterBuffer, TestInsertOldFrameWithSeqNumWrap) {
1067 // t = 3000 t = 0xffffff00
1071 packet_->frameType = kVideoFrameKey;
1072 packet_->isFirstPacket = true;
1073 packet_->markerBit = true;
1074 packet_->seqNum = seq_num_;
1075 packet_->timestamp = timestamp_;
1077 bool retransmitted = false;
1078 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1081 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1082 EXPECT_EQ(timestamp_, frame_out->TimeStamp());
1084 CheckOutFrame(frame_out, size_, false);
1086 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1088 jitter_buffer_->ReleaseFrame(frame_out);
1091 timestamp_ = 0xffffff00;
1092 packet_->frameType = kVideoFrameDelta;
1093 packet_->isFirstPacket = true;
1094 packet_->markerBit = true;
1095 packet_->seqNum = seq_num_;
1096 packet_->timestamp = timestamp_;
1099 // This timestamp is old.
1100 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
1104 TEST_F(TestBasicJitterBuffer, TimestampWrap) {
1105 // --------------- ---------------
1106 // | 1 | 2 | | 3 | 4 |
1107 // --------------- ---------------
1108 // t = 0xffffff00 t = 33*90
1110 timestamp_ = 0xffffff00;
1111 packet_->frameType = kVideoFrameKey;
1112 packet_->isFirstPacket = true;
1113 packet_->markerBit = false;
1114 packet_->seqNum = seq_num_;
1115 packet_->timestamp = timestamp_;
1117 bool retransmitted = false;
1118 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
1121 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1123 EXPECT_TRUE(frame_out == NULL);
1126 packet_->isFirstPacket = false;
1127 packet_->markerBit = true;
1128 packet_->seqNum = seq_num_;
1130 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1133 frame_out = DecodeCompleteFrame();
1135 CheckOutFrame(frame_out, 2 * size_, false);
1137 jitter_buffer_->ReleaseFrame(frame_out);
1140 timestamp_ += 33*90;
1141 packet_->frameType = kVideoFrameDelta;
1142 packet_->isFirstPacket = true;
1143 packet_->markerBit = false;
1144 packet_->seqNum = seq_num_;
1145 packet_->timestamp = timestamp_;
1147 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
1150 frame_out = DecodeCompleteFrame();
1152 EXPECT_TRUE(frame_out == NULL);
1155 packet_->isFirstPacket = false;
1156 packet_->markerBit = true;
1157 packet_->seqNum = seq_num_;
1159 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1162 frame_out = DecodeCompleteFrame();
1164 CheckOutFrame(frame_out, 2 * size_, false);
1166 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
1169 TEST_F(TestBasicJitterBuffer, 2FrameWithTimestampWrap) {
1173 // t = 0xffffff00 t = 2700
1175 timestamp_ = 0xffffff00;
1176 packet_->frameType = kVideoFrameKey;
1177 packet_->isFirstPacket = true;
1178 packet_->markerBit = true;
1179 packet_->timestamp = timestamp_;
1181 bool retransmitted = false;
1182 // Insert first frame (session will be complete).
1183 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1186 // Insert next frame.
1189 packet_->frameType = kVideoFrameDelta;
1190 packet_->isFirstPacket = true;
1191 packet_->markerBit = true;
1192 packet_->seqNum = seq_num_;
1193 packet_->timestamp = timestamp_;
1195 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1198 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1199 EXPECT_EQ(0xffffff00, frame_out->TimeStamp());
1201 CheckOutFrame(frame_out, size_, false);
1203 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1205 VCMEncodedFrame* frame_out2 = DecodeCompleteFrame();
1206 EXPECT_EQ(2700u, frame_out2->TimeStamp());
1208 CheckOutFrame(frame_out2, size_, false);
1210 EXPECT_EQ(kVideoFrameDelta, frame_out2->FrameType());
1213 TEST_F(TestBasicJitterBuffer, Insert2FramesReOrderedWithTimestampWrap) {
1217 // t = 2700 t = 0xffffff00
1221 packet_->frameType = kVideoFrameDelta;
1222 packet_->isFirstPacket = true;
1223 packet_->markerBit = true;
1224 packet_->seqNum = seq_num_;
1225 packet_->timestamp = timestamp_;
1227 bool retransmitted = false;
1228 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1231 // Insert second frame
1233 timestamp_ = 0xffffff00;
1234 packet_->frameType = kVideoFrameKey;
1235 packet_->isFirstPacket = true;
1236 packet_->markerBit = true;
1237 packet_->seqNum = seq_num_;
1238 packet_->timestamp = timestamp_;
1240 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1243 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1244 EXPECT_EQ(0xffffff00, frame_out->TimeStamp());
1246 CheckOutFrame(frame_out, size_, false);
1248 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1250 VCMEncodedFrame* frame_out2 = DecodeCompleteFrame();
1251 EXPECT_EQ(2700u, frame_out2->TimeStamp());
1253 CheckOutFrame(frame_out2, size_, false);
1255 EXPECT_EQ(kVideoFrameDelta, frame_out2->FrameType());
1258 TEST_F(TestBasicJitterBuffer, DeltaFrameWithMoreThanMaxNumberOfPackets) {
1260 bool firstPacket = true;
1261 bool retransmitted = false;
1262 // Insert kMaxPacketsInJitterBuffer into frame.
1265 packet_->isFirstPacket = false;
1266 packet_->markerBit = false;
1267 packet_->seqNum = seq_num_;
1270 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
1272 firstPacket = false;
1274 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
1279 } while (loop < kMaxPacketsInSession);
1281 // Max number of packets inserted.
1282 // Insert one more packet.
1284 packet_->isFirstPacket = false;
1285 packet_->markerBit = true;
1286 packet_->seqNum = seq_num_;
1288 // Insert the packet -> frame recycled.
1289 EXPECT_EQ(kSizeError, jitter_buffer_->InsertPacket(*packet_,
1291 EXPECT_TRUE(NULL == DecodeCompleteFrame());
1295 TEST_F(TestBasicJitterBuffer, ExceedNumOfFrameWithSeqNumWrap) {
1296 // TEST fill JB with more than max number of frame (50 delta frames +
1297 // 51 key frames) with wrap in seq_num_
1299 // --------------------------------------------------------------
1300 // | 65485 | 65486 | 65487 | .... | 65535 | 0 | 1 | 2 | .....| 50 |
1301 // --------------------------------------------------------------
1302 // |<-----------delta frames------------->|<------key frames----->|
1306 uint32_t first_key_frame_timestamp = 0;
1307 bool retransmitted = false;
1308 // Insert MAX_NUMBER_OF_FRAMES frames.
1310 timestamp_ += 33*90;
1312 packet_->isFirstPacket = true;
1313 packet_->markerBit = true;
1314 packet_->seqNum = seq_num_;
1315 packet_->timestamp = timestamp_;
1318 first_key_frame_timestamp = packet_->timestamp;
1319 packet_->frameType = kVideoFrameKey;
1323 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1327 } while (loop < kMaxNumberOfFrames);
1329 // Max number of frames inserted.
1331 // Insert one more frame.
1332 timestamp_ += 33*90;
1334 packet_->isFirstPacket = true;
1335 packet_->markerBit = true;
1336 packet_->seqNum = seq_num_;
1337 packet_->timestamp = timestamp_;
1339 // Now, no free frame - frames will be recycled until first key frame.
1340 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1343 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1344 EXPECT_EQ(first_key_frame_timestamp, frame_out->TimeStamp());
1346 CheckOutFrame(frame_out, size_, false);
1348 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1351 TEST_F(TestBasicJitterBuffer, EmptyLastFrame) {
1352 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
1354 // Insert one empty packet per frame, should never return the last timestamp
1355 // inserted. Only return empty frames in the presence of subsequent frames.
1357 bool retransmitted = false;
1358 for (int i = 0; i < maxSize + 10; i++) {
1359 timestamp_ += 33 * 90;
1361 packet_->isFirstPacket = false;
1362 packet_->markerBit = false;
1363 packet_->seqNum = seq_num_;
1364 packet_->timestamp = timestamp_;
1365 packet_->frameType = kFrameEmpty;
1367 EXPECT_EQ(kNoError, jitter_buffer_->InsertPacket(*packet_,
1369 VCMEncodedFrame* testFrame = DecodeIncompleteFrame();
1370 // Timestamp should never be the last TS inserted.
1371 if (testFrame != NULL) {
1372 EXPECT_TRUE(testFrame->TimeStamp() < timestamp_);
1377 TEST_F(TestBasicJitterBuffer, H264IncompleteNalu) {
1378 jitter_buffer_->SetNackMode(kNoNack, -1, -1);
1379 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
1381 timestamp_ += 33 * 90;
1382 int insertedLength = 0;
1383 packet_->seqNum = seq_num_;
1384 packet_->timestamp = timestamp_;
1385 packet_->frameType = kVideoFrameKey;
1386 packet_->isFirstPacket = true;
1387 packet_->completeNALU = kNaluStart;
1388 packet_->markerBit = false;
1389 bool retransmitted = false;
1391 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1394 seq_num_ += 2; // Skip one packet.
1395 packet_->seqNum = seq_num_;
1396 packet_->frameType = kVideoFrameKey;
1397 packet_->isFirstPacket = false;
1398 packet_->completeNALU = kNaluIncomplete;
1399 packet_->markerBit = false;
1401 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1405 packet_->seqNum = seq_num_;
1406 packet_->frameType = kVideoFrameKey;
1407 packet_->isFirstPacket = false;
1408 packet_->completeNALU = kNaluEnd;
1409 packet_->markerBit = false;
1411 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1415 packet_->seqNum = seq_num_;
1416 packet_->completeNALU = kNaluComplete;
1417 packet_->markerBit = true; // Last packet.
1418 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1420 // The JB will only output (incomplete) frames if a packet belonging to a
1421 // subsequent frame was already inserted. Insert one packet of a subsequent
1422 // frame. place high timestamp so the JB would always have a next frame
1423 // (otherwise, for every inserted frame we need to take care of the next
1425 packet_->seqNum = 1;
1426 packet_->timestamp = timestamp_ + 33 * 90 * 10;
1427 packet_->frameType = kVideoFrameDelta;
1428 packet_->isFirstPacket = false;
1429 packet_->completeNALU = kNaluStart;
1430 packet_->markerBit = false;
1432 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1435 VCMEncodedFrame* frame_out = DecodeIncompleteFrame();
1437 // We can decode everything from a NALU until a packet has been lost.
1438 // Thus we can decode the first packet of the first NALU and the second NALU
1439 // which consists of one packet.
1440 CheckOutFrame(frame_out, packet_->sizeBytes * 2, false);
1441 jitter_buffer_->ReleaseFrame(frame_out);
1443 // Test reordered start frame + 1 lost.
1444 seq_num_ += 2; // Re-order 1 frame.
1445 timestamp_ += 33*90;
1448 packet_->seqNum = seq_num_;
1449 packet_->timestamp = timestamp_;
1450 packet_->frameType = kVideoFrameKey;
1451 packet_->isFirstPacket = false;
1452 packet_->completeNALU = kNaluEnd;
1453 packet_->markerBit = false;
1454 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1456 insertedLength += packet_->sizeBytes; // This packet should be decoded.
1458 packet_->seqNum = seq_num_;
1459 packet_->timestamp = timestamp_;
1460 packet_->frameType = kVideoFrameKey;
1461 packet_->isFirstPacket = true;
1462 packet_->completeNALU = kNaluStart;
1463 packet_->markerBit = false;
1465 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1467 insertedLength += packet_->sizeBytes; // This packet should be decoded.
1469 seq_num_ += 3; // One packet drop.
1470 packet_->seqNum = seq_num_;
1471 packet_->timestamp = timestamp_;
1472 packet_->frameType = kVideoFrameKey;
1473 packet_->isFirstPacket = false;
1474 packet_->completeNALU = kNaluComplete;
1475 packet_->markerBit = false;
1476 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1478 insertedLength += packet_->sizeBytes; // This packet should be decoded.
1480 packet_->seqNum = seq_num_;
1481 packet_->timestamp = timestamp_;
1482 packet_->frameType = kVideoFrameKey;
1483 packet_->isFirstPacket = false;
1484 packet_->completeNALU = kNaluStart;
1485 packet_->markerBit = false;
1486 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1488 // This packet should be decoded since it's the beginning of a NAL.
1489 insertedLength += packet_->sizeBytes;
1492 packet_->seqNum = seq_num_;
1493 packet_->timestamp = timestamp_;
1494 packet_->frameType = kVideoFrameKey;
1495 packet_->isFirstPacket = false;
1496 packet_->completeNALU = kNaluEnd;
1497 packet_->markerBit = true;
1498 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1500 // This packet should not be decoded because it is an incomplete NAL if it
1502 frame_out = DecodeIncompleteFrame();
1503 // Only last NALU is complete.
1504 CheckOutFrame(frame_out, insertedLength, false);
1505 jitter_buffer_->ReleaseFrame(frame_out);
1507 // Test to insert empty packet.
1509 timestamp_ += 33 * 90;
1510 VCMPacket emptypacket(data_, 0, seq_num_, timestamp_, true);
1511 emptypacket.seqNum = seq_num_;
1512 emptypacket.timestamp = timestamp_;
1513 emptypacket.frameType = kVideoFrameKey;
1514 emptypacket.isFirstPacket = true;
1515 emptypacket.completeNALU = kNaluComplete;
1516 emptypacket.markerBit = true;
1517 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(emptypacket,
1519 // This packet should not be decoded because it is an incomplete NAL if it
1522 // Will be sent to the decoder, as a packet belonging to a subsequent frame
1524 frame_out = DecodeIncompleteFrame();
1527 // Test that a frame can include an empty packet.
1529 timestamp_ += 33 * 90;
1531 packet_->seqNum = seq_num_;
1532 packet_->timestamp = timestamp_;
1533 packet_->frameType = kVideoFrameKey;
1534 packet_->isFirstPacket = true;
1535 packet_->completeNALU = kNaluComplete;
1536 packet_->markerBit = false;
1538 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1542 emptypacket.seqNum = seq_num_;
1543 emptypacket.timestamp = timestamp_;
1544 emptypacket.frameType = kVideoFrameKey;
1545 emptypacket.isFirstPacket = true;
1546 emptypacket.completeNALU = kNaluComplete;
1547 emptypacket.markerBit = true;
1548 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(emptypacket,
1551 frame_out = DecodeCompleteFrame();
1552 // Only last NALU is complete
1553 CheckOutFrame(frame_out, packet_->sizeBytes, false);
1556 TEST_F(TestBasicJitterBuffer, NextFrameWhenIncomplete) {
1557 // Test that a we cannot get incomplete frames from the JB if we haven't
1558 // received the marker bit, unless we have received a packet from a later
1560 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
1561 // Start with a complete key frame - insert and decode.
1562 packet_->frameType = kVideoFrameKey;
1563 packet_->isFirstPacket = true;
1564 packet_->markerBit = true;
1565 bool retransmitted = false;
1567 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1569 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1570 EXPECT_TRUE(frame_out != NULL);
1572 packet_->seqNum += 2;
1573 packet_->timestamp += 33 * 90;
1574 packet_->frameType = kVideoFrameDelta;
1575 packet_->isFirstPacket = false;
1576 packet_->markerBit = false;
1579 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1582 frame_out = DecodeIncompleteFrame();
1583 EXPECT_TRUE(frame_out == NULL);
1585 packet_->seqNum += 2;
1586 packet_->timestamp += 33 * 90;
1587 packet_->isFirstPacket = true;
1589 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1592 frame_out = DecodeIncompleteFrame();
1594 CheckOutFrame(frame_out, packet_->sizeBytes, false);
1597 TEST_F(TestRunningJitterBuffer, Full) {
1598 // Insert a key frame and decode it.
1599 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1600 EXPECT_TRUE(DecodeCompleteFrame());
1602 // Fill the jitter buffer.
1603 EXPECT_GE(InsertFrames(kMaxNumberOfFrames, kVideoFrameDelta), kNoError);
1604 // Make sure we can't decode these frames.
1605 EXPECT_FALSE(DecodeCompleteFrame());
1606 // This frame will make the jitter buffer recycle frames until a key frame.
1607 // Since none is found it will have to wait until the next key frame before
1609 EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError);
1610 EXPECT_FALSE(DecodeCompleteFrame());
1613 TEST_F(TestRunningJitterBuffer, EmptyPackets) {
1614 // Make sure a frame can get complete even though empty packets are missing.
1615 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 3,
1616 clock_->TimeInMilliseconds());
1617 bool request_key_frame = false;
1618 // Insert empty packet.
1619 EXPECT_EQ(kNoError, InsertPacketAndPop(4));
1620 EXPECT_FALSE(request_key_frame);
1621 // Insert 3 media packets.
1622 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1623 EXPECT_FALSE(request_key_frame);
1624 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1625 EXPECT_FALSE(request_key_frame);
1626 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0));
1627 EXPECT_FALSE(request_key_frame);
1628 // Insert empty packet.
1629 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0));
1630 EXPECT_FALSE(request_key_frame);
1633 TEST_F(TestRunningJitterBuffer, StatisticsTest) {
1634 std::map<FrameType, uint32_t> frame_stats(jitter_buffer_->FrameStatistics());
1635 EXPECT_EQ(0u, frame_stats[kVideoFrameDelta]);
1636 EXPECT_EQ(0u, frame_stats[kVideoFrameKey]);
1638 uint32_t framerate = 0;
1639 uint32_t bitrate = 0;
1640 jitter_buffer_->IncomingRateStatistics(&framerate, &bitrate);
1641 EXPECT_EQ(0u, framerate);
1642 EXPECT_EQ(0u, bitrate);
1644 // Insert a couple of key and delta frames.
1645 InsertFrame(kVideoFrameKey);
1646 InsertFrame(kVideoFrameDelta);
1647 InsertFrame(kVideoFrameDelta);
1648 InsertFrame(kVideoFrameKey);
1649 InsertFrame(kVideoFrameDelta);
1650 // Decode some of them to make sure the statistics doesn't depend on frames
1652 EXPECT_TRUE(DecodeCompleteFrame());
1653 EXPECT_TRUE(DecodeCompleteFrame());
1654 frame_stats = jitter_buffer_->FrameStatistics();
1655 EXPECT_EQ(3u, frame_stats[kVideoFrameDelta]);
1656 EXPECT_EQ(2u, frame_stats[kVideoFrameKey]);
1658 // Insert 20 more frames to get estimates of bitrate and framerate over
1660 for (int i = 0; i < 20; ++i) {
1661 InsertFrame(kVideoFrameDelta);
1663 jitter_buffer_->IncomingRateStatistics(&framerate, &bitrate);
1664 // TODO(holmer): The current implementation returns the average of the last
1665 // two framerate calculations, which is why it takes two calls to reach the
1666 // actual framerate. This should be fixed.
1667 EXPECT_EQ(kDefaultFrameRate / 2u, framerate);
1668 EXPECT_EQ(kDefaultBitrateKbps, bitrate);
1669 // Insert 25 more frames to get estimates of bitrate and framerate over
1671 for (int i = 0; i < 25; ++i) {
1672 InsertFrame(kVideoFrameDelta);
1674 jitter_buffer_->IncomingRateStatistics(&framerate, &bitrate);
1675 EXPECT_EQ(kDefaultFrameRate, framerate);
1676 EXPECT_EQ(kDefaultBitrateKbps, bitrate);
1679 TEST_F(TestRunningJitterBuffer, SkipToKeyFrame) {
1680 // Insert delta frames.
1681 EXPECT_GE(InsertFrames(5, kVideoFrameDelta), kNoError);
1682 // Can't decode without a key frame.
1683 EXPECT_FALSE(DecodeCompleteFrame());
1684 InsertFrame(kVideoFrameKey);
1685 // Skip to the next key frame.
1686 EXPECT_TRUE(DecodeCompleteFrame());
1689 TEST_F(TestRunningJitterBuffer, DontSkipToKeyFrameIfDecodable) {
1690 InsertFrame(kVideoFrameKey);
1691 EXPECT_TRUE(DecodeCompleteFrame());
1692 const int kNumDeltaFrames = 5;
1693 EXPECT_GE(InsertFrames(kNumDeltaFrames, kVideoFrameDelta), kNoError);
1694 InsertFrame(kVideoFrameKey);
1695 for (int i = 0; i < kNumDeltaFrames + 1; ++i) {
1696 EXPECT_TRUE(DecodeCompleteFrame());
1700 TEST_F(TestRunningJitterBuffer, KeyDeltaKeyDelta) {
1701 InsertFrame(kVideoFrameKey);
1702 EXPECT_TRUE(DecodeCompleteFrame());
1703 const int kNumDeltaFrames = 5;
1704 EXPECT_GE(InsertFrames(kNumDeltaFrames, kVideoFrameDelta), kNoError);
1705 InsertFrame(kVideoFrameKey);
1706 EXPECT_GE(InsertFrames(kNumDeltaFrames, kVideoFrameDelta), kNoError);
1707 InsertFrame(kVideoFrameKey);
1708 for (int i = 0; i < 2 * (kNumDeltaFrames + 1); ++i) {
1709 EXPECT_TRUE(DecodeCompleteFrame());
1713 TEST_F(TestRunningJitterBuffer, TwoPacketsNonContinuous) {
1714 InsertFrame(kVideoFrameKey);
1715 EXPECT_TRUE(DecodeCompleteFrame());
1716 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0,
1717 clock_->TimeInMilliseconds());
1718 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
1719 stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0,
1720 clock_->TimeInMilliseconds());
1721 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1));
1722 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(1));
1723 EXPECT_FALSE(DecodeCompleteFrame());
1724 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0));
1725 EXPECT_TRUE(DecodeCompleteFrame());
1726 EXPECT_TRUE(DecodeCompleteFrame());
1729 TEST_F(TestJitterBufferNack, EmptyPackets) {
1730 // Make sure empty packets doesn't clog the jitter buffer.
1731 jitter_buffer_->SetNackMode(kNack, media_optimization::kLowRttNackMs, -1);
1732 EXPECT_GE(InsertFrames(kMaxNumberOfFrames, kFrameEmpty), kNoError);
1733 InsertFrame(kVideoFrameKey);
1734 EXPECT_TRUE(DecodeCompleteFrame());
1737 TEST_F(TestJitterBufferNack, NackTooOldPackets) {
1738 // Insert a key frame and decode it.
1739 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1740 EXPECT_TRUE(DecodeCompleteFrame());
1742 // Drop one frame and insert |kNackHistoryLength| to trigger NACKing a too
1745 // Insert a frame which should trigger a recycle until the next key frame.
1746 EXPECT_EQ(kFlushIndicator, InsertFrames(oldest_packet_to_nack_ + 1,
1748 EXPECT_FALSE(DecodeCompleteFrame());
1750 uint16_t nack_list_length = max_nack_list_size_;
1751 bool request_key_frame = false;
1752 uint16_t* nack_list = jitter_buffer_->GetNackList(&nack_list_length,
1753 &request_key_frame);
1754 // No key frame will be requested since the jitter buffer is empty.
1755 EXPECT_FALSE(request_key_frame);
1756 EXPECT_TRUE(nack_list == NULL);
1757 EXPECT_EQ(0, nack_list_length);
1759 EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError);
1760 // Verify that the jitter buffer requests a key frame since we need one to
1762 EXPECT_FALSE(request_key_frame);
1763 EXPECT_TRUE(nack_list == NULL);
1764 EXPECT_EQ(0, nack_list_length);
1765 // Waiting for a key frame.
1766 EXPECT_FALSE(DecodeCompleteFrame());
1767 EXPECT_FALSE(DecodeIncompleteFrame());
1769 // The next complete continuous frame isn't a key frame, but we're waiting
1771 EXPECT_FALSE(DecodeCompleteFrame());
1772 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1773 // Skipping ahead to the key frame.
1774 EXPECT_TRUE(DecodeCompleteFrame());
1777 TEST_F(TestJitterBufferNack, NackLargeJitterBuffer) {
1778 // Insert a key frame and decode it.
1779 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1780 EXPECT_TRUE(DecodeCompleteFrame());
1782 // Insert a frame which should trigger a recycle until the next key frame.
1783 EXPECT_GE(InsertFrames(oldest_packet_to_nack_, kVideoFrameDelta), kNoError);
1785 uint16_t nack_list_length = max_nack_list_size_;
1786 bool request_key_frame = false;
1787 jitter_buffer_->GetNackList(&nack_list_length, &request_key_frame);
1788 // Verify that the jitter buffer does not request a key frame.
1789 EXPECT_FALSE(request_key_frame);
1790 // Verify that no packets are NACKed.
1791 EXPECT_EQ(0, nack_list_length);
1792 // Verify that we can decode the next frame.
1793 EXPECT_TRUE(DecodeCompleteFrame());
1796 TEST_F(TestJitterBufferNack, NackListFull) {
1797 // Insert a key frame and decode it.
1798 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1799 EXPECT_TRUE(DecodeCompleteFrame());
1801 // Generate and drop |kNackHistoryLength| packets to fill the NACK list.
1802 DropFrame(max_nack_list_size_ + 1);
1803 // Insert a frame which should trigger a recycle until the next key frame.
1804 EXPECT_EQ(kFlushIndicator, InsertFrame(kVideoFrameDelta));
1805 EXPECT_FALSE(DecodeCompleteFrame());
1807 uint16_t nack_list_length = max_nack_list_size_;
1808 bool request_key_frame = false;
1809 jitter_buffer_->GetNackList(&nack_list_length, &request_key_frame);
1810 // The jitter buffer is empty, so we won't request key frames until we get a
1812 EXPECT_FALSE(request_key_frame);
1814 EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError);
1815 // Now we have a packet in the jitter buffer, a key frame will be requested
1816 // since it's not a key frame.
1817 jitter_buffer_->GetNackList(&nack_list_length, &request_key_frame);
1818 // The jitter buffer is empty, so we won't request key frames until we get a
1820 EXPECT_TRUE(request_key_frame);
1821 // The next complete continuous frame isn't a key frame, but we're waiting
1823 EXPECT_FALSE(DecodeCompleteFrame());
1824 EXPECT_FALSE(DecodeIncompleteFrame());
1825 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1826 // Skipping ahead to the key frame.
1827 EXPECT_TRUE(DecodeCompleteFrame());
1830 TEST_F(TestJitterBufferNack, NoNackListReturnedBeforeFirstDecode) {
1832 // Insert a frame and try to generate a NACK list. Shouldn't get one.
1833 EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError);
1834 uint16_t nack_list_size = 0;
1835 bool request_key_frame = false;
1836 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size,
1837 &request_key_frame);
1838 // No list generated, and a key frame request is signaled.
1839 EXPECT_TRUE(list == NULL);
1840 EXPECT_EQ(0, nack_list_size);
1841 EXPECT_TRUE(request_key_frame);
1844 TEST_F(TestJitterBufferNack, NackListBuiltBeforeFirstDecode) {
1845 stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
1846 InsertFrame(kVideoFrameKey);
1847 stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0,
1848 clock_->TimeInMilliseconds());
1849 stream_generator_->NextPacket(NULL); // Drop packet.
1850 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1851 EXPECT_TRUE(DecodeCompleteFrame());
1852 uint16_t nack_list_size = 0;
1853 bool extended = false;
1854 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
1855 EXPECT_EQ(1, nack_list_size);
1856 EXPECT_TRUE(list != NULL);
1859 TEST_F(TestJitterBufferNack, VerifyRetransmittedFlag) {
1860 stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
1861 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0,
1862 clock_->TimeInMilliseconds());
1864 stream_generator_->PopPacket(&packet, 0);
1865 bool retransmitted = false;
1866 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(packet, &retransmitted));
1867 EXPECT_FALSE(retransmitted);
1868 // Drop second packet.
1869 stream_generator_->PopPacket(&packet, 1);
1870 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(packet, &retransmitted));
1871 EXPECT_FALSE(retransmitted);
1872 EXPECT_FALSE(DecodeCompleteFrame());
1873 uint16_t nack_list_size = 0;
1874 bool extended = false;
1875 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
1876 EXPECT_EQ(1, nack_list_size);
1877 ASSERT_TRUE(list != NULL);
1878 stream_generator_->PopPacket(&packet, 0);
1879 EXPECT_EQ(packet.seqNum, list[0]);
1880 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(packet,
1882 EXPECT_TRUE(retransmitted);
1883 EXPECT_TRUE(DecodeCompleteFrame());
1886 TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrame) {
1887 stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
1888 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0,
1889 clock_->TimeInMilliseconds());
1890 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1891 // Drop second packet.
1892 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1));
1893 EXPECT_FALSE(DecodeCompleteFrame());
1894 uint16_t nack_list_size = 0;
1895 bool extended = false;
1896 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
1897 EXPECT_EQ(1, nack_list_size);
1898 ASSERT_TRUE(list != NULL);
1900 stream_generator_->GetPacket(&packet, 0);
1901 EXPECT_EQ(packet.seqNum, list[0]);
1904 TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrameSecondInQueue) {
1906 stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
1907 // First frame is delta.
1908 stream_generator_->GenerateFrame(kVideoFrameDelta, 3, 0,
1909 clock_->TimeInMilliseconds());
1910 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1911 // Drop second packet in frame.
1912 ASSERT_TRUE(stream_generator_->PopPacket(&packet, 0));
1913 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1914 // Second frame is key.
1915 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0,
1916 clock_->TimeInMilliseconds() + 10);
1917 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1918 // Drop second packet in frame.
1919 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1));
1920 EXPECT_FALSE(DecodeCompleteFrame());
1921 uint16_t nack_list_size = 0;
1922 bool extended = false;
1923 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
1924 EXPECT_EQ(1, nack_list_size);
1925 ASSERT_TRUE(list != NULL);
1926 stream_generator_->GetPacket(&packet, 0);
1927 EXPECT_EQ(packet.seqNum, list[0]);
1930 TEST_F(TestJitterBufferNack, NormalOperation) {
1931 EXPECT_EQ(kNack, jitter_buffer_->nack_mode());
1932 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
1934 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1935 EXPECT_TRUE(DecodeIncompleteFrame());
1937 // ----------------------------------------------------------------
1938 // | 1 | 2 | .. | 8 | 9 | x | 11 | 12 | .. | 19 | x | 21 | .. | 100 |
1939 // ----------------------------------------------------------------
1940 stream_generator_->GenerateFrame(kVideoFrameKey, 100, 0,
1941 clock_->TimeInMilliseconds());
1942 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
1943 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0));
1944 // Verify that the frame is incomplete.
1945 EXPECT_FALSE(DecodeCompleteFrame());
1946 while (stream_generator_->PacketsRemaining() > 1) {
1947 if (stream_generator_->NextSequenceNumber() % 10 != 0) {
1948 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0));
1950 stream_generator_->NextPacket(NULL); // Drop packet
1953 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0));
1954 EXPECT_EQ(0, stream_generator_->PacketsRemaining());
1955 EXPECT_FALSE(DecodeCompleteFrame());
1956 EXPECT_FALSE(DecodeIncompleteFrame());
1957 uint16_t nack_list_size = 0;
1958 bool request_key_frame = false;
1959 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size,
1960 &request_key_frame);
1961 // Verify the NACK list.
1962 const int kExpectedNackSize = 9;
1963 ASSERT_EQ(kExpectedNackSize, nack_list_size);
1964 for (int i = 0; i < nack_list_size; ++i)
1965 EXPECT_EQ((1 + i) * 10, list[i]);
1968 TEST_F(TestJitterBufferNack, NormalOperationWrap) {
1969 bool request_key_frame = false;
1970 // ------- ------------------------------------------------------------
1971 // | 65532 | | 65533 | 65534 | 65535 | x | 1 | .. | 9 | x | 11 |.....| 96 |
1972 // ------- ------------------------------------------------------------
1973 stream_generator_->Init(65532, 0, clock_->TimeInMilliseconds());
1974 InsertFrame(kVideoFrameKey);
1975 EXPECT_FALSE(request_key_frame);
1976 EXPECT_TRUE(DecodeCompleteFrame());
1977 stream_generator_->GenerateFrame(kVideoFrameDelta, 100, 0,
1978 clock_->TimeInMilliseconds());
1979 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1980 while (stream_generator_->PacketsRemaining() > 1) {
1981 if (stream_generator_->NextSequenceNumber() % 10 != 0) {
1982 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1983 EXPECT_FALSE(request_key_frame);
1985 stream_generator_->NextPacket(NULL); // Drop packet
1988 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1989 EXPECT_FALSE(request_key_frame);
1990 EXPECT_EQ(0, stream_generator_->PacketsRemaining());
1991 EXPECT_FALSE(DecodeCompleteFrame());
1992 EXPECT_FALSE(DecodeCompleteFrame());
1993 uint16_t nack_list_size = 0;
1994 bool extended = false;
1995 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
1996 // Verify the NACK list.
1997 const int kExpectedNackSize = 10;
1998 ASSERT_EQ(kExpectedNackSize, nack_list_size);
1999 for (int i = 0; i < nack_list_size; ++i)
2000 EXPECT_EQ(i * 10, list[i]);
2003 TEST_F(TestJitterBufferNack, NormalOperationWrap2) {
2004 bool request_key_frame = false;
2005 // -----------------------------------
2006 // | 65532 | 65533 | 65534 | x | 0 | 1 |
2007 // -----------------------------------
2008 stream_generator_->Init(65532, 0, clock_->TimeInMilliseconds());
2009 InsertFrame(kVideoFrameKey);
2010 EXPECT_FALSE(request_key_frame);
2011 EXPECT_TRUE(DecodeCompleteFrame());
2012 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0,
2013 clock_->TimeInMilliseconds());
2014 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
2015 for (int i = 0; i < 5; ++i) {
2016 if (stream_generator_->NextSequenceNumber() != 65535) {
2017 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0));
2018 EXPECT_FALSE(request_key_frame);
2020 stream_generator_->NextPacket(NULL); // Drop packet
2022 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0,
2023 clock_->TimeInMilliseconds());
2024 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
2026 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0));
2027 EXPECT_FALSE(request_key_frame);
2028 uint16_t nack_list_size = 0;
2029 bool extended = false;
2030 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
2031 // Verify the NACK list.
2032 ASSERT_EQ(1, nack_list_size);
2033 EXPECT_EQ(65535, list[0]);
2036 TEST_F(TestJitterBufferNack, ResetByFutureKeyFrameDoesntError) {
2037 stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
2038 InsertFrame(kVideoFrameKey);
2039 EXPECT_TRUE(DecodeCompleteFrame());
2040 uint16_t nack_list_size = 0;
2041 bool extended = false;
2042 jitter_buffer_->GetNackList(&nack_list_size, &extended);
2043 EXPECT_EQ(0, nack_list_size);
2045 // Far-into-the-future video frame, could be caused by resetting the encoder
2046 // or otherwise restarting. This should not fail when error when the packet is
2047 // a keyframe, even if all of the nack list needs to be flushed.
2048 stream_generator_->Init(10000, 0, clock_->TimeInMilliseconds());
2049 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
2050 InsertFrame(kVideoFrameKey);
2051 EXPECT_TRUE(DecodeCompleteFrame());
2052 jitter_buffer_->GetNackList(&nack_list_size, &extended);
2053 EXPECT_EQ(0, nack_list_size);
2055 // Stream should be decodable from this point.
2056 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
2057 InsertFrame(kVideoFrameDelta);
2058 EXPECT_TRUE(DecodeCompleteFrame());
2059 jitter_buffer_->GetNackList(&nack_list_size, &extended);
2060 EXPECT_EQ(0, nack_list_size);
2063 } // namespace webrtc