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 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 sequence_numbers.end()); | 211 sequence_numbers.end()); |
212 } | 212 } |
213 | 213 |
214 void RequestKeyFrame() override { ++keyframe_requests_; } | 214 void RequestKeyFrame() override { ++keyframe_requests_; } |
215 | 215 |
216 ::testing::NiceMock<ProcessThreadMock> process_thread_mock_; | 216 ::testing::NiceMock<ProcessThreadMock> process_thread_mock_; |
217 std::vector<uint16_t> nack_sent_; | 217 std::vector<uint16_t> nack_sent_; |
218 int keyframe_requests_; | 218 int keyframe_requests_; |
219 | 219 |
220 protected: | 220 protected: |
221 TestBasicJitterBuffer() : scoped_field_trial_(GetParam()) {} | 221 TestBasicJitterBuffer() {} |
222 void SetUp() override { | 222 void SetUp() override { |
223 clock_.reset(new SimulatedClock(0)); | 223 clock_.reset(new SimulatedClock(0)); |
224 jitter_buffer_.reset(new VCMJitterBuffer( | 224 jitter_buffer_.reset(new VCMJitterBuffer( |
225 clock_.get(), | 225 clock_.get(), |
226 std::unique_ptr<EventWrapper>(event_factory_.CreateEvent()), | 226 std::unique_ptr<EventWrapper>(event_factory_.CreateEvent()), |
227 this, | 227 this, |
228 this)); | 228 this)); |
229 jitter_buffer_->Start(); | 229 jitter_buffer_->Start(); |
230 seq_num_ = 1234; | 230 seq_num_ = 1234; |
231 timestamp_ = 0; | 231 timestamp_ = 0; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 } | 309 } |
310 | 310 |
311 uint16_t seq_num_; | 311 uint16_t seq_num_; |
312 uint32_t timestamp_; | 312 uint32_t timestamp_; |
313 int size_; | 313 int size_; |
314 uint8_t data_[1500]; | 314 uint8_t data_[1500]; |
315 std::unique_ptr<VCMPacket> packet_; | 315 std::unique_ptr<VCMPacket> packet_; |
316 std::unique_ptr<SimulatedClock> clock_; | 316 std::unique_ptr<SimulatedClock> clock_; |
317 NullEventFactory event_factory_; | 317 NullEventFactory event_factory_; |
318 std::unique_ptr<VCMJitterBuffer> jitter_buffer_; | 318 std::unique_ptr<VCMJitterBuffer> jitter_buffer_; |
319 test::ScopedFieldTrials scoped_field_trial_; | |
320 }; | 319 }; |
321 | 320 |
322 INSTANTIATE_TEST_CASE_P( | |
323 TestWithNackModule, | |
324 TestBasicJitterBuffer, | |
325 ::testing::Values("WebRTC-NewVideoJitterBuffer/Enabled/", | |
326 "WebRTC-NewVideoJitterBuffer/Disabled/")); | |
327 | |
328 class TestRunningJitterBuffer : public ::testing::TestWithParam<std::string>, | 321 class TestRunningJitterBuffer : public ::testing::TestWithParam<std::string>, |
329 public NackSender, | 322 public NackSender, |
330 public KeyFrameRequestSender { | 323 public KeyFrameRequestSender { |
331 public: | 324 public: |
332 void SendNack(const std::vector<uint16_t>& sequence_numbers) { | 325 void SendNack(const std::vector<uint16_t>& sequence_numbers) { |
333 nack_sent_.insert(nack_sent_.end(), sequence_numbers.begin(), | 326 nack_sent_.insert(nack_sent_.end(), sequence_numbers.begin(), |
334 sequence_numbers.end()); | 327 sequence_numbers.end()); |
335 } | 328 } |
336 | 329 |
337 void RequestKeyFrame() { ++keyframe_requests_; } | 330 void RequestKeyFrame() { ++keyframe_requests_; } |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
443 StreamGenerator* stream_generator_; | 436 StreamGenerator* stream_generator_; |
444 std::unique_ptr<SimulatedClock> clock_; | 437 std::unique_ptr<SimulatedClock> clock_; |
445 NullEventFactory event_factory_; | 438 NullEventFactory event_factory_; |
446 size_t max_nack_list_size_; | 439 size_t max_nack_list_size_; |
447 int oldest_packet_to_nack_; | 440 int oldest_packet_to_nack_; |
448 uint8_t data_buffer_[kDataBufferSize]; | 441 uint8_t data_buffer_[kDataBufferSize]; |
449 }; | 442 }; |
450 | 443 |
451 class TestJitterBufferNack : public TestRunningJitterBuffer { | 444 class TestJitterBufferNack : public TestRunningJitterBuffer { |
452 protected: | 445 protected: |
453 TestJitterBufferNack() : scoped_field_trial_(GetParam()) {} | 446 TestJitterBufferNack() {} |
454 virtual void SetUp() { | 447 virtual void SetUp() { |
455 TestRunningJitterBuffer::SetUp(); | 448 TestRunningJitterBuffer::SetUp(); |
456 jitter_buffer_->SetNackMode(kNack, -1, -1); | 449 jitter_buffer_->SetNackMode(kNack, -1, -1); |
457 } | 450 } |
458 | 451 |
459 virtual void TearDown() { TestRunningJitterBuffer::TearDown(); } | 452 virtual void TearDown() { TestRunningJitterBuffer::TearDown(); } |
460 | |
461 test::ScopedFieldTrials scoped_field_trial_; | |
462 }; | 453 }; |
463 | 454 |
464 INSTANTIATE_TEST_CASE_P( | 455 TEST_F(TestBasicJitterBuffer, StopRunning) { |
465 TestWithNackModule, | |
466 TestJitterBufferNack, | |
467 ::testing::Values("WebRTC-NewVideoJitterBuffer/Enabled/", | |
468 "WebRTC-NewVideoJitterBuffer/Disabled/")); | |
469 | |
470 TEST_P(TestBasicJitterBuffer, StopRunning) { | |
471 jitter_buffer_->Stop(); | 456 jitter_buffer_->Stop(); |
472 EXPECT_TRUE(NULL == DecodeCompleteFrame()); | 457 EXPECT_TRUE(NULL == DecodeCompleteFrame()); |
473 EXPECT_TRUE(NULL == DecodeIncompleteFrame()); | 458 EXPECT_TRUE(NULL == DecodeIncompleteFrame()); |
474 jitter_buffer_->Start(); | 459 jitter_buffer_->Start(); |
475 // Allow selective errors. | 460 // Allow selective errors. |
476 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors); | 461 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors); |
477 | 462 |
478 // No packets inserted. | 463 // No packets inserted. |
479 EXPECT_TRUE(NULL == DecodeCompleteFrame()); | 464 EXPECT_TRUE(NULL == DecodeCompleteFrame()); |
480 EXPECT_TRUE(NULL == DecodeIncompleteFrame()); | 465 EXPECT_TRUE(NULL == DecodeIncompleteFrame()); |
481 | 466 |
482 // Allow decoding with errors. | 467 // Allow decoding with errors. |
483 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 468 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
484 | 469 |
485 // No packets inserted. | 470 // No packets inserted. |
486 EXPECT_TRUE(NULL == DecodeCompleteFrame()); | 471 EXPECT_TRUE(NULL == DecodeCompleteFrame()); |
487 EXPECT_TRUE(NULL == DecodeIncompleteFrame()); | 472 EXPECT_TRUE(NULL == DecodeIncompleteFrame()); |
488 } | 473 } |
489 | 474 |
490 TEST_P(TestBasicJitterBuffer, SinglePacketFrame) { | 475 TEST_F(TestBasicJitterBuffer, SinglePacketFrame) { |
491 // Always start with a complete key frame when not allowing errors. | 476 // Always start with a complete key frame when not allowing errors. |
492 jitter_buffer_->SetDecodeErrorMode(kNoErrors); | 477 jitter_buffer_->SetDecodeErrorMode(kNoErrors); |
493 packet_->frameType = kVideoFrameKey; | 478 packet_->frameType = kVideoFrameKey; |
494 packet_->isFirstPacket = true; | 479 packet_->isFirstPacket = true; |
495 packet_->markerBit = true; | 480 packet_->markerBit = true; |
496 packet_->timestamp += 123 * 90; | 481 packet_->timestamp += 123 * 90; |
497 | 482 |
498 // Insert the packet to the jitter buffer and get a frame. | 483 // Insert the packet to the jitter buffer and get a frame. |
499 bool retransmitted = false; | 484 bool retransmitted = false; |
500 EXPECT_EQ(kCompleteSession, | 485 EXPECT_EQ(kCompleteSession, |
501 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 486 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
502 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 487 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
503 CheckOutFrame(frame_out, size_, false); | 488 CheckOutFrame(frame_out, size_, false); |
504 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 489 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
505 jitter_buffer_->ReleaseFrame(frame_out); | 490 jitter_buffer_->ReleaseFrame(frame_out); |
506 } | 491 } |
507 | 492 |
508 TEST_P(TestBasicJitterBuffer, VerifyHistogramStats) { | 493 TEST_F(TestBasicJitterBuffer, VerifyHistogramStats) { |
509 metrics::Reset(); | 494 metrics::Reset(); |
510 // Always start with a complete key frame when not allowing errors. | 495 // Always start with a complete key frame when not allowing errors. |
511 jitter_buffer_->SetDecodeErrorMode(kNoErrors); | 496 jitter_buffer_->SetDecodeErrorMode(kNoErrors); |
512 packet_->frameType = kVideoFrameKey; | 497 packet_->frameType = kVideoFrameKey; |
513 packet_->isFirstPacket = true; | 498 packet_->isFirstPacket = true; |
514 packet_->markerBit = true; | 499 packet_->markerBit = true; |
515 packet_->timestamp += 123 * 90; | 500 packet_->timestamp += 123 * 90; |
516 | 501 |
517 // Insert single packet frame to the jitter buffer and get a frame. | 502 // Insert single packet frame to the jitter buffer and get a frame. |
518 bool retransmitted = false; | 503 bool retransmitted = false; |
(...skipping 17 matching lines...) Expand all Loading... |
536 | 521 |
537 // Verify that histograms are not updated if stop is called again. | 522 // Verify that histograms are not updated if stop is called again. |
538 jitter_buffer_->Stop(); | 523 jitter_buffer_->Stop(); |
539 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.DiscardedPacketsInPercent")); | 524 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.DiscardedPacketsInPercent")); |
540 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.DuplicatedPacketsInPercent")); | 525 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.DuplicatedPacketsInPercent")); |
541 EXPECT_EQ( | 526 EXPECT_EQ( |
542 1, metrics::NumSamples("WebRTC.Video.CompleteFramesReceivedPerSecond")); | 527 1, metrics::NumSamples("WebRTC.Video.CompleteFramesReceivedPerSecond")); |
543 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.KeyFramesReceivedInPermille")); | 528 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.KeyFramesReceivedInPermille")); |
544 } | 529 } |
545 | 530 |
546 TEST_P(TestBasicJitterBuffer, DualPacketFrame) { | 531 TEST_F(TestBasicJitterBuffer, DualPacketFrame) { |
547 packet_->frameType = kVideoFrameKey; | 532 packet_->frameType = kVideoFrameKey; |
548 packet_->isFirstPacket = true; | 533 packet_->isFirstPacket = true; |
549 packet_->markerBit = false; | 534 packet_->markerBit = false; |
550 | 535 |
551 bool retransmitted = false; | 536 bool retransmitted = false; |
552 EXPECT_EQ(kIncomplete, | 537 EXPECT_EQ(kIncomplete, |
553 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 538 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
554 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 539 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
555 // Should not be complete. | 540 // Should not be complete. |
556 EXPECT_TRUE(frame_out == NULL); | 541 EXPECT_TRUE(frame_out == NULL); |
557 | 542 |
558 ++seq_num_; | 543 ++seq_num_; |
559 packet_->isFirstPacket = false; | 544 packet_->isFirstPacket = false; |
560 packet_->markerBit = true; | 545 packet_->markerBit = true; |
561 packet_->seqNum = seq_num_; | 546 packet_->seqNum = seq_num_; |
562 | 547 |
563 EXPECT_EQ(kCompleteSession, | 548 EXPECT_EQ(kCompleteSession, |
564 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 549 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
565 | 550 |
566 frame_out = DecodeCompleteFrame(); | 551 frame_out = DecodeCompleteFrame(); |
567 CheckOutFrame(frame_out, 2 * size_, false); | 552 CheckOutFrame(frame_out, 2 * size_, false); |
568 | 553 |
569 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 554 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
570 jitter_buffer_->ReleaseFrame(frame_out); | 555 jitter_buffer_->ReleaseFrame(frame_out); |
571 } | 556 } |
572 | 557 |
573 TEST_P(TestBasicJitterBuffer, 100PacketKeyFrame) { | 558 TEST_F(TestBasicJitterBuffer, 100PacketKeyFrame) { |
574 packet_->frameType = kVideoFrameKey; | 559 packet_->frameType = kVideoFrameKey; |
575 packet_->isFirstPacket = true; | 560 packet_->isFirstPacket = true; |
576 packet_->markerBit = false; | 561 packet_->markerBit = false; |
577 | 562 |
578 bool retransmitted = false; | 563 bool retransmitted = false; |
579 EXPECT_EQ(kIncomplete, | 564 EXPECT_EQ(kIncomplete, |
580 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 565 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
581 | 566 |
582 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 567 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
583 | 568 |
(...skipping 22 matching lines...) Expand all Loading... |
606 EXPECT_EQ(kCompleteSession, | 591 EXPECT_EQ(kCompleteSession, |
607 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 592 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
608 | 593 |
609 frame_out = DecodeCompleteFrame(); | 594 frame_out = DecodeCompleteFrame(); |
610 | 595 |
611 CheckOutFrame(frame_out, 100 * size_, false); | 596 CheckOutFrame(frame_out, 100 * size_, false); |
612 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 597 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
613 jitter_buffer_->ReleaseFrame(frame_out); | 598 jitter_buffer_->ReleaseFrame(frame_out); |
614 } | 599 } |
615 | 600 |
616 TEST_P(TestBasicJitterBuffer, 100PacketDeltaFrame) { | 601 TEST_F(TestBasicJitterBuffer, 100PacketDeltaFrame) { |
617 // Always start with a complete key frame. | 602 // Always start with a complete key frame. |
618 packet_->frameType = kVideoFrameKey; | 603 packet_->frameType = kVideoFrameKey; |
619 packet_->isFirstPacket = true; | 604 packet_->isFirstPacket = true; |
620 packet_->markerBit = true; | 605 packet_->markerBit = true; |
621 | 606 |
622 bool retransmitted = false; | 607 bool retransmitted = false; |
623 EXPECT_EQ(kCompleteSession, | 608 EXPECT_EQ(kCompleteSession, |
624 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 609 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
625 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 610 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
626 EXPECT_FALSE(frame_out == NULL); | 611 EXPECT_FALSE(frame_out == NULL); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 EXPECT_EQ(kCompleteSession, | 647 EXPECT_EQ(kCompleteSession, |
663 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 648 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
664 | 649 |
665 frame_out = DecodeCompleteFrame(); | 650 frame_out = DecodeCompleteFrame(); |
666 | 651 |
667 CheckOutFrame(frame_out, 100 * size_, false); | 652 CheckOutFrame(frame_out, 100 * size_, false); |
668 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 653 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
669 jitter_buffer_->ReleaseFrame(frame_out); | 654 jitter_buffer_->ReleaseFrame(frame_out); |
670 } | 655 } |
671 | 656 |
672 TEST_P(TestBasicJitterBuffer, PacketReorderingReverseOrder) { | 657 TEST_F(TestBasicJitterBuffer, PacketReorderingReverseOrder) { |
673 // Insert the "first" packet last. | 658 // Insert the "first" packet last. |
674 seq_num_ += 100; | 659 seq_num_ += 100; |
675 packet_->frameType = kVideoFrameKey; | 660 packet_->frameType = kVideoFrameKey; |
676 packet_->isFirstPacket = false; | 661 packet_->isFirstPacket = false; |
677 packet_->markerBit = true; | 662 packet_->markerBit = true; |
678 packet_->seqNum = seq_num_; | 663 packet_->seqNum = seq_num_; |
679 packet_->timestamp = timestamp_; | 664 packet_->timestamp = timestamp_; |
680 | 665 |
681 bool retransmitted = false; | 666 bool retransmitted = false; |
682 EXPECT_EQ(kIncomplete, | 667 EXPECT_EQ(kIncomplete, |
(...skipping 26 matching lines...) Expand all Loading... |
709 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 694 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
710 | 695 |
711 frame_out = DecodeCompleteFrame(); | 696 frame_out = DecodeCompleteFrame(); |
712 | 697 |
713 CheckOutFrame(frame_out, 100 * size_, false); | 698 CheckOutFrame(frame_out, 100 * size_, false); |
714 | 699 |
715 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 700 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
716 jitter_buffer_->ReleaseFrame(frame_out); | 701 jitter_buffer_->ReleaseFrame(frame_out); |
717 } | 702 } |
718 | 703 |
719 TEST_P(TestBasicJitterBuffer, FrameReordering2Frames2PacketsEach) { | 704 TEST_F(TestBasicJitterBuffer, FrameReordering2Frames2PacketsEach) { |
720 packet_->frameType = kVideoFrameDelta; | 705 packet_->frameType = kVideoFrameDelta; |
721 packet_->isFirstPacket = true; | 706 packet_->isFirstPacket = true; |
722 packet_->markerBit = false; | 707 packet_->markerBit = false; |
723 | 708 |
724 bool retransmitted = false; | 709 bool retransmitted = false; |
725 EXPECT_EQ(kIncomplete, | 710 EXPECT_EQ(kIncomplete, |
726 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 711 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
727 | 712 |
728 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 713 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
729 | 714 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
769 CheckOutFrame(frame_out, 2 * size_, false); | 754 CheckOutFrame(frame_out, 2 * size_, false); |
770 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 755 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
771 jitter_buffer_->ReleaseFrame(frame_out); | 756 jitter_buffer_->ReleaseFrame(frame_out); |
772 | 757 |
773 frame_out = DecodeCompleteFrame(); | 758 frame_out = DecodeCompleteFrame(); |
774 CheckOutFrame(frame_out, 2 * size_, false); | 759 CheckOutFrame(frame_out, 2 * size_, false); |
775 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 760 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
776 jitter_buffer_->ReleaseFrame(frame_out); | 761 jitter_buffer_->ReleaseFrame(frame_out); |
777 } | 762 } |
778 | 763 |
779 TEST_P(TestBasicJitterBuffer, TestReorderingWithPadding) { | 764 TEST_F(TestBasicJitterBuffer, TestReorderingWithPadding) { |
780 packet_->frameType = kVideoFrameKey; | 765 packet_->frameType = kVideoFrameKey; |
781 packet_->isFirstPacket = true; | 766 packet_->isFirstPacket = true; |
782 packet_->markerBit = true; | 767 packet_->markerBit = true; |
783 | 768 |
784 // Send in an initial good packet/frame (Frame A) to start things off. | 769 // Send in an initial good packet/frame (Frame A) to start things off. |
785 bool retransmitted = false; | 770 bool retransmitted = false; |
786 EXPECT_EQ(kCompleteSession, | 771 EXPECT_EQ(kCompleteSession, |
787 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 772 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
788 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 773 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
789 EXPECT_TRUE(frame_out != NULL); | 774 EXPECT_TRUE(frame_out != NULL); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
831 empty_packet.seqNum += 1; | 816 empty_packet.seqNum += 1; |
832 EXPECT_EQ(kOldPacket, | 817 EXPECT_EQ(kOldPacket, |
833 jitter_buffer_->InsertPacket(empty_packet, &retransmitted)); | 818 jitter_buffer_->InsertPacket(empty_packet, &retransmitted)); |
834 | 819 |
835 // But now Frame C should be ready! | 820 // But now Frame C should be ready! |
836 frame_out = DecodeCompleteFrame(); | 821 frame_out = DecodeCompleteFrame(); |
837 EXPECT_TRUE(frame_out != NULL); | 822 EXPECT_TRUE(frame_out != NULL); |
838 jitter_buffer_->ReleaseFrame(frame_out); | 823 jitter_buffer_->ReleaseFrame(frame_out); |
839 } | 824 } |
840 | 825 |
841 TEST_P(TestBasicJitterBuffer, DuplicatePackets) { | 826 TEST_F(TestBasicJitterBuffer, DuplicatePackets) { |
842 packet_->frameType = kVideoFrameKey; | 827 packet_->frameType = kVideoFrameKey; |
843 packet_->isFirstPacket = true; | 828 packet_->isFirstPacket = true; |
844 packet_->markerBit = false; | 829 packet_->markerBit = false; |
845 packet_->seqNum = seq_num_; | 830 packet_->seqNum = seq_num_; |
846 packet_->timestamp = timestamp_; | 831 packet_->timestamp = timestamp_; |
847 EXPECT_EQ(0, jitter_buffer_->num_packets()); | 832 EXPECT_EQ(0, jitter_buffer_->num_packets()); |
848 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); | 833 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); |
849 | 834 |
850 bool retransmitted = false; | 835 bool retransmitted = false; |
851 EXPECT_EQ(kIncomplete, | 836 EXPECT_EQ(kIncomplete, |
(...skipping 22 matching lines...) Expand all Loading... |
874 frame_out = DecodeCompleteFrame(); | 859 frame_out = DecodeCompleteFrame(); |
875 ASSERT_TRUE(frame_out != NULL); | 860 ASSERT_TRUE(frame_out != NULL); |
876 CheckOutFrame(frame_out, 2 * size_, false); | 861 CheckOutFrame(frame_out, 2 * size_, false); |
877 | 862 |
878 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 863 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
879 EXPECT_EQ(3, jitter_buffer_->num_packets()); | 864 EXPECT_EQ(3, jitter_buffer_->num_packets()); |
880 EXPECT_EQ(1, jitter_buffer_->num_duplicated_packets()); | 865 EXPECT_EQ(1, jitter_buffer_->num_duplicated_packets()); |
881 jitter_buffer_->ReleaseFrame(frame_out); | 866 jitter_buffer_->ReleaseFrame(frame_out); |
882 } | 867 } |
883 | 868 |
884 TEST_P(TestBasicJitterBuffer, DuplicatePreviousDeltaFramePacket) { | 869 TEST_F(TestBasicJitterBuffer, DuplicatePreviousDeltaFramePacket) { |
885 packet_->frameType = kVideoFrameKey; | 870 packet_->frameType = kVideoFrameKey; |
886 packet_->isFirstPacket = true; | 871 packet_->isFirstPacket = true; |
887 packet_->markerBit = true; | 872 packet_->markerBit = true; |
888 packet_->seqNum = seq_num_; | 873 packet_->seqNum = seq_num_; |
889 packet_->timestamp = timestamp_; | 874 packet_->timestamp = timestamp_; |
890 jitter_buffer_->SetDecodeErrorMode(kNoErrors); | 875 jitter_buffer_->SetDecodeErrorMode(kNoErrors); |
891 EXPECT_EQ(0, jitter_buffer_->num_packets()); | 876 EXPECT_EQ(0, jitter_buffer_->num_packets()); |
892 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); | 877 EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets()); |
893 | 878 |
894 bool retransmitted = false; | 879 bool retransmitted = false; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
926 // Should be able to decode 3 delta frames, key frame already decoded. | 911 // Should be able to decode 3 delta frames, key frame already decoded. |
927 for (size_t i = 0; i < 3; ++i) { | 912 for (size_t i = 0; i < 3; ++i) { |
928 frame_out = DecodeCompleteFrame(); | 913 frame_out = DecodeCompleteFrame(); |
929 ASSERT_TRUE(frame_out != NULL); | 914 ASSERT_TRUE(frame_out != NULL); |
930 CheckOutFrame(frame_out, size_, false); | 915 CheckOutFrame(frame_out, size_, false); |
931 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 916 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
932 jitter_buffer_->ReleaseFrame(frame_out); | 917 jitter_buffer_->ReleaseFrame(frame_out); |
933 } | 918 } |
934 } | 919 } |
935 | 920 |
936 TEST_P(TestBasicJitterBuffer, TestSkipForwardVp9) { | 921 TEST_F(TestBasicJitterBuffer, TestSkipForwardVp9) { |
937 // Verify that JB skips forward to next base layer frame. | 922 // Verify that JB skips forward to next base layer frame. |
938 // ------------------------------------------------- | 923 // ------------------------------------------------- |
939 // | 65485 | 65486 | 65487 | 65488 | 65489 | ... | 924 // | 65485 | 65486 | 65487 | 65488 | 65489 | ... |
940 // | pid:5 | pid:6 | pid:7 | pid:8 | pid:9 | ... | 925 // | pid:5 | pid:6 | pid:7 | pid:8 | pid:9 | ... |
941 // | tid:0 | tid:2 | tid:1 | tid:2 | tid:0 | ... | 926 // | tid:0 | tid:2 | tid:1 | tid:2 | tid:0 | ... |
942 // | ss | x | x | x | | | 927 // | ss | x | x | x | | |
943 // ------------------------------------------------- | 928 // ------------------------------------------------- |
944 // |<----------tl0idx:200--------->|<---tl0idx:201--- | 929 // |<----------tl0idx:200--------->|<---tl0idx:201--- |
945 | 930 |
946 bool re = false; | 931 bool re = false; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
979 EXPECT_EQ(1000U, frame_out->TimeStamp()); | 964 EXPECT_EQ(1000U, frame_out->TimeStamp()); |
980 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 965 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
981 jitter_buffer_->ReleaseFrame(frame_out); | 966 jitter_buffer_->ReleaseFrame(frame_out); |
982 | 967 |
983 frame_out = DecodeCompleteFrame(); | 968 frame_out = DecodeCompleteFrame(); |
984 EXPECT_EQ(13000U, frame_out->TimeStamp()); | 969 EXPECT_EQ(13000U, frame_out->TimeStamp()); |
985 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 970 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
986 jitter_buffer_->ReleaseFrame(frame_out); | 971 jitter_buffer_->ReleaseFrame(frame_out); |
987 } | 972 } |
988 | 973 |
989 TEST_P(TestBasicJitterBuffer, ReorderedVp9SsData_3TlLayers) { | 974 TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData_3TlLayers) { |
990 // Verify that frames are updated with SS data when SS packet is reordered. | 975 // Verify that frames are updated with SS data when SS packet is reordered. |
991 // -------------------------------- | 976 // -------------------------------- |
992 // | 65486 | 65487 | 65485 |... | 977 // | 65486 | 65487 | 65485 |... |
993 // | pid:6 | pid:7 | pid:5 |... | 978 // | pid:6 | pid:7 | pid:5 |... |
994 // | tid:2 | tid:1 | tid:0 |... | 979 // | tid:2 | tid:1 | tid:0 |... |
995 // | | | ss | | 980 // | | | ss | |
996 // -------------------------------- | 981 // -------------------------------- |
997 // |<--------tl0idx:200--------->| | 982 // |<--------tl0idx:200--------->| |
998 | 983 |
999 bool re = false; | 984 bool re = false; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1053 jitter_buffer_->ReleaseFrame(frame_out); | 1038 jitter_buffer_->ReleaseFrame(frame_out); |
1054 | 1039 |
1055 frame_out = DecodeCompleteFrame(); | 1040 frame_out = DecodeCompleteFrame(); |
1056 EXPECT_EQ(9000U, frame_out->TimeStamp()); | 1041 EXPECT_EQ(9000U, frame_out->TimeStamp()); |
1057 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 1042 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
1058 EXPECT_EQ(1, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); | 1043 EXPECT_EQ(1, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); |
1059 EXPECT_TRUE(frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); | 1044 EXPECT_TRUE(frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); |
1060 jitter_buffer_->ReleaseFrame(frame_out); | 1045 jitter_buffer_->ReleaseFrame(frame_out); |
1061 } | 1046 } |
1062 | 1047 |
1063 TEST_P(TestBasicJitterBuffer, ReorderedVp9SsData_2Tl2SLayers) { | 1048 TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData_2Tl2SLayers) { |
1064 // Verify that frames are updated with SS data when SS packet is reordered. | 1049 // Verify that frames are updated with SS data when SS packet is reordered. |
1065 // ----------------------------------------- | 1050 // ----------------------------------------- |
1066 // | 65486 | 65487 | 65485 | 65484 |... | 1051 // | 65486 | 65487 | 65485 | 65484 |... |
1067 // | pid:6 | pid:6 | pid:5 | pid:5 |... | 1052 // | pid:6 | pid:6 | pid:5 | pid:5 |... |
1068 // | tid:1 | tid:1 | tid:0 | tid:0 |... | 1053 // | tid:1 | tid:1 | tid:0 | tid:0 |... |
1069 // | sid:0 | sid:1 | sid:1 | sid:0 |... | 1054 // | sid:0 | sid:1 | sid:1 | sid:0 |... |
1070 // | t:6000 | t:6000 | t:3000 | t:3000 | | 1055 // | t:6000 | t:6000 | t:3000 | t:3000 | |
1071 // | | | | ss | | 1056 // | | | | ss | |
1072 // ----------------------------------------- | 1057 // ----------------------------------------- |
1073 // |<-----------tl0idx:200------------>| | 1058 // |<-----------tl0idx:200------------>| |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1137 jitter_buffer_->ReleaseFrame(frame_out); | 1122 jitter_buffer_->ReleaseFrame(frame_out); |
1138 | 1123 |
1139 frame_out = DecodeCompleteFrame(); | 1124 frame_out = DecodeCompleteFrame(); |
1140 EXPECT_EQ(6000U, frame_out->TimeStamp()); | 1125 EXPECT_EQ(6000U, frame_out->TimeStamp()); |
1141 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 1126 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
1142 EXPECT_EQ(1, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); | 1127 EXPECT_EQ(1, frame_out->CodecSpecific()->codecSpecific.VP9.temporal_idx); |
1143 EXPECT_TRUE(frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); | 1128 EXPECT_TRUE(frame_out->CodecSpecific()->codecSpecific.VP9.temporal_up_switch); |
1144 jitter_buffer_->ReleaseFrame(frame_out); | 1129 jitter_buffer_->ReleaseFrame(frame_out); |
1145 } | 1130 } |
1146 | 1131 |
1147 TEST_P(TestBasicJitterBuffer, H264InsertStartCode) { | 1132 TEST_F(TestBasicJitterBuffer, H264InsertStartCode) { |
1148 packet_->frameType = kVideoFrameKey; | 1133 packet_->frameType = kVideoFrameKey; |
1149 packet_->isFirstPacket = true; | 1134 packet_->isFirstPacket = true; |
1150 packet_->markerBit = false; | 1135 packet_->markerBit = false; |
1151 packet_->seqNum = seq_num_; | 1136 packet_->seqNum = seq_num_; |
1152 packet_->timestamp = timestamp_; | 1137 packet_->timestamp = timestamp_; |
1153 packet_->insertStartCode = true; | 1138 packet_->insertStartCode = true; |
1154 | 1139 |
1155 bool retransmitted = false; | 1140 bool retransmitted = false; |
1156 EXPECT_EQ(kIncomplete, | 1141 EXPECT_EQ(kIncomplete, |
1157 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1142 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
(...skipping 11 matching lines...) Expand all Loading... |
1169 EXPECT_EQ(kCompleteSession, | 1154 EXPECT_EQ(kCompleteSession, |
1170 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1155 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1171 | 1156 |
1172 frame_out = DecodeCompleteFrame(); | 1157 frame_out = DecodeCompleteFrame(); |
1173 CheckOutFrame(frame_out, size_ * 2 + 4 * 2, true); | 1158 CheckOutFrame(frame_out, size_ * 2 + 4 * 2, true); |
1174 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1159 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
1175 jitter_buffer_->ReleaseFrame(frame_out); | 1160 jitter_buffer_->ReleaseFrame(frame_out); |
1176 } | 1161 } |
1177 | 1162 |
1178 // Test threshold conditions of decodable state. | 1163 // Test threshold conditions of decodable state. |
1179 TEST_P(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsThresholdCheck) { | 1164 TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsThresholdCheck) { |
1180 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors); | 1165 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors); |
1181 // Always start with a key frame. Use 10 packets to test Decodable State | 1166 // Always start with a key frame. Use 10 packets to test Decodable State |
1182 // boundaries. | 1167 // boundaries. |
1183 packet_->frameType = kVideoFrameKey; | 1168 packet_->frameType = kVideoFrameKey; |
1184 packet_->isFirstPacket = true; | 1169 packet_->isFirstPacket = true; |
1185 packet_->markerBit = false; | 1170 packet_->markerBit = false; |
1186 packet_->seqNum = seq_num_; | 1171 packet_->seqNum = seq_num_; |
1187 packet_->timestamp = timestamp_; | 1172 packet_->timestamp = timestamp_; |
1188 | 1173 |
1189 bool retransmitted = false; | 1174 bool retransmitted = false; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1255 CheckOutFrame(frame_out, 9 * size_, false); | 1240 CheckOutFrame(frame_out, 9 * size_, false); |
1256 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 1241 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
1257 jitter_buffer_->ReleaseFrame(frame_out); | 1242 jitter_buffer_->ReleaseFrame(frame_out); |
1258 | 1243 |
1259 packet_->markerBit = true; | 1244 packet_->markerBit = true; |
1260 packet_->seqNum++; | 1245 packet_->seqNum++; |
1261 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1246 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1262 } | 1247 } |
1263 | 1248 |
1264 // Make sure first packet is present before a frame can be decoded. | 1249 // Make sure first packet is present before a frame can be decoded. |
1265 TEST_P(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsIncompleteKey) { | 1250 TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsIncompleteKey) { |
1266 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors); | 1251 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors); |
1267 // Always start with a key frame. | 1252 // Always start with a key frame. |
1268 packet_->frameType = kVideoFrameKey; | 1253 packet_->frameType = kVideoFrameKey; |
1269 packet_->isFirstPacket = true; | 1254 packet_->isFirstPacket = true; |
1270 packet_->markerBit = true; | 1255 packet_->markerBit = true; |
1271 packet_->seqNum = seq_num_; | 1256 packet_->seqNum = seq_num_; |
1272 packet_->timestamp = timestamp_; | 1257 packet_->timestamp = timestamp_; |
1273 | 1258 |
1274 bool retransmitted = false; | 1259 bool retransmitted = false; |
1275 EXPECT_EQ(kCompleteSession, | 1260 EXPECT_EQ(kCompleteSession, |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1319 packet_->seqNum++; | 1304 packet_->seqNum++; |
1320 EXPECT_EQ(kCompleteSession, | 1305 EXPECT_EQ(kCompleteSession, |
1321 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1306 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1322 frame_out = DecodeCompleteFrame(); | 1307 frame_out = DecodeCompleteFrame(); |
1323 CheckOutFrame(frame_out, 6 * size_, false); | 1308 CheckOutFrame(frame_out, 6 * size_, false); |
1324 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1309 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
1325 jitter_buffer_->ReleaseFrame(frame_out); | 1310 jitter_buffer_->ReleaseFrame(frame_out); |
1326 } | 1311 } |
1327 | 1312 |
1328 // Make sure first packet is present before a frame can be decoded. | 1313 // Make sure first packet is present before a frame can be decoded. |
1329 TEST_P(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsMissingFirstPacket) { | 1314 TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsMissingFirstPacket) { |
1330 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors); | 1315 jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors); |
1331 // Always start with a key frame. | 1316 // Always start with a key frame. |
1332 packet_->frameType = kVideoFrameKey; | 1317 packet_->frameType = kVideoFrameKey; |
1333 packet_->isFirstPacket = true; | 1318 packet_->isFirstPacket = true; |
1334 packet_->markerBit = true; | 1319 packet_->markerBit = true; |
1335 packet_->seqNum = seq_num_; | 1320 packet_->seqNum = seq_num_; |
1336 packet_->timestamp = timestamp_; | 1321 packet_->timestamp = timestamp_; |
1337 | 1322 |
1338 bool retransmitted = false; | 1323 bool retransmitted = false; |
1339 EXPECT_EQ(kCompleteSession, | 1324 EXPECT_EQ(kCompleteSession, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1381 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1366 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1382 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); | 1367 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1383 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); | 1368 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp)); |
1384 | 1369 |
1385 frame_out = DecodeIncompleteFrame(); | 1370 frame_out = DecodeIncompleteFrame(); |
1386 CheckOutFrame(frame_out, 7 * size_, false); | 1371 CheckOutFrame(frame_out, 7 * size_, false); |
1387 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 1372 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
1388 jitter_buffer_->ReleaseFrame(frame_out); | 1373 jitter_buffer_->ReleaseFrame(frame_out); |
1389 } | 1374 } |
1390 | 1375 |
1391 TEST_P(TestBasicJitterBuffer, DiscontinuousStreamWhenDecodingWithErrors) { | 1376 TEST_F(TestBasicJitterBuffer, DiscontinuousStreamWhenDecodingWithErrors) { |
1392 // Will use one packet per frame. | 1377 // Will use one packet per frame. |
1393 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 1378 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
1394 packet_->frameType = kVideoFrameKey; | 1379 packet_->frameType = kVideoFrameKey; |
1395 packet_->isFirstPacket = true; | 1380 packet_->isFirstPacket = true; |
1396 packet_->markerBit = true; | 1381 packet_->markerBit = true; |
1397 packet_->seqNum = seq_num_; | 1382 packet_->seqNum = seq_num_; |
1398 packet_->timestamp = timestamp_; | 1383 packet_->timestamp = timestamp_; |
1399 bool retransmitted = false; | 1384 bool retransmitted = false; |
1400 EXPECT_EQ(kCompleteSession, | 1385 EXPECT_EQ(kCompleteSession, |
1401 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1386 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
(...skipping 23 matching lines...) Expand all Loading... |
1425 packet_->markerBit = false; | 1410 packet_->markerBit = false; |
1426 packet_->seqNum = seq_num_; | 1411 packet_->seqNum = seq_num_; |
1427 packet_->timestamp = timestamp_; | 1412 packet_->timestamp = timestamp_; |
1428 EXPECT_EQ(kDecodableSession, | 1413 EXPECT_EQ(kDecodableSession, |
1429 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1414 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1430 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); | 1415 EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr); |
1431 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(&next_timestamp)); | 1416 EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(&next_timestamp)); |
1432 EXPECT_EQ(packet_->timestamp - 33 * 90, next_timestamp); | 1417 EXPECT_EQ(packet_->timestamp - 33 * 90, next_timestamp); |
1433 } | 1418 } |
1434 | 1419 |
1435 TEST_P(TestBasicJitterBuffer, PacketLoss) { | 1420 TEST_F(TestBasicJitterBuffer, PacketLoss) { |
1436 // Verify missing packets statistics and not decodable packets statistics. | 1421 // Verify missing packets statistics and not decodable packets statistics. |
1437 // Insert 10 frames consisting of 4 packets and remove one from all of them. | 1422 // Insert 10 frames consisting of 4 packets and remove one from all of them. |
1438 // The last packet is an empty (non-media) packet. | 1423 // The last packet is an empty (non-media) packet. |
1439 | 1424 |
1440 // Select a start seqNum which triggers a difficult wrap situation | 1425 // Select a start seqNum which triggers a difficult wrap situation |
1441 // The JB will only output (incomplete)frames if the next one has started | 1426 // The JB will only output (incomplete)frames if the next one has started |
1442 // to arrive. Start by inserting one frame (key). | 1427 // to arrive. Start by inserting one frame (key). |
1443 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 1428 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
1444 seq_num_ = 0xffff - 4; | 1429 seq_num_ = 0xffff - 4; |
1445 seq_num_++; | 1430 seq_num_++; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1526 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1511 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1527 | 1512 |
1528 EXPECT_EQ(3, jitter_buffer_->num_discarded_packets()); | 1513 EXPECT_EQ(3, jitter_buffer_->num_discarded_packets()); |
1529 | 1514 |
1530 jitter_buffer_->Flush(); | 1515 jitter_buffer_->Flush(); |
1531 | 1516 |
1532 // This statistic shouldn't be reset by a flush. | 1517 // This statistic shouldn't be reset by a flush. |
1533 EXPECT_EQ(3, jitter_buffer_->num_discarded_packets()); | 1518 EXPECT_EQ(3, jitter_buffer_->num_discarded_packets()); |
1534 } | 1519 } |
1535 | 1520 |
1536 TEST_P(TestBasicJitterBuffer, DeltaFrame100PacketsWithSeqNumWrap) { | 1521 TEST_F(TestBasicJitterBuffer, DeltaFrame100PacketsWithSeqNumWrap) { |
1537 seq_num_ = 0xfff0; | 1522 seq_num_ = 0xfff0; |
1538 packet_->frameType = kVideoFrameKey; | 1523 packet_->frameType = kVideoFrameKey; |
1539 packet_->isFirstPacket = true; | 1524 packet_->isFirstPacket = true; |
1540 packet_->markerBit = false; | 1525 packet_->markerBit = false; |
1541 packet_->seqNum = seq_num_; | 1526 packet_->seqNum = seq_num_; |
1542 packet_->timestamp = timestamp_; | 1527 packet_->timestamp = timestamp_; |
1543 | 1528 |
1544 bool retransmitted = false; | 1529 bool retransmitted = false; |
1545 EXPECT_EQ(kIncomplete, | 1530 EXPECT_EQ(kIncomplete, |
1546 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1531 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
(...skipping 28 matching lines...) Expand all Loading... |
1575 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1560 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1576 | 1561 |
1577 frame_out = DecodeCompleteFrame(); | 1562 frame_out = DecodeCompleteFrame(); |
1578 | 1563 |
1579 CheckOutFrame(frame_out, 100 * size_, false); | 1564 CheckOutFrame(frame_out, 100 * size_, false); |
1580 | 1565 |
1581 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1566 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
1582 jitter_buffer_->ReleaseFrame(frame_out); | 1567 jitter_buffer_->ReleaseFrame(frame_out); |
1583 } | 1568 } |
1584 | 1569 |
1585 TEST_P(TestBasicJitterBuffer, PacketReorderingReverseWithNegSeqNumWrap) { | 1570 TEST_F(TestBasicJitterBuffer, PacketReorderingReverseWithNegSeqNumWrap) { |
1586 // Insert "first" packet last seqnum. | 1571 // Insert "first" packet last seqnum. |
1587 seq_num_ = 10; | 1572 seq_num_ = 10; |
1588 packet_->frameType = kVideoFrameKey; | 1573 packet_->frameType = kVideoFrameKey; |
1589 packet_->isFirstPacket = false; | 1574 packet_->isFirstPacket = false; |
1590 packet_->markerBit = true; | 1575 packet_->markerBit = true; |
1591 packet_->seqNum = seq_num_; | 1576 packet_->seqNum = seq_num_; |
1592 | 1577 |
1593 bool retransmitted = false; | 1578 bool retransmitted = false; |
1594 EXPECT_EQ(kIncomplete, | 1579 EXPECT_EQ(kIncomplete, |
1595 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1580 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
(...skipping 28 matching lines...) Expand all Loading... |
1624 | 1609 |
1625 EXPECT_EQ(kCompleteSession, | 1610 EXPECT_EQ(kCompleteSession, |
1626 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1611 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1627 | 1612 |
1628 frame_out = DecodeCompleteFrame(); | 1613 frame_out = DecodeCompleteFrame(); |
1629 CheckOutFrame(frame_out, 100 * size_, false); | 1614 CheckOutFrame(frame_out, 100 * size_, false); |
1630 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1615 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
1631 jitter_buffer_->ReleaseFrame(frame_out); | 1616 jitter_buffer_->ReleaseFrame(frame_out); |
1632 } | 1617 } |
1633 | 1618 |
1634 TEST_P(TestBasicJitterBuffer, TestInsertOldFrame) { | 1619 TEST_F(TestBasicJitterBuffer, TestInsertOldFrame) { |
1635 // ------- ------- | 1620 // ------- ------- |
1636 // | 2 | | 1 | | 1621 // | 2 | | 1 | |
1637 // ------- ------- | 1622 // ------- ------- |
1638 // t = 3000 t = 2000 | 1623 // t = 3000 t = 2000 |
1639 seq_num_ = 2; | 1624 seq_num_ = 2; |
1640 timestamp_ = 3000; | 1625 timestamp_ = 3000; |
1641 packet_->frameType = kVideoFrameKey; | 1626 packet_->frameType = kVideoFrameKey; |
1642 packet_->isFirstPacket = true; | 1627 packet_->isFirstPacket = true; |
1643 packet_->markerBit = true; | 1628 packet_->markerBit = true; |
1644 packet_->timestamp = timestamp_; | 1629 packet_->timestamp = timestamp_; |
(...skipping 13 matching lines...) Expand all Loading... |
1658 timestamp_ = 2000; | 1643 timestamp_ = 2000; |
1659 packet_->frameType = kVideoFrameDelta; | 1644 packet_->frameType = kVideoFrameDelta; |
1660 packet_->isFirstPacket = true; | 1645 packet_->isFirstPacket = true; |
1661 packet_->markerBit = true; | 1646 packet_->markerBit = true; |
1662 packet_->seqNum = seq_num_; | 1647 packet_->seqNum = seq_num_; |
1663 packet_->timestamp = timestamp_; | 1648 packet_->timestamp = timestamp_; |
1664 | 1649 |
1665 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1650 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1666 } | 1651 } |
1667 | 1652 |
1668 TEST_P(TestBasicJitterBuffer, TestInsertOldFrameWithSeqNumWrap) { | 1653 TEST_F(TestBasicJitterBuffer, TestInsertOldFrameWithSeqNumWrap) { |
1669 // ------- ------- | 1654 // ------- ------- |
1670 // | 2 | | 1 | | 1655 // | 2 | | 1 | |
1671 // ------- ------- | 1656 // ------- ------- |
1672 // t = 3000 t = 0xffffff00 | 1657 // t = 3000 t = 0xffffff00 |
1673 | 1658 |
1674 seq_num_ = 2; | 1659 seq_num_ = 2; |
1675 timestamp_ = 3000; | 1660 timestamp_ = 3000; |
1676 packet_->frameType = kVideoFrameKey; | 1661 packet_->frameType = kVideoFrameKey; |
1677 packet_->isFirstPacket = true; | 1662 packet_->isFirstPacket = true; |
1678 packet_->markerBit = true; | 1663 packet_->markerBit = true; |
(...skipping 18 matching lines...) Expand all Loading... |
1697 packet_->frameType = kVideoFrameDelta; | 1682 packet_->frameType = kVideoFrameDelta; |
1698 packet_->isFirstPacket = true; | 1683 packet_->isFirstPacket = true; |
1699 packet_->markerBit = true; | 1684 packet_->markerBit = true; |
1700 packet_->seqNum = seq_num_; | 1685 packet_->seqNum = seq_num_; |
1701 packet_->timestamp = timestamp_; | 1686 packet_->timestamp = timestamp_; |
1702 | 1687 |
1703 // This timestamp is old. | 1688 // This timestamp is old. |
1704 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1689 EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1705 } | 1690 } |
1706 | 1691 |
1707 TEST_P(TestBasicJitterBuffer, TimestampWrap) { | 1692 TEST_F(TestBasicJitterBuffer, TimestampWrap) { |
1708 // --------------- --------------- | 1693 // --------------- --------------- |
1709 // | 1 | 2 | | 3 | 4 | | 1694 // | 1 | 2 | | 3 | 4 | |
1710 // --------------- --------------- | 1695 // --------------- --------------- |
1711 // t = 0xffffff00 t = 33*90 | 1696 // t = 0xffffff00 t = 33*90 |
1712 | 1697 |
1713 timestamp_ = 0xffffff00; | 1698 timestamp_ = 0xffffff00; |
1714 packet_->frameType = kVideoFrameKey; | 1699 packet_->frameType = kVideoFrameKey; |
1715 packet_->isFirstPacket = true; | 1700 packet_->isFirstPacket = true; |
1716 packet_->markerBit = false; | 1701 packet_->markerBit = false; |
1717 packet_->seqNum = seq_num_; | 1702 packet_->seqNum = seq_num_; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1757 | 1742 |
1758 EXPECT_EQ(kCompleteSession, | 1743 EXPECT_EQ(kCompleteSession, |
1759 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1744 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1760 | 1745 |
1761 frame_out = DecodeCompleteFrame(); | 1746 frame_out = DecodeCompleteFrame(); |
1762 CheckOutFrame(frame_out, 2 * size_, false); | 1747 CheckOutFrame(frame_out, 2 * size_, false); |
1763 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); | 1748 EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType()); |
1764 jitter_buffer_->ReleaseFrame(frame_out); | 1749 jitter_buffer_->ReleaseFrame(frame_out); |
1765 } | 1750 } |
1766 | 1751 |
1767 TEST_P(TestBasicJitterBuffer, 2FrameWithTimestampWrap) { | 1752 TEST_F(TestBasicJitterBuffer, 2FrameWithTimestampWrap) { |
1768 // ------- ------- | 1753 // ------- ------- |
1769 // | 1 | | 2 | | 1754 // | 1 | | 2 | |
1770 // ------- ------- | 1755 // ------- ------- |
1771 // t = 0xffffff00 t = 2700 | 1756 // t = 0xffffff00 t = 2700 |
1772 | 1757 |
1773 timestamp_ = 0xffffff00; | 1758 timestamp_ = 0xffffff00; |
1774 packet_->frameType = kVideoFrameKey; | 1759 packet_->frameType = kVideoFrameKey; |
1775 packet_->isFirstPacket = true; | 1760 packet_->isFirstPacket = true; |
1776 packet_->markerBit = true; | 1761 packet_->markerBit = true; |
1777 packet_->timestamp = timestamp_; | 1762 packet_->timestamp = timestamp_; |
(...skipping 21 matching lines...) Expand all Loading... |
1799 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1784 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
1800 jitter_buffer_->ReleaseFrame(frame_out); | 1785 jitter_buffer_->ReleaseFrame(frame_out); |
1801 | 1786 |
1802 VCMEncodedFrame* frame_out2 = DecodeCompleteFrame(); | 1787 VCMEncodedFrame* frame_out2 = DecodeCompleteFrame(); |
1803 EXPECT_EQ(2700u, frame_out2->TimeStamp()); | 1788 EXPECT_EQ(2700u, frame_out2->TimeStamp()); |
1804 CheckOutFrame(frame_out2, size_, false); | 1789 CheckOutFrame(frame_out2, size_, false); |
1805 EXPECT_EQ(kVideoFrameDelta, frame_out2->FrameType()); | 1790 EXPECT_EQ(kVideoFrameDelta, frame_out2->FrameType()); |
1806 jitter_buffer_->ReleaseFrame(frame_out2); | 1791 jitter_buffer_->ReleaseFrame(frame_out2); |
1807 } | 1792 } |
1808 | 1793 |
1809 TEST_P(TestBasicJitterBuffer, Insert2FramesReOrderedWithTimestampWrap) { | 1794 TEST_F(TestBasicJitterBuffer, Insert2FramesReOrderedWithTimestampWrap) { |
1810 // ------- ------- | 1795 // ------- ------- |
1811 // | 2 | | 1 | | 1796 // | 2 | | 1 | |
1812 // ------- ------- | 1797 // ------- ------- |
1813 // t = 2700 t = 0xffffff00 | 1798 // t = 2700 t = 0xffffff00 |
1814 | 1799 |
1815 seq_num_ = 2; | 1800 seq_num_ = 2; |
1816 timestamp_ = 2700; | 1801 timestamp_ = 2700; |
1817 packet_->frameType = kVideoFrameDelta; | 1802 packet_->frameType = kVideoFrameDelta; |
1818 packet_->isFirstPacket = true; | 1803 packet_->isFirstPacket = true; |
1819 packet_->markerBit = true; | 1804 packet_->markerBit = true; |
(...skipping 22 matching lines...) Expand all Loading... |
1842 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1827 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
1843 jitter_buffer_->ReleaseFrame(frame_out); | 1828 jitter_buffer_->ReleaseFrame(frame_out); |
1844 | 1829 |
1845 VCMEncodedFrame* frame_out2 = DecodeCompleteFrame(); | 1830 VCMEncodedFrame* frame_out2 = DecodeCompleteFrame(); |
1846 EXPECT_EQ(2700u, frame_out2->TimeStamp()); | 1831 EXPECT_EQ(2700u, frame_out2->TimeStamp()); |
1847 CheckOutFrame(frame_out2, size_, false); | 1832 CheckOutFrame(frame_out2, size_, false); |
1848 EXPECT_EQ(kVideoFrameDelta, frame_out2->FrameType()); | 1833 EXPECT_EQ(kVideoFrameDelta, frame_out2->FrameType()); |
1849 jitter_buffer_->ReleaseFrame(frame_out2); | 1834 jitter_buffer_->ReleaseFrame(frame_out2); |
1850 } | 1835 } |
1851 | 1836 |
1852 TEST_P(TestBasicJitterBuffer, DeltaFrameWithMoreThanMaxNumberOfPackets) { | 1837 TEST_F(TestBasicJitterBuffer, DeltaFrameWithMoreThanMaxNumberOfPackets) { |
1853 int loop = 0; | 1838 int loop = 0; |
1854 bool firstPacket = true; | 1839 bool firstPacket = true; |
1855 bool retransmitted = false; | 1840 bool retransmitted = false; |
1856 // Insert kMaxPacketsInJitterBuffer into frame. | 1841 // Insert kMaxPacketsInJitterBuffer into frame. |
1857 do { | 1842 do { |
1858 seq_num_++; | 1843 seq_num_++; |
1859 packet_->isFirstPacket = false; | 1844 packet_->isFirstPacket = false; |
1860 packet_->markerBit = false; | 1845 packet_->markerBit = false; |
1861 packet_->seqNum = seq_num_; | 1846 packet_->seqNum = seq_num_; |
1862 | 1847 |
(...skipping 14 matching lines...) Expand all Loading... |
1877 seq_num_++; | 1862 seq_num_++; |
1878 packet_->isFirstPacket = false; | 1863 packet_->isFirstPacket = false; |
1879 packet_->markerBit = true; | 1864 packet_->markerBit = true; |
1880 packet_->seqNum = seq_num_; | 1865 packet_->seqNum = seq_num_; |
1881 | 1866 |
1882 // Insert the packet -> frame recycled. | 1867 // Insert the packet -> frame recycled. |
1883 EXPECT_EQ(kSizeError, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1868 EXPECT_EQ(kSizeError, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1884 EXPECT_TRUE(NULL == DecodeCompleteFrame()); | 1869 EXPECT_TRUE(NULL == DecodeCompleteFrame()); |
1885 } | 1870 } |
1886 | 1871 |
1887 TEST_P(TestBasicJitterBuffer, ExceedNumOfFrameWithSeqNumWrap) { | 1872 TEST_F(TestBasicJitterBuffer, ExceedNumOfFrameWithSeqNumWrap) { |
1888 // TEST fill JB with more than max number of frame (50 delta frames + | 1873 // TEST fill JB with more than max number of frame (50 delta frames + |
1889 // 51 key frames) with wrap in seq_num_ | 1874 // 51 key frames) with wrap in seq_num_ |
1890 // | 1875 // |
1891 // -------------------------------------------------------------- | 1876 // -------------------------------------------------------------- |
1892 // | 65485 | 65486 | 65487 | .... | 65535 | 0 | 1 | 2 | .....| 50 | | 1877 // | 65485 | 65486 | 65487 | .... | 65535 | 0 | 1 | 2 | .....| 50 | |
1893 // -------------------------------------------------------------- | 1878 // -------------------------------------------------------------- |
1894 // |<-----------delta frames------------->|<------key frames----->| | 1879 // |<-----------delta frames------------->|<------key frames----->| |
1895 | 1880 |
1896 // Make sure the jitter doesn't request a keyframe after too much non- | 1881 // Make sure the jitter doesn't request a keyframe after too much non- |
1897 // decodable frames. | 1882 // decodable frames. |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1937 EXPECT_EQ(kFlushIndicator, | 1922 EXPECT_EQ(kFlushIndicator, |
1938 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1923 jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1939 | 1924 |
1940 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); | 1925 VCMEncodedFrame* frame_out = DecodeCompleteFrame(); |
1941 EXPECT_EQ(first_key_frame_timestamp, frame_out->TimeStamp()); | 1926 EXPECT_EQ(first_key_frame_timestamp, frame_out->TimeStamp()); |
1942 CheckOutFrame(frame_out, size_, false); | 1927 CheckOutFrame(frame_out, size_, false); |
1943 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); | 1928 EXPECT_EQ(kVideoFrameKey, frame_out->FrameType()); |
1944 jitter_buffer_->ReleaseFrame(frame_out); | 1929 jitter_buffer_->ReleaseFrame(frame_out); |
1945 } | 1930 } |
1946 | 1931 |
1947 TEST_P(TestBasicJitterBuffer, EmptyLastFrame) { | 1932 TEST_F(TestBasicJitterBuffer, EmptyLastFrame) { |
1948 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 1933 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
1949 seq_num_ = 3; | 1934 seq_num_ = 3; |
1950 // Insert one empty packet per frame, should never return the last timestamp | 1935 // Insert one empty packet per frame, should never return the last timestamp |
1951 // inserted. Only return empty frames in the presence of subsequent frames. | 1936 // inserted. Only return empty frames in the presence of subsequent frames. |
1952 int maxSize = 1000; | 1937 int maxSize = 1000; |
1953 bool retransmitted = false; | 1938 bool retransmitted = false; |
1954 for (int i = 0; i < maxSize + 10; i++) { | 1939 for (int i = 0; i < maxSize + 10; i++) { |
1955 timestamp_ += 33 * 90; | 1940 timestamp_ += 33 * 90; |
1956 seq_num_++; | 1941 seq_num_++; |
1957 packet_->isFirstPacket = false; | 1942 packet_->isFirstPacket = false; |
1958 packet_->markerBit = false; | 1943 packet_->markerBit = false; |
1959 packet_->seqNum = seq_num_; | 1944 packet_->seqNum = seq_num_; |
1960 packet_->timestamp = timestamp_; | 1945 packet_->timestamp = timestamp_; |
1961 packet_->frameType = kEmptyFrame; | 1946 packet_->frameType = kEmptyFrame; |
1962 | 1947 |
1963 EXPECT_EQ(kNoError, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); | 1948 EXPECT_EQ(kNoError, jitter_buffer_->InsertPacket(*packet_, &retransmitted)); |
1964 VCMEncodedFrame* testFrame = DecodeIncompleteFrame(); | 1949 VCMEncodedFrame* testFrame = DecodeIncompleteFrame(); |
1965 // Timestamp should never be the last TS inserted. | 1950 // Timestamp should never be the last TS inserted. |
1966 if (testFrame != NULL) { | 1951 if (testFrame != NULL) { |
1967 EXPECT_TRUE(testFrame->TimeStamp() < timestamp_); | 1952 EXPECT_TRUE(testFrame->TimeStamp() < timestamp_); |
1968 jitter_buffer_->ReleaseFrame(testFrame); | 1953 jitter_buffer_->ReleaseFrame(testFrame); |
1969 } | 1954 } |
1970 } | 1955 } |
1971 } | 1956 } |
1972 | 1957 |
1973 TEST_P(TestBasicJitterBuffer, H264IncompleteNalu) { | 1958 TEST_F(TestBasicJitterBuffer, H264IncompleteNalu) { |
1974 jitter_buffer_->SetNackMode(kNoNack, -1, -1); | 1959 jitter_buffer_->SetNackMode(kNoNack, -1, -1); |
1975 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 1960 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
1976 ++seq_num_; | 1961 ++seq_num_; |
1977 timestamp_ += 33 * 90; | 1962 timestamp_ += 33 * 90; |
1978 int insertedLength = 0; | 1963 int insertedLength = 0; |
1979 packet_->seqNum = seq_num_; | 1964 packet_->seqNum = seq_num_; |
1980 packet_->timestamp = timestamp_; | 1965 packet_->timestamp = timestamp_; |
1981 packet_->frameType = kVideoFrameKey; | 1966 packet_->frameType = kVideoFrameKey; |
1982 packet_->isFirstPacket = true; | 1967 packet_->isFirstPacket = true; |
1983 packet_->completeNALU = kNaluStart; | 1968 packet_->completeNALU = kNaluStart; |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2146 emptypacket.markerBit = true; | 2131 emptypacket.markerBit = true; |
2147 EXPECT_EQ(kCompleteSession, | 2132 EXPECT_EQ(kCompleteSession, |
2148 jitter_buffer_->InsertPacket(emptypacket, &retransmitted)); | 2133 jitter_buffer_->InsertPacket(emptypacket, &retransmitted)); |
2149 | 2134 |
2150 frame_out = DecodeCompleteFrame(); | 2135 frame_out = DecodeCompleteFrame(); |
2151 // Only last NALU is complete | 2136 // Only last NALU is complete |
2152 CheckOutFrame(frame_out, packet_->sizeBytes, false); | 2137 CheckOutFrame(frame_out, packet_->sizeBytes, false); |
2153 jitter_buffer_->ReleaseFrame(frame_out); | 2138 jitter_buffer_->ReleaseFrame(frame_out); |
2154 } | 2139 } |
2155 | 2140 |
2156 TEST_P(TestBasicJitterBuffer, NextFrameWhenIncomplete) { | 2141 TEST_F(TestBasicJitterBuffer, NextFrameWhenIncomplete) { |
2157 // Test that a we cannot get incomplete frames from the JB if we haven't | 2142 // Test that a we cannot get incomplete frames from the JB if we haven't |
2158 // received the marker bit, unless we have received a packet from a later | 2143 // received the marker bit, unless we have received a packet from a later |
2159 // timestamp. | 2144 // timestamp. |
2160 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 2145 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
2161 // Start with a complete key frame - insert and decode. | 2146 // Start with a complete key frame - insert and decode. |
2162 packet_->frameType = kVideoFrameKey; | 2147 packet_->frameType = kVideoFrameKey; |
2163 packet_->isFirstPacket = true; | 2148 packet_->isFirstPacket = true; |
2164 packet_->markerBit = true; | 2149 packet_->markerBit = true; |
2165 bool retransmitted = false; | 2150 bool retransmitted = false; |
2166 | 2151 |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2323 stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0, | 2308 stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0, |
2324 clock_->TimeInMilliseconds()); | 2309 clock_->TimeInMilliseconds()); |
2325 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1)); | 2310 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1)); |
2326 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(1)); | 2311 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(1)); |
2327 EXPECT_FALSE(DecodeCompleteFrame()); | 2312 EXPECT_FALSE(DecodeCompleteFrame()); |
2328 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0)); | 2313 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0)); |
2329 EXPECT_TRUE(DecodeCompleteFrame()); | 2314 EXPECT_TRUE(DecodeCompleteFrame()); |
2330 EXPECT_TRUE(DecodeCompleteFrame()); | 2315 EXPECT_TRUE(DecodeCompleteFrame()); |
2331 } | 2316 } |
2332 | 2317 |
2333 TEST_P(TestJitterBufferNack, EmptyPackets) { | 2318 TEST_F(TestJitterBufferNack, EmptyPackets) { |
2334 // Make sure empty packets doesn't clog the jitter buffer. | 2319 // Make sure empty packets doesn't clog the jitter buffer. |
2335 jitter_buffer_->SetNackMode(kNack, media_optimization::kLowRttNackMs, -1); | 2320 jitter_buffer_->SetNackMode(kNack, media_optimization::kLowRttNackMs, -1); |
2336 EXPECT_GE(InsertFrames(kMaxNumberOfFrames, kEmptyFrame), kNoError); | 2321 EXPECT_GE(InsertFrames(kMaxNumberOfFrames, kEmptyFrame), kNoError); |
2337 InsertFrame(kVideoFrameKey); | 2322 InsertFrame(kVideoFrameKey); |
2338 EXPECT_TRUE(DecodeCompleteFrame()); | 2323 EXPECT_TRUE(DecodeCompleteFrame()); |
2339 } | 2324 } |
2340 | 2325 |
2341 TEST_P(TestJitterBufferNack, NackTooOldPackets) { | 2326 TEST_F(TestJitterBufferNack, NackTooOldPackets) { |
2342 // Insert a key frame and decode it. | 2327 // Insert a key frame and decode it. |
2343 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); | 2328 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); |
2344 EXPECT_TRUE(DecodeCompleteFrame()); | 2329 EXPECT_TRUE(DecodeCompleteFrame()); |
2345 | 2330 |
2346 // Drop one frame and insert |kNackHistoryLength| to trigger NACKing a too | 2331 // Drop one frame and insert |kNackHistoryLength| to trigger NACKing a too |
2347 // old packet. | 2332 // old packet. |
2348 DropFrame(1); | 2333 DropFrame(1); |
2349 // Insert a frame which should trigger a recycle until the next key frame. | 2334 // Insert a frame which should trigger a recycle until the next key frame. |
2350 EXPECT_EQ(kFlushIndicator, | 2335 EXPECT_EQ(kFlushIndicator, |
2351 InsertFrames(oldest_packet_to_nack_ + 1, kVideoFrameDelta)); | 2336 InsertFrames(oldest_packet_to_nack_ + 1, kVideoFrameDelta)); |
(...skipping 12 matching lines...) Expand all Loading... |
2364 EXPECT_FALSE(DecodeIncompleteFrame()); | 2349 EXPECT_FALSE(DecodeIncompleteFrame()); |
2365 | 2350 |
2366 // The next complete continuous frame isn't a key frame, but we're waiting | 2351 // The next complete continuous frame isn't a key frame, but we're waiting |
2367 // for one. | 2352 // for one. |
2368 EXPECT_FALSE(DecodeCompleteFrame()); | 2353 EXPECT_FALSE(DecodeCompleteFrame()); |
2369 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); | 2354 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); |
2370 // Skipping ahead to the key frame. | 2355 // Skipping ahead to the key frame. |
2371 EXPECT_TRUE(DecodeCompleteFrame()); | 2356 EXPECT_TRUE(DecodeCompleteFrame()); |
2372 } | 2357 } |
2373 | 2358 |
2374 TEST_P(TestJitterBufferNack, NackLargeJitterBuffer) { | 2359 TEST_F(TestJitterBufferNack, NackLargeJitterBuffer) { |
2375 // Insert a key frame and decode it. | 2360 // Insert a key frame and decode it. |
2376 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); | 2361 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); |
2377 EXPECT_TRUE(DecodeCompleteFrame()); | 2362 EXPECT_TRUE(DecodeCompleteFrame()); |
2378 | 2363 |
2379 // Insert a frame which should trigger a recycle until the next key frame. | 2364 // Insert a frame which should trigger a recycle until the next key frame. |
2380 EXPECT_GE(InsertFrames(oldest_packet_to_nack_, kVideoFrameDelta), kNoError); | 2365 EXPECT_GE(InsertFrames(oldest_packet_to_nack_, kVideoFrameDelta), kNoError); |
2381 | 2366 |
2382 bool request_key_frame = false; | 2367 bool request_key_frame = false; |
2383 std::vector<uint16_t> nack_list = | 2368 std::vector<uint16_t> nack_list = |
2384 jitter_buffer_->GetNackList(&request_key_frame); | 2369 jitter_buffer_->GetNackList(&request_key_frame); |
2385 // Verify that the jitter buffer does not request a key frame. | 2370 // Verify that the jitter buffer does not request a key frame. |
2386 EXPECT_FALSE(request_key_frame); | 2371 EXPECT_FALSE(request_key_frame); |
2387 // Verify that no packets are NACKed. | 2372 // Verify that no packets are NACKed. |
2388 EXPECT_EQ(0u, nack_list.size()); | 2373 EXPECT_EQ(0u, nack_list.size()); |
2389 // Verify that we can decode the next frame. | 2374 // Verify that we can decode the next frame. |
2390 EXPECT_TRUE(DecodeCompleteFrame()); | 2375 EXPECT_TRUE(DecodeCompleteFrame()); |
2391 } | 2376 } |
2392 | 2377 |
2393 TEST_P(TestJitterBufferNack, NackListFull) { | 2378 TEST_F(TestJitterBufferNack, NackListFull) { |
2394 // Insert a key frame and decode it. | 2379 // Insert a key frame and decode it. |
2395 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); | 2380 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); |
2396 EXPECT_TRUE(DecodeCompleteFrame()); | 2381 EXPECT_TRUE(DecodeCompleteFrame()); |
2397 | 2382 |
2398 // Generate and drop |kNackHistoryLength| packets to fill the NACK list. | 2383 // Generate and drop |kNackHistoryLength| packets to fill the NACK list. |
2399 DropFrame(max_nack_list_size_ + 1); | 2384 DropFrame(max_nack_list_size_ + 1); |
2400 // Insert a frame which should trigger a recycle until the next key frame. | 2385 // Insert a frame which should trigger a recycle until the next key frame. |
2401 EXPECT_EQ(kFlushIndicator, InsertFrame(kVideoFrameDelta)); | 2386 EXPECT_EQ(kFlushIndicator, InsertFrame(kVideoFrameDelta)); |
2402 EXPECT_FALSE(DecodeCompleteFrame()); | 2387 EXPECT_FALSE(DecodeCompleteFrame()); |
2403 | 2388 |
(...skipping 12 matching lines...) Expand all Loading... |
2416 EXPECT_TRUE(request_key_frame); | 2401 EXPECT_TRUE(request_key_frame); |
2417 // The next complete continuous frame isn't a key frame, but we're waiting | 2402 // The next complete continuous frame isn't a key frame, but we're waiting |
2418 // for one. | 2403 // for one. |
2419 EXPECT_FALSE(DecodeCompleteFrame()); | 2404 EXPECT_FALSE(DecodeCompleteFrame()); |
2420 EXPECT_FALSE(DecodeIncompleteFrame()); | 2405 EXPECT_FALSE(DecodeIncompleteFrame()); |
2421 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); | 2406 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); |
2422 // Skipping ahead to the key frame. | 2407 // Skipping ahead to the key frame. |
2423 EXPECT_TRUE(DecodeCompleteFrame()); | 2408 EXPECT_TRUE(DecodeCompleteFrame()); |
2424 } | 2409 } |
2425 | 2410 |
2426 TEST_P(TestJitterBufferNack, NoNackListReturnedBeforeFirstDecode) { | 2411 TEST_F(TestJitterBufferNack, NoNackListReturnedBeforeFirstDecode) { |
2427 DropFrame(10); | 2412 DropFrame(10); |
2428 // Insert a frame and try to generate a NACK list. Shouldn't get one. | 2413 // Insert a frame and try to generate a NACK list. Shouldn't get one. |
2429 EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError); | 2414 EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError); |
2430 bool request_key_frame = false; | 2415 bool request_key_frame = false; |
2431 std::vector<uint16_t> nack_list = | 2416 std::vector<uint16_t> nack_list = |
2432 jitter_buffer_->GetNackList(&request_key_frame); | 2417 jitter_buffer_->GetNackList(&request_key_frame); |
2433 // No list generated, and a key frame request is signaled. | 2418 // No list generated, and a key frame request is signaled. |
2434 EXPECT_EQ(0u, nack_list.size()); | 2419 EXPECT_EQ(0u, nack_list.size()); |
2435 EXPECT_TRUE(request_key_frame); | 2420 EXPECT_TRUE(request_key_frame); |
2436 } | 2421 } |
2437 | 2422 |
2438 TEST_P(TestJitterBufferNack, NackListBuiltBeforeFirstDecode) { | 2423 TEST_F(TestJitterBufferNack, NackListBuiltBeforeFirstDecode) { |
2439 stream_generator_->Init(0, clock_->TimeInMilliseconds()); | 2424 stream_generator_->Init(0, clock_->TimeInMilliseconds()); |
2440 InsertFrame(kVideoFrameKey); | 2425 InsertFrame(kVideoFrameKey); |
2441 stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0, | 2426 stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0, |
2442 clock_->TimeInMilliseconds()); | 2427 clock_->TimeInMilliseconds()); |
2443 stream_generator_->NextPacket(NULL); // Drop packet. | 2428 stream_generator_->NextPacket(NULL); // Drop packet. |
2444 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2429 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2445 EXPECT_TRUE(DecodeCompleteFrame()); | 2430 EXPECT_TRUE(DecodeCompleteFrame()); |
2446 bool extended = false; | 2431 bool extended = false; |
2447 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); | 2432 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); |
2448 if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled") | 2433 EXPECT_EQ(1u, nack_list.size()); |
2449 EXPECT_EQ(1u, nack_sent_.size()); | |
2450 else | |
2451 EXPECT_EQ(1u, nack_list.size()); | |
2452 } | 2434 } |
2453 | 2435 |
2454 TEST_P(TestJitterBufferNack, VerifyRetransmittedFlag) { | 2436 TEST_F(TestJitterBufferNack, VerifyRetransmittedFlag) { |
2455 stream_generator_->Init(0, clock_->TimeInMilliseconds()); | 2437 stream_generator_->Init(0, clock_->TimeInMilliseconds()); |
2456 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0, | 2438 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0, |
2457 clock_->TimeInMilliseconds()); | 2439 clock_->TimeInMilliseconds()); |
2458 VCMPacket packet; | 2440 VCMPacket packet; |
2459 stream_generator_->PopPacket(&packet, 0); | 2441 stream_generator_->PopPacket(&packet, 0); |
2460 bool retransmitted = false; | 2442 bool retransmitted = false; |
2461 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(packet, &retransmitted)); | 2443 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(packet, &retransmitted)); |
2462 EXPECT_FALSE(retransmitted); | 2444 EXPECT_FALSE(retransmitted); |
2463 // Drop second packet. | 2445 // Drop second packet. |
2464 stream_generator_->PopPacket(&packet, 1); | 2446 stream_generator_->PopPacket(&packet, 1); |
2465 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(packet, &retransmitted)); | 2447 EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(packet, &retransmitted)); |
2466 EXPECT_FALSE(retransmitted); | 2448 EXPECT_FALSE(retransmitted); |
2467 EXPECT_FALSE(DecodeCompleteFrame()); | 2449 EXPECT_FALSE(DecodeCompleteFrame()); |
2468 bool extended = false; | 2450 bool extended = false; |
2469 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); | 2451 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); |
2470 uint16_t seq_num; | 2452 uint16_t seq_num; |
2471 if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled") { | 2453 EXPECT_EQ(1u, nack_list.size()); |
2472 EXPECT_EQ(1u, nack_sent_.size()); | 2454 seq_num = nack_list[0]; |
2473 seq_num = nack_sent_[0]; | |
2474 } else { | |
2475 EXPECT_EQ(1u, nack_list.size()); | |
2476 seq_num = nack_list[0]; | |
2477 } | |
2478 stream_generator_->PopPacket(&packet, 0); | 2455 stream_generator_->PopPacket(&packet, 0); |
2479 EXPECT_EQ(packet.seqNum, seq_num); | 2456 EXPECT_EQ(packet.seqNum, seq_num); |
2480 EXPECT_EQ(kCompleteSession, | 2457 EXPECT_EQ(kCompleteSession, |
2481 jitter_buffer_->InsertPacket(packet, &retransmitted)); | 2458 jitter_buffer_->InsertPacket(packet, &retransmitted)); |
2482 EXPECT_TRUE(retransmitted); | 2459 EXPECT_TRUE(retransmitted); |
2483 EXPECT_TRUE(DecodeCompleteFrame()); | 2460 EXPECT_TRUE(DecodeCompleteFrame()); |
2484 } | 2461 } |
2485 | 2462 |
2486 TEST_P(TestJitterBufferNack, UseNackToRecoverFirstKeyFrame) { | 2463 TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrame) { |
2487 stream_generator_->Init(0, clock_->TimeInMilliseconds()); | 2464 stream_generator_->Init(0, clock_->TimeInMilliseconds()); |
2488 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0, | 2465 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0, |
2489 clock_->TimeInMilliseconds()); | 2466 clock_->TimeInMilliseconds()); |
2490 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2467 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2491 // Drop second packet. | 2468 // Drop second packet. |
2492 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1)); | 2469 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1)); |
2493 EXPECT_FALSE(DecodeCompleteFrame()); | 2470 EXPECT_FALSE(DecodeCompleteFrame()); |
2494 bool extended = false; | 2471 bool extended = false; |
2495 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); | 2472 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); |
2496 uint16_t seq_num; | 2473 uint16_t seq_num; |
2497 if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled") { | 2474 ASSERT_EQ(1u, nack_list.size()); |
2498 ASSERT_EQ(1u, nack_sent_.size()); | 2475 seq_num = nack_list[0]; |
2499 seq_num = nack_sent_[0]; | |
2500 } else { | |
2501 ASSERT_EQ(1u, nack_list.size()); | |
2502 seq_num = nack_list[0]; | |
2503 } | |
2504 VCMPacket packet; | 2476 VCMPacket packet; |
2505 stream_generator_->GetPacket(&packet, 0); | 2477 stream_generator_->GetPacket(&packet, 0); |
2506 EXPECT_EQ(packet.seqNum, seq_num); | 2478 EXPECT_EQ(packet.seqNum, seq_num); |
2507 } | 2479 } |
2508 | 2480 |
2509 TEST_P(TestJitterBufferNack, UseNackToRecoverFirstKeyFrameSecondInQueue) { | 2481 TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrameSecondInQueue) { |
2510 VCMPacket packet; | 2482 VCMPacket packet; |
2511 stream_generator_->Init(0, clock_->TimeInMilliseconds()); | 2483 stream_generator_->Init(0, clock_->TimeInMilliseconds()); |
2512 // First frame is delta. | 2484 // First frame is delta. |
2513 stream_generator_->GenerateFrame(kVideoFrameDelta, 3, 0, | 2485 stream_generator_->GenerateFrame(kVideoFrameDelta, 3, 0, |
2514 clock_->TimeInMilliseconds()); | 2486 clock_->TimeInMilliseconds()); |
2515 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2487 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2516 // Drop second packet in frame. | 2488 // Drop second packet in frame. |
2517 ASSERT_TRUE(stream_generator_->PopPacket(&packet, 0)); | 2489 ASSERT_TRUE(stream_generator_->PopPacket(&packet, 0)); |
2518 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2490 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2519 // Second frame is key. | 2491 // Second frame is key. |
2520 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0, | 2492 stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0, |
2521 clock_->TimeInMilliseconds() + 10); | 2493 clock_->TimeInMilliseconds() + 10); |
2522 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2494 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2523 // Drop second packet in frame. | 2495 // Drop second packet in frame. |
2524 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1)); | 2496 EXPECT_EQ(kIncomplete, InsertPacketAndPop(1)); |
2525 EXPECT_FALSE(DecodeCompleteFrame()); | 2497 EXPECT_FALSE(DecodeCompleteFrame()); |
2526 bool extended = false; | 2498 bool extended = false; |
2527 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); | 2499 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); |
2528 uint16_t seq_num; | 2500 uint16_t seq_num; |
2529 if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled") { | 2501 ASSERT_EQ(1u, nack_list.size()); |
2530 ASSERT_EQ(2u, nack_sent_.size()); | 2502 seq_num = nack_list[0]; |
2531 seq_num = nack_sent_[1]; | |
2532 } else { | |
2533 ASSERT_EQ(1u, nack_list.size()); | |
2534 seq_num = nack_list[0]; | |
2535 } | |
2536 stream_generator_->GetPacket(&packet, 0); | 2503 stream_generator_->GetPacket(&packet, 0); |
2537 EXPECT_EQ(packet.seqNum, seq_num); | 2504 EXPECT_EQ(packet.seqNum, seq_num); |
2538 } | 2505 } |
2539 | 2506 |
2540 TEST_P(TestJitterBufferNack, NormalOperation) { | 2507 TEST_F(TestJitterBufferNack, NormalOperation) { |
2541 EXPECT_EQ(kNack, jitter_buffer_->nack_mode()); | 2508 EXPECT_EQ(kNack, jitter_buffer_->nack_mode()); |
2542 jitter_buffer_->SetDecodeErrorMode(kWithErrors); | 2509 jitter_buffer_->SetDecodeErrorMode(kWithErrors); |
2543 | 2510 |
2544 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); | 2511 EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError); |
2545 EXPECT_TRUE(DecodeIncompleteFrame()); | 2512 EXPECT_TRUE(DecodeIncompleteFrame()); |
2546 | 2513 |
2547 // ---------------------------------------------------------------- | 2514 // ---------------------------------------------------------------- |
2548 // | 1 | 2 | .. | 8 | 9 | x | 11 | 12 | .. | 19 | x | 21 | .. | 100 | | 2515 // | 1 | 2 | .. | 8 | 9 | x | 11 | 12 | .. | 19 | x | 21 | .. | 100 | |
2549 // ---------------------------------------------------------------- | 2516 // ---------------------------------------------------------------- |
2550 stream_generator_->GenerateFrame(kVideoFrameKey, 100, 0, | 2517 stream_generator_->GenerateFrame(kVideoFrameKey, 100, 0, |
(...skipping 12 matching lines...) Expand all Loading... |
2563 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0)); | 2530 EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0)); |
2564 EXPECT_EQ(0, stream_generator_->PacketsRemaining()); | 2531 EXPECT_EQ(0, stream_generator_->PacketsRemaining()); |
2565 EXPECT_FALSE(DecodeCompleteFrame()); | 2532 EXPECT_FALSE(DecodeCompleteFrame()); |
2566 EXPECT_FALSE(DecodeIncompleteFrame()); | 2533 EXPECT_FALSE(DecodeIncompleteFrame()); |
2567 bool request_key_frame = false; | 2534 bool request_key_frame = false; |
2568 | 2535 |
2569 // Verify the NACK list. | 2536 // Verify the NACK list. |
2570 std::vector<uint16_t> nack_list = | 2537 std::vector<uint16_t> nack_list = |
2571 jitter_buffer_->GetNackList(&request_key_frame); | 2538 jitter_buffer_->GetNackList(&request_key_frame); |
2572 const size_t kExpectedNackSize = 9; | 2539 const size_t kExpectedNackSize = 9; |
2573 if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled") | 2540 ASSERT_EQ(kExpectedNackSize, nack_list.size()); |
2574 ASSERT_EQ(kExpectedNackSize, nack_sent_.size()); | |
2575 else | |
2576 ASSERT_EQ(kExpectedNackSize, nack_list.size()); | |
2577 for (size_t i = 0; i < nack_list.size(); ++i) | 2541 for (size_t i = 0; i < nack_list.size(); ++i) |
2578 EXPECT_EQ((1 + i) * 10, nack_list[i]); | 2542 EXPECT_EQ((1 + i) * 10, nack_list[i]); |
2579 } | 2543 } |
2580 | 2544 |
2581 TEST_P(TestJitterBufferNack, NormalOperationWrap) { | 2545 TEST_F(TestJitterBufferNack, NormalOperationWrap) { |
2582 bool request_key_frame = false; | 2546 bool request_key_frame = false; |
2583 // ------- ------------------------------------------------------------ | 2547 // ------- ------------------------------------------------------------ |
2584 // | 65532 | | 65533 | 65534 | 65535 | x | 1 | .. | 9 | x | 11 |.....| 96 | | 2548 // | 65532 | | 65533 | 65534 | 65535 | x | 1 | .. | 9 | x | 11 |.....| 96 | |
2585 // ------- ------------------------------------------------------------ | 2549 // ------- ------------------------------------------------------------ |
2586 stream_generator_->Init(65532, clock_->TimeInMilliseconds()); | 2550 stream_generator_->Init(65532, clock_->TimeInMilliseconds()); |
2587 InsertFrame(kVideoFrameKey); | 2551 InsertFrame(kVideoFrameKey); |
2588 EXPECT_FALSE(request_key_frame); | 2552 EXPECT_FALSE(request_key_frame); |
2589 EXPECT_TRUE(DecodeCompleteFrame()); | 2553 EXPECT_TRUE(DecodeCompleteFrame()); |
2590 stream_generator_->GenerateFrame(kVideoFrameDelta, 100, 0, | 2554 stream_generator_->GenerateFrame(kVideoFrameDelta, 100, 0, |
2591 clock_->TimeInMilliseconds()); | 2555 clock_->TimeInMilliseconds()); |
2592 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2556 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2593 while (stream_generator_->PacketsRemaining() > 1) { | 2557 while (stream_generator_->PacketsRemaining() > 1) { |
2594 if (stream_generator_->NextSequenceNumber() % 10 != 0) { | 2558 if (stream_generator_->NextSequenceNumber() % 10 != 0) { |
2595 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2559 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2596 EXPECT_FALSE(request_key_frame); | 2560 EXPECT_FALSE(request_key_frame); |
2597 } else { | 2561 } else { |
2598 stream_generator_->NextPacket(NULL); // Drop packet | 2562 stream_generator_->NextPacket(NULL); // Drop packet |
2599 } | 2563 } |
2600 } | 2564 } |
2601 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); | 2565 EXPECT_EQ(kIncomplete, InsertPacketAndPop(0)); |
2602 EXPECT_FALSE(request_key_frame); | 2566 EXPECT_FALSE(request_key_frame); |
2603 EXPECT_EQ(0, stream_generator_->PacketsRemaining()); | 2567 EXPECT_EQ(0, stream_generator_->PacketsRemaining()); |
2604 EXPECT_FALSE(DecodeCompleteFrame()); | 2568 EXPECT_FALSE(DecodeCompleteFrame()); |
2605 EXPECT_FALSE(DecodeCompleteFrame()); | 2569 EXPECT_FALSE(DecodeCompleteFrame()); |
2606 bool extended = false; | 2570 bool extended = false; |
2607 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); | 2571 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); |
2608 // Verify the NACK list. | 2572 // Verify the NACK list. |
2609 const size_t kExpectedNackSize = 10; | 2573 const size_t kExpectedNackSize = 10; |
2610 if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled") { | 2574 ASSERT_EQ(kExpectedNackSize, nack_list.size()); |
2611 ASSERT_EQ(kExpectedNackSize, nack_sent_.size()); | 2575 for (size_t i = 0; i < nack_list.size(); ++i) |
2612 for (size_t i = 0; i < nack_sent_.size(); ++i) | 2576 EXPECT_EQ(i * 10, nack_list[i]); |
2613 EXPECT_EQ(i * 10, nack_sent_[i]); | |
2614 } else { | |
2615 ASSERT_EQ(kExpectedNackSize, nack_list.size()); | |
2616 for (size_t i = 0; i < nack_list.size(); ++i) | |
2617 EXPECT_EQ(i * 10, nack_list[i]); | |
2618 } | |
2619 } | 2577 } |
2620 | 2578 |
2621 TEST_P(TestJitterBufferNack, NormalOperationWrap2) { | 2579 TEST_F(TestJitterBufferNack, NormalOperationWrap2) { |
2622 bool request_key_frame = false; | 2580 bool request_key_frame = false; |
2623 // ----------------------------------- | 2581 // ----------------------------------- |
2624 // | 65532 | 65533 | 65534 | x | 0 | 1 | | 2582 // | 65532 | 65533 | 65534 | x | 0 | 1 | |
2625 // ----------------------------------- | 2583 // ----------------------------------- |
2626 stream_generator_->Init(65532, clock_->TimeInMilliseconds()); | 2584 stream_generator_->Init(65532, clock_->TimeInMilliseconds()); |
2627 InsertFrame(kVideoFrameKey); | 2585 InsertFrame(kVideoFrameKey); |
2628 EXPECT_FALSE(request_key_frame); | 2586 EXPECT_FALSE(request_key_frame); |
2629 EXPECT_TRUE(DecodeCompleteFrame()); | 2587 EXPECT_TRUE(DecodeCompleteFrame()); |
2630 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0, | 2588 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0, |
2631 clock_->TimeInMilliseconds()); | 2589 clock_->TimeInMilliseconds()); |
2632 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2590 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
2633 for (int i = 0; i < 5; ++i) { | 2591 for (int i = 0; i < 5; ++i) { |
2634 if (stream_generator_->NextSequenceNumber() != 65535) { | 2592 if (stream_generator_->NextSequenceNumber() != 65535) { |
2635 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0)); | 2593 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0)); |
2636 EXPECT_FALSE(request_key_frame); | 2594 EXPECT_FALSE(request_key_frame); |
2637 } else { | 2595 } else { |
2638 stream_generator_->NextPacket(NULL); // Drop packet | 2596 stream_generator_->NextPacket(NULL); // Drop packet |
2639 } | 2597 } |
2640 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0, | 2598 stream_generator_->GenerateFrame(kVideoFrameDelta, 1, 0, |
2641 clock_->TimeInMilliseconds()); | 2599 clock_->TimeInMilliseconds()); |
2642 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2600 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
2643 } | 2601 } |
2644 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0)); | 2602 EXPECT_EQ(kCompleteSession, InsertPacketAndPop(0)); |
2645 EXPECT_FALSE(request_key_frame); | 2603 EXPECT_FALSE(request_key_frame); |
2646 bool extended = false; | 2604 bool extended = false; |
2647 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); | 2605 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); |
2648 // Verify the NACK list. | 2606 // Verify the NACK list. |
2649 if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled") { | 2607 ASSERT_EQ(1u, nack_list.size()); |
2650 ASSERT_EQ(1u, nack_sent_.size()); | 2608 EXPECT_EQ(65535, nack_list[0]); |
2651 EXPECT_EQ(65535, nack_sent_[0]); | |
2652 } else { | |
2653 ASSERT_EQ(1u, nack_list.size()); | |
2654 EXPECT_EQ(65535, nack_list[0]); | |
2655 } | |
2656 } | 2609 } |
2657 | 2610 |
2658 TEST_P(TestJitterBufferNack, ResetByFutureKeyFrameDoesntError) { | 2611 TEST_F(TestJitterBufferNack, ResetByFutureKeyFrameDoesntError) { |
2659 stream_generator_->Init(0, clock_->TimeInMilliseconds()); | 2612 stream_generator_->Init(0, clock_->TimeInMilliseconds()); |
2660 InsertFrame(kVideoFrameKey); | 2613 InsertFrame(kVideoFrameKey); |
2661 EXPECT_TRUE(DecodeCompleteFrame()); | 2614 EXPECT_TRUE(DecodeCompleteFrame()); |
2662 bool extended = false; | 2615 bool extended = false; |
2663 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); | 2616 std::vector<uint16_t> nack_list = jitter_buffer_->GetNackList(&extended); |
2664 EXPECT_EQ(0u, nack_list.size()); | 2617 EXPECT_EQ(0u, nack_list.size()); |
2665 | 2618 |
2666 // Far-into-the-future video frame, could be caused by resetting the encoder | 2619 // Far-into-the-future video frame, could be caused by resetting the encoder |
2667 // or otherwise restarting. This should not fail when error when the packet is | 2620 // or otherwise restarting. This should not fail when error when the packet is |
2668 // a keyframe, even if all of the nack list needs to be flushed. | 2621 // a keyframe, even if all of the nack list needs to be flushed. |
2669 stream_generator_->Init(10000, clock_->TimeInMilliseconds()); | 2622 stream_generator_->Init(10000, clock_->TimeInMilliseconds()); |
2670 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2623 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
2671 InsertFrame(kVideoFrameKey); | 2624 InsertFrame(kVideoFrameKey); |
2672 EXPECT_TRUE(DecodeCompleteFrame()); | 2625 EXPECT_TRUE(DecodeCompleteFrame()); |
2673 nack_list = jitter_buffer_->GetNackList(&extended); | 2626 nack_list = jitter_buffer_->GetNackList(&extended); |
2674 EXPECT_EQ(0u, nack_list.size()); | 2627 EXPECT_EQ(0u, nack_list.size()); |
2675 | 2628 |
2676 // Stream should be decodable from this point. | 2629 // Stream should be decodable from this point. |
2677 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); | 2630 clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs); |
2678 InsertFrame(kVideoFrameDelta); | 2631 InsertFrame(kVideoFrameDelta); |
2679 EXPECT_TRUE(DecodeCompleteFrame()); | 2632 EXPECT_TRUE(DecodeCompleteFrame()); |
2680 nack_list = jitter_buffer_->GetNackList(&extended); | 2633 nack_list = jitter_buffer_->GetNackList(&extended); |
2681 EXPECT_EQ(0u, nack_list.size()); | 2634 EXPECT_EQ(0u, nack_list.size()); |
2682 } | 2635 } |
2683 | 2636 |
2684 } // namespace webrtc | 2637 } // namespace webrtc |
OLD | NEW |