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_;
515 EXPECT_EQ(0, jitter_buffer_->num_packets());
516 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets());
518 bool retransmitted = false;
519 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
522 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
524 EXPECT_TRUE(frame_out == NULL);
525 EXPECT_EQ(1, jitter_buffer_->num_packets());
526 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets());
528 packet_->isFirstPacket = false;
529 packet_->markerBit = true;
531 // Insert a packet into a frame.
532 EXPECT_EQ(kDuplicatePacket, jitter_buffer_->InsertPacket(*packet_,
534 EXPECT_EQ(2, jitter_buffer_->num_packets());
535 EXPECT_EQ(1, jitter_buffer_->num_duplicated_packets());
538 packet_->seqNum = seq_num_;
540 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
543 frame_out = DecodeCompleteFrame();
545 CheckOutFrame(frame_out, 2 * size_, false);
547 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
548 EXPECT_EQ(3, jitter_buffer_->num_packets());
549 EXPECT_EQ(1, jitter_buffer_->num_duplicated_packets());
552 TEST_F(TestBasicJitterBuffer, H264InsertStartCode) {
553 packet_->frameType = kVideoFrameKey;
554 packet_->isFirstPacket = true;
555 packet_->markerBit = false;
556 packet_->seqNum = seq_num_;
557 packet_->timestamp = timestamp_;
558 packet_->insertStartCode = true;
560 bool retransmitted = false;
561 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
564 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
566 // Frame should not be complete.
567 EXPECT_TRUE(frame_out == NULL);
570 packet_->isFirstPacket = false;
571 packet_->markerBit = true;
572 packet_->seqNum = seq_num_;
574 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
577 frame_out = DecodeCompleteFrame();
578 CheckOutFrame(frame_out, size_ * 2 + 4 * 2, true);
579 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
582 // Test threshold conditions of decodable state.
583 TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsThresholdCheck) {
584 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
585 // Always start with a key frame. Use 10 packets to test Decodable State
587 packet_->frameType = kVideoFrameKey;
588 packet_->isFirstPacket = true;
589 packet_->markerBit = false;
590 packet_->seqNum = seq_num_;
591 packet_->timestamp = timestamp_;
593 bool retransmitted = false;
594 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
596 uint32_t timestamp = 0;
597 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
598 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
600 packet_->isFirstPacket = false;
601 for (int i = 1; i < 9; ++i) {
603 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
605 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
606 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
610 packet_->markerBit = true;
613 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
615 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
616 CheckOutFrame(frame_out, 10 * size_, false);
617 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
619 // An incomplete frame can only be decoded once a subsequent frame has begun
620 // to arrive. Insert packet in distant frame for this purpose.
621 packet_->frameType = kVideoFrameDelta;
622 packet_->isFirstPacket = true;
623 packet_->markerBit = false;
624 packet_->seqNum += 100;
625 packet_->timestamp += 33 * 90 * 8;
627 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
629 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
630 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
632 // Insert second frame
633 packet_->seqNum -= 99;
634 packet_->timestamp -= 33 * 90 * 7;
636 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
638 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
639 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
641 packet_->isFirstPacket = false;
642 for (int i = 1; i < 8; ++i) {
644 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
646 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
647 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
651 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
653 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
654 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
656 frame_out = DecodeIncompleteFrame();
657 ASSERT_FALSE(NULL == frame_out);
658 CheckOutFrame(frame_out, 9 * size_, false);
659 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
661 packet_->markerBit = true;
663 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
667 // Make sure first packet is present before a frame can be decoded.
668 TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsIncompleteKey) {
669 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
670 // Always start with a key frame.
671 packet_->frameType = kVideoFrameKey;
672 packet_->isFirstPacket = true;
673 packet_->markerBit = true;
674 packet_->seqNum = seq_num_;
675 packet_->timestamp = timestamp_;
677 bool retransmitted = false;
678 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
680 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
681 CheckOutFrame(frame_out, size_, false);
682 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
684 // An incomplete frame can only be decoded once a subsequent frame has begun
685 // to arrive. Insert packet in distant frame for this purpose.
686 packet_->frameType = kVideoFrameDelta;
687 packet_->isFirstPacket = false;
688 packet_->markerBit = false;
689 packet_->seqNum += 100;
690 packet_->timestamp += 33*90*8;
691 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
694 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
695 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
697 // Insert second frame - an incomplete key frame.
698 packet_->frameType = kVideoFrameKey;
699 packet_->isFirstPacket = true;
700 packet_->seqNum -= 99;
701 packet_->timestamp -= 33*90*7;
703 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
705 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
706 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
708 // Insert a few more packets. Make sure we're waiting for the key frame to be
710 packet_->isFirstPacket = false;
711 for (int i = 1; i < 5; ++i) {
713 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
715 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
716 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
719 // Complete key frame.
720 packet_->markerBit = true;
722 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
724 frame_out = DecodeCompleteFrame();
725 CheckOutFrame(frame_out, 6 * size_, false);
726 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
729 // Make sure first packet is present before a frame can be decoded.
730 TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsMissingFirstPacket) {
731 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
732 // Always start with a key frame.
733 packet_->frameType = kVideoFrameKey;
734 packet_->isFirstPacket = true;
735 packet_->markerBit = true;
736 packet_->seqNum = seq_num_;
737 packet_->timestamp = timestamp_;
739 bool retransmitted = false;
740 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
742 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
743 CheckOutFrame(frame_out, size_, false);
744 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
746 // An incomplete frame can only be decoded once a subsequent frame has begun
747 // to arrive. Insert packet in distant frame for this purpose.
748 packet_->frameType = kVideoFrameDelta;
749 packet_->isFirstPacket = false;
750 packet_->markerBit = false;
751 packet_->seqNum += 100;
752 packet_->timestamp += 33*90*8;
753 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
756 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
757 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
759 // Insert second frame with the first packet missing. Make sure we're waiting
760 // for the key frame to be complete.
761 packet_->seqNum -= 98;
762 packet_->timestamp -= 33*90*7;
764 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
766 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
767 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
769 for (int i = 0; i < 5; ++i) {
771 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
773 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
774 EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
777 // Add first packet. Frame should now be decodable, but incomplete.
778 packet_->isFirstPacket = true;
779 packet_->seqNum -= 6;
780 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
782 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, ×tamp));
783 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
785 frame_out = DecodeIncompleteFrame();
786 CheckOutFrame(frame_out, 7 * size_, false);
787 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
790 TEST_F(TestBasicJitterBuffer, DiscontinuousStreamWhenDecodingWithErrors) {
791 // Will use one packet per frame.
792 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
793 packet_->frameType = kVideoFrameKey;
794 packet_->isFirstPacket = true;
795 packet_->markerBit = true;
796 packet_->seqNum = seq_num_;
797 packet_->timestamp = timestamp_;
798 bool retransmitted = false;
799 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
801 uint32_t next_timestamp;
802 EXPECT_TRUE(jitter_buffer_->NextCompleteTimestamp(0, &next_timestamp));
803 EXPECT_EQ(packet_->timestamp, next_timestamp);
804 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(next_timestamp);
805 EXPECT_TRUE(frame != NULL);
806 jitter_buffer_->ReleaseFrame(frame);
808 // Drop a complete frame.
809 timestamp_ += 2 * 33 * 90;
811 packet_->frameType = kVideoFrameDelta;
812 packet_->isFirstPacket = true;
813 packet_->markerBit = false;
814 packet_->seqNum = seq_num_;
815 packet_->timestamp = timestamp_;
816 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
818 // Insert a packet (so the previous one will be released).
819 timestamp_ += 33 * 90;
821 packet_->frameType = kVideoFrameDelta;
822 packet_->isFirstPacket = true;
823 packet_->markerBit = false;
824 packet_->seqNum = seq_num_;
825 packet_->timestamp = timestamp_;
826 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
828 EXPECT_FALSE(jitter_buffer_->NextCompleteTimestamp(0, &next_timestamp));
829 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(&next_timestamp));
830 EXPECT_EQ(packet_->timestamp - 33 * 90, next_timestamp);
833 TEST_F(TestBasicJitterBuffer, PacketLoss) {
834 // Verify missing packets statistics and not decodable packets statistics.
835 // Insert 10 frames consisting of 4 packets and remove one from all of them.
836 // The last packet is an empty (non-media) packet.
838 // Select a start seqNum which triggers a difficult wrap situation
839 // The JB will only output (incomplete)frames if the next one has started
840 // to arrive. Start by inserting one frame (key).
841 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
842 seq_num_ = 0xffff - 4;
844 packet_->frameType = kVideoFrameKey;
845 packet_->isFirstPacket = true;
846 packet_->markerBit = false;
847 packet_->seqNum = seq_num_;
848 packet_->timestamp = timestamp_;
849 packet_->completeNALU = kNaluStart;
851 bool retransmitted = false;
852 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
854 for (int i = 0; i < 11; ++i) {
855 webrtc::FrameType frametype = kVideoFrameDelta;
858 packet_->frameType = frametype;
859 packet_->isFirstPacket = true;
860 packet_->markerBit = false;
861 packet_->seqNum = seq_num_;
862 packet_->timestamp = timestamp_;
863 packet_->completeNALU = kNaluStart;
865 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
868 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
870 // Should not be complete.
871 EXPECT_TRUE(frame_out == NULL);
874 packet_->isFirstPacket = false;
875 packet_->markerBit = true;
876 packet_->seqNum = seq_num_;
877 packet_->completeNALU = kNaluEnd;
879 EXPECT_EQ(jitter_buffer_->InsertPacket(*packet_, &retransmitted),
882 // Insert an empty (non-media) packet.
884 packet_->isFirstPacket = false;
885 packet_->markerBit = false;
886 packet_->seqNum = seq_num_;
887 packet_->completeNALU = kNaluEnd;
888 packet_->frameType = kFrameEmpty;
890 EXPECT_EQ(jitter_buffer_->InsertPacket(*packet_, &retransmitted),
892 frame_out = DecodeIncompleteFrame();
894 // One of the packets has been discarded by the jitter buffer.
895 // Last frame can't be extracted yet.
897 CheckOutFrame(frame_out, size_, false);
900 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
902 EXPECT_EQ(frametype, frame_out->FrameType());
904 EXPECT_FALSE(frame_out->Complete());
905 EXPECT_FALSE(frame_out->MissingFrame());
908 jitter_buffer_->ReleaseFrame(frame_out);
911 // Insert 3 old packets and verify that we have 3 discarded packets
912 // Match value to actual latest timestamp decoded.
913 timestamp_ -= 33 * 90;
914 packet_->timestamp = timestamp_ - 1000;
916 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
919 packet_->timestamp = timestamp_ - 500;
921 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
924 packet_->timestamp = timestamp_ - 100;
926 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
929 EXPECT_EQ(3, jitter_buffer_->num_discarded_packets());
931 jitter_buffer_->Flush();
933 // This statistic shouldn't be reset by a flush.
934 EXPECT_EQ(3, jitter_buffer_->num_discarded_packets());
937 TEST_F(TestBasicJitterBuffer, DeltaFrame100PacketsWithSeqNumWrap) {
939 packet_->frameType = kVideoFrameKey;
940 packet_->isFirstPacket = true;
941 packet_->markerBit = false;
942 packet_->seqNum = seq_num_;
943 packet_->timestamp = timestamp_;
945 bool retransmitted = false;
946 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
949 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
951 EXPECT_TRUE(frame_out == NULL);
956 packet_->isFirstPacket = false;
957 packet_->markerBit = false;
958 packet_->seqNum = seq_num_;
960 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
963 frame_out = DecodeCompleteFrame();
965 EXPECT_TRUE(frame_out == NULL);
971 packet_->isFirstPacket = false;
972 packet_->markerBit = true;
973 packet_->seqNum = seq_num_;
975 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
978 frame_out = DecodeCompleteFrame();
980 CheckOutFrame(frame_out, 100 * size_, false);
982 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
985 TEST_F(TestBasicJitterBuffer, PacketReorderingReverseWithNegSeqNumWrap) {
986 // Insert "first" packet last seqnum.
988 packet_->frameType = kVideoFrameKey;
989 packet_->isFirstPacket = false;
990 packet_->markerBit = true;
991 packet_->seqNum = seq_num_;
993 bool retransmitted = false;
994 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
996 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
998 // Should not be complete.
999 EXPECT_TRUE(frame_out == NULL);
1001 // Insert 98 frames.
1005 packet_->isFirstPacket = false;
1006 packet_->markerBit = false;
1007 packet_->seqNum = seq_num_;
1009 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
1012 frame_out = DecodeCompleteFrame();
1014 EXPECT_TRUE(frame_out == NULL);
1017 } while (loop < 98);
1019 // Insert last packet.
1021 packet_->isFirstPacket = true;
1022 packet_->markerBit = false;
1023 packet_->seqNum = seq_num_;
1025 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1028 frame_out = DecodeCompleteFrame();
1029 CheckOutFrame(frame_out, 100 * size_, false);
1030 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1033 TEST_F(TestBasicJitterBuffer, TestInsertOldFrame) {
1037 // t = 3000 t = 2000
1040 packet_->frameType = kVideoFrameKey;
1041 packet_->isFirstPacket = true;
1042 packet_->markerBit = true;
1043 packet_->timestamp = timestamp_;
1044 packet_->seqNum = seq_num_;
1046 bool retransmitted = false;
1047 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1050 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1051 EXPECT_EQ(3000u, frame_out->TimeStamp());
1053 CheckOutFrame(frame_out, size_, false);
1055 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1057 jitter_buffer_->ReleaseFrame(frame_out);
1061 packet_->frameType = kVideoFrameDelta;
1062 packet_->isFirstPacket = true;
1063 packet_->markerBit = true;
1064 packet_->seqNum = seq_num_;
1065 packet_->timestamp = timestamp_;
1067 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
1071 TEST_F(TestBasicJitterBuffer, TestInsertOldFrameWithSeqNumWrap) {
1075 // t = 3000 t = 0xffffff00
1079 packet_->frameType = kVideoFrameKey;
1080 packet_->isFirstPacket = true;
1081 packet_->markerBit = true;
1082 packet_->seqNum = seq_num_;
1083 packet_->timestamp = timestamp_;
1085 bool retransmitted = false;
1086 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1089 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1090 EXPECT_EQ(timestamp_, frame_out->TimeStamp());
1092 CheckOutFrame(frame_out, size_, false);
1094 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1096 jitter_buffer_->ReleaseFrame(frame_out);
1099 timestamp_ = 0xffffff00;
1100 packet_->frameType = kVideoFrameDelta;
1101 packet_->isFirstPacket = true;
1102 packet_->markerBit = true;
1103 packet_->seqNum = seq_num_;
1104 packet_->timestamp = timestamp_;
1107 // This timestamp is old.
1108 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_,
1112 TEST_F(TestBasicJitterBuffer, TimestampWrap) {
1113 // --------------- ---------------
1114 // | 1 | 2 | | 3 | 4 |
1115 // --------------- ---------------
1116 // t = 0xffffff00 t = 33*90
1118 timestamp_ = 0xffffff00;
1119 packet_->frameType = kVideoFrameKey;
1120 packet_->isFirstPacket = true;
1121 packet_->markerBit = false;
1122 packet_->seqNum = seq_num_;
1123 packet_->timestamp = timestamp_;
1125 bool retransmitted = false;
1126 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
1129 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1131 EXPECT_TRUE(frame_out == NULL);
1134 packet_->isFirstPacket = false;
1135 packet_->markerBit = true;
1136 packet_->seqNum = seq_num_;
1138 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1141 frame_out = DecodeCompleteFrame();
1143 CheckOutFrame(frame_out, 2 * size_, false);
1145 jitter_buffer_->ReleaseFrame(frame_out);
1148 timestamp_ += 33*90;
1149 packet_->frameType = kVideoFrameDelta;
1150 packet_->isFirstPacket = true;
1151 packet_->markerBit = false;
1152 packet_->seqNum = seq_num_;
1153 packet_->timestamp = timestamp_;
1155 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
1158 frame_out = DecodeCompleteFrame();
1160 EXPECT_TRUE(frame_out == NULL);
1163 packet_->isFirstPacket = false;
1164 packet_->markerBit = true;
1165 packet_->seqNum = seq_num_;
1167 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1170 frame_out = DecodeCompleteFrame();
1172 CheckOutFrame(frame_out, 2 * size_, false);
1174 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
1177 TEST_F(TestBasicJitterBuffer, 2FrameWithTimestampWrap) {
1181 // t = 0xffffff00 t = 2700
1183 timestamp_ = 0xffffff00;
1184 packet_->frameType = kVideoFrameKey;
1185 packet_->isFirstPacket = true;
1186 packet_->markerBit = true;
1187 packet_->timestamp = timestamp_;
1189 bool retransmitted = false;
1190 // Insert first frame (session will be complete).
1191 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1194 // Insert next frame.
1197 packet_->frameType = kVideoFrameDelta;
1198 packet_->isFirstPacket = true;
1199 packet_->markerBit = true;
1200 packet_->seqNum = seq_num_;
1201 packet_->timestamp = timestamp_;
1203 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1206 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1207 EXPECT_EQ(0xffffff00, frame_out->TimeStamp());
1209 CheckOutFrame(frame_out, size_, false);
1211 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1213 VCMEncodedFrame* frame_out2 = DecodeCompleteFrame();
1214 EXPECT_EQ(2700u, frame_out2->TimeStamp());
1216 CheckOutFrame(frame_out2, size_, false);
1218 EXPECT_EQ(kVideoFrameDelta, frame_out2->FrameType());
1221 TEST_F(TestBasicJitterBuffer, Insert2FramesReOrderedWithTimestampWrap) {
1225 // t = 2700 t = 0xffffff00
1229 packet_->frameType = kVideoFrameDelta;
1230 packet_->isFirstPacket = true;
1231 packet_->markerBit = true;
1232 packet_->seqNum = seq_num_;
1233 packet_->timestamp = timestamp_;
1235 bool retransmitted = false;
1236 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1239 // Insert second frame
1241 timestamp_ = 0xffffff00;
1242 packet_->frameType = kVideoFrameKey;
1243 packet_->isFirstPacket = true;
1244 packet_->markerBit = true;
1245 packet_->seqNum = seq_num_;
1246 packet_->timestamp = timestamp_;
1248 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1251 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1252 EXPECT_EQ(0xffffff00, frame_out->TimeStamp());
1254 CheckOutFrame(frame_out, size_, false);
1256 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1258 VCMEncodedFrame* frame_out2 = DecodeCompleteFrame();
1259 EXPECT_EQ(2700u, frame_out2->TimeStamp());
1261 CheckOutFrame(frame_out2, size_, false);
1263 EXPECT_EQ(kVideoFrameDelta, frame_out2->FrameType());
1266 TEST_F(TestBasicJitterBuffer, DeltaFrameWithMoreThanMaxNumberOfPackets) {
1268 bool firstPacket = true;
1269 bool retransmitted = false;
1270 // Insert kMaxPacketsInJitterBuffer into frame.
1273 packet_->isFirstPacket = false;
1274 packet_->markerBit = false;
1275 packet_->seqNum = seq_num_;
1278 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
1280 firstPacket = false;
1282 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_,
1287 } while (loop < kMaxPacketsInSession);
1289 // Max number of packets inserted.
1290 // Insert one more packet.
1292 packet_->isFirstPacket = false;
1293 packet_->markerBit = true;
1294 packet_->seqNum = seq_num_;
1296 // Insert the packet -> frame recycled.
1297 EXPECT_EQ(kSizeError, jitter_buffer_->InsertPacket(*packet_,
1299 EXPECT_TRUE(NULL == DecodeCompleteFrame());
1303 TEST_F(TestBasicJitterBuffer, ExceedNumOfFrameWithSeqNumWrap) {
1304 // TEST fill JB with more than max number of frame (50 delta frames +
1305 // 51 key frames) with wrap in seq_num_
1307 // --------------------------------------------------------------
1308 // | 65485 | 65486 | 65487 | .... | 65535 | 0 | 1 | 2 | .....| 50 |
1309 // --------------------------------------------------------------
1310 // |<-----------delta frames------------->|<------key frames----->|
1314 uint32_t first_key_frame_timestamp = 0;
1315 bool retransmitted = false;
1316 // Insert MAX_NUMBER_OF_FRAMES frames.
1318 timestamp_ += 33*90;
1320 packet_->isFirstPacket = true;
1321 packet_->markerBit = true;
1322 packet_->seqNum = seq_num_;
1323 packet_->timestamp = timestamp_;
1326 first_key_frame_timestamp = packet_->timestamp;
1327 packet_->frameType = kVideoFrameKey;
1331 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1335 } while (loop < kMaxNumberOfFrames);
1337 // Max number of frames inserted.
1339 // Insert one more frame.
1340 timestamp_ += 33*90;
1342 packet_->isFirstPacket = true;
1343 packet_->markerBit = true;
1344 packet_->seqNum = seq_num_;
1345 packet_->timestamp = timestamp_;
1347 // Now, no free frame - frames will be recycled until first key frame.
1348 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1351 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1352 EXPECT_EQ(first_key_frame_timestamp, frame_out->TimeStamp());
1354 CheckOutFrame(frame_out, size_, false);
1356 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
1359 TEST_F(TestBasicJitterBuffer, EmptyLastFrame) {
1360 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
1362 // Insert one empty packet per frame, should never return the last timestamp
1363 // inserted. Only return empty frames in the presence of subsequent frames.
1365 bool retransmitted = false;
1366 for (int i = 0; i < maxSize + 10; i++) {
1367 timestamp_ += 33 * 90;
1369 packet_->isFirstPacket = false;
1370 packet_->markerBit = false;
1371 packet_->seqNum = seq_num_;
1372 packet_->timestamp = timestamp_;
1373 packet_->frameType = kFrameEmpty;
1375 EXPECT_EQ(kNoError, jitter_buffer_->InsertPacket(*packet_,
1377 VCMEncodedFrame* testFrame = DecodeIncompleteFrame();
1378 // Timestamp should never be the last TS inserted.
1379 if (testFrame != NULL) {
1380 EXPECT_TRUE(testFrame->TimeStamp() < timestamp_);
1385 TEST_F(TestBasicJitterBuffer, H264IncompleteNalu) {
1386 jitter_buffer_->SetNackMode(kNoNack, -1, -1);
1387 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
1389 timestamp_ += 33 * 90;
1390 int insertedLength = 0;
1391 packet_->seqNum = seq_num_;
1392 packet_->timestamp = timestamp_;
1393 packet_->frameType = kVideoFrameKey;
1394 packet_->isFirstPacket = true;
1395 packet_->completeNALU = kNaluStart;
1396 packet_->markerBit = false;
1397 bool retransmitted = false;
1399 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1402 seq_num_ += 2; // Skip one packet.
1403 packet_->seqNum = seq_num_;
1404 packet_->frameType = kVideoFrameKey;
1405 packet_->isFirstPacket = false;
1406 packet_->completeNALU = kNaluIncomplete;
1407 packet_->markerBit = false;
1409 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1413 packet_->seqNum = seq_num_;
1414 packet_->frameType = kVideoFrameKey;
1415 packet_->isFirstPacket = false;
1416 packet_->completeNALU = kNaluEnd;
1417 packet_->markerBit = false;
1419 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1423 packet_->seqNum = seq_num_;
1424 packet_->completeNALU = kNaluComplete;
1425 packet_->markerBit = true; // Last packet.
1426 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1428 // The JB will only output (incomplete) frames if a packet belonging to a
1429 // subsequent frame was already inserted. Insert one packet of a subsequent
1430 // frame. place high timestamp so the JB would always have a next frame
1431 // (otherwise, for every inserted frame we need to take care of the next
1433 packet_->seqNum = 1;
1434 packet_->timestamp = timestamp_ + 33 * 90 * 10;
1435 packet_->frameType = kVideoFrameDelta;
1436 packet_->isFirstPacket = false;
1437 packet_->completeNALU = kNaluStart;
1438 packet_->markerBit = false;
1440 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1443 VCMEncodedFrame* frame_out = DecodeIncompleteFrame();
1445 // We can decode everything from a NALU until a packet has been lost.
1446 // Thus we can decode the first packet of the first NALU and the second NALU
1447 // which consists of one packet.
1448 CheckOutFrame(frame_out, packet_->sizeBytes * 2, false);
1449 jitter_buffer_->ReleaseFrame(frame_out);
1451 // Test reordered start frame + 1 lost.
1452 seq_num_ += 2; // Re-order 1 frame.
1453 timestamp_ += 33*90;
1456 packet_->seqNum = seq_num_;
1457 packet_->timestamp = timestamp_;
1458 packet_->frameType = kVideoFrameKey;
1459 packet_->isFirstPacket = false;
1460 packet_->completeNALU = kNaluEnd;
1461 packet_->markerBit = false;
1462 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1464 insertedLength += packet_->sizeBytes; // This packet should be decoded.
1466 packet_->seqNum = seq_num_;
1467 packet_->timestamp = timestamp_;
1468 packet_->frameType = kVideoFrameKey;
1469 packet_->isFirstPacket = true;
1470 packet_->completeNALU = kNaluStart;
1471 packet_->markerBit = false;
1473 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1475 insertedLength += packet_->sizeBytes; // This packet should be decoded.
1477 seq_num_ += 3; // One packet drop.
1478 packet_->seqNum = seq_num_;
1479 packet_->timestamp = timestamp_;
1480 packet_->frameType = kVideoFrameKey;
1481 packet_->isFirstPacket = false;
1482 packet_->completeNALU = kNaluComplete;
1483 packet_->markerBit = false;
1484 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1486 insertedLength += packet_->sizeBytes; // This packet should be decoded.
1488 packet_->seqNum = seq_num_;
1489 packet_->timestamp = timestamp_;
1490 packet_->frameType = kVideoFrameKey;
1491 packet_->isFirstPacket = false;
1492 packet_->completeNALU = kNaluStart;
1493 packet_->markerBit = false;
1494 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1496 // This packet should be decoded since it's the beginning of a NAL.
1497 insertedLength += packet_->sizeBytes;
1500 packet_->seqNum = seq_num_;
1501 packet_->timestamp = timestamp_;
1502 packet_->frameType = kVideoFrameKey;
1503 packet_->isFirstPacket = false;
1504 packet_->completeNALU = kNaluEnd;
1505 packet_->markerBit = true;
1506 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1508 // This packet should not be decoded because it is an incomplete NAL if it
1510 frame_out = DecodeIncompleteFrame();
1511 // Only last NALU is complete.
1512 CheckOutFrame(frame_out, insertedLength, false);
1513 jitter_buffer_->ReleaseFrame(frame_out);
1515 // Test to insert empty packet.
1517 timestamp_ += 33 * 90;
1518 VCMPacket emptypacket(data_, 0, seq_num_, timestamp_, true);
1519 emptypacket.seqNum = seq_num_;
1520 emptypacket.timestamp = timestamp_;
1521 emptypacket.frameType = kVideoFrameKey;
1522 emptypacket.isFirstPacket = true;
1523 emptypacket.completeNALU = kNaluComplete;
1524 emptypacket.markerBit = true;
1525 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(emptypacket,
1527 // This packet should not be decoded because it is an incomplete NAL if it
1530 // Will be sent to the decoder, as a packet belonging to a subsequent frame
1532 frame_out = DecodeIncompleteFrame();
1535 // Test that a frame can include an empty packet.
1537 timestamp_ += 33 * 90;
1539 packet_->seqNum = seq_num_;
1540 packet_->timestamp = timestamp_;
1541 packet_->frameType = kVideoFrameKey;
1542 packet_->isFirstPacket = true;
1543 packet_->completeNALU = kNaluComplete;
1544 packet_->markerBit = false;
1546 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1550 emptypacket.seqNum = seq_num_;
1551 emptypacket.timestamp = timestamp_;
1552 emptypacket.frameType = kVideoFrameKey;
1553 emptypacket.isFirstPacket = true;
1554 emptypacket.completeNALU = kNaluComplete;
1555 emptypacket.markerBit = true;
1556 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(emptypacket,
1559 frame_out = DecodeCompleteFrame();
1560 // Only last NALU is complete
1561 CheckOutFrame(frame_out, packet_->sizeBytes, false);
1564 TEST_F(TestBasicJitterBuffer, NextFrameWhenIncomplete) {
1565 // Test that a we cannot get incomplete frames from the JB if we haven't
1566 // received the marker bit, unless we have received a packet from a later
1568 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
1569 // Start with a complete key frame - insert and decode.
1570 packet_->frameType = kVideoFrameKey;
1571 packet_->isFirstPacket = true;
1572 packet_->markerBit = true;
1573 bool retransmitted = false;
1575 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_,
1577 VCMEncodedFrame* frame_out = DecodeCompleteFrame();
1578 EXPECT_TRUE(frame_out != NULL);
1580 packet_->seqNum += 2;
1581 packet_->timestamp += 33 * 90;
1582 packet_->frameType = kVideoFrameDelta;
1583 packet_->isFirstPacket = false;
1584 packet_->markerBit = false;
1587 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1590 frame_out = DecodeIncompleteFrame();
1591 EXPECT_TRUE(frame_out == NULL);
1593 packet_->seqNum += 2;
1594 packet_->timestamp += 33 * 90;
1595 packet_->isFirstPacket = true;
1597 EXPECT_EQ(kDecodableSession, jitter_buffer_->InsertPacket(*packet_,
1600 frame_out = DecodeIncompleteFrame();
1602 CheckOutFrame(frame_out, packet_->sizeBytes, false);
1605 TEST_F(TestRunningJitterBuffer, Full) {
1606 // Insert a key frame and decode it.
1607 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1608 EXPECT_TRUE(DecodeCompleteFrame());
1610 // Fill the jitter buffer.
1611 EXPECT_GE(InsertFrames(kMaxNumberOfFrames, kVideoFrameDelta), kNoError);
1612 // Make sure we can't decode these frames.
1613 EXPECT_FALSE(DecodeCompleteFrame());
1614 // This frame will make the jitter buffer recycle frames until a key frame.
1615 // Since none is found it will have to wait until the next key frame before
1617 EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError);
1618 EXPECT_FALSE(DecodeCompleteFrame());
1621 TEST_F(TestRunningJitterBuffer, EmptyPackets) {
1622 // Make sure a frame can get complete even though empty packets are missing.
1623 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 3,
1624 clock_->TimeInMilliseconds());
1625 bool request_key_frame = false;
1626 // Insert empty packet.
1627 EXPECT_EQ(kNoError, InsertPacketAndPop(4));
1628 EXPECT_FALSE(request_key_frame);
1629 // Insert 3 media packets.
1630 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1631 EXPECT_FALSE(request_key_frame);
1632 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1633 EXPECT_FALSE(request_key_frame);
1634 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0));
1635 EXPECT_FALSE(request_key_frame);
1636 // Insert empty packet.
1637 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0));
1638 EXPECT_FALSE(request_key_frame);
1641 TEST_F(TestRunningJitterBuffer, StatisticsTest) {
1642 std::map<FrameType, uint32_t> frame_stats(jitter_buffer_->FrameStatistics());
1643 EXPECT_EQ(0u, frame_stats[kVideoFrameDelta]);
1644 EXPECT_EQ(0u, frame_stats[kVideoFrameKey]);
1646 uint32_t framerate = 0;
1647 uint32_t bitrate = 0;
1648 jitter_buffer_->IncomingRateStatistics(&framerate, &bitrate);
1649 EXPECT_EQ(0u, framerate);
1650 EXPECT_EQ(0u, bitrate);
1652 // Insert a couple of key and delta frames.
1653 InsertFrame(kVideoFrameKey);
1654 InsertFrame(kVideoFrameDelta);
1655 InsertFrame(kVideoFrameDelta);
1656 InsertFrame(kVideoFrameKey);
1657 InsertFrame(kVideoFrameDelta);
1658 // Decode some of them to make sure the statistics doesn't depend on frames
1660 EXPECT_TRUE(DecodeCompleteFrame());
1661 EXPECT_TRUE(DecodeCompleteFrame());
1662 frame_stats = jitter_buffer_->FrameStatistics();
1663 EXPECT_EQ(3u, frame_stats[kVideoFrameDelta]);
1664 EXPECT_EQ(2u, frame_stats[kVideoFrameKey]);
1666 // Insert 20 more frames to get estimates of bitrate and framerate over
1668 for (int i = 0; i < 20; ++i) {
1669 InsertFrame(kVideoFrameDelta);
1671 jitter_buffer_->IncomingRateStatistics(&framerate, &bitrate);
1672 // TODO(holmer): The current implementation returns the average of the last
1673 // two framerate calculations, which is why it takes two calls to reach the
1674 // actual framerate. This should be fixed.
1675 EXPECT_EQ(kDefaultFrameRate / 2u, framerate);
1676 EXPECT_EQ(kDefaultBitrateKbps, bitrate);
1677 // Insert 25 more frames to get estimates of bitrate and framerate over
1679 for (int i = 0; i < 25; ++i) {
1680 InsertFrame(kVideoFrameDelta);
1682 jitter_buffer_->IncomingRateStatistics(&framerate, &bitrate);
1683 EXPECT_EQ(kDefaultFrameRate, framerate);
1684 EXPECT_EQ(kDefaultBitrateKbps, bitrate);
1687 TEST_F(TestRunningJitterBuffer, SkipToKeyFrame) {
1688 // Insert delta frames.
1689 EXPECT_GE(InsertFrames(5, kVideoFrameDelta), kNoError);
1690 // Can't decode without a key frame.
1691 EXPECT_FALSE(DecodeCompleteFrame());
1692 InsertFrame(kVideoFrameKey);
1693 // Skip to the next key frame.
1694 EXPECT_TRUE(DecodeCompleteFrame());
1697 TEST_F(TestRunningJitterBuffer, DontSkipToKeyFrameIfDecodable) {
1698 InsertFrame(kVideoFrameKey);
1699 EXPECT_TRUE(DecodeCompleteFrame());
1700 const int kNumDeltaFrames = 5;
1701 EXPECT_GE(InsertFrames(kNumDeltaFrames, kVideoFrameDelta), kNoError);
1702 InsertFrame(kVideoFrameKey);
1703 for (int i = 0; i < kNumDeltaFrames + 1; ++i) {
1704 EXPECT_TRUE(DecodeCompleteFrame());
1708 TEST_F(TestRunningJitterBuffer, KeyDeltaKeyDelta) {
1709 InsertFrame(kVideoFrameKey);
1710 EXPECT_TRUE(DecodeCompleteFrame());
1711 const int kNumDeltaFrames = 5;
1712 EXPECT_GE(InsertFrames(kNumDeltaFrames, kVideoFrameDelta), kNoError);
1713 InsertFrame(kVideoFrameKey);
1714 EXPECT_GE(InsertFrames(kNumDeltaFrames, kVideoFrameDelta), kNoError);
1715 InsertFrame(kVideoFrameKey);
1716 for (int i = 0; i < 2 * (kNumDeltaFrames + 1); ++i) {
1717 EXPECT_TRUE(DecodeCompleteFrame());
1721 TEST_F(TestRunningJitterBuffer, TwoPacketsNonContinuous) {
1722 InsertFrame(kVideoFrameKey);
1723 EXPECT_TRUE(DecodeCompleteFrame());
1724 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0,
1725 clock_->TimeInMilliseconds());
1726 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
1727 stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0,
1728 clock_->TimeInMilliseconds());
1729 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1));
1730 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(1));
1731 EXPECT_FALSE(DecodeCompleteFrame());
1732 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0));
1733 EXPECT_TRUE(DecodeCompleteFrame());
1734 EXPECT_TRUE(DecodeCompleteFrame());
1737 TEST_F(TestJitterBufferNack, EmptyPackets) {
1738 // Make sure empty packets doesn't clog the jitter buffer.
1739 jitter_buffer_->SetNackMode(kNack, media_optimization::kLowRttNackMs, -1);
1740 EXPECT_GE(InsertFrames(kMaxNumberOfFrames, kFrameEmpty), kNoError);
1741 InsertFrame(kVideoFrameKey);
1742 EXPECT_TRUE(DecodeCompleteFrame());
1745 TEST_F(TestJitterBufferNack, NackTooOldPackets) {
1746 // Insert a key frame and decode it.
1747 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1748 EXPECT_TRUE(DecodeCompleteFrame());
1750 // Drop one frame and insert |kNackHistoryLength| to trigger NACKing a too
1753 // Insert a frame which should trigger a recycle until the next key frame.
1754 EXPECT_EQ(kFlushIndicator, InsertFrames(oldest_packet_to_nack_ + 1,
1756 EXPECT_FALSE(DecodeCompleteFrame());
1758 uint16_t nack_list_length = max_nack_list_size_;
1759 bool request_key_frame = false;
1760 uint16_t* nack_list = jitter_buffer_->GetNackList(&nack_list_length,
1761 &request_key_frame);
1762 // No key frame will be requested since the jitter buffer is empty.
1763 EXPECT_FALSE(request_key_frame);
1764 EXPECT_TRUE(nack_list == NULL);
1765 EXPECT_EQ(0, nack_list_length);
1767 EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError);
1768 // Verify that the jitter buffer requests a key frame since we need one to
1770 EXPECT_FALSE(request_key_frame);
1771 EXPECT_TRUE(nack_list == NULL);
1772 EXPECT_EQ(0, nack_list_length);
1773 // Waiting for a key frame.
1774 EXPECT_FALSE(DecodeCompleteFrame());
1775 EXPECT_FALSE(DecodeIncompleteFrame());
1777 // The next complete continuous frame isn't a key frame, but we're waiting
1779 EXPECT_FALSE(DecodeCompleteFrame());
1780 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1781 // Skipping ahead to the key frame.
1782 EXPECT_TRUE(DecodeCompleteFrame());
1785 TEST_F(TestJitterBufferNack, NackLargeJitterBuffer) {
1786 // Insert a key frame and decode it.
1787 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1788 EXPECT_TRUE(DecodeCompleteFrame());
1790 // Insert a frame which should trigger a recycle until the next key frame.
1791 EXPECT_GE(InsertFrames(oldest_packet_to_nack_, kVideoFrameDelta), kNoError);
1793 uint16_t nack_list_length = max_nack_list_size_;
1794 bool request_key_frame = false;
1795 jitter_buffer_->GetNackList(&nack_list_length, &request_key_frame);
1796 // Verify that the jitter buffer does not request a key frame.
1797 EXPECT_FALSE(request_key_frame);
1798 // Verify that no packets are NACKed.
1799 EXPECT_EQ(0, nack_list_length);
1800 // Verify that we can decode the next frame.
1801 EXPECT_TRUE(DecodeCompleteFrame());
1804 TEST_F(TestJitterBufferNack, NackListFull) {
1805 // Insert a key frame and decode it.
1806 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1807 EXPECT_TRUE(DecodeCompleteFrame());
1809 // Generate and drop |kNackHistoryLength| packets to fill the NACK list.
1810 DropFrame(max_nack_list_size_ + 1);
1811 // Insert a frame which should trigger a recycle until the next key frame.
1812 EXPECT_EQ(kFlushIndicator, InsertFrame(kVideoFrameDelta));
1813 EXPECT_FALSE(DecodeCompleteFrame());
1815 uint16_t nack_list_length = max_nack_list_size_;
1816 bool request_key_frame = false;
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_FALSE(request_key_frame);
1822 EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError);
1823 // Now we have a packet in the jitter buffer, a key frame will be requested
1824 // since it's not a key frame.
1825 jitter_buffer_->GetNackList(&nack_list_length, &request_key_frame);
1826 // The jitter buffer is empty, so we won't request key frames until we get a
1828 EXPECT_TRUE(request_key_frame);
1829 // The next complete continuous frame isn't a key frame, but we're waiting
1831 EXPECT_FALSE(DecodeCompleteFrame());
1832 EXPECT_FALSE(DecodeIncompleteFrame());
1833 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1834 // Skipping ahead to the key frame.
1835 EXPECT_TRUE(DecodeCompleteFrame());
1838 TEST_F(TestJitterBufferNack, NoNackListReturnedBeforeFirstDecode) {
1840 // Insert a frame and try to generate a NACK list. Shouldn't get one.
1841 EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError);
1842 uint16_t nack_list_size = 0;
1843 bool request_key_frame = false;
1844 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size,
1845 &request_key_frame);
1846 // No list generated, and a key frame request is signaled.
1847 EXPECT_TRUE(list == NULL);
1848 EXPECT_EQ(0, nack_list_size);
1849 EXPECT_TRUE(request_key_frame);
1852 TEST_F(TestJitterBufferNack, NackListBuiltBeforeFirstDecode) {
1853 stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
1854 InsertFrame(kVideoFrameKey);
1855 stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0,
1856 clock_->TimeInMilliseconds());
1857 stream_generator_->NextPacket(NULL); // Drop packet.
1858 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1859 EXPECT_TRUE(DecodeCompleteFrame());
1860 uint16_t nack_list_size = 0;
1861 bool extended = false;
1862 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
1863 EXPECT_EQ(1, nack_list_size);
1864 EXPECT_TRUE(list != NULL);
1867 TEST_F(TestJitterBufferNack, VerifyRetransmittedFlag) {
1868 stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
1869 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0,
1870 clock_->TimeInMilliseconds());
1872 stream_generator_->PopPacket(&packet, 0);
1873 bool retransmitted = false;
1874 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(packet, &retransmitted));
1875 EXPECT_FALSE(retransmitted);
1876 // Drop second packet.
1877 stream_generator_->PopPacket(&packet, 1);
1878 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(packet, &retransmitted));
1879 EXPECT_FALSE(retransmitted);
1880 EXPECT_FALSE(DecodeCompleteFrame());
1881 uint16_t nack_list_size = 0;
1882 bool extended = false;
1883 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
1884 EXPECT_EQ(1, nack_list_size);
1885 ASSERT_TRUE(list != NULL);
1886 stream_generator_->PopPacket(&packet, 0);
1887 EXPECT_EQ(packet.seqNum, list[0]);
1888 EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(packet,
1890 EXPECT_TRUE(retransmitted);
1891 EXPECT_TRUE(DecodeCompleteFrame());
1894 TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrame) {
1895 stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
1896 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0,
1897 clock_->TimeInMilliseconds());
1898 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1899 // Drop second packet.
1900 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1));
1901 EXPECT_FALSE(DecodeCompleteFrame());
1902 uint16_t nack_list_size = 0;
1903 bool extended = false;
1904 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
1905 EXPECT_EQ(1, nack_list_size);
1906 ASSERT_TRUE(list != NULL);
1908 stream_generator_->GetPacket(&packet, 0);
1909 EXPECT_EQ(packet.seqNum, list[0]);
1912 TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrameSecondInQueue) {
1914 stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
1915 // First frame is delta.
1916 stream_generator_->GenerateFrame(kVideoFrameDelta, 3, 0,
1917 clock_->TimeInMilliseconds());
1918 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1919 // Drop second packet in frame.
1920 ASSERT_TRUE(stream_generator_->PopPacket(&packet, 0));
1921 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1922 // Second frame is key.
1923 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0,
1924 clock_->TimeInMilliseconds() + 10);
1925 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1926 // Drop second packet in frame.
1927 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1));
1928 EXPECT_FALSE(DecodeCompleteFrame());
1929 uint16_t nack_list_size = 0;
1930 bool extended = false;
1931 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
1932 EXPECT_EQ(1, nack_list_size);
1933 ASSERT_TRUE(list != NULL);
1934 stream_generator_->GetPacket(&packet, 0);
1935 EXPECT_EQ(packet.seqNum, list[0]);
1938 TEST_F(TestJitterBufferNack, NormalOperation) {
1939 EXPECT_EQ(kNack, jitter_buffer_->nack_mode());
1940 jitter_buffer_->SetDecodeErrorMode(kWithErrors);
1942 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
1943 EXPECT_TRUE(DecodeIncompleteFrame());
1945 // ----------------------------------------------------------------
1946 // | 1 | 2 | .. | 8 | 9 | x | 11 | 12 | .. | 19 | x | 21 | .. | 100 |
1947 // ----------------------------------------------------------------
1948 stream_generator_->GenerateFrame(kVideoFrameKey, 100, 0,
1949 clock_->TimeInMilliseconds());
1950 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
1951 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0));
1952 // Verify that the frame is incomplete.
1953 EXPECT_FALSE(DecodeCompleteFrame());
1954 while (stream_generator_->PacketsRemaining() > 1) {
1955 if (stream_generator_->NextSequenceNumber() % 10 != 0) {
1956 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0));
1958 stream_generator_->NextPacket(NULL); // Drop packet
1961 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0));
1962 EXPECT_EQ(0, stream_generator_->PacketsRemaining());
1963 EXPECT_FALSE(DecodeCompleteFrame());
1964 EXPECT_FALSE(DecodeIncompleteFrame());
1965 uint16_t nack_list_size = 0;
1966 bool request_key_frame = false;
1967 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size,
1968 &request_key_frame);
1969 // Verify the NACK list.
1970 const int kExpectedNackSize = 9;
1971 ASSERT_EQ(kExpectedNackSize, nack_list_size);
1972 for (int i = 0; i < nack_list_size; ++i)
1973 EXPECT_EQ((1 + i) * 10, list[i]);
1976 TEST_F(TestJitterBufferNack, NormalOperationWrap) {
1977 bool request_key_frame = false;
1978 // ------- ------------------------------------------------------------
1979 // | 65532 | | 65533 | 65534 | 65535 | x | 1 | .. | 9 | x | 11 |.....| 96 |
1980 // ------- ------------------------------------------------------------
1981 stream_generator_->Init(65532, 0, clock_->TimeInMilliseconds());
1982 InsertFrame(kVideoFrameKey);
1983 EXPECT_FALSE(request_key_frame);
1984 EXPECT_TRUE(DecodeCompleteFrame());
1985 stream_generator_->GenerateFrame(kVideoFrameDelta, 100, 0,
1986 clock_->TimeInMilliseconds());
1987 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1988 while (stream_generator_->PacketsRemaining() > 1) {
1989 if (stream_generator_->NextSequenceNumber() % 10 != 0) {
1990 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1991 EXPECT_FALSE(request_key_frame);
1993 stream_generator_->NextPacket(NULL); // Drop packet
1996 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
1997 EXPECT_FALSE(request_key_frame);
1998 EXPECT_EQ(0, stream_generator_->PacketsRemaining());
1999 EXPECT_FALSE(DecodeCompleteFrame());
2000 EXPECT_FALSE(DecodeCompleteFrame());
2001 uint16_t nack_list_size = 0;
2002 bool extended = false;
2003 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
2004 // Verify the NACK list.
2005 const int kExpectedNackSize = 10;
2006 ASSERT_EQ(kExpectedNackSize, nack_list_size);
2007 for (int i = 0; i < nack_list_size; ++i)
2008 EXPECT_EQ(i * 10, list[i]);
2011 TEST_F(TestJitterBufferNack, NormalOperationWrap2) {
2012 bool request_key_frame = false;
2013 // -----------------------------------
2014 // | 65532 | 65533 | 65534 | x | 0 | 1 |
2015 // -----------------------------------
2016 stream_generator_->Init(65532, 0, clock_->TimeInMilliseconds());
2017 InsertFrame(kVideoFrameKey);
2018 EXPECT_FALSE(request_key_frame);
2019 EXPECT_TRUE(DecodeCompleteFrame());
2020 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0,
2021 clock_->TimeInMilliseconds());
2022 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
2023 for (int i = 0; i < 5; ++i) {
2024 if (stream_generator_->NextSequenceNumber() != 65535) {
2025 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0));
2026 EXPECT_FALSE(request_key_frame);
2028 stream_generator_->NextPacket(NULL); // Drop packet
2030 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0,
2031 clock_->TimeInMilliseconds());
2032 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
2034 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0));
2035 EXPECT_FALSE(request_key_frame);
2036 uint16_t nack_list_size = 0;
2037 bool extended = false;
2038 uint16_t* list = jitter_buffer_->GetNackList(&nack_list_size, &extended);
2039 // Verify the NACK list.
2040 ASSERT_EQ(1, nack_list_size);
2041 EXPECT_EQ(65535, list[0]);
2044 TEST_F(TestJitterBufferNack, ResetByFutureKeyFrameDoesntError) {
2045 stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
2046 InsertFrame(kVideoFrameKey);
2047 EXPECT_TRUE(DecodeCompleteFrame());
2048 uint16_t nack_list_size = 0;
2049 bool extended = false;
2050 jitter_buffer_->GetNackList(&nack_list_size, &extended);
2051 EXPECT_EQ(0, nack_list_size);
2053 // Far-into-the-future video frame, could be caused by resetting the encoder
2054 // or otherwise restarting. This should not fail when error when the packet is
2055 // a keyframe, even if all of the nack list needs to be flushed.
2056 stream_generator_->Init(10000, 0, clock_->TimeInMilliseconds());
2057 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
2058 InsertFrame(kVideoFrameKey);
2059 EXPECT_TRUE(DecodeCompleteFrame());
2060 jitter_buffer_->GetNackList(&nack_list_size, &extended);
2061 EXPECT_EQ(0, nack_list_size);
2063 // Stream should be decodable from this point.
2064 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
2065 InsertFrame(kVideoFrameDelta);
2066 EXPECT_TRUE(DecodeCompleteFrame());
2067 jitter_buffer_->GetNackList(&nack_list_size, &extended);
2068 EXPECT_EQ(0, nack_list_size);
2071 } // namespace webrtc