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 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 config.loss_percent = 5; | 442 config.loss_percent = 5; |
443 config.queue_delay_ms = kNetworkDelayMs; | 443 config.queue_delay_ms = kNetworkDelayMs; |
444 return new test::PacketTransport(sender_call, this, | 444 return new test::PacketTransport(sender_call, this, |
445 test::PacketTransport::kSender, config); | 445 test::PacketTransport::kSender, config); |
446 } | 446 } |
447 | 447 |
448 void ModifyVideoConfigs( | 448 void ModifyVideoConfigs( |
449 VideoSendStream::Config* send_config, | 449 VideoSendStream::Config* send_config, |
450 std::vector<VideoReceiveStream::Config>* receive_configs, | 450 std::vector<VideoReceiveStream::Config>* receive_configs, |
451 VideoEncoderConfig* encoder_config) override { | 451 VideoEncoderConfig* encoder_config) override { |
452 transport_adapter_.reset( | |
453 new internal::TransportAdapter(send_config->send_transport)); | |
454 transport_adapter_->Enable(); | |
455 if (use_nack_) { | 452 if (use_nack_) { |
456 send_config->rtp.nack.rtp_history_ms = | 453 send_config->rtp.nack.rtp_history_ms = |
457 (*receive_configs)[0].rtp.nack.rtp_history_ms = | 454 (*receive_configs)[0].rtp.nack.rtp_history_ms = |
458 VideoSendStreamTest::kNackRtpHistoryMs; | 455 VideoSendStreamTest::kNackRtpHistoryMs; |
459 } | 456 } |
460 send_config->encoder_settings.encoder = encoder_; | 457 send_config->encoder_settings.encoder = encoder_; |
461 send_config->encoder_settings.payload_name = payload_name_; | 458 send_config->encoder_settings.payload_name = payload_name_; |
462 send_config->rtp.ulpfec.red_payload_type = | 459 send_config->rtp.ulpfec.red_payload_type = |
463 VideoSendStreamTest::kRedPayloadType; | 460 VideoSendStreamTest::kRedPayloadType; |
464 send_config->rtp.ulpfec.ulpfec_payload_type = | 461 send_config->rtp.ulpfec.ulpfec_payload_type = |
465 VideoSendStreamTest::kUlpfecPayloadType; | 462 VideoSendStreamTest::kUlpfecPayloadType; |
466 if (header_extensions_enabled_) { | 463 if (header_extensions_enabled_) { |
467 send_config->rtp.extensions.push_back(RtpExtension( | 464 send_config->rtp.extensions.push_back(RtpExtension( |
468 RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId)); | 465 RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId)); |
469 send_config->rtp.extensions.push_back( | 466 send_config->rtp.extensions.push_back( |
470 RtpExtension(RtpExtension::kTransportSequenceNumberUri, | 467 RtpExtension(RtpExtension::kTransportSequenceNumberUri, |
471 test::kTransportSequenceNumberExtensionId)); | 468 test::kTransportSequenceNumberExtensionId)); |
472 } | 469 } |
473 (*receive_configs)[0].rtp.ulpfec.red_payload_type = | 470 (*receive_configs)[0].rtp.ulpfec.red_payload_type = |
474 send_config->rtp.ulpfec.red_payload_type; | 471 send_config->rtp.ulpfec.red_payload_type; |
475 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = | 472 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = |
476 send_config->rtp.ulpfec.ulpfec_payload_type; | 473 send_config->rtp.ulpfec.ulpfec_payload_type; |
477 } | 474 } |
478 | 475 |
479 void PerformTest() override { | 476 void PerformTest() override { |
480 EXPECT_EQ(expect_ulpfec_, Wait()) | 477 EXPECT_EQ(expect_ulpfec_, Wait()) |
481 << "Timed out waiting for ULPFEC and/or media packets."; | 478 << "Timed out waiting for ULPFEC and/or media packets."; |
482 } | 479 } |
483 | 480 |
484 std::unique_ptr<internal::TransportAdapter> transport_adapter_; | |
485 VideoEncoder* const encoder_; | 481 VideoEncoder* const encoder_; |
486 std::string payload_name_; | 482 std::string payload_name_; |
487 const bool use_nack_; | 483 const bool use_nack_; |
488 const bool expect_red_; | 484 const bool expect_red_; |
489 const bool expect_ulpfec_; | 485 const bool expect_ulpfec_; |
490 bool sent_media_; | 486 bool sent_media_; |
491 bool sent_ulpfec_; | 487 bool sent_ulpfec_; |
492 bool header_extensions_enabled_; | 488 bool header_extensions_enabled_; |
493 RTPHeader prev_header_; | 489 RTPHeader prev_header_; |
494 }; | 490 }; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
531 } | 527 } |
532 | 528 |
533 #if !defined(RTC_DISABLE_VP9) | 529 #if !defined(RTC_DISABLE_VP9) |
534 TEST_F(VideoSendStreamTest, DoesUtilizeUlpfecForVp9WithNackEnabled) { | 530 TEST_F(VideoSendStreamTest, DoesUtilizeUlpfecForVp9WithNackEnabled) { |
535 std::unique_ptr<VideoEncoder> encoder(VP9Encoder::Create()); | 531 std::unique_ptr<VideoEncoder> encoder(VP9Encoder::Create()); |
536 UlpfecObserver test(false, true, true, true, "VP9", encoder.get()); | 532 UlpfecObserver test(false, true, true, true, "VP9", encoder.get()); |
537 RunBaseTest(&test); | 533 RunBaseTest(&test); |
538 } | 534 } |
539 #endif // !defined(RTC_DISABLE_VP9) | 535 #endif // !defined(RTC_DISABLE_VP9) |
540 | 536 |
541 TEST_F(VideoSendStreamTest, SupportsUlpfecWithMultiThreadedH264) { | 537 TEST_F(VideoSendStreamTest, SupportsUlpfecWithMultithreadedH264) { |
542 std::unique_ptr<VideoEncoder> encoder( | 538 std::unique_ptr<VideoEncoder> encoder( |
543 new test::MultiThreadedFakeH264Encoder(Clock::GetRealTimeClock())); | 539 new test::MultithreadedFakeH264Encoder(Clock::GetRealTimeClock())); |
544 UlpfecObserver test(false, false, true, true, "H264", encoder.get()); | 540 UlpfecObserver test(false, false, true, true, "H264", encoder.get()); |
545 RunBaseTest(&test); | 541 RunBaseTest(&test); |
546 } | 542 } |
547 | 543 |
548 // TODO(brandtr): Move these FlexFEC tests when we have created | 544 // TODO(brandtr): Move these FlexFEC tests when we have created |
549 // FlexfecSendStream. | 545 // FlexfecSendStream. |
550 class FlexfecObserver : public test::EndToEndTest { | 546 class FlexfecObserver : public test::EndToEndTest { |
551 public: | 547 public: |
552 FlexfecObserver(bool header_extensions_enabled, | 548 FlexfecObserver(bool header_extensions_enabled, |
553 bool use_nack, | 549 bool use_nack, |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 config.loss_percent = 5; | 595 config.loss_percent = 5; |
600 config.queue_delay_ms = kNetworkDelayMs; | 596 config.queue_delay_ms = kNetworkDelayMs; |
601 return new test::PacketTransport(sender_call, this, | 597 return new test::PacketTransport(sender_call, this, |
602 test::PacketTransport::kSender, config); | 598 test::PacketTransport::kSender, config); |
603 } | 599 } |
604 | 600 |
605 void ModifyVideoConfigs( | 601 void ModifyVideoConfigs( |
606 VideoSendStream::Config* send_config, | 602 VideoSendStream::Config* send_config, |
607 std::vector<VideoReceiveStream::Config>* receive_configs, | 603 std::vector<VideoReceiveStream::Config>* receive_configs, |
608 VideoEncoderConfig* encoder_config) override { | 604 VideoEncoderConfig* encoder_config) override { |
609 transport_adapter_.reset( | |
610 new internal::TransportAdapter(send_config->send_transport)); | |
611 transport_adapter_->Enable(); | |
612 if (use_nack_) { | 605 if (use_nack_) { |
613 send_config->rtp.nack.rtp_history_ms = | 606 send_config->rtp.nack.rtp_history_ms = |
614 (*receive_configs)[0].rtp.nack.rtp_history_ms = | 607 (*receive_configs)[0].rtp.nack.rtp_history_ms = |
615 VideoSendStreamTest::kNackRtpHistoryMs; | 608 VideoSendStreamTest::kNackRtpHistoryMs; |
616 } | 609 } |
617 send_config->encoder_settings.encoder = encoder_; | 610 send_config->encoder_settings.encoder = encoder_; |
618 send_config->encoder_settings.payload_name = payload_name_; | 611 send_config->encoder_settings.payload_name = payload_name_; |
619 if (header_extensions_enabled_) { | 612 if (header_extensions_enabled_) { |
620 send_config->rtp.extensions.push_back(RtpExtension( | 613 send_config->rtp.extensions.push_back(RtpExtension( |
621 RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId)); | 614 RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId)); |
622 send_config->rtp.extensions.push_back(RtpExtension( | 615 send_config->rtp.extensions.push_back(RtpExtension( |
623 RtpExtension::kTimestampOffsetUri, test::kTOffsetExtensionId)); | 616 RtpExtension::kTimestampOffsetUri, test::kTOffsetExtensionId)); |
624 send_config->rtp.extensions.push_back( | 617 send_config->rtp.extensions.push_back( |
625 RtpExtension(RtpExtension::kTransportSequenceNumberUri, | 618 RtpExtension(RtpExtension::kTransportSequenceNumberUri, |
626 test::kTransportSequenceNumberExtensionId)); | 619 test::kTransportSequenceNumberExtensionId)); |
627 } | 620 } |
628 } | 621 } |
629 | 622 |
630 void PerformTest() override { | 623 void PerformTest() override { |
631 EXPECT_TRUE(Wait()) | 624 EXPECT_TRUE(Wait()) |
632 << "Timed out waiting for FlexFEC and/or media packets."; | 625 << "Timed out waiting for FlexFEC and/or media packets."; |
633 } | 626 } |
634 | 627 |
635 std::unique_ptr<internal::TransportAdapter> transport_adapter_; | |
636 VideoEncoder* const encoder_; | 628 VideoEncoder* const encoder_; |
637 std::string payload_name_; | 629 std::string payload_name_; |
638 const bool use_nack_; | 630 const bool use_nack_; |
639 bool sent_media_; | 631 bool sent_media_; |
640 bool sent_flexfec_; | 632 bool sent_flexfec_; |
641 bool header_extensions_enabled_; | 633 bool header_extensions_enabled_; |
642 }; | 634 }; |
643 | 635 |
644 TEST_F(VideoSendStreamTest, SupportsFlexfecVp8) { | 636 TEST_F(VideoSendStreamTest, SupportsFlexfecVp8) { |
645 std::unique_ptr<VideoEncoder> encoder(VP8Encoder::Create()); | 637 std::unique_ptr<VideoEncoder> encoder(VP8Encoder::Create()); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 RunBaseTest(&test); | 672 RunBaseTest(&test); |
681 } | 673 } |
682 | 674 |
683 TEST_F(VideoSendStreamTest, SupportsFlexfecWithNackH264) { | 675 TEST_F(VideoSendStreamTest, SupportsFlexfecWithNackH264) { |
684 std::unique_ptr<VideoEncoder> encoder( | 676 std::unique_ptr<VideoEncoder> encoder( |
685 new test::FakeH264Encoder(Clock::GetRealTimeClock())); | 677 new test::FakeH264Encoder(Clock::GetRealTimeClock())); |
686 FlexfecObserver test(false, true, "H264", encoder.get()); | 678 FlexfecObserver test(false, true, "H264", encoder.get()); |
687 RunBaseTest(&test); | 679 RunBaseTest(&test); |
688 } | 680 } |
689 | 681 |
690 TEST_F(VideoSendStreamTest, SupportsFlexfecWithMultiThreadedH264) { | 682 TEST_F(VideoSendStreamTest, SupportsFlexfecWithMultithreadedH264) { |
691 std::unique_ptr<VideoEncoder> encoder( | 683 std::unique_ptr<VideoEncoder> encoder( |
692 new test::MultiThreadedFakeH264Encoder(Clock::GetRealTimeClock())); | 684 new test::MultithreadedFakeH264Encoder(Clock::GetRealTimeClock())); |
693 FlexfecObserver test(false, false, "H264", encoder.get()); | 685 FlexfecObserver test(false, false, "H264", encoder.get()); |
694 RunBaseTest(&test); | 686 RunBaseTest(&test); |
695 } | 687 } |
696 | 688 |
697 void VideoSendStreamTest::TestNackRetransmission( | 689 void VideoSendStreamTest::TestNackRetransmission( |
698 uint32_t retransmit_ssrc, | 690 uint32_t retransmit_ssrc, |
699 uint8_t retransmit_payload_type) { | 691 uint8_t retransmit_payload_type) { |
700 class NackObserver : public test::SendTest { | 692 class NackObserver : public test::SendTest { |
701 public: | 693 public: |
702 explicit NackObserver(uint32_t retransmit_ssrc, | 694 explicit NackObserver(uint32_t retransmit_ssrc, |
(...skipping 1929 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2632 uint8_t buffer[16] = {0}; | 2624 uint8_t buffer[16] = {0}; |
2633 EncodedImage encoded(buffer, sizeof(buffer), sizeof(buffer)); | 2625 EncodedImage encoded(buffer, sizeof(buffer), sizeof(buffer)); |
2634 encoded._timeStamp = input_image.timestamp(); | 2626 encoded._timeStamp = input_image.timestamp(); |
2635 encoded.capture_time_ms_ = input_image.render_time_ms(); | 2627 encoded.capture_time_ms_ = input_image.render_time_ms(); |
2636 | 2628 |
2637 for (size_t i = 0; i < kNumStreams; ++i) { | 2629 for (size_t i = 0; i < kNumStreams; ++i) { |
2638 specifics.codecSpecific.generic.simulcast_idx = static_cast<uint8_t>(i); | 2630 specifics.codecSpecific.generic.simulcast_idx = static_cast<uint8_t>(i); |
2639 encoded._frameType = (*frame_types)[i]; | 2631 encoded._frameType = (*frame_types)[i]; |
2640 encoded._encodedWidth = kEncodedResolution[i].width; | 2632 encoded._encodedWidth = kEncodedResolution[i].width; |
2641 encoded._encodedHeight = kEncodedResolution[i].height; | 2633 encoded._encodedHeight = kEncodedResolution[i].height; |
2642 RTC_DCHECK(callback_); | 2634 EncodedImageCallback* callback; |
2643 if (callback_->OnEncodedImage(encoded, &specifics, nullptr).error != | 2635 { |
| 2636 rtc::CritScope cs(&crit_sect_); |
| 2637 callback = callback_; |
| 2638 } |
| 2639 RTC_DCHECK(callback); |
| 2640 if (callback->OnEncodedImage(encoded, &specifics, nullptr).error != |
2644 EncodedImageCallback::Result::OK) { | 2641 EncodedImageCallback::Result::OK) { |
2645 return -1; | 2642 return -1; |
2646 } | 2643 } |
2647 } | 2644 } |
2648 | 2645 |
2649 observation_complete_.Set(); | 2646 observation_complete_.Set(); |
2650 return 0; | 2647 return 0; |
2651 } | 2648 } |
2652 void ModifyVideoConfigs( | 2649 void ModifyVideoConfigs( |
2653 VideoSendStream::Config* send_config, | 2650 VideoSendStream::Config* send_config, |
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3236 private: | 3233 private: |
3237 Call* call_; | 3234 Call* call_; |
3238 rtc::CriticalSection crit_; | 3235 rtc::CriticalSection crit_; |
3239 uint32_t max_bitrate_kbps_ GUARDED_BY(&crit_); | 3236 uint32_t max_bitrate_kbps_ GUARDED_BY(&crit_); |
3240 } test; | 3237 } test; |
3241 | 3238 |
3242 RunBaseTest(&test); | 3239 RunBaseTest(&test); |
3243 } | 3240 } |
3244 | 3241 |
3245 } // namespace webrtc | 3242 } // namespace webrtc |
OLD | NEW |