Wire up field trials for some experimental screenshare settings
Bug: b/132074409
Change-Id: I83d5334255bad4fcf585b9850506bbfe1914ba57
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/147868
Commit-Queue: Erik Språng <sprang@webrtc.org>
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28758}
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 1e3aadf..33c893d 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -260,6 +260,7 @@
"../../rtc_base:rtc_base_approved",
"../../rtc_base:rtc_numerics",
"../../rtc_base:rtc_task_queue",
+ "../../rtc_base/experiments:experimental_screenshare_settings",
"../../rtc_base/experiments:quality_scaler_settings",
"../../rtc_base/experiments:quality_scaling_experiment",
"../../rtc_base/experiments:rate_control_settings",
@@ -384,6 +385,7 @@
"../../rtc_base:rtc_base_approved",
"../../rtc_base:rtc_numerics",
"../../rtc_base/experiments:cpu_speed_experiment",
+ "../../rtc_base/experiments:experimental_screenshare_settings",
"../../rtc_base/experiments:field_trial_parser",
"../../rtc_base/experiments:rate_control_settings",
"../../system_wrappers:field_trial",
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
index 892d6ff..dcda30d 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc
@@ -35,6 +35,7 @@
#include "modules/video_coding/utility/simulcast_rate_allocator.h"
#include "modules/video_coding/utility/simulcast_utility.h"
#include "rtc_base/checks.h"
+#include "rtc_base/experiments/experimental_screenshare_settings.h"
#include "rtc_base/experiments/field_trial_parser.h"
#include "rtc_base/experiments/field_trial_units.h"
#include "rtc_base/logging.h"
@@ -280,6 +281,8 @@
: libvpx_(std::move(interface)),
experimental_cpu_speed_config_arm_(CpuSpeedExperiment::GetConfigs()),
rate_control_settings_(RateControlSettings::ParseFromFieldTrials()),
+ screenshare_max_qp_(
+ ExperimentalScreenshareSettings::ParseFromFieldTrials().MaxQp()),
encoded_complete_callback_(nullptr),
inited_(false),
timestamp_(0),
@@ -584,6 +587,9 @@
qp_max_ = std::max(rate_control_settings_.LibvpxVp8QpMax().value(),
static_cast<int>(vpx_configs_[0].rc_min_quantizer));
}
+ if (codec_.mode == VideoCodecMode::kScreensharing && screenshare_max_qp_) {
+ qp_max_ = *screenshare_max_qp_;
+ }
vpx_configs_[0].rc_max_quantizer = qp_max_;
vpx_configs_[0].rc_undershoot_pct = 100;
vpx_configs_[0].rc_overshoot_pct = 15;
diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
index bfe174b..675d386 100644
--- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
+++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h
@@ -103,6 +103,7 @@
const absl::optional<std::vector<CpuSpeedExperiment::Config>>
experimental_cpu_speed_config_arm_;
const RateControlSettings rate_control_settings_;
+ const absl::optional<int> screenshare_max_qp_;
EncodedImageCallback* encoded_complete_callback_;
VideoCodec codec_;
diff --git a/modules/video_coding/utility/simulcast_utility.cc b/modules/video_coding/utility/simulcast_utility.cc
index ee2ea51..3c3e235 100644
--- a/modules/video_coding/utility/simulcast_utility.cc
+++ b/modules/video_coding/utility/simulcast_utility.cc
@@ -14,6 +14,7 @@
#include <cmath>
#include "rtc_base/checks.h"
+#include "rtc_base/experiments/experimental_screenshare_settings.h"
namespace webrtc {
@@ -88,6 +89,15 @@
NumberOfTemporalLayers(codec, 0) != 2) {
return false;
}
+
+ if (codec.numberOfSimulcastStreams > 0 &&
+ ExperimentalScreenshareSettings::ParseFromFieldTrials()
+ .DefaultTlInBaseLayer()
+ .value_or(false)) {
+ // Don't use ScreenshareLayers for base layer, regardless of flags.
+ return false;
+ }
+
// Fixed default bitrates for legacy screenshare layers mode.
return (codec.numberOfSimulcastStreams == 0 && codec.maxBitrate == 1000) ||
(codec.numberOfSimulcastStreams >= 1 &&