OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 VCMEncodedFrame* found_frame = jitter_buffer_->NextCompleteFrame(10); | 261 VCMEncodedFrame* found_frame = jitter_buffer_->NextCompleteFrame(10); |
262 if (!found_frame) | 262 if (!found_frame) |
263 return nullptr; | 263 return nullptr; |
264 return jitter_buffer_->ExtractAndSetDecode(found_frame->TimeStamp()); | 264 return jitter_buffer_->ExtractAndSetDecode(found_frame->TimeStamp()); |
265 } | 265 } |
266 | 266 |
267 VCMEncodedFrame* DecodeIncompleteFrame() { | 267 VCMEncodedFrame* DecodeIncompleteFrame() { |
268 uint32_t timestamp = 0; | 268 uint32_t timestamp = 0; |
269 bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp); | 269 bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp); |
270 if (!found_frame) | 270 if (!found_frame) |
271 return NULL; | 271 return nullptr; |
272 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp); | 272 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp); |
273 return frame; | 273 return frame; |
274 } | 274 } |
275 | 275 |
276 void CheckOutFrame(VCMEncodedFrame* frame_out, | 276 void CheckOutFrame(VCMEncodedFrame* frame_out, |
277 unsigned int size, | 277 unsigned int size, |
278 bool startCode) { | 278 bool startCode) { |
279 ASSERT_TRUE(frame_out); | 279 ASSERT_TRUE(frame_out); |
280 | 280 |
281 const uint8_t* outData = frame_out->Buffer(); | 281 const uint8_t* outData = frame_out->Buffer(); |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 411 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
412 } | 412 } |
413 | 413 |
414 bool DecodeCompleteFrame() { | 414 bool DecodeCompleteFrame() { |
415 VCMEncodedFrame* found_frame = jitter_buffer_->NextCompleteFrame(0); | 415 VCMEncodedFrame* found_frame = jitter_buffer_->NextCompleteFrame(0); |
416 if (!found_frame) | 416 if (!found_frame) |
417 return false; | 417 return false; |
418 | 418 |
419 VCMEncodedFrame* frame = | 419 VCMEncodedFrame* frame = |
420 jitter_buffer_->ExtractAndSetDecode(found_frame->TimeStamp()); | 420 jitter_buffer_->ExtractAndSetDecode(found_frame->TimeStamp()); |
421 bool ret = (frame != NULL); | 421 bool ret = (frame != nullptr); |
422 jitter_buffer_->ReleaseFrame(frame); | 422 jitter_buffer_->ReleaseFrame(frame); |
423 return ret; | 423 return ret; |
424 } | 424 } |
425 | 425 |
426 bool DecodeIncompleteFrame() { | 426 bool DecodeIncompleteFrame() { |
427 uint32_t timestamp = 0; | 427 uint32_t timestamp = 0; |
428 bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp); | 428 bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp); |
429 if (!found_frame) | 429 if (!found_frame) |
430 return false; | 430 return false; |
431 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp); | 431 VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp); |
432 bool ret = (frame != NULL); | 432 bool ret = (frame != nullptr); |
433 jitter_buffer_->ReleaseFrame(frame); | 433 jitter_buffer_->ReleaseFrame(frame); |
434 return ret; | 434 return ret; |
435 } | 435 } |
436 | 436 |
437 VCMJitterBuffer* jitter_buffer_; | 437 VCMJitterBuffer* jitter_buffer_; |
438 StreamGenerator* stream_generator_; | 438 StreamGenerator* stream_generator_; |
439 std::unique_ptr<SimulatedClock> clock_; | 439 std::unique_ptr<SimulatedClock> clock_; |
440 NullEventFactory event_factory_; | 440 NullEventFactory event_factory_; |
441 size_t max_nack_list_size_; | 441 size_t max_nack_list_size_; |
442 int oldest_packet_to_nack_; | 442 int oldest_packet_to_nack_; |
443 uint8_t data_buffer_[kDataBufferSize]; | 443 uint8_t data_buffer_[kDataBufferSize]; |
444 }; | 444 }; |
445 | 445 |
446 class TestJitterBufferNack : public TestRunningJitterBuffer { | 446 class TestJitterBufferNack : public TestRunningJitterBuffer { |
447 protected: | 447 protected: |
448 TestJitterBufferNack() {} | 448 TestJitterBufferNack() {} |
449 virtual void SetUp() { | 449 virtual void SetUp() { |
450 TestRunningJitterBuffer::SetUp(); | 450 TestRunningJitterBuffer::SetUp(); |
451 jitter_buffer_->SetNackMode(kNack, -1, -1); | 451 jitter_buffer_->SetNackMode(kNack, -1, -1); |
452 } | 452 } |
453 | 453 |
454 virtual void TearDown() { TestRunningJitterBuffer::TearDown(); } | 454 virtual void TearDown() { TestRunningJitterBuffer::TearDown(); } |
455 }; | 455 }; |
456 | 456 |
457 TEST_F(TestBasicJitterBuffer, StopRunning) { | 457 TEST_F(TestBasicJitterBuffer, StopRunning) { |
458 jitter_buffer_->Stop(); | 458 jitter_buffer_->Stop(); |
459 EXPECT_TRUE(NULL == DecodeCompleteFrame()); | 459 EXPECT_TRUE(nullptr == DecodeCompleteFrame()); |
460 EXPECT_TRUE(NULL == DecodeIncompleteFrame()); | 460 EXPECT_TRUE(nullptr == DecodeIncompleteFrame()); |
461 jitter_buffer_->Start(); | 461 jitter_buffer_->Start(); |
462 // Allow selective errors. | 462 // Allow selective errors. |
463 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors); | 463 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors); |
464 | 464 |
465 // No packets inserted. | 465 // No packets inserted. |
466 EXPECT_TRUE(NULL == DecodeCompleteFrame()); | 466 EXPECT_TRUE(nullptr == DecodeCompleteFrame()); |
467 EXPECT_TRUE(NULL == DecodeIncompleteFrame()); | 467 EXPECT_TRUE(nullptr == DecodeIncompleteFrame()); |
468 | 468 |
469 // Allow decoding with errors. | 469 // Allow decoding with errors. |
470 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 470 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
471 | 471 |
472 // No packets inserted. | 472 // No packets inserted. |
473 EXPECT_TRUE(NULL == DecodeCompleteFrame()); | 473 EXPECT_TRUE(nullptr == DecodeCompleteFrame()); |
474 EXPECT_TRUE(NULL == DecodeIncompleteFrame()); | 474 EXPECT_TRUE(nullptr == DecodeIncompleteFrame()); |
475 } | 475 } |
476 | 476 |
477 TEST_F(TestBasicJitterBuffer, SinglePacketFrame) { | 477 TEST_F(TestBasicJitterBuffer, SinglePacketFrame) { |
478 // Always start with a complete key frame when not allowing errors. | 478 // Always start with a complete key frame when not allowing errors. |
479 jitter_buffer_->SetDecodeErrorMode(kNoErrors); | 479 jitter_buffer_->SetDecodeErrorMode(kNoErrors); |
480 packet_->frameType = kVideoFrameKey; | 480 packet_->frameType = kVideoFrameKey; |
481 packet_->is_first_packet_in_frame = true; | 481 packet_->is_first_packet_in_frame = true; |
482 packet_->markerBit = true; | 482 packet_->markerBit = true; |
483 packet_->timestamp += 123 * 90; | 483 packet_->timestamp += 123 * 90; |
484 | 484 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
533 TEST_F(TestBasicJitterBuffer, DualPacketFrame) { | 533 TEST_F(TestBasicJitterBuffer, DualPacketFrame) { |
534 packet_->frameType = kVideoFrameKey; | 534 packet_->frameType = kVideoFrameKey; |
535 packet_->is_first_packet_in_frame = true; | 535 packet_->is_first_packet_in_frame = true; |
536 packet_->markerBit = false; | 536 packet_->markerBit = false; |
537 | 537 |
538 bool retransmitted = false; | 538 bool retransmitted = false; |
539 EXPECT_EQ(kIncomplete, | 539 EXPECT_EQ(kIncomplete, |
540 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 540 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
541 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 541 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
542 // Should not be complete. | 542 // Should not be complete. |
543 EXPECT_TRUE(frame_out == NULL); | 543 EXPECT_TRUE(frame_out == nullptr); |
544 | 544 |
545 ++seq_num_; | 545 ++seq_num_; |
546 packet_->is_first_packet_in_frame = false; | 546 packet_->is_first_packet_in_frame = false; |
547 packet_->markerBit = true; | 547 packet_->markerBit = true; |
548 packet_->seqNum = seq_num_; | 548 packet_->seqNum = seq_num_; |
549 | 549 |
550 EXPECT_EQ(kCompleteSession, | 550 EXPECT_EQ(kCompleteSession, |
551 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 551 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
552 | 552 |
553 frame_out = DecodeCompleteFrame(); | 553 frame_out = DecodeCompleteFrame(); |
554 CheckOutFrame(frame_out, 2 * size_, false); | 554 CheckOutFrame(frame_out, 2 * size_, false); |
555 | 555 |
556 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 556 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
557 jitter_buffer_->ReleaseFrame(frame_out); | 557 jitter_buffer_->ReleaseFrame(frame_out); |
558 } | 558 } |
559 | 559 |
560 TEST_F(TestBasicJitterBuffer, 100PacketKeyFrame) { | 560 TEST_F(TestBasicJitterBuffer, 100PacketKeyFrame) { |
561 packet_->frameType = kVideoFrameKey; | 561 packet_->frameType = kVideoFrameKey; |
562 packet_->is_first_packet_in_frame = true; | 562 packet_->is_first_packet_in_frame = true; |
563 packet_->markerBit = false; | 563 packet_->markerBit = false; |
564 | 564 |
565 bool retransmitted = false; | 565 bool retransmitted = false; |
566 EXPECT_EQ(kIncomplete, | 566 EXPECT_EQ(kIncomplete, |
567 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 567 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
568 | 568 |
569 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 569 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
570 | 570 |
571 // Frame should not be complete. | 571 // Frame should not be complete. |
572 EXPECT_TRUE(frame_out == NULL); | 572 EXPECT_TRUE(frame_out == nullptr); |
573 | 573 |
574 // Insert 98 frames. | 574 // Insert 98 frames. |
575 int loop = 0; | 575 int loop = 0; |
576 do { | 576 do { |
577 seq_num_++; | 577 seq_num_++; |
578 packet_->is_first_packet_in_frame = false; | 578 packet_->is_first_packet_in_frame = false; |
579 packet_->markerBit = false; | 579 packet_->markerBit = false; |
580 packet_->seqNum = seq_num_; | 580 packet_->seqNum = seq_num_; |
581 | 581 |
582 EXPECT_EQ(kIncomplete, | 582 EXPECT_EQ(kIncomplete, |
(...skipping 20 matching lines...) Expand all Loading... |
603 TEST_F(TestBasicJitterBuffer, 100PacketDeltaFrame) { | 603 TEST_F(TestBasicJitterBuffer, 100PacketDeltaFrame) { |
604 // Always start with a complete key frame. | 604 // Always start with a complete key frame. |
605 packet_->frameType = kVideoFrameKey; | 605 packet_->frameType = kVideoFrameKey; |
606 packet_->is_first_packet_in_frame = true; | 606 packet_->is_first_packet_in_frame = true; |
607 packet_->markerBit = true; | 607 packet_->markerBit = true; |
608 | 608 |
609 bool retransmitted = false; | 609 bool retransmitted = false; |
610 EXPECT_EQ(kCompleteSession, | 610 EXPECT_EQ(kCompleteSession, |
611 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 611 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
612 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 612 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
613 EXPECT_FALSE(frame_out == NULL); | 613 EXPECT_FALSE(frame_out == nullptr); |
614 jitter_buffer_->ReleaseFrame(frame_out); | 614 jitter_buffer_->ReleaseFrame(frame_out); |
615 | 615 |
616 ++seq_num_; | 616 ++seq_num_; |
617 packet_->seqNum = seq_num_; | 617 packet_->seqNum = seq_num_; |
618 packet_->markerBit = false; | 618 packet_->markerBit = false; |
619 packet_->frameType = kVideoFrameDelta; | 619 packet_->frameType = kVideoFrameDelta; |
620 packet_->timestamp += 33 * 90; | 620 packet_->timestamp += 33 * 90; |
621 | 621 |
622 EXPECT_EQ(kIncomplete, | 622 EXPECT_EQ(kIncomplete, |
623 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 623 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
624 | 624 |
625 frame_out = DecodeCompleteFrame(); | 625 frame_out = DecodeCompleteFrame(); |
626 | 626 |
627 // Frame should not be complete. | 627 // Frame should not be complete. |
628 EXPECT_TRUE(frame_out == NULL); | 628 EXPECT_TRUE(frame_out == nullptr); |
629 | 629 |
630 packet_->is_first_packet_in_frame = false; | 630 packet_->is_first_packet_in_frame = false; |
631 // Insert 98 frames. | 631 // Insert 98 frames. |
632 int loop = 0; | 632 int loop = 0; |
633 do { | 633 do { |
634 ++seq_num_; | 634 ++seq_num_; |
635 packet_->seqNum = seq_num_; | 635 packet_->seqNum = seq_num_; |
636 | 636 |
637 // Insert a packet into a frame. | 637 // Insert a packet into a frame. |
638 EXPECT_EQ(kIncomplete, | 638 EXPECT_EQ(kIncomplete, |
(...skipping 25 matching lines...) Expand all Loading... |
664 packet_->markerBit = true; | 664 packet_->markerBit = true; |
665 packet_->seqNum = seq_num_; | 665 packet_->seqNum = seq_num_; |
666 packet_->timestamp = timestamp_; | 666 packet_->timestamp = timestamp_; |
667 | 667 |
668 bool retransmitted = false; | 668 bool retransmitted = false; |
669 EXPECT_EQ(kIncomplete, | 669 EXPECT_EQ(kIncomplete, |
670 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 670 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
671 | 671 |
672 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 672 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
673 | 673 |
674 EXPECT_TRUE(frame_out == NULL); | 674 EXPECT_TRUE(frame_out == nullptr); |
675 | 675 |
676 // Insert 98 packets. | 676 // Insert 98 packets. |
677 int loop = 0; | 677 int loop = 0; |
678 do { | 678 do { |
679 seq_num_--; | 679 seq_num_--; |
680 packet_->is_first_packet_in_frame = false; | 680 packet_->is_first_packet_in_frame = false; |
681 packet_->markerBit = false; | 681 packet_->markerBit = false; |
682 packet_->seqNum = seq_num_; | 682 packet_->seqNum = seq_num_; |
683 | 683 |
684 EXPECT_EQ(kIncomplete, | 684 EXPECT_EQ(kIncomplete, |
(...skipping 22 matching lines...) Expand all Loading... |
707 packet_->frameType = kVideoFrameDelta; | 707 packet_->frameType = kVideoFrameDelta; |
708 packet_->is_first_packet_in_frame = true; | 708 packet_->is_first_packet_in_frame = true; |
709 packet_->markerBit = false; | 709 packet_->markerBit = false; |
710 | 710 |
711 bool retransmitted = false; | 711 bool retransmitted = false; |
712 EXPECT_EQ(kIncomplete, | 712 EXPECT_EQ(kIncomplete, |
713 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 713 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
714 | 714 |
715 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 715 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
716 | 716 |
717 EXPECT_TRUE(frame_out == NULL); | 717 EXPECT_TRUE(frame_out == nullptr); |
718 | 718 |
719 seq_num_++; | 719 seq_num_++; |
720 packet_->is_first_packet_in_frame = false; | 720 packet_->is_first_packet_in_frame = false; |
721 packet_->markerBit = true; | 721 packet_->markerBit = true; |
722 packet_->seqNum = seq_num_; | 722 packet_->seqNum = seq_num_; |
723 | 723 |
724 EXPECT_EQ(kCompleteSession, | 724 EXPECT_EQ(kCompleteSession, |
725 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 725 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
726 | 726 |
727 // check that we fail to get frame since seqnum is not continuous | 727 // check that we fail to get frame since seqnum is not continuous |
728 frame_out = DecodeCompleteFrame(); | 728 frame_out = DecodeCompleteFrame(); |
729 EXPECT_TRUE(frame_out == NULL); | 729 EXPECT_TRUE(frame_out == nullptr); |
730 | 730 |
731 seq_num_ -= 3; | 731 seq_num_ -= 3; |
732 timestamp_ -= 33 * 90; | 732 timestamp_ -= 33 * 90; |
733 packet_->frameType = kVideoFrameKey; | 733 packet_->frameType = kVideoFrameKey; |
734 packet_->is_first_packet_in_frame = true; | 734 packet_->is_first_packet_in_frame = true; |
735 packet_->markerBit = false; | 735 packet_->markerBit = false; |
736 packet_->seqNum = seq_num_; | 736 packet_->seqNum = seq_num_; |
737 packet_->timestamp = timestamp_; | 737 packet_->timestamp = timestamp_; |
738 | 738 |
739 EXPECT_EQ(kIncomplete, | 739 EXPECT_EQ(kIncomplete, |
740 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 740 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
741 | 741 |
742 frame_out = DecodeCompleteFrame(); | 742 frame_out = DecodeCompleteFrame(); |
743 | 743 |
744 // It should not be complete. | 744 // It should not be complete. |
745 EXPECT_TRUE(frame_out == NULL); | 745 EXPECT_TRUE(frame_out == nullptr); |
746 | 746 |
747 seq_num_++; | 747 seq_num_++; |
748 packet_->is_first_packet_in_frame = false; | 748 packet_->is_first_packet_in_frame = false; |
749 packet_->markerBit = true; | 749 packet_->markerBit = true; |
750 packet_->seqNum = seq_num_; | 750 packet_->seqNum = seq_num_; |
751 | 751 |
752 EXPECT_EQ(kCompleteSession, | 752 EXPECT_EQ(kCompleteSession, |
753 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 753 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
754 | 754 |
755 frame_out = DecodeCompleteFrame(); | 755 frame_out = DecodeCompleteFrame(); |
(...skipping 10 matching lines...) Expand all Loading... |
766 TEST_F(TestBasicJitterBuffer, TestReorderingWithPadding) { | 766 TEST_F(TestBasicJitterBuffer, TestReorderingWithPadding) { |
767 packet_->frameType = kVideoFrameKey; | 767 packet_->frameType = kVideoFrameKey; |
768 packet_->is_first_packet_in_frame = true; | 768 packet_->is_first_packet_in_frame = true; |
769 packet_->markerBit = true; | 769 packet_->markerBit = true; |
770 | 770 |
771 // Send in an initial good packet/frame (Frame A) to start things off. | 771 // Send in an initial good packet/frame (Frame A) to start things off. |
772 bool retransmitted = false; | 772 bool retransmitted = false; |
773 EXPECT_EQ(kCompleteSession, | 773 EXPECT_EQ(kCompleteSession, |
774 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 774 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
775 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 775 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
776 EXPECT_TRUE(frame_out != NULL); | 776 EXPECT_TRUE(frame_out != nullptr); |
777 jitter_buffer_->ReleaseFrame(frame_out); | 777 jitter_buffer_->ReleaseFrame(frame_out); |
778 | 778 |
779 // Now send in a complete delta frame (Frame C), but with a sequence number | 779 // Now send in a complete delta frame (Frame C), but with a sequence number |
780 // gap. No pic index either, so no temporal scalability cheating :) | 780 // gap. No pic index either, so no temporal scalability cheating :) |
781 packet_->frameType = kVideoFrameDelta; | 781 packet_->frameType = kVideoFrameDelta; |
782 // Leave a gap of 2 sequence numbers and two frames. | 782 // Leave a gap of 2 sequence numbers and two frames. |
783 packet_->seqNum = seq_num_ + 3; | 783 packet_->seqNum = seq_num_ + 3; |
784 packet_->timestamp = timestamp_ + (66 * 90); | 784 packet_->timestamp = timestamp_ + (66 * 90); |
785 // Still isFirst = marker = true. | 785 // Still isFirst = marker = true. |
786 // Session should be complete (frame is complete), but there's nothing to | 786 // Session should be complete (frame is complete), but there's nothing to |
787 // decode yet. | 787 // decode yet. |
788 EXPECT_EQ(kCompleteSession, | 788 EXPECT_EQ(kCompleteSession, |
789 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 789 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
790 frame_out = DecodeCompleteFrame(); | 790 frame_out = DecodeCompleteFrame(); |
791 EXPECT_TRUE(frame_out == NULL); | 791 EXPECT_TRUE(frame_out == nullptr); |
792 | 792 |
793 // Now send in a complete delta frame (Frame B) that is continuous from A, but | 793 // Now send in a complete delta frame (Frame B) that is continuous from A, but |
794 // doesn't fill the full gap to C. The rest of the gap is going to be padding. | 794 // doesn't fill the full gap to C. The rest of the gap is going to be padding. |
795 packet_->seqNum = seq_num_ + 1; | 795 packet_->seqNum = seq_num_ + 1; |
796 packet_->timestamp = timestamp_ + (33 * 90); | 796 packet_->timestamp = timestamp_ + (33 * 90); |
797 // Still isFirst = marker = true. | 797 // Still isFirst = marker = true. |
798 EXPECT_EQ(kCompleteSession, | 798 EXPECT_EQ(kCompleteSession, |
799 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 799 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
800 frame_out = DecodeCompleteFrame(); | 800 frame_out = DecodeCompleteFrame(); |
801 EXPECT_TRUE(frame_out != NULL); | 801 EXPECT_TRUE(frame_out != nullptr); |
802 jitter_buffer_->ReleaseFrame(frame_out); | 802 jitter_buffer_->ReleaseFrame(frame_out); |
803 | 803 |
804 // But Frame C isn't continuous yet. | 804 // But Frame C isn't continuous yet. |
805 frame_out = DecodeCompleteFrame(); | 805 frame_out = DecodeCompleteFrame(); |
806 EXPECT_TRUE(frame_out == NULL); | 806 EXPECT_TRUE(frame_out == nullptr); |
807 | 807 |
808 // Add in the padding. These are empty packets (data length is 0) with no | 808 // Add in the padding. These are empty packets (data length is 0) with no |
809 // marker bit and matching the timestamp of Frame B. | 809 // marker bit and matching the timestamp of Frame B. |
810 WebRtcRTPHeader rtpHeader; | 810 WebRtcRTPHeader rtpHeader; |
811 memset(&rtpHeader, 0, sizeof(rtpHeader)); | 811 memset(&rtpHeader, 0, sizeof(rtpHeader)); |
812 rtpHeader.header.sequenceNumber = seq_num_ + 2; | 812 rtpHeader.header.sequenceNumber = seq_num_ + 2; |
813 rtpHeader.header.timestamp = timestamp_ + (33 * 90); | 813 rtpHeader.header.timestamp = timestamp_ + (33 * 90); |
814 rtpHeader.header.markerBit = false; | 814 rtpHeader.header.markerBit = false; |
815 VCMPacket empty_packet(data_, 0, rtpHeader); | 815 VCMPacket empty_packet(data_, 0, rtpHeader); |
816 EXPECT_EQ(kOldPacket, | 816 EXPECT_EQ(kOldPacket, |
817 jitter_buffer_->InsertPacket(empty_packet, &retransmitted)); | 817 jitter_buffer_->InsertPacket(empty_packet, &retransmitted)); |
818 empty_packet.seqNum += 1; | 818 empty_packet.seqNum += 1; |
819 EXPECT_EQ(kOldPacket, | 819 EXPECT_EQ(kOldPacket, |
820 jitter_buffer_->InsertPacket(empty_packet, &retransmitted)); | 820 jitter_buffer_->InsertPacket(empty_packet, &retransmitted)); |
821 | 821 |
822 // But now Frame C should be ready! | 822 // But now Frame C should be ready! |
823 frame_out = DecodeCompleteFrame(); | 823 frame_out = DecodeCompleteFrame(); |
824 EXPECT_TRUE(frame_out != NULL); | 824 EXPECT_TRUE(frame_out != nullptr); |
825 jitter_buffer_->ReleaseFrame(frame_out); | 825 jitter_buffer_->ReleaseFrame(frame_out); |
826 } | 826 } |
827 | 827 |
828 TEST_F(TestBasicJitterBuffer, DuplicatePackets) { | 828 TEST_F(TestBasicJitterBuffer, DuplicatePackets) { |
829 packet_->frameType = kVideoFrameKey; | 829 packet_->frameType = kVideoFrameKey; |
830 packet_->is_first_packet_in_frame = true; | 830 packet_->is_first_packet_in_frame = true; |
831 packet_->markerBit = false; | 831 packet_->markerBit = false; |
832 packet_->seqNum = seq_num_; | 832 packet_->seqNum = seq_num_; |
833 packet_->timestamp = timestamp_; | 833 packet_->timestamp = timestamp_; |
834 EXPECT_EQ(0, jitter_buffer_->num_packets()); | 834 EXPECT_EQ(0, jitter_buffer_->num_packets()); |
835 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); | 835 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); |
836 | 836 |
837 bool retransmitted = false; | 837 bool retransmitted = false; |
838 EXPECT_EQ(kIncomplete, | 838 EXPECT_EQ(kIncomplete, |
839 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 839 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
840 | 840 |
841 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 841 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
842 | 842 |
843 EXPECT_TRUE(frame_out == NULL); | 843 EXPECT_TRUE(frame_out == nullptr); |
844 EXPECT_EQ(1, jitter_buffer_->num_packets()); | 844 EXPECT_EQ(1, jitter_buffer_->num_packets()); |
845 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); | 845 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); |
846 | 846 |
847 // Insert a packet into a frame. | 847 // Insert a packet into a frame. |
848 EXPECT_EQ(kDuplicatePacket, | 848 EXPECT_EQ(kDuplicatePacket, |
849 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 849 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
850 EXPECT_EQ(2, jitter_buffer_->num_packets()); | 850 EXPECT_EQ(2, jitter_buffer_->num_packets()); |
851 EXPECT_EQ(1, jitter_buffer_->num_duplicated_packets()); | 851 EXPECT_EQ(1, jitter_buffer_->num_duplicated_packets()); |
852 | 852 |
853 seq_num_++; | 853 seq_num_++; |
854 packet_->seqNum = seq_num_; | 854 packet_->seqNum = seq_num_; |
855 packet_->markerBit = true; | 855 packet_->markerBit = true; |
856 packet_->is_first_packet_in_frame = false; | 856 packet_->is_first_packet_in_frame = false; |
857 | 857 |
858 EXPECT_EQ(kCompleteSession, | 858 EXPECT_EQ(kCompleteSession, |
859 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 859 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
860 | 860 |
861 frame_out = DecodeCompleteFrame(); | 861 frame_out = DecodeCompleteFrame(); |
862 ASSERT_TRUE(frame_out != NULL); | 862 ASSERT_TRUE(frame_out != nullptr); |
863 CheckOutFrame(frame_out, 2 * size_, false); | 863 CheckOutFrame(frame_out, 2 * size_, false); |
864 | 864 |
865 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 865 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
866 EXPECT_EQ(3, jitter_buffer_->num_packets()); | 866 EXPECT_EQ(3, jitter_buffer_->num_packets()); |
867 EXPECT_EQ(1, jitter_buffer_->num_duplicated_packets()); | 867 EXPECT_EQ(1, jitter_buffer_->num_duplicated_packets()); |
868 jitter_buffer_->ReleaseFrame(frame_out); | 868 jitter_buffer_->ReleaseFrame(frame_out); |
869 } | 869 } |
870 | 870 |
871 TEST_F(TestBasicJitterBuffer, DuplicatePreviousDeltaFramePacket) { | 871 TEST_F(TestBasicJitterBuffer, DuplicatePreviousDeltaFramePacket) { |
872 packet_->frameType = kVideoFrameKey; | 872 packet_->frameType = kVideoFrameKey; |
873 packet_->is_first_packet_in_frame = true; | 873 packet_->is_first_packet_in_frame = true; |
874 packet_->markerBit = true; | 874 packet_->markerBit = true; |
875 packet_->seqNum = seq_num_; | 875 packet_->seqNum = seq_num_; |
876 packet_->timestamp = timestamp_; | 876 packet_->timestamp = timestamp_; |
877 jitter_buffer_->SetDecodeErrorMode(kNoErrors); | 877 jitter_buffer_->SetDecodeErrorMode(kNoErrors); |
878 EXPECT_EQ(0, jitter_buffer_->num_packets()); | 878 EXPECT_EQ(0, jitter_buffer_->num_packets()); |
879 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); | 879 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); |
880 | 880 |
881 bool retransmitted = false; | 881 bool retransmitted = false; |
882 // Insert first complete frame. | 882 // Insert first complete frame. |
883 EXPECT_EQ(kCompleteSession, | 883 EXPECT_EQ(kCompleteSession, |
884 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 884 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
885 | 885 |
886 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 886 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
887 ASSERT_TRUE(frame_out != NULL); | 887 ASSERT_TRUE(frame_out != nullptr); |
888 CheckOutFrame(frame_out, size_, false); | 888 CheckOutFrame(frame_out, size_, false); |
889 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 889 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
890 jitter_buffer_->ReleaseFrame(frame_out); | 890 jitter_buffer_->ReleaseFrame(frame_out); |
891 | 891 |
892 // Insert 3 delta frames. | 892 // Insert 3 delta frames. |
893 for (uint16_t i = 1; i <= 3; ++i) { | 893 for (uint16_t i = 1; i <= 3; ++i) { |
894 packet_->seqNum = seq_num_ + i; | 894 packet_->seqNum = seq_num_ + i; |
895 packet_->timestamp = timestamp_ + (i * 33) * 90; | 895 packet_->timestamp = timestamp_ + (i * 33) * 90; |
896 packet_->frameType = kVideoFrameDelta; | 896 packet_->frameType = kVideoFrameDelta; |
897 EXPECT_EQ(kCompleteSession, | 897 EXPECT_EQ(kCompleteSession, |
898 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 898 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
899 EXPECT_EQ(i + 1, jitter_buffer_->num_packets()); | 899 EXPECT_EQ(i + 1, jitter_buffer_->num_packets()); |
900 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); | 900 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); |
901 } | 901 } |
902 | 902 |
903 // Retransmit second delta frame. | 903 // Retransmit second delta frame. |
904 packet_->seqNum = seq_num_ + 2; | 904 packet_->seqNum = seq_num_ + 2; |
905 packet_->timestamp = timestamp_ + 66 * 90; | 905 packet_->timestamp = timestamp_ + 66 * 90; |
906 | 906 |
907 EXPECT_EQ(kDuplicatePacket, | 907 EXPECT_EQ(kDuplicatePacket, |
908 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 908 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
909 | 909 |
910 EXPECT_EQ(5, jitter_buffer_->num_packets()); | 910 EXPECT_EQ(5, jitter_buffer_->num_packets()); |
911 EXPECT_EQ(1, jitter_buffer_->num_duplicated_packets()); | 911 EXPECT_EQ(1, jitter_buffer_->num_duplicated_packets()); |
912 | 912 |
913 // Should be able to decode 3 delta frames, key frame already decoded. | 913 // Should be able to decode 3 delta frames, key frame already decoded. |
914 for (size_t i = 0; i < 3; ++i) { | 914 for (size_t i = 0; i < 3; ++i) { |
915 frame_out = DecodeCompleteFrame(); | 915 frame_out = DecodeCompleteFrame(); |
916 ASSERT_TRUE(frame_out != NULL); | 916 ASSERT_TRUE(frame_out != nullptr); |
917 CheckOutFrame(frame_out, size_, false); | 917 CheckOutFrame(frame_out, size_, false); |
918 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 918 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
919 jitter_buffer_->ReleaseFrame(frame_out); | 919 jitter_buffer_->ReleaseFrame(frame_out); |
920 } | 920 } |
921 } | 921 } |
922 | 922 |
923 TEST_F(TestBasicJitterBuffer, TestSkipForwardVp9) { | 923 TEST_F(TestBasicJitterBuffer, TestSkipForwardVp9) { |
924 // Verify that JB skips forward to next base layer frame. | 924 // Verify that JB skips forward to next base layer frame. |
925 // ------------------------------------------------- | 925 // ------------------------------------------------- |
926 // | 65485 | 65486 | 65487 | 65488 | 65489 | ... | 926 // | 65485 | 65486 | 65487 | 65488 | 65489 | ... |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1139 packet_->timestamp = timestamp_; | 1139 packet_->timestamp = timestamp_; |
1140 packet_->insertStartCode = true; | 1140 packet_->insertStartCode = true; |
1141 | 1141 |
1142 bool retransmitted = false; | 1142 bool retransmitted = false; |
1143 EXPECT_EQ(kIncomplete, | 1143 EXPECT_EQ(kIncomplete, |
1144 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1144 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1145 | 1145 |
1146 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1146 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
1147 | 1147 |
1148 // Frame should not be complete. | 1148 // Frame should not be complete. |
1149 EXPECT_TRUE(frame_out == NULL); | 1149 EXPECT_TRUE(frame_out == nullptr); |
1150 | 1150 |
1151 seq_num_++; | 1151 seq_num_++; |
1152 packet_->is_first_packet_in_frame = false; | 1152 packet_->is_first_packet_in_frame = false; |
1153 packet_->markerBit = true; | 1153 packet_->markerBit = true; |
1154 packet_->seqNum = seq_num_; | 1154 packet_->seqNum = seq_num_; |
1155 | 1155 |
1156 EXPECT_EQ(kCompleteSession, | 1156 EXPECT_EQ(kCompleteSession, |
1157 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1157 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1158 | 1158 |
1159 frame_out = DecodeCompleteFrame(); | 1159 frame_out = DecodeCompleteFrame(); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1314 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1314 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1315 } | 1315 } |
1316 | 1316 |
1317 packet_->seqNum++; | 1317 packet_->seqNum++; |
1318 EXPECT_EQ(kDecodableSession, | 1318 EXPECT_EQ(kDecodableSession, |
1319 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1319 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1320 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); | 1320 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1321 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1321 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1322 | 1322 |
1323 frame_out = DecodeIncompleteFrame(); | 1323 frame_out = DecodeIncompleteFrame(); |
1324 ASSERT_FALSE(NULL == frame_out); | 1324 ASSERT_FALSE(nullptr == frame_out); |
1325 CheckOutFrame(frame_out, 9 * size_, false); | 1325 CheckOutFrame(frame_out, 9 * size_, false); |
1326 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 1326 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
1327 jitter_buffer_->ReleaseFrame(frame_out); | 1327 jitter_buffer_->ReleaseFrame(frame_out); |
1328 | 1328 |
1329 packet_->markerBit = true; | 1329 packet_->markerBit = true; |
1330 packet_->seqNum++; | 1330 packet_->seqNum++; |
1331 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1331 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1332 } | 1332 } |
1333 | 1333 |
1334 // Make sure first packet is present before a frame can be decoded. | 1334 // Make sure first packet is present before a frame can be decoded. |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1467 packet_->seqNum = seq_num_; | 1467 packet_->seqNum = seq_num_; |
1468 packet_->timestamp = timestamp_; | 1468 packet_->timestamp = timestamp_; |
1469 bool retransmitted = false; | 1469 bool retransmitted = false; |
1470 EXPECT_EQ(kCompleteSession, | 1470 EXPECT_EQ(kCompleteSession, |
1471 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1471 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1472 uint32_t next_timestamp; | 1472 uint32_t next_timestamp; |
1473 VCMEncodedFrame* frame = jitter_buffer_->NextCompleteFrame(0); | 1473 VCMEncodedFrame* frame = jitter_buffer_->NextCompleteFrame(0); |
1474 EXPECT_NE(frame, nullptr); | 1474 EXPECT_NE(frame, nullptr); |
1475 EXPECT_EQ(packet_->timestamp, frame->TimeStamp()); | 1475 EXPECT_EQ(packet_->timestamp, frame->TimeStamp()); |
1476 frame = jitter_buffer_->ExtractAndSetDecode(frame->TimeStamp()); | 1476 frame = jitter_buffer_->ExtractAndSetDecode(frame->TimeStamp()); |
1477 EXPECT_TRUE(frame != NULL); | 1477 EXPECT_TRUE(frame != nullptr); |
1478 jitter_buffer_->ReleaseFrame(frame); | 1478 jitter_buffer_->ReleaseFrame(frame); |
1479 | 1479 |
1480 // Drop a complete frame. | 1480 // Drop a complete frame. |
1481 timestamp_ += 2 * 33 * 90; | 1481 timestamp_ += 2 * 33 * 90; |
1482 seq_num_ += 2; | 1482 seq_num_ += 2; |
1483 packet_->frameType = kVideoFrameDelta; | 1483 packet_->frameType = kVideoFrameDelta; |
1484 packet_->is_first_packet_in_frame = true; | 1484 packet_->is_first_packet_in_frame = true; |
1485 packet_->markerBit = false; | 1485 packet_->markerBit = false; |
1486 packet_->seqNum = seq_num_; | 1486 packet_->seqNum = seq_num_; |
1487 packet_->timestamp = timestamp_; | 1487 packet_->timestamp = timestamp_; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1533 packet_->seqNum = seq_num_; | 1533 packet_->seqNum = seq_num_; |
1534 packet_->timestamp = timestamp_; | 1534 packet_->timestamp = timestamp_; |
1535 packet_->completeNALU = kNaluStart; | 1535 packet_->completeNALU = kNaluStart; |
1536 | 1536 |
1537 EXPECT_EQ(kDecodableSession, | 1537 EXPECT_EQ(kDecodableSession, |
1538 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1538 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1539 | 1539 |
1540 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1540 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
1541 | 1541 |
1542 // Should not be complete. | 1542 // Should not be complete. |
1543 EXPECT_TRUE(frame_out == NULL); | 1543 EXPECT_TRUE(frame_out == nullptr); |
1544 | 1544 |
1545 seq_num_ += 2; | 1545 seq_num_ += 2; |
1546 packet_->is_first_packet_in_frame = false; | 1546 packet_->is_first_packet_in_frame = false; |
1547 packet_->markerBit = true; | 1547 packet_->markerBit = true; |
1548 packet_->seqNum = seq_num_; | 1548 packet_->seqNum = seq_num_; |
1549 packet_->completeNALU = kNaluEnd; | 1549 packet_->completeNALU = kNaluEnd; |
1550 | 1550 |
1551 EXPECT_EQ(jitter_buffer_->InsertPacket(*packet_, &retransmitted), | 1551 EXPECT_EQ(jitter_buffer_->InsertPacket(*packet_, &retransmitted), |
1552 kDecodableSession); | 1552 kDecodableSession); |
1553 | 1553 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1610 packet_->markerBit = false; | 1610 packet_->markerBit = false; |
1611 packet_->seqNum = seq_num_; | 1611 packet_->seqNum = seq_num_; |
1612 packet_->timestamp = timestamp_; | 1612 packet_->timestamp = timestamp_; |
1613 | 1613 |
1614 bool retransmitted = false; | 1614 bool retransmitted = false; |
1615 EXPECT_EQ(kIncomplete, | 1615 EXPECT_EQ(kIncomplete, |
1616 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1616 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1617 | 1617 |
1618 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1618 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
1619 | 1619 |
1620 EXPECT_TRUE(frame_out == NULL); | 1620 EXPECT_TRUE(frame_out == nullptr); |
1621 | 1621 |
1622 int loop = 0; | 1622 int loop = 0; |
1623 do { | 1623 do { |
1624 seq_num_++; | 1624 seq_num_++; |
1625 packet_->is_first_packet_in_frame = false; | 1625 packet_->is_first_packet_in_frame = false; |
1626 packet_->markerBit = false; | 1626 packet_->markerBit = false; |
1627 packet_->seqNum = seq_num_; | 1627 packet_->seqNum = seq_num_; |
1628 | 1628 |
1629 EXPECT_EQ(kIncomplete, | 1629 EXPECT_EQ(kIncomplete, |
1630 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1630 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1631 | 1631 |
1632 frame_out = DecodeCompleteFrame(); | 1632 frame_out = DecodeCompleteFrame(); |
1633 | 1633 |
1634 EXPECT_TRUE(frame_out == NULL); | 1634 EXPECT_TRUE(frame_out == nullptr); |
1635 | 1635 |
1636 loop++; | 1636 loop++; |
1637 } while (loop < 98); | 1637 } while (loop < 98); |
1638 | 1638 |
1639 seq_num_++; | 1639 seq_num_++; |
1640 packet_->is_first_packet_in_frame = false; | 1640 packet_->is_first_packet_in_frame = false; |
1641 packet_->markerBit = true; | 1641 packet_->markerBit = true; |
1642 packet_->seqNum = seq_num_; | 1642 packet_->seqNum = seq_num_; |
1643 | 1643 |
1644 EXPECT_EQ(kCompleteSession, | 1644 EXPECT_EQ(kCompleteSession, |
(...skipping 14 matching lines...) Expand all Loading... |
1659 packet_->is_first_packet_in_frame = false; | 1659 packet_->is_first_packet_in_frame = false; |
1660 packet_->markerBit = true; | 1660 packet_->markerBit = true; |
1661 packet_->seqNum = seq_num_; | 1661 packet_->seqNum = seq_num_; |
1662 | 1662 |
1663 bool retransmitted = false; | 1663 bool retransmitted = false; |
1664 EXPECT_EQ(kIncomplete, | 1664 EXPECT_EQ(kIncomplete, |
1665 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1665 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1666 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1666 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
1667 | 1667 |
1668 // Should not be complete. | 1668 // Should not be complete. |
1669 EXPECT_TRUE(frame_out == NULL); | 1669 EXPECT_TRUE(frame_out == nullptr); |
1670 | 1670 |
1671 // Insert 98 frames. | 1671 // Insert 98 frames. |
1672 int loop = 0; | 1672 int loop = 0; |
1673 do { | 1673 do { |
1674 seq_num_--; | 1674 seq_num_--; |
1675 packet_->is_first_packet_in_frame = false; | 1675 packet_->is_first_packet_in_frame = false; |
1676 packet_->markerBit = false; | 1676 packet_->markerBit = false; |
1677 packet_->seqNum = seq_num_; | 1677 packet_->seqNum = seq_num_; |
1678 | 1678 |
1679 EXPECT_EQ(kIncomplete, | 1679 EXPECT_EQ(kIncomplete, |
1680 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1680 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1681 | 1681 |
1682 frame_out = DecodeCompleteFrame(); | 1682 frame_out = DecodeCompleteFrame(); |
1683 | 1683 |
1684 EXPECT_TRUE(frame_out == NULL); | 1684 EXPECT_TRUE(frame_out == nullptr); |
1685 | 1685 |
1686 loop++; | 1686 loop++; |
1687 } while (loop < 98); | 1687 } while (loop < 98); |
1688 | 1688 |
1689 // Insert last packet. | 1689 // Insert last packet. |
1690 seq_num_--; | 1690 seq_num_--; |
1691 packet_->is_first_packet_in_frame = true; | 1691 packet_->is_first_packet_in_frame = true; |
1692 packet_->markerBit = false; | 1692 packet_->markerBit = false; |
1693 packet_->seqNum = seq_num_; | 1693 packet_->seqNum = seq_num_; |
1694 | 1694 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1785 packet_->is_first_packet_in_frame = true; | 1785 packet_->is_first_packet_in_frame = true; |
1786 packet_->markerBit = false; | 1786 packet_->markerBit = false; |
1787 packet_->seqNum = seq_num_; | 1787 packet_->seqNum = seq_num_; |
1788 packet_->timestamp = timestamp_; | 1788 packet_->timestamp = timestamp_; |
1789 | 1789 |
1790 bool retransmitted = false; | 1790 bool retransmitted = false; |
1791 EXPECT_EQ(kIncomplete, | 1791 EXPECT_EQ(kIncomplete, |
1792 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1792 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1793 | 1793 |
1794 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1794 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
1795 EXPECT_TRUE(frame_out == NULL); | 1795 EXPECT_TRUE(frame_out == nullptr); |
1796 | 1796 |
1797 seq_num_++; | 1797 seq_num_++; |
1798 packet_->is_first_packet_in_frame = false; | 1798 packet_->is_first_packet_in_frame = false; |
1799 packet_->markerBit = true; | 1799 packet_->markerBit = true; |
1800 packet_->seqNum = seq_num_; | 1800 packet_->seqNum = seq_num_; |
1801 | 1801 |
1802 EXPECT_EQ(kCompleteSession, | 1802 EXPECT_EQ(kCompleteSession, |
1803 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1803 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1804 | 1804 |
1805 frame_out = DecodeCompleteFrame(); | 1805 frame_out = DecodeCompleteFrame(); |
1806 CheckOutFrame(frame_out, 2 * size_, false); | 1806 CheckOutFrame(frame_out, 2 * size_, false); |
1807 jitter_buffer_->ReleaseFrame(frame_out); | 1807 jitter_buffer_->ReleaseFrame(frame_out); |
1808 | 1808 |
1809 seq_num_++; | 1809 seq_num_++; |
1810 timestamp_ += 33 * 90; | 1810 timestamp_ += 33 * 90; |
1811 packet_->frameType = kVideoFrameDelta; | 1811 packet_->frameType = kVideoFrameDelta; |
1812 packet_->is_first_packet_in_frame = true; | 1812 packet_->is_first_packet_in_frame = true; |
1813 packet_->markerBit = false; | 1813 packet_->markerBit = false; |
1814 packet_->seqNum = seq_num_; | 1814 packet_->seqNum = seq_num_; |
1815 packet_->timestamp = timestamp_; | 1815 packet_->timestamp = timestamp_; |
1816 | 1816 |
1817 EXPECT_EQ(kIncomplete, | 1817 EXPECT_EQ(kIncomplete, |
1818 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1818 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1819 | 1819 |
1820 frame_out = DecodeCompleteFrame(); | 1820 frame_out = DecodeCompleteFrame(); |
1821 EXPECT_TRUE(frame_out == NULL); | 1821 EXPECT_TRUE(frame_out == nullptr); |
1822 | 1822 |
1823 seq_num_++; | 1823 seq_num_++; |
1824 packet_->is_first_packet_in_frame = false; | 1824 packet_->is_first_packet_in_frame = false; |
1825 packet_->markerBit = true; | 1825 packet_->markerBit = true; |
1826 packet_->seqNum = seq_num_; | 1826 packet_->seqNum = seq_num_; |
1827 | 1827 |
1828 EXPECT_EQ(kCompleteSession, | 1828 EXPECT_EQ(kCompleteSession, |
1829 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1829 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1830 | 1830 |
1831 frame_out = DecodeCompleteFrame(); | 1831 frame_out = DecodeCompleteFrame(); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1944 | 1944 |
1945 // Max number of packets inserted. | 1945 // Max number of packets inserted. |
1946 // Insert one more packet. | 1946 // Insert one more packet. |
1947 seq_num_++; | 1947 seq_num_++; |
1948 packet_->is_first_packet_in_frame = false; | 1948 packet_->is_first_packet_in_frame = false; |
1949 packet_->markerBit = true; | 1949 packet_->markerBit = true; |
1950 packet_->seqNum = seq_num_; | 1950 packet_->seqNum = seq_num_; |
1951 | 1951 |
1952 // Insert the packet -> frame recycled. | 1952 // Insert the packet -> frame recycled. |
1953 EXPECT_EQ(kSizeError, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1953 EXPECT_EQ(kSizeError, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1954 EXPECT_TRUE(NULL == DecodeCompleteFrame()); | 1954 EXPECT_TRUE(nullptr == DecodeCompleteFrame()); |
1955 } | 1955 } |
1956 | 1956 |
1957 TEST_F(TestBasicJitterBuffer, ExceedNumOfFrameWithSeqNumWrap) { | 1957 TEST_F(TestBasicJitterBuffer, ExceedNumOfFrameWithSeqNumWrap) { |
1958 // TEST fill JB with more than max number of frame (50 delta frames + | 1958 // TEST fill JB with more than max number of frame (50 delta frames + |
1959 // 51 key frames) with wrap in seq_num_ | 1959 // 51 key frames) with wrap in seq_num_ |
1960 // | 1960 // |
1961 // -------------------------------------------------------------- | 1961 // -------------------------------------------------------------- |
1962 // | 65485 | 65486 | 65487 | .... | 65535 | 0 | 1 | 2 | .....| 50 | | 1962 // | 65485 | 65486 | 65487 | .... | 65535 | 0 | 1 | 2 | .....| 50 | |
1963 // -------------------------------------------------------------- | 1963 // -------------------------------------------------------------- |
1964 // |<-----------delta frames------------->|<------key frames----->| | 1964 // |<-----------delta frames------------->|<------key frames----->| |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2026 seq_num_++; | 2026 seq_num_++; |
2027 packet_->is_first_packet_in_frame = false; | 2027 packet_->is_first_packet_in_frame = false; |
2028 packet_->markerBit = false; | 2028 packet_->markerBit = false; |
2029 packet_->seqNum = seq_num_; | 2029 packet_->seqNum = seq_num_; |
2030 packet_->timestamp = timestamp_; | 2030 packet_->timestamp = timestamp_; |
2031 packet_->frameType = kEmptyFrame; | 2031 packet_->frameType = kEmptyFrame; |
2032 | 2032 |
2033 EXPECT_EQ(kNoError, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 2033 EXPECT_EQ(kNoError, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
2034 VCMEncodedFrame* testFrame = DecodeIncompleteFrame(); | 2034 VCMEncodedFrame* testFrame = DecodeIncompleteFrame(); |
2035 // Timestamp should never be the last TS inserted. | 2035 // Timestamp should never be the last TS inserted. |
2036 if (testFrame != NULL) { | 2036 if (testFrame != nullptr) { |
2037 EXPECT_TRUE(testFrame->TimeStamp() < timestamp_); | 2037 EXPECT_TRUE(testFrame->TimeStamp() < timestamp_); |
2038 jitter_buffer_->ReleaseFrame(testFrame); | 2038 jitter_buffer_->ReleaseFrame(testFrame); |
2039 } | 2039 } |
2040 } | 2040 } |
2041 } | 2041 } |
2042 | 2042 |
2043 TEST_F(TestBasicJitterBuffer, H264IncompleteNalu) { | 2043 TEST_F(TestBasicJitterBuffer, H264IncompleteNalu) { |
2044 jitter_buffer_->SetNackMode(kNoNack, -1, -1); | 2044 jitter_buffer_->SetNackMode(kNoNack, -1, -1); |
2045 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 2045 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
2046 ++seq_num_; | 2046 ++seq_num_; |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2183 emptypacket.completeNALU = kNaluComplete; | 2183 emptypacket.completeNALU = kNaluComplete; |
2184 emptypacket.markerBit = true; | 2184 emptypacket.markerBit = true; |
2185 EXPECT_EQ(kCompleteSession, | 2185 EXPECT_EQ(kCompleteSession, |
2186 jitter_buffer_->InsertPacket(emptypacket, &retransmitted)); | 2186 jitter_buffer_->InsertPacket(emptypacket, &retransmitted)); |
2187 // This packet should not be decoded because it is an incomplete NAL if it | 2187 // This packet should not be decoded because it is an incomplete NAL if it |
2188 // is the last. | 2188 // is the last. |
2189 | 2189 |
2190 // Will be sent to the decoder, as a packet belonging to a subsequent frame | 2190 // Will be sent to the decoder, as a packet belonging to a subsequent frame |
2191 // has arrived. | 2191 // has arrived. |
2192 frame_out = DecodeIncompleteFrame(); | 2192 frame_out = DecodeIncompleteFrame(); |
2193 EXPECT_TRUE(frame_out != NULL); | 2193 EXPECT_TRUE(frame_out != nullptr); |
2194 jitter_buffer_->ReleaseFrame(frame_out); | 2194 jitter_buffer_->ReleaseFrame(frame_out); |
2195 | 2195 |
2196 // Test that a frame can include an empty packet. | 2196 // Test that a frame can include an empty packet. |
2197 seq_num_++; | 2197 seq_num_++; |
2198 timestamp_ += 33 * 90; | 2198 timestamp_ += 33 * 90; |
2199 | 2199 |
2200 packet_->seqNum = seq_num_; | 2200 packet_->seqNum = seq_num_; |
2201 packet_->timestamp = timestamp_; | 2201 packet_->timestamp = timestamp_; |
2202 packet_->frameType = kVideoFrameKey; | 2202 packet_->frameType = kVideoFrameKey; |
2203 packet_->is_first_packet_in_frame = true; | 2203 packet_->is_first_packet_in_frame = true; |
(...skipping 26 matching lines...) Expand all Loading... |
2230 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 2230 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
2231 // Start with a complete key frame - insert and decode. | 2231 // Start with a complete key frame - insert and decode. |
2232 packet_->frameType = kVideoFrameKey; | 2232 packet_->frameType = kVideoFrameKey; |
2233 packet_->is_first_packet_in_frame = true; | 2233 packet_->is_first_packet_in_frame = true; |
2234 packet_->markerBit = true; | 2234 packet_->markerBit = true; |
2235 bool retransmitted = false; | 2235 bool retransmitted = false; |
2236 | 2236 |
2237 EXPECT_EQ(kCompleteSession, | 2237 EXPECT_EQ(kCompleteSession, |
2238 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 2238 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
2239 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 2239 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
2240 EXPECT_TRUE(frame_out != NULL); | 2240 EXPECT_TRUE(frame_out != nullptr); |
2241 jitter_buffer_->ReleaseFrame(frame_out); | 2241 jitter_buffer_->ReleaseFrame(frame_out); |
2242 | 2242 |
2243 packet_->seqNum += 2; | 2243 packet_->seqNum += 2; |
2244 packet_->timestamp += 33 * 90; | 2244 packet_->timestamp += 33 * 90; |
2245 packet_->frameType = kVideoFrameDelta; | 2245 packet_->frameType = kVideoFrameDelta; |
2246 packet_->is_first_packet_in_frame = false; | 2246 packet_->is_first_packet_in_frame = false; |
2247 packet_->markerBit = false; | 2247 packet_->markerBit = false; |
2248 | 2248 |
2249 EXPECT_EQ(kDecodableSession, | 2249 EXPECT_EQ(kDecodableSession, |
2250 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 2250 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
2251 | 2251 |
2252 frame_out = DecodeIncompleteFrame(); | 2252 frame_out = DecodeIncompleteFrame(); |
2253 EXPECT_TRUE(frame_out == NULL); | 2253 EXPECT_TRUE(frame_out == nullptr); |
2254 | 2254 |
2255 packet_->seqNum += 2; | 2255 packet_->seqNum += 2; |
2256 packet_->timestamp += 33 * 90; | 2256 packet_->timestamp += 33 * 90; |
2257 packet_->is_first_packet_in_frame = true; | 2257 packet_->is_first_packet_in_frame = true; |
2258 | 2258 |
2259 EXPECT_EQ(kDecodableSession, | 2259 EXPECT_EQ(kDecodableSession, |
2260 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 2260 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
2261 | 2261 |
2262 frame_out = DecodeIncompleteFrame(); | 2262 frame_out = DecodeIncompleteFrame(); |
2263 CheckOutFrame(frame_out, packet_->sizeBytes, false); | 2263 CheckOutFrame(frame_out, packet_->sizeBytes, false); |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2503 // No list generated, and a key frame request is signaled. | 2503 // No list generated, and a key frame request is signaled. |
2504 EXPECT_EQ(0u, nack_list.size()); | 2504 EXPECT_EQ(0u, nack_list.size()); |
2505 EXPECT_TRUE(request_key_frame); | 2505 EXPECT_TRUE(request_key_frame); |
2506 } | 2506 } |
2507 | 2507 |
2508 TEST_F(TestJitterBufferNack, NackListBuiltBeforeFirstDecode) { | 2508 TEST_F(TestJitterBufferNack, NackListBuiltBeforeFirstDecode) { |
2509 stream_generator_->Init(0, clock_->TimeInMilliseconds()); | 2509 stream_generator_->Init(0, clock_->TimeInMilliseconds()); |
2510 InsertFrame(kVideoFrameKey); | 2510 InsertFrame(kVideoFrameKey); |
2511 stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0, | 2511 stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0, |
2512 clock_->TimeInMilliseconds()); | 2512 clock_->TimeInMilliseconds()); |
2513 stream_generator_->NextPacket(NULL); // Drop packet. | 2513 stream_generator_->NextPacket(nullptr); // Drop packet. |
2514 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2514 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2515 EXPECT_TRUE(DecodeCompleteFrame()); | 2515 EXPECT_TRUE(DecodeCompleteFrame()); |
2516 bool extended = false; | 2516 bool extended = false; |
2517 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); | 2517 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); |
2518 EXPECT_EQ(1u, nack_list.size()); | 2518 EXPECT_EQ(1u, nack_list.size()); |
2519 } | 2519 } |
2520 | 2520 |
2521 TEST_F(TestJitterBufferNack, VerifyRetransmittedFlag) { | 2521 TEST_F(TestJitterBufferNack, VerifyRetransmittedFlag) { |
2522 stream_generator_->Init(0, clock_->TimeInMilliseconds()); | 2522 stream_generator_->Init(0, clock_->TimeInMilliseconds()); |
2523 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0, | 2523 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0, |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2602 stream_generator_->GenerateFrame(kVideoFrameKey, 100, 0, | 2602 stream_generator_->GenerateFrame(kVideoFrameKey, 100, 0, |
2603 clock_->TimeInMilliseconds()); | 2603 clock_->TimeInMilliseconds()); |
2604 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2604 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
2605 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0)); | 2605 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0)); |
2606 // Verify that the frame is incomplete. | 2606 // Verify that the frame is incomplete. |
2607 EXPECT_FALSE(DecodeCompleteFrame()); | 2607 EXPECT_FALSE(DecodeCompleteFrame()); |
2608 while (stream_generator_->PacketsRemaining() > 1) { | 2608 while (stream_generator_->PacketsRemaining() > 1) { |
2609 if (stream_generator_->NextSequenceNumber() % 10 != 0) { | 2609 if (stream_generator_->NextSequenceNumber() % 10 != 0) { |
2610 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0)); | 2610 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0)); |
2611 } else { | 2611 } else { |
2612 stream_generator_->NextPacket(NULL); // Drop packet | 2612 stream_generator_->NextPacket(nullptr); // Drop packet |
2613 } | 2613 } |
2614 } | 2614 } |
2615 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0)); | 2615 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0)); |
2616 EXPECT_EQ(0, stream_generator_->PacketsRemaining()); | 2616 EXPECT_EQ(0, stream_generator_->PacketsRemaining()); |
2617 EXPECT_FALSE(DecodeCompleteFrame()); | 2617 EXPECT_FALSE(DecodeCompleteFrame()); |
2618 EXPECT_FALSE(DecodeIncompleteFrame()); | 2618 EXPECT_FALSE(DecodeIncompleteFrame()); |
2619 bool request_key_frame = false; | 2619 bool request_key_frame = false; |
2620 | 2620 |
2621 // Verify the NACK list. | 2621 // Verify the NACK list. |
2622 std::vector<uint16_t> nack_list = | 2622 std::vector<uint16_t> nack_list = |
(...skipping 14 matching lines...) Expand all Loading... |
2637 EXPECT_FALSE(request_key_frame); | 2637 EXPECT_FALSE(request_key_frame); |
2638 EXPECT_TRUE(DecodeCompleteFrame()); | 2638 EXPECT_TRUE(DecodeCompleteFrame()); |
2639 stream_generator_->GenerateFrame(kVideoFrameDelta, 100, 0, | 2639 stream_generator_->GenerateFrame(kVideoFrameDelta, 100, 0, |
2640 clock_->TimeInMilliseconds()); | 2640 clock_->TimeInMilliseconds()); |
2641 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2641 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2642 while (stream_generator_->PacketsRemaining() > 1) { | 2642 while (stream_generator_->PacketsRemaining() > 1) { |
2643 if (stream_generator_->NextSequenceNumber() % 10 != 0) { | 2643 if (stream_generator_->NextSequenceNumber() % 10 != 0) { |
2644 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2644 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2645 EXPECT_FALSE(request_key_frame); | 2645 EXPECT_FALSE(request_key_frame); |
2646 } else { | 2646 } else { |
2647 stream_generator_->NextPacket(NULL); // Drop packet | 2647 stream_generator_->NextPacket(nullptr); // Drop packet |
2648 } | 2648 } |
2649 } | 2649 } |
2650 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2650 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2651 EXPECT_FALSE(request_key_frame); | 2651 EXPECT_FALSE(request_key_frame); |
2652 EXPECT_EQ(0, stream_generator_->PacketsRemaining()); | 2652 EXPECT_EQ(0, stream_generator_->PacketsRemaining()); |
2653 EXPECT_FALSE(DecodeCompleteFrame()); | 2653 EXPECT_FALSE(DecodeCompleteFrame()); |
2654 EXPECT_FALSE(DecodeCompleteFrame()); | 2654 EXPECT_FALSE(DecodeCompleteFrame()); |
2655 bool extended = false; | 2655 bool extended = false; |
2656 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); | 2656 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); |
2657 // Verify the NACK list. | 2657 // Verify the NACK list. |
(...skipping 13 matching lines...) Expand all Loading... |
2671 EXPECT_FALSE(request_key_frame); | 2671 EXPECT_FALSE(request_key_frame); |
2672 EXPECT_TRUE(DecodeCompleteFrame()); | 2672 EXPECT_TRUE(DecodeCompleteFrame()); |
2673 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0, | 2673 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0, |
2674 clock_->TimeInMilliseconds()); | 2674 clock_->TimeInMilliseconds()); |
2675 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2675 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
2676 for (int i = 0; i < 5; ++i) { | 2676 for (int i = 0; i < 5; ++i) { |
2677 if (stream_generator_->NextSequenceNumber() != 65535) { | 2677 if (stream_generator_->NextSequenceNumber() != 65535) { |
2678 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0)); | 2678 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0)); |
2679 EXPECT_FALSE(request_key_frame); | 2679 EXPECT_FALSE(request_key_frame); |
2680 } else { | 2680 } else { |
2681 stream_generator_->NextPacket(NULL); // Drop packet | 2681 stream_generator_->NextPacket(nullptr); // Drop packet |
2682 } | 2682 } |
2683 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0, | 2683 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0, |
2684 clock_->TimeInMilliseconds()); | 2684 clock_->TimeInMilliseconds()); |
2685 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2685 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
2686 } | 2686 } |
2687 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0)); | 2687 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0)); |
2688 EXPECT_FALSE(request_key_frame); | 2688 EXPECT_FALSE(request_key_frame); |
2689 bool extended = false; | 2689 bool extended = false; |
2690 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); | 2690 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); |
2691 // Verify the NACK list. | 2691 // Verify the NACK list. |
(...skipping 20 matching lines...) Expand all Loading... |
2712 EXPECT_EQ(0u, nack_list.size()); | 2712 EXPECT_EQ(0u, nack_list.size()); |
2713 | 2713 |
2714 // Stream should be decodable from this point. | 2714 // Stream should be decodable from this point. |
2715 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2715 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
2716 InsertFrame(kVideoFrameDelta); | 2716 InsertFrame(kVideoFrameDelta); |
2717 EXPECT_TRUE(DecodeCompleteFrame()); | 2717 EXPECT_TRUE(DecodeCompleteFrame()); |
2718 nack_list = jitter_buffer_->GetNackList(&extended); | 2718 nack_list = jitter_buffer_->GetNackList(&extended); |
2719 EXPECT_EQ(0u, nack_list.size()); | 2719 EXPECT_EQ(0u, nack_list.size()); |
2720 } | 2720 } |
2721 } // namespace webrtc | 2721 } // namespace webrtc |
OLD | NEW |