diff --git a/modules/video_coding/codecs/vp8/screenshare_layers.cc b/modules/video_coding/codecs/vp8/screenshare_layers.cc index 733ca0aee6..cd2449052b 100644 --- a/modules/video_coding/codecs/vp8/screenshare_layers.cc +++ b/modules/video_coding/codecs/vp8/screenshare_layers.cc @@ -221,10 +221,12 @@ void ScreenshareLayers::OnRatesUpdated( capture_framerate_ = target_framerate_; bitrate_updated_ = true; } else { - bitrate_updated_ = capture_framerate_ && - framerate_fps != static_cast(*capture_framerate_); - bitrate_updated_ |= tl0_kbps != layers_[0].target_rate_kbps_; - bitrate_updated_ |= tl1_kbps != layers_[1].target_rate_kbps_; + if ((capture_framerate_ && + framerate_fps != static_cast(*capture_framerate_)) || + (tl0_kbps != layers_[0].target_rate_kbps_) || + (tl1_kbps != layers_[1].target_rate_kbps_)) { + bitrate_updated_ = true; + } if (framerate_fps < 0) { capture_framerate_.reset(); diff --git a/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc b/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc index 04762a3606..e6f121b802 100644 --- a/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc +++ b/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc @@ -642,4 +642,23 @@ TEST_F(ScreenshareLayerTest, AdjustsBitrateWhenDroppingFrames) { EXPECT_EQ(cfg_.rc_target_bitrate, default_bitrate * 2); } +TEST_F(ScreenshareLayerTest, UpdatesConfigurationAfterRateChange) { + // Set inital rate again, no need to update configuration. + layers_->OnRatesUpdated(kDefault2TlBitratesBps, kFrameRate); + EXPECT_FALSE(layers_->UpdateConfiguration(&cfg_)); + + // Rate changed, now update config. + std::vector bitrates = kDefault2TlBitratesBps; + bitrates[1] -= 100000; + layers_->OnRatesUpdated(bitrates, 5); + EXPECT_TRUE(layers_->UpdateConfiguration(&cfg_)); + + // Changed rate, but then set changed rate again before trying to update + // configuration, update should still apply. + bitrates[1] -= 100000; + layers_->OnRatesUpdated(bitrates, 5); + layers_->OnRatesUpdated(bitrates, 5); + EXPECT_TRUE(layers_->UpdateConfiguration(&cfg_)); +} + } // namespace webrtc