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

Side by Side Diff: webrtc/call/call_perf_tests.cc

Issue 2351633002: Let ViEEncoder handle resolution changes. (Closed)
Patch Set: rebased Created 4 years, 2 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/call/bitrate_estimator_tests.cc ('k') | webrtc/call/rampup_tests.h » ('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 10
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
OLDNEW
« no previous file with comments | « webrtc/call/bitrate_estimator_tests.cc ('k') | webrtc/call/rampup_tests.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698