BalancedDegradationSettings: add option to configure no fps limit.

If configuring max valid framerate (100), no framerate restriction is
used (std::numeric_limits<int>::max()).

E.g. pixels:1000|2000,fps:5|10 is same as pixels:1000|2000|3000,fps:5|10|100

Bug: none
Change-Id: Ie981841ee8e23cb73c0ef55738ca69055916d902
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/148980
Commit-Queue: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Magnus Flodman <mflodman@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28854}
diff --git a/rtc_base/experiments/balanced_degradation_settings.cc b/rtc_base/experiments/balanced_degradation_settings.cc
index 3205550..e1ed1bc 100644
--- a/rtc_base/experiments/balanced_degradation_settings.cc
+++ b/rtc_base/experiments/balanced_degradation_settings.cc
@@ -21,7 +21,7 @@
 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<BalancedDegradationSettings::Config> DefaultConfigs() {
   return {{320 * 240, 7, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
@@ -164,7 +164,9 @@
       break;
   }
 
-  return fps.value_or(config->fps);
+  const int framerate = fps.value_or(config->fps);
+
+  return (framerate == kMaxFps) ? std::numeric_limits<int>::max() : framerate;
 }
 }  // namespace
 
diff --git a/rtc_base/experiments/balanced_degradation_settings_unittest.cc b/rtc_base/experiments/balanced_degradation_settings_unittest.cc
index c604b55..76a7624 100644
--- a/rtc_base/experiments/balanced_degradation_settings_unittest.cc
+++ b/rtc_base/experiments/balanced_degradation_settings_unittest.cc
@@ -208,6 +208,18 @@
             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<int>::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/"