Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Side by Side Diff: webrtc/video/video_send_stream_tests.cc

Issue 2604403003: Make FakeEncoder and FakeH264Encoder thread safe. (Closed)
Patch Set: Rebase. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/test/fake_encoder.cc ('k') | webrtc/video/vie_encoder_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « webrtc/test/fake_encoder.cc ('k') | webrtc/video/vie_encoder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698