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