Add field trial to override default number of temporal layers
Bug: webrtc:9260
Change-Id: I8765410f4afda61a0381cf35ec48be877197d790
Reviewed-on: https://webrtc-review.googlesource.com/75320
Commit-Queue: Erik Språng <sprang@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23234}
diff --git a/media/engine/simulcast.cc b/media/engine/simulcast.cc
index 69cffed..58ca9e8 100644
--- a/media/engine/simulcast.cc
+++ b/media/engine/simulcast.cc
@@ -53,13 +53,31 @@
const int kMaxScreenshareSimulcastLayers = 2;
-// Multiway: Number of temporal layers for each simulcast stream, for maximum
-// possible number of simulcast streams |kMaxSimulcastStreams|. The array
-// goes from lowest resolution at position 0 to highest resolution.
-// For example, first three elements correspond to say: QVGA, VGA, WHD.
-static const int
- kDefaultConferenceNumberOfTemporalLayers[webrtc::kMaxSimulcastStreams] =
- {3, 3, 3, 3};
+// Multiway: Number of temporal layers for each simulcast stream.
+int DefaultNumberOfTemporalLayers(int simulcast_id) {
+ RTC_CHECK_GE(simulcast_id, 0);
+ RTC_CHECK_LT(simulcast_id, webrtc::kMaxSimulcastStreams);
+
+ const int kDefaultNumTemporalLayers = 3;
+
+ const std::string group_name =
+ webrtc::field_trial::FindFullName("WebRTC-VP8ConferenceTemporalLayers");
+ if (group_name.empty())
+ return kDefaultNumTemporalLayers;
+
+ int num_temporal_layers = kDefaultNumTemporalLayers;
+ if (sscanf(group_name.c_str(), "%d", &num_temporal_layers) == 1 &&
+ num_temporal_layers > 0 &&
+ num_temporal_layers <= webrtc::kMaxTemporalStreams) {
+ return num_temporal_layers;
+ }
+
+ RTC_LOG(LS_WARNING) << "Attempt to set number of temporal layers to "
+ "incorrect value: "
+ << group_name;
+
+ return kDefaultNumTemporalLayers;
+}
int FindSimulcastFormatIndex(int width, int height) {
RTC_DCHECK_GE(width, 0);
@@ -196,7 +214,7 @@
layers[s].height = height;
// TODO(pbos): Fill actual temporal-layer bitrate thresholds.
layers[s].max_qp = max_qp;
- layers[s].num_temporal_layers = kDefaultConferenceNumberOfTemporalLayers[s];
+ layers[s].num_temporal_layers = DefaultNumberOfTemporalLayers(s);
layers[s].max_bitrate_bps = FindSimulcastMaxBitrateBps(width, height);
layers[s].target_bitrate_bps = FindSimulcastTargetBitrateBps(width, height);
layers[s].min_bitrate_bps = FindSimulcastMinBitrateBps(width, height);