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 | 10 |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 receiver_call_->CreateAudioReceiveStream(audio_recv_config); | 256 receiver_call_->CreateAudioReceiveStream(audio_recv_config); |
257 CreateVideoStreams(); | 257 CreateVideoStreams(); |
258 } else { | 258 } else { |
259 CreateVideoStreams(); | 259 CreateVideoStreams(); |
260 audio_receive_stream = | 260 audio_receive_stream = |
261 receiver_call_->CreateAudioReceiveStream(audio_recv_config); | 261 receiver_call_->CreateAudioReceiveStream(audio_recv_config); |
262 } | 262 } |
263 EXPECT_EQ(1u, video_receive_streams_.size()); | 263 EXPECT_EQ(1u, video_receive_streams_.size()); |
264 observer.set_receive_stream(video_receive_streams_[0]); | 264 observer.set_receive_stream(video_receive_streams_[0]); |
265 DriftingClock drifting_clock(clock_, video_ntp_speed); | 265 DriftingClock drifting_clock(clock_, video_ntp_speed); |
266 CreateFrameGeneratorCapturerWithDrift(&drifting_clock, video_rtp_speed); | 266 CreateFrameGeneratorCapturerWithDrift(&drifting_clock, video_rtp_speed, |
| 267 kDefaultFramerate, kDefaultWidth, |
| 268 kDefaultHeight); |
267 | 269 |
268 Start(); | 270 Start(); |
269 | 271 |
270 fake_audio_device.Start(); | 272 fake_audio_device.Start(); |
271 EXPECT_EQ(0, voe_base->StartPlayout(recv_channel_id)); | 273 EXPECT_EQ(0, voe_base->StartPlayout(recv_channel_id)); |
272 EXPECT_EQ(0, voe_base->StartReceive(recv_channel_id)); | 274 EXPECT_EQ(0, voe_base->StartReceive(recv_channel_id)); |
273 EXPECT_EQ(0, voe_base->StartSend(send_channel_id)); | 275 EXPECT_EQ(0, voe_base->StartSend(send_channel_id)); |
274 | 276 |
275 EXPECT_TRUE(observer.Wait()) | 277 EXPECT_TRUE(observer.Wait()) |
276 << "Timed out while waiting for audio and video to be synchronized."; | 278 << "Timed out while waiting for audio and video to be synchronized."; |
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 | 612 |
611 TEST_F(CallPerfTest, NoPadWithoutMinTransmitBitrate) { | 613 TEST_F(CallPerfTest, NoPadWithoutMinTransmitBitrate) { |
612 TestMinTransmitBitrate(false); | 614 TestMinTransmitBitrate(false); |
613 } | 615 } |
614 | 616 |
615 TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) { | 617 TEST_F(CallPerfTest, KeepsHighBitrateWhenReconfiguringSender) { |
616 static const uint32_t kInitialBitrateKbps = 400; | 618 static const uint32_t kInitialBitrateKbps = 400; |
617 static const uint32_t kReconfigureThresholdKbps = 600; | 619 static const uint32_t kReconfigureThresholdKbps = 600; |
618 static const uint32_t kPermittedReconfiguredBitrateDiffKbps = 100; | 620 static const uint32_t kPermittedReconfiguredBitrateDiffKbps = 100; |
619 | 621 |
| 622 class VideoStreamFactory |
| 623 : public VideoEncoderConfig::VideoStreamFactoryInterface { |
| 624 public: |
| 625 VideoStreamFactory() {} |
| 626 |
| 627 private: |
| 628 std::vector<VideoStream> CreateEncoderStreams( |
| 629 int width, |
| 630 int height, |
| 631 const VideoEncoderConfig& encoder_config) override { |
| 632 std::vector<VideoStream> streams = |
| 633 test::CreateVideoStreams(width, height, encoder_config); |
| 634 streams[0].min_bitrate_bps = 50000; |
| 635 streams[0].target_bitrate_bps = streams[0].max_bitrate_bps = 2000000; |
| 636 return streams; |
| 637 } |
| 638 }; |
| 639 |
620 class BitrateObserver : public test::EndToEndTest, public test::FakeEncoder { | 640 class BitrateObserver : public test::EndToEndTest, public test::FakeEncoder { |
621 public: | 641 public: |
622 BitrateObserver() | 642 BitrateObserver() |
623 : EndToEndTest(kDefaultTimeoutMs), | 643 : EndToEndTest(kDefaultTimeoutMs), |
624 FakeEncoder(Clock::GetRealTimeClock()), | 644 FakeEncoder(Clock::GetRealTimeClock()), |
625 time_to_reconfigure_(false, false), | 645 time_to_reconfigure_(false, false), |
626 encoder_inits_(0), | 646 encoder_inits_(0), |
627 last_set_bitrate_(0), | 647 last_set_bitrate_(0), |
628 send_stream_(nullptr) {} | 648 send_stream_(nullptr) {} |
629 | 649 |
630 int32_t InitEncode(const VideoCodec* config, | 650 int32_t InitEncode(const VideoCodec* config, |
631 int32_t number_of_cores, | 651 int32_t number_of_cores, |
632 size_t max_payload_size) override { | 652 size_t max_payload_size) override { |
633 if (encoder_inits_ == 0) { | 653 ++encoder_inits_; |
| 654 if (encoder_inits_ == 1) { |
| 655 // First time initialization. Frame size is not known. |
634 EXPECT_EQ(kInitialBitrateKbps, config->startBitrate) | 656 EXPECT_EQ(kInitialBitrateKbps, config->startBitrate) |
635 << "Encoder not initialized at expected bitrate."; | 657 << "Encoder not initialized at expected bitrate."; |
636 } | 658 } else if (encoder_inits_ == 2) { |
637 ++encoder_inits_; | 659 // First time initialization. Frame size is known. |
638 if (encoder_inits_ == 2) { | 660 EXPECT_EQ(kDefaultWidth, config->width); |
| 661 EXPECT_EQ(kDefaultHeight, config->height); |
| 662 } else if (encoder_inits_ == 3) { |
| 663 EXPECT_EQ(2 * kDefaultWidth, config->width); |
| 664 EXPECT_EQ(2 * kDefaultHeight, config->height); |
639 EXPECT_GE(last_set_bitrate_, kReconfigureThresholdKbps); | 665 EXPECT_GE(last_set_bitrate_, kReconfigureThresholdKbps); |
640 EXPECT_NEAR(config->startBitrate, | 666 EXPECT_NEAR(config->startBitrate, |
641 last_set_bitrate_, | 667 last_set_bitrate_, |
642 kPermittedReconfiguredBitrateDiffKbps) | 668 kPermittedReconfiguredBitrateDiffKbps) |
643 << "Encoder reconfigured with bitrate too far away from last set."; | 669 << "Encoder reconfigured with bitrate too far away from last set."; |
644 observation_complete_.Set(); | 670 observation_complete_.Set(); |
645 } | 671 } |
646 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 672 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
647 } | 673 } |
648 | 674 |
649 int32_t SetRates(uint32_t new_target_bitrate_kbps, | 675 int32_t SetRates(uint32_t new_target_bitrate_kbps, |
650 uint32_t framerate) override { | 676 uint32_t framerate) override { |
651 last_set_bitrate_ = new_target_bitrate_kbps; | 677 last_set_bitrate_ = new_target_bitrate_kbps; |
652 if (encoder_inits_ == 1 && | 678 if (encoder_inits_ == 2 && |
653 new_target_bitrate_kbps > kReconfigureThresholdKbps) { | 679 new_target_bitrate_kbps > kReconfigureThresholdKbps) { |
654 time_to_reconfigure_.Set(); | 680 time_to_reconfigure_.Set(); |
655 } | 681 } |
656 return FakeEncoder::SetRates(new_target_bitrate_kbps, framerate); | 682 return FakeEncoder::SetRates(new_target_bitrate_kbps, framerate); |
657 } | 683 } |
658 | 684 |
659 Call::Config GetSenderCallConfig() override { | 685 Call::Config GetSenderCallConfig() override { |
660 Call::Config config = EndToEndTest::GetSenderCallConfig(); | 686 Call::Config config = EndToEndTest::GetSenderCallConfig(); |
661 config.bitrate_config.start_bitrate_bps = kInitialBitrateKbps * 1000; | 687 config.bitrate_config.start_bitrate_bps = kInitialBitrateKbps * 1000; |
662 return config; | 688 return config; |
663 } | 689 } |
664 | 690 |
665 void ModifyVideoConfigs( | 691 void ModifyVideoConfigs( |
666 VideoSendStream::Config* send_config, | 692 VideoSendStream::Config* send_config, |
667 std::vector<VideoReceiveStream::Config>* receive_configs, | 693 std::vector<VideoReceiveStream::Config>* receive_configs, |
668 VideoEncoderConfig* encoder_config) override { | 694 VideoEncoderConfig* encoder_config) override { |
669 send_config->encoder_settings.encoder = this; | 695 send_config->encoder_settings.encoder = this; |
670 encoder_config->streams[0].min_bitrate_bps = 50000; | 696 encoder_config->video_stream_factory = |
671 encoder_config->streams[0].target_bitrate_bps = | 697 new rtc::RefCountedObject<VideoStreamFactory>(); |
672 encoder_config->streams[0].max_bitrate_bps = 2000000; | |
673 | 698 |
674 encoder_config_ = encoder_config->Copy(); | 699 encoder_config_ = encoder_config->Copy(); |
675 } | 700 } |
676 | 701 |
677 void OnVideoStreamsCreated( | 702 void OnVideoStreamsCreated( |
678 VideoSendStream* send_stream, | 703 VideoSendStream* send_stream, |
679 const std::vector<VideoReceiveStream*>& receive_streams) override { | 704 const std::vector<VideoReceiveStream*>& receive_streams) override { |
680 send_stream_ = send_stream; | 705 send_stream_ = send_stream; |
681 } | 706 } |
682 | 707 |
| 708 void OnFrameGeneratorCapturerCreated( |
| 709 test::FrameGeneratorCapturer* frame_generator_capturer) override { |
| 710 frame_generator_ = frame_generator_capturer; |
| 711 } |
| 712 |
683 void PerformTest() override { | 713 void PerformTest() override { |
684 ASSERT_TRUE(time_to_reconfigure_.Wait(kDefaultTimeoutMs)) | 714 ASSERT_TRUE(time_to_reconfigure_.Wait(kDefaultTimeoutMs)) |
685 << "Timed out before receiving an initial high bitrate."; | 715 << "Timed out before receiving an initial high bitrate."; |
686 encoder_config_.streams[0].width *= 2; | 716 frame_generator_->ChangeResolution(kDefaultWidth * 2, kDefaultHeight * 2); |
687 encoder_config_.streams[0].height *= 2; | |
688 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); | 717 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
689 EXPECT_TRUE(Wait()) | 718 EXPECT_TRUE(Wait()) |
690 << "Timed out while waiting for a couple of high bitrate estimates " | 719 << "Timed out while waiting for a couple of high bitrate estimates " |
691 "after reconfiguring the send stream."; | 720 "after reconfiguring the send stream."; |
692 } | 721 } |
693 | 722 |
694 private: | 723 private: |
695 rtc::Event time_to_reconfigure_; | 724 rtc::Event time_to_reconfigure_; |
696 int encoder_inits_; | 725 int encoder_inits_; |
697 uint32_t last_set_bitrate_; | 726 uint32_t last_set_bitrate_; |
698 VideoSendStream* send_stream_; | 727 VideoSendStream* send_stream_; |
| 728 test::FrameGeneratorCapturer* frame_generator_; |
699 VideoEncoderConfig encoder_config_; | 729 VideoEncoderConfig encoder_config_; |
700 } test; | 730 } test; |
701 | 731 |
702 RunBaseTest(&test); | 732 RunBaseTest(&test); |
703 } | 733 } |
704 | 734 |
705 } // namespace webrtc | 735 } // namespace webrtc |
OLD | NEW |