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