From bfe3d854cd6c5773db1693550e1ce6b05bdbc6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Spr=C3=A5ng?= Date: Tue, 15 May 2018 09:54:14 +0200 Subject: [PATCH] Add field trial to override default number of temporal layers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:9260 Change-Id: I8765410f4afda61a0381cf35ec48be877197d790 Reviewed-on: https://webrtc-review.googlesource.com/75320 Commit-Queue: Erik Språng Reviewed-by: Per Kjellander Reviewed-by: Rasmus Brandt Cr-Commit-Position: refs/heads/master@{#23234} --- media/engine/simulcast.cc | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/media/engine/simulcast.cc b/media/engine/simulcast.cc index 69cffedaed..58ca9e8ecd 100644 --- a/media/engine/simulcast.cc +++ b/media/engine/simulcast.cc @@ -53,13 +53,31 @@ const SimulcastFormat kSimulcastFormats[] = { 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 @@ std::vector GetNormalSimulcastLayers( 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);