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 now known. | |
sprang_webrtc
2016/09/22 13:06:16
now? or not?
perkj_webrtc
2016/09/26 12:09:42
Done.
| |
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 } |
638 ++encoder_inits_; | |
639 if (encoder_inits_ == 2) { | 660 if (encoder_inits_ == 2) { |
661 // First time initialization. Frame size is known. | |
662 EXPECT_EQ(kDefaultWidth, config->width); | |
663 EXPECT_EQ(kDefaultHeight, config->height); | |
664 } | |
665 if (encoder_inits_ == 3) { | |
666 EXPECT_EQ(2 * kDefaultWidth, config->width); | |
667 EXPECT_EQ(2 * kDefaultHeight, config->height); | |
640 EXPECT_GE(last_set_bitrate_, kReconfigureThresholdKbps); | 668 EXPECT_GE(last_set_bitrate_, kReconfigureThresholdKbps); |
641 EXPECT_NEAR(config->startBitrate, | 669 EXPECT_NEAR(config->startBitrate, |
642 last_set_bitrate_, | 670 last_set_bitrate_, |
643 kPermittedReconfiguredBitrateDiffKbps) | 671 kPermittedReconfiguredBitrateDiffKbps) |
644 << "Encoder reconfigured with bitrate too far away from last set."; | 672 << "Encoder reconfigured with bitrate too far away from last set."; |
645 observation_complete_.Set(); | 673 observation_complete_.Set(); |
646 } | 674 } |
647 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 675 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
648 } | 676 } |
649 | 677 |
650 int32_t SetRates(uint32_t new_target_bitrate_kbps, | 678 int32_t SetRates(uint32_t new_target_bitrate_kbps, |
651 uint32_t framerate) override { | 679 uint32_t framerate) override { |
652 last_set_bitrate_ = new_target_bitrate_kbps; | 680 last_set_bitrate_ = new_target_bitrate_kbps; |
653 if (encoder_inits_ == 1 && | 681 if (encoder_inits_ == 2 && |
654 new_target_bitrate_kbps > kReconfigureThresholdKbps) { | 682 new_target_bitrate_kbps > kReconfigureThresholdKbps) { |
655 time_to_reconfigure_.Set(); | 683 time_to_reconfigure_.Set(); |
656 } | 684 } |
657 return FakeEncoder::SetRates(new_target_bitrate_kbps, framerate); | 685 return FakeEncoder::SetRates(new_target_bitrate_kbps, framerate); |
658 } | 686 } |
659 | 687 |
660 Call::Config GetSenderCallConfig() override { | 688 Call::Config GetSenderCallConfig() override { |
661 Call::Config config = EndToEndTest::GetSenderCallConfig(); | 689 Call::Config config = EndToEndTest::GetSenderCallConfig(); |
662 config.bitrate_config.start_bitrate_bps = kInitialBitrateKbps * 1000; | 690 config.bitrate_config.start_bitrate_bps = kInitialBitrateKbps * 1000; |
663 return config; | 691 return config; |
664 } | 692 } |
665 | 693 |
666 void ModifyVideoConfigs( | 694 void ModifyVideoConfigs( |
667 VideoSendStream::Config* send_config, | 695 VideoSendStream::Config* send_config, |
668 std::vector<VideoReceiveStream::Config>* receive_configs, | 696 std::vector<VideoReceiveStream::Config>* receive_configs, |
669 VideoEncoderConfig* encoder_config) override { | 697 VideoEncoderConfig* encoder_config) override { |
670 send_config->encoder_settings.encoder = this; | 698 send_config->encoder_settings.encoder = this; |
671 encoder_config->streams[0].min_bitrate_bps = 50000; | 699 encoder_config->encoder_stream_factory = |
672 encoder_config->streams[0].target_bitrate_bps = | 700 new rtc::RefCountedObject<VideoStreamFactory>(); |
673 encoder_config->streams[0].max_bitrate_bps = 2000000; | |
674 | 701 |
675 encoder_config_ = encoder_config->Copy(); | 702 encoder_config_ = encoder_config->Copy(); |
676 } | 703 } |
677 | 704 |
678 void OnVideoStreamsCreated( | 705 void OnVideoStreamsCreated( |
679 VideoSendStream* send_stream, | 706 VideoSendStream* send_stream, |
680 const std::vector<VideoReceiveStream*>& receive_streams) override { | 707 const std::vector<VideoReceiveStream*>& receive_streams) override { |
681 send_stream_ = send_stream; | 708 send_stream_ = send_stream; |
682 } | 709 } |
683 | 710 |
711 void OnFrameGeneratorCapturerCreated( | |
712 test::FrameGeneratorCapturer* frame_generator_capturer) override { | |
713 frame_generator_ = frame_generator_capturer; | |
714 } | |
715 | |
684 void PerformTest() override { | 716 void PerformTest() override { |
685 ASSERT_TRUE(time_to_reconfigure_.Wait(kDefaultTimeoutMs)) | 717 ASSERT_TRUE(time_to_reconfigure_.Wait(kDefaultTimeoutMs)) |
686 << "Timed out before receiving an initial high bitrate."; | 718 << "Timed out before receiving an initial high bitrate."; |
687 encoder_config_.streams[0].width *= 2; | 719 frame_generator_->ChangeResolution(kDefaultWidth * 2, kDefaultHeight * 2); |
688 encoder_config_.streams[0].height *= 2; | |
689 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); | 720 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
690 EXPECT_TRUE(Wait()) | 721 EXPECT_TRUE(Wait()) |
691 << "Timed out while waiting for a couple of high bitrate estimates " | 722 << "Timed out while waiting for a couple of high bitrate estimates " |
692 "after reconfiguring the send stream."; | 723 "after reconfiguring the send stream."; |
693 } | 724 } |
694 | 725 |
695 private: | 726 private: |
696 rtc::Event time_to_reconfigure_; | 727 rtc::Event time_to_reconfigure_; |
697 int encoder_inits_; | 728 int encoder_inits_; |
698 uint32_t last_set_bitrate_; | 729 uint32_t last_set_bitrate_; |
699 VideoSendStream* send_stream_; | 730 VideoSendStream* send_stream_; |
731 test::FrameGeneratorCapturer* frame_generator_; | |
700 VideoEncoderConfig encoder_config_; | 732 VideoEncoderConfig encoder_config_; |
701 } test; | 733 } test; |
702 | 734 |
703 RunBaseTest(&test); | 735 RunBaseTest(&test); |
704 } | 736 } |
705 | 737 |
706 } // namespace webrtc | 738 } // namespace webrtc |
OLD | NEW |