Adding field trials to control additional quality scaler settings

Bug: webrtc:11924
Change-Id: I98c7aa4bd4536770500fec7e8e8da9629fddd20f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183342
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Commit-Queue: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32103}
This commit is contained in:
Harsh Maniar
2020-09-11 00:34:53 -07:00
committed by Commit Bot
parent 34f5ab82fe
commit 6e046668d1
3 changed files with 33 additions and 6 deletions

View File

@ -189,13 +189,17 @@ QualityScaler::QualityScaler(QualityScalerQpUsageHandlerInterface* handler,
// Protected ctor, should not be called directly.
QualityScaler::QualityScaler(QualityScalerQpUsageHandlerInterface* handler,
VideoEncoder::QpThresholds thresholds,
int64_t sampling_period_ms)
int64_t default_sampling_period_ms)
: handler_(handler),
thresholds_(thresholds),
sampling_period_ms_(sampling_period_ms),
sampling_period_ms_(QualityScalerSettings::ParseFromFieldTrials()
.SamplingPeriodMs()
.value_or(default_sampling_period_ms)),
fast_rampup_(true),
// Arbitrarily choose size based on 30 fps for 5 seconds.
average_qp_(5 * 30),
average_qp_(QualityScalerSettings::ParseFromFieldTrials()
.AverageQpWindow()
.value_or(5 * 30)),
framedrop_percent_media_opt_(5 * 30),
framedrop_percent_all_(5 * 30),
experiment_enabled_(QualityScalingExperiment::Enabled()),

View File

@ -21,14 +21,17 @@ const double kMinScaleFactor = 0.01;
QualityScalerSettings::QualityScalerSettings(
const WebRtcKeyValueConfig* const key_value_config)
: min_frames_("min_frames"),
: sampling_period_ms_("sampling_period_ms"),
average_qp_window_("average_qp_window"),
min_frames_("min_frames"),
initial_scale_factor_("initial_scale_factor"),
scale_factor_("scale_factor"),
initial_bitrate_interval_ms_("initial_bitrate_interval_ms"),
initial_bitrate_factor_("initial_bitrate_factor") {
ParseFieldTrial(
{&min_frames_, &initial_scale_factor_, &scale_factor_,
&initial_bitrate_interval_ms_, &initial_bitrate_factor_},
{&sampling_period_ms_, &average_qp_window_, &min_frames_,
&initial_scale_factor_, &scale_factor_, &initial_bitrate_interval_ms_,
&initial_bitrate_factor_},
key_value_config->Lookup("WebRTC-Video-QualityScalerSettings"));
}
@ -37,6 +40,22 @@ QualityScalerSettings QualityScalerSettings::ParseFromFieldTrials() {
return QualityScalerSettings(&field_trial_config);
}
absl::optional<int> QualityScalerSettings::SamplingPeriodMs() const {
if (sampling_period_ms_ && sampling_period_ms_.Value() <= 0) {
RTC_LOG(LS_WARNING) << "Unsupported sampling_period_ms value, ignored.";
return absl::nullopt;
}
return sampling_period_ms_.GetOptional();
}
absl::optional<int> QualityScalerSettings::AverageQpWindow() const {
if (average_qp_window_ && average_qp_window_.Value() <= 0) {
RTC_LOG(LS_WARNING) << "Unsupported average_qp_window value, ignored.";
return absl::nullopt;
}
return average_qp_window_.GetOptional();
}
absl::optional<int> QualityScalerSettings::MinFrames() const {
if (min_frames_ && min_frames_.Value() < kMinFrames) {
RTC_LOG(LS_WARNING) << "Unsupported min_frames value, ignored.";

View File

@ -21,6 +21,8 @@ class QualityScalerSettings final {
public:
static QualityScalerSettings ParseFromFieldTrials();
absl::optional<int> SamplingPeriodMs() const;
absl::optional<int> AverageQpWindow() const;
absl::optional<int> MinFrames() const;
absl::optional<double> InitialScaleFactor() const;
absl::optional<double> ScaleFactor() const;
@ -31,6 +33,8 @@ class QualityScalerSettings final {
explicit QualityScalerSettings(
const WebRtcKeyValueConfig* const key_value_config);
FieldTrialOptional<int> sampling_period_ms_;
FieldTrialOptional<int> average_qp_window_;
FieldTrialOptional<int> min_frames_;
FieldTrialOptional<double> initial_scale_factor_;
FieldTrialOptional<double> scale_factor_;