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

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

Issue 2351633002: Let ViEEncoder handle resolution changes. (Closed)
Patch Set: Fix build on Win 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
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 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698