diff --git a/rtc_base/experiments/balanced_degradation_settings.cc b/rtc_base/experiments/balanced_degradation_settings.cc index 3205550069..e1ed1bc945 100644 --- a/rtc_base/experiments/balanced_degradation_settings.cc +++ b/rtc_base/experiments/balanced_degradation_settings.cc @@ -21,7 +21,7 @@ namespace webrtc { namespace { constexpr char kFieldTrial[] = "WebRTC-Video-BalancedDegradationSettings"; constexpr int kMinFps = 1; -constexpr int kMaxFps = 100; +constexpr int kMaxFps = 100; // 100 means unlimited fps. std::vector DefaultConfigs() { return {{320 * 240, 7, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, @@ -164,7 +164,9 @@ int GetFps(VideoCodecType type, break; } - return fps.value_or(config->fps); + const int framerate = fps.value_or(config->fps); + + return (framerate == kMaxFps) ? std::numeric_limits::max() : framerate; } } // namespace diff --git a/rtc_base/experiments/balanced_degradation_settings_unittest.cc b/rtc_base/experiments/balanced_degradation_settings_unittest.cc index c604b554f0..76a76242eb 100644 --- a/rtc_base/experiments/balanced_degradation_settings_unittest.cc +++ b/rtc_base/experiments/balanced_degradation_settings_unittest.cc @@ -208,6 +208,18 @@ TEST(BalancedDegradationSettings, GetsGenericFps) { settings.MaxFps(kVideoCodecGeneric, 3000)); } +TEST(BalancedDegradationSettings, GetsUnlimitedForMaxValidFps) { + webrtc::test::ScopedFieldTrials field_trials( + "WebRTC-Video-BalancedDegradationSettings/" + "pixels:1000|2000|3000,fps:5|15|100,vp8_fps:30|100|100/"); + const int kUnlimitedFps = std::numeric_limits::max(); + BalancedDegradationSettings settings; + EXPECT_EQ(15, settings.MinFps(kVideoCodecH264, 2000)); + EXPECT_EQ(kUnlimitedFps, settings.MinFps(kVideoCodecH264, 2001)); + EXPECT_EQ(30, settings.MinFps(kVideoCodecVP8, 1000)); + EXPECT_EQ(kUnlimitedFps, settings.MinFps(kVideoCodecVP8, 1001)); +} + TEST(BalancedDegradationSettings, QpThresholdsNotSetByDefault) { webrtc::test::ScopedFieldTrials field_trials( "WebRTC-Video-BalancedDegradationSettings/"