diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc index 61b75af315..ada39c13cd 100644 --- a/webrtc/video/end_to_end_tests.cc +++ b/webrtc/video/end_to_end_tests.cc @@ -2996,9 +2996,10 @@ TEST_P(EndToEndTest, GetStats) { class RtcpXrObserver : public test::EndToEndTest { public: - explicit RtcpXrObserver(bool enable_rrtr) + RtcpXrObserver(bool enable_rrtr, bool enable_target_bitrate) : EndToEndTest(test::CallTest::kDefaultTimeoutMs), enable_rrtr_(enable_rrtr), + enable_target_bitrate_(enable_target_bitrate), sent_rtcp_sr_(0), sent_rtcp_rr_(0), sent_rtcp_rrtr_(0), @@ -3041,7 +3042,7 @@ class RtcpXrObserver : public test::EndToEndTest { if (sent_rtcp_sr_ > kNumRtcpReportPacketsToObserve && sent_rtcp_rr_ > kNumRtcpReportPacketsToObserve && - sent_rtcp_target_bitrate_) { + (sent_rtcp_target_bitrate_ || !enable_target_bitrate_)) { if (enable_rrtr_) { EXPECT_GT(sent_rtcp_rrtr_, 0); EXPECT_GT(sent_rtcp_dlrr_, 0); @@ -3049,6 +3050,7 @@ class RtcpXrObserver : public test::EndToEndTest { EXPECT_EQ(sent_rtcp_rrtr_, 0); EXPECT_EQ(sent_rtcp_dlrr_, 0); } + EXPECT_EQ(enable_target_bitrate_, sent_rtcp_target_bitrate_); observation_complete_.Set(); } return SEND_PACKET; @@ -3058,6 +3060,10 @@ class RtcpXrObserver : public test::EndToEndTest { VideoSendStream::Config* send_config, std::vector* receive_configs, VideoEncoderConfig* encoder_config) override { + if (enable_target_bitrate_) { + // TargetBitrate only signaled for screensharing. + encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; + } (*receive_configs)[0].rtp.rtcp_mode = RtcpMode::kReducedSize; (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = enable_rrtr_; @@ -3071,7 +3077,8 @@ class RtcpXrObserver : public test::EndToEndTest { static const int kNumRtcpReportPacketsToObserve = 5; rtc::CriticalSection crit_; - bool enable_rrtr_; + const bool enable_rrtr_; + const bool enable_target_bitrate_; int sent_rtcp_sr_; int sent_rtcp_rr_ GUARDED_BY(&crit_); int sent_rtcp_rrtr_ GUARDED_BY(&crit_); @@ -3079,13 +3086,23 @@ class RtcpXrObserver : public test::EndToEndTest { int sent_rtcp_dlrr_; }; -TEST_P(EndToEndTest, TestExtendedReportsWithRrtr) { - RtcpXrObserver test(true); +TEST_P(EndToEndTest, TestExtendedReportsWithRrtrWithoutTargetBitrate) { + RtcpXrObserver test(true, false); RunBaseTest(&test); } -TEST_P(EndToEndTest, TestExtendedReportsWithoutRrtr) { - RtcpXrObserver test(false); +TEST_P(EndToEndTest, TestExtendedReportsWithoutRrtrWithoutTargetBitrate) { + RtcpXrObserver test(false, false); + RunBaseTest(&test); +} + +TEST_P(EndToEndTest, TestExtendedReportsWithRrtrWithTargetBitrate) { + RtcpXrObserver test(true, true); + RunBaseTest(&test); +} + +TEST_P(EndToEndTest, TestExtendedReportsWithoutRrtrWithTargetBitrate) { + RtcpXrObserver test(false, true); RunBaseTest(&test); } diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc index 6dc68484d1..41f8b3f367 100644 --- a/webrtc/video/video_send_stream.cc +++ b/webrtc/video/video_send_stream.cc @@ -617,7 +617,11 @@ VideoSendStream::VideoSendStream( // it was created on. thread_sync_event_.Wait(rtc::Event::kForever); send_stream_->RegisterProcessThread(module_process_thread); - vie_encoder_->SetBitrateObserver(send_stream_.get()); + // TODO(sprang): Enable this also for regular video calls if it works well. + if (encoder_config.content_type == VideoEncoderConfig::ContentType::kScreen) { + // Only signal target bitrate for screenshare streams, for now. + vie_encoder_->SetBitrateObserver(send_stream_.get()); + } vie_encoder_->RegisterProcessThread(module_process_thread); ReconfigureVideoEncoder(std::move(encoder_config));