Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 #include <algorithm> // max | 10 #include <algorithm> // max |
| (...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 528 RunBaseTest(&test); | 528 RunBaseTest(&test); |
| 529 } | 529 } |
| 530 | 530 |
| 531 #if !defined(RTC_DISABLE_VP9) | 531 #if !defined(RTC_DISABLE_VP9) |
| 532 TEST_F(VideoSendStreamTest, DoesUtilizeUlpfecForVp9WithNackEnabled) { | 532 TEST_F(VideoSendStreamTest, DoesUtilizeUlpfecForVp9WithNackEnabled) { |
| 533 UlpfecObserver test(false, true, true, true, "VP9"); | 533 UlpfecObserver test(false, true, true, true, "VP9"); |
| 534 RunBaseTest(&test); | 534 RunBaseTest(&test); |
| 535 } | 535 } |
| 536 #endif // !defined(RTC_DISABLE_VP9) | 536 #endif // !defined(RTC_DISABLE_VP9) |
| 537 | 537 |
| 538 // TODO(brandtr): Move these FlexFEC tests when we have created | |
| 539 // FlexfecSendStream. | |
| 540 class FlexfecObserver : public test::EndToEndTest { | |
| 541 public: | |
| 542 FlexfecObserver(bool header_extensions_enabled, | |
| 543 bool use_nack, | |
| 544 const std::string& codec) | |
| 545 : EndToEndTest(VideoSendStreamTest::kDefaultTimeoutMs), | |
| 546 payload_name_(codec), | |
| 547 use_nack_(use_nack), | |
| 548 send_count_(0), | |
| 549 sent_media_(false), | |
| 550 sent_flexfec_(false), | |
| 551 header_extensions_enabled_(header_extensions_enabled) { | |
| 552 if (codec == "H264") { | |
| 553 encoder_.reset(new test::FakeH264Encoder(Clock::GetRealTimeClock())); | |
| 554 } else if (codec == "VP8") { | |
| 555 encoder_.reset(VideoEncoder::Create(VideoEncoder::EncoderType::kVp8)); | |
| 556 } else if (codec == "VP9") { | |
| 557 encoder_.reset(VideoEncoder::Create(VideoEncoder::EncoderType::kVp9)); | |
| 558 } else { | |
| 559 RTC_NOTREACHED(); | |
| 560 } | |
| 561 } | |
| 562 | |
| 563 size_t GetNumFlexfecStreams() const override { return 1; } | |
| 564 | |
| 565 private: | |
| 566 Action OnSendRtp(const uint8_t* packet, size_t length) override { | |
| 567 RTPHeader header; | |
| 568 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | |
| 569 | |
| 570 ++send_count_; | |
| 571 if (header.payloadType == VideoSendStreamTest::kFlexfecPayloadType) { | |
| 572 EXPECT_EQ(VideoSendStreamTest::kFlexfecSendSsrc, header.ssrc); | |
| 573 sent_flexfec_ = true; | |
| 574 } else { | |
| 575 EXPECT_EQ(VideoSendStreamTest::kFakeVideoSendPayloadType, | |
| 576 header.payloadType); | |
| 577 EXPECT_EQ(VideoSendStreamTest::kVideoSendSsrcs[0], header.ssrc); | |
| 578 sent_media_ = true; | |
| 579 } | |
| 580 | |
| 581 if (header_extensions_enabled_) { | |
| 582 EXPECT_TRUE(header.extension.hasAbsoluteSendTime); | |
| 583 uint32_t kHalf24BitsSpace = 0xFFFFFF / 2; | |
| 584 if (header.extension.absoluteSendTime <= kHalf24BitsSpace && | |
| 585 prev_header_.extension.absoluteSendTime > kHalf24BitsSpace) { | |
| 586 // 24 bits wrap. | |
| 587 EXPECT_GT(prev_header_.extension.absoluteSendTime, | |
| 588 header.extension.absoluteSendTime); | |
| 589 } else { | |
| 590 EXPECT_GE(header.extension.absoluteSendTime, | |
| 591 prev_header_.extension.absoluteSendTime); | |
| 592 } | |
| 593 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); | |
| 594 uint16_t seq_num_diff = header.extension.transportSequenceNumber - | |
| 595 prev_header_.extension.transportSequenceNumber; | |
| 596 EXPECT_EQ(1, seq_num_diff); | |
|
stefan-webrtc
2016/11/15 12:29:53
Do you think it's necessary to verify that the ext
brandtr
2016/11/15 13:05:39
It's enough to just check that they are set. Also
| |
| 597 } | |
| 598 | |
| 599 if (send_count_ > 100 && sent_media_ && sent_flexfec_) { | |
| 600 observation_complete_.Set(); | |
| 601 } | |
| 602 | |
| 603 prev_header_ = header; | |
| 604 | |
| 605 return SEND_PACKET; | |
| 606 } | |
| 607 | |
| 608 test::PacketTransport* CreateSendTransport(Call* sender_call) override { | |
| 609 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC. | |
| 610 // Therefore we need some network delay. | |
| 611 const int kNetworkDelayMs = 100; | |
| 612 FakeNetworkPipe::Config config; | |
| 613 config.loss_percent = 50; | |
| 614 config.queue_delay_ms = kNetworkDelayMs; | |
| 615 return new test::PacketTransport(sender_call, this, | |
| 616 test::PacketTransport::kSender, config); | |
| 617 } | |
| 618 | |
| 619 void ModifyVideoConfigs( | |
| 620 VideoSendStream::Config* send_config, | |
| 621 std::vector<VideoReceiveStream::Config>* receive_configs, | |
| 622 VideoEncoderConfig* encoder_config) override { | |
| 623 transport_adapter_.reset( | |
| 624 new internal::TransportAdapter(send_config->send_transport)); | |
| 625 transport_adapter_->Enable(); | |
| 626 if (use_nack_) { | |
| 627 send_config->rtp.nack.rtp_history_ms = | |
| 628 (*receive_configs)[0].rtp.nack.rtp_history_ms = | |
| 629 VideoSendStreamTest::kNackRtpHistoryMs; | |
| 630 } | |
| 631 send_config->encoder_settings.encoder = encoder_.get(); | |
| 632 send_config->encoder_settings.payload_name = payload_name_; | |
| 633 if (header_extensions_enabled_) { | |
| 634 send_config->rtp.extensions.push_back(RtpExtension( | |
| 635 RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId)); | |
| 636 send_config->rtp.extensions.push_back( | |
| 637 RtpExtension(RtpExtension::kTransportSequenceNumberUri, | |
| 638 test::kTransportSequenceNumberExtensionId)); | |
| 639 } | |
| 640 } | |
| 641 | |
| 642 void PerformTest() override { | |
| 643 EXPECT_TRUE(Wait()) | |
| 644 << "Timed out waiting for FlexFEC and/or media packets."; | |
| 645 } | |
| 646 | |
| 647 std::unique_ptr<internal::TransportAdapter> transport_adapter_; | |
| 648 std::unique_ptr<VideoEncoder> encoder_; | |
| 649 const std::string payload_name_; | |
| 650 const bool use_nack_; | |
| 651 int send_count_; | |
| 652 bool sent_media_; | |
| 653 bool sent_flexfec_; | |
| 654 bool header_extensions_enabled_; | |
| 655 RTPHeader prev_header_; | |
| 656 }; | |
| 657 | |
| 658 TEST_F(VideoSendStreamTest, SupportsFlexfecWithRtpExtensionsVp8) { | |
| 659 FlexfecObserver test(true, false, "VP8"); | |
| 660 RunBaseTest(&test); | |
| 661 } | |
| 662 | |
| 663 TEST_F(VideoSendStreamTest, SupportsFlexfecWithoutRtpExtensionsVp8) { | |
| 664 FlexfecObserver test(false, false, "VP8"); | |
| 665 RunBaseTest(&test); | |
| 666 } | |
| 667 | |
| 668 TEST_F(VideoSendStreamTest, SupportsFlexfecWithRtpExtensionsAndNackVp8) { | |
| 669 FlexfecObserver test(true, true, "VP8"); | |
| 670 RunBaseTest(&test); | |
| 671 } | |
| 672 | |
| 673 TEST_F(VideoSendStreamTest, SupportsFlexfecWithoutRtpExtensionsAndNackVp8) { | |
| 674 FlexfecObserver test(false, true, "VP8"); | |
| 675 RunBaseTest(&test); | |
| 676 } | |
| 677 | |
| 678 #if !defined(RTC_DISABLE_VP9) | |
| 679 TEST_F(VideoSendStreamTest, SupportsFlexfecWithRtpExtensionsVp9) { | |
| 680 FlexfecObserver test(true, false, "VP9"); | |
| 681 RunBaseTest(&test); | |
| 682 } | |
| 683 | |
| 684 TEST_F(VideoSendStreamTest, SupportsFlexfecWithoutRtpExtensionsVp9) { | |
| 685 FlexfecObserver test(false, false, "VP9"); | |
| 686 RunBaseTest(&test); | |
| 687 } | |
| 688 | |
| 689 TEST_F(VideoSendStreamTest, SupportsFlexfecWithRtpExtensionsAndNackVp9) { | |
| 690 FlexfecObserver test(true, true, "VP9"); | |
| 691 RunBaseTest(&test); | |
| 692 } | |
| 693 | |
| 694 TEST_F(VideoSendStreamTest, SupportsFlexfecWithoutRtpExtensionsAndNackVp9) { | |
| 695 FlexfecObserver test(false, true, "VP9"); | |
| 696 RunBaseTest(&test); | |
| 697 } | |
| 698 #endif // defined(RTC_DISABLE_VP9) | |
| 699 | |
| 700 TEST_F(VideoSendStreamTest, SupportsFlexfecWithRtpExtensionsH264) { | |
| 701 FlexfecObserver test(true, false, "H264"); | |
| 702 RunBaseTest(&test); | |
| 703 } | |
| 704 | |
| 705 TEST_F(VideoSendStreamTest, SupportsFlexfecWithoutRtpExtensionsH264) { | |
| 706 FlexfecObserver test(false, false, "H264"); | |
| 707 RunBaseTest(&test); | |
| 708 } | |
| 709 | |
| 710 TEST_F(VideoSendStreamTest, SupportsFlexfecWithRtpExtensionsAndNackH264) { | |
| 711 FlexfecObserver test(true, true, "H264"); | |
| 712 RunBaseTest(&test); | |
| 713 } | |
| 714 | |
| 715 TEST_F(VideoSendStreamTest, SupportsFlexfecWithoutRtpExtensionsAndNackH264) { | |
| 716 FlexfecObserver test(false, true, "H264"); | |
| 717 RunBaseTest(&test); | |
| 718 } | |
| 719 | |
| 538 void VideoSendStreamTest::TestNackRetransmission( | 720 void VideoSendStreamTest::TestNackRetransmission( |
| 539 uint32_t retransmit_ssrc, | 721 uint32_t retransmit_ssrc, |
| 540 uint8_t retransmit_payload_type) { | 722 uint8_t retransmit_payload_type) { |
| 541 class NackObserver : public test::SendTest { | 723 class NackObserver : public test::SendTest { |
| 542 public: | 724 public: |
| 543 explicit NackObserver(uint32_t retransmit_ssrc, | 725 explicit NackObserver(uint32_t retransmit_ssrc, |
| 544 uint8_t retransmit_payload_type) | 726 uint8_t retransmit_payload_type) |
| 545 : SendTest(kDefaultTimeoutMs), | 727 : SendTest(kDefaultTimeoutMs), |
| 546 send_count_(0), | 728 send_count_(0), |
| 547 retransmit_ssrc_(retransmit_ssrc), | 729 retransmit_ssrc_(retransmit_ssrc), |
| (...skipping 2439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2987 RequestSourceRotateIfVideoOrientationExtensionNotSupported) { | 3169 RequestSourceRotateIfVideoOrientationExtensionNotSupported) { |
| 2988 TestRequestSourceRotateVideo(false); | 3170 TestRequestSourceRotateVideo(false); |
| 2989 } | 3171 } |
| 2990 | 3172 |
| 2991 TEST_F(VideoSendStreamTest, | 3173 TEST_F(VideoSendStreamTest, |
| 2992 DoNotRequestsRotationIfVideoOrientationExtensionSupported) { | 3174 DoNotRequestsRotationIfVideoOrientationExtensionSupported) { |
| 2993 TestRequestSourceRotateVideo(true); | 3175 TestRequestSourceRotateVideo(true); |
| 2994 } | 3176 } |
| 2995 | 3177 |
| 2996 } // namespace webrtc | 3178 } // namespace webrtc |
| OLD | NEW |