Update field trial for allowing cropped resolution when limiting max layers.
Make max_ratio:0.1 default.
BUG: webrtc:12459
Change-Id: Ia938836f2b95467fce66a38f2525b1d2be1a352b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/206803
Commit-Queue: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33261}
diff --git a/media/engine/simulcast.cc b/media/engine/simulcast.cc
index 6b3ed71..ebc6a24 100644
--- a/media/engine/simulcast.cc
+++ b/media/engine/simulcast.cc
@@ -42,6 +42,8 @@
constexpr char kUseLegacySimulcastLayerLimitFieldTrial[] =
"WebRTC-LegacySimulcastLayerLimit";
+constexpr double kDefaultMaxRoundupRate = 0.1;
+
// TODO(webrtc:12415): Flip this to a kill switch when this feature launches.
bool EnableLowresBitrateInterpolation(
const webrtc::WebRtcKeyValueConfig& trials) {
@@ -209,7 +211,7 @@
static_cast<float>(total_pixels_up - total_pixels_down);
// Use upper resolution if |rate| is below the configured threshold.
- size_t max_layers = (max_roundup_rate && rate < max_roundup_rate.value())
+ size_t max_layers = (rate < max_roundup_rate.value_or(kDefaultMaxRoundupRate))
? formats[index - 1].max_layers
: formats[index].max_layers;
webrtc::DataRate max_bitrate = Interpolate(formats[index - 1].max_bitrate,
diff --git a/media/engine/simulcast_unittest.cc b/media/engine/simulcast_unittest.cc
index 98ee109..47a9db7 100644
--- a/media/engine/simulcast_unittest.cc
+++ b/media/engine/simulcast_unittest.cc
@@ -377,7 +377,9 @@
}
}
-TEST(SimulcastTest, MaxLayers) {
+TEST(SimulcastTest, MaxLayersWithRoundUpDisabled) {
+ test::ScopedFieldTrials field_trials(
+ "WebRTC-SimulcastLayerLimitRoundUp/max_ratio:0.0/");
FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const int kMaxLayers = 3;
@@ -403,9 +405,8 @@
EXPECT_EQ(1u, streams.size());
}
-TEST(SimulcastTest, MaxLayersWithFieldTrial) {
- test::ScopedFieldTrials field_trials(
- "WebRTC-SimulcastLayerLimitRoundUp/max_ratio:0.1/");
+TEST(SimulcastTest, MaxLayersWithDefaultRoundUpRatio) {
+ // Default: "WebRTC-SimulcastLayerLimitRoundUp/max_ratio:0.1/"
FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const int kMaxLayers = 3;
@@ -420,7 +421,7 @@
kBitratePriority, kQpMax, !kScreenshare,
true, trials);
EXPECT_EQ(3u, streams.size());
- streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 960, 510,
+ streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 960, 508,
kBitratePriority, kQpMax, !kScreenshare,
true, trials);
EXPECT_EQ(2u, streams.size());
@@ -439,6 +440,29 @@
EXPECT_EQ(1u, streams.size());
}
+TEST(SimulcastTest, MaxLayersWithRoundUpRatio) {
+ test::ScopedFieldTrials field_trials(
+ "WebRTC-SimulcastLayerLimitRoundUp/max_ratio:0.13/");
+ FieldTrialBasedConfig trials;
+ const size_t kMinLayers = 1;
+ const int kMaxLayers = 3;
+
+ std::vector<VideoStream> streams;
+ streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 480, 270,
+ kBitratePriority, kQpMax, !kScreenshare,
+ true, trials);
+ EXPECT_EQ(2u, streams.size());
+ // Lowest cropped height where max layers from higher resolution is used.
+ streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 480, 252,
+ kBitratePriority, kQpMax, !kScreenshare,
+ true, trials);
+ EXPECT_EQ(2u, streams.size());
+ streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 480, 250,
+ kBitratePriority, kQpMax, !kScreenshare,
+ true, trials);
+ EXPECT_EQ(1u, streams.size());
+}
+
TEST(SimulcastTest, BitratesInterpolatedForResBelow180p) {
// TODO(webrtc:12415): Remove when feature launches.
test::ScopedFieldTrials field_trials(