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:
@ -189,13 +189,17 @@ QualityScaler::QualityScaler(QualityScalerQpUsageHandlerInterface* handler,
|
|||||||
// Protected ctor, should not be called directly.
|
// Protected ctor, should not be called directly.
|
||||||
QualityScaler::QualityScaler(QualityScalerQpUsageHandlerInterface* handler,
|
QualityScaler::QualityScaler(QualityScalerQpUsageHandlerInterface* handler,
|
||||||
VideoEncoder::QpThresholds thresholds,
|
VideoEncoder::QpThresholds thresholds,
|
||||||
int64_t sampling_period_ms)
|
int64_t default_sampling_period_ms)
|
||||||
: handler_(handler),
|
: handler_(handler),
|
||||||
thresholds_(thresholds),
|
thresholds_(thresholds),
|
||||||
sampling_period_ms_(sampling_period_ms),
|
sampling_period_ms_(QualityScalerSettings::ParseFromFieldTrials()
|
||||||
|
.SamplingPeriodMs()
|
||||||
|
.value_or(default_sampling_period_ms)),
|
||||||
fast_rampup_(true),
|
fast_rampup_(true),
|
||||||
// Arbitrarily choose size based on 30 fps for 5 seconds.
|
// 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_media_opt_(5 * 30),
|
||||||
framedrop_percent_all_(5 * 30),
|
framedrop_percent_all_(5 * 30),
|
||||||
experiment_enabled_(QualityScalingExperiment::Enabled()),
|
experiment_enabled_(QualityScalingExperiment::Enabled()),
|
||||||
|
@ -21,14 +21,17 @@ const double kMinScaleFactor = 0.01;
|
|||||||
|
|
||||||
QualityScalerSettings::QualityScalerSettings(
|
QualityScalerSettings::QualityScalerSettings(
|
||||||
const WebRtcKeyValueConfig* const key_value_config)
|
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"),
|
initial_scale_factor_("initial_scale_factor"),
|
||||||
scale_factor_("scale_factor"),
|
scale_factor_("scale_factor"),
|
||||||
initial_bitrate_interval_ms_("initial_bitrate_interval_ms"),
|
initial_bitrate_interval_ms_("initial_bitrate_interval_ms"),
|
||||||
initial_bitrate_factor_("initial_bitrate_factor") {
|
initial_bitrate_factor_("initial_bitrate_factor") {
|
||||||
ParseFieldTrial(
|
ParseFieldTrial(
|
||||||
{&min_frames_, &initial_scale_factor_, &scale_factor_,
|
{&sampling_period_ms_, &average_qp_window_, &min_frames_,
|
||||||
&initial_bitrate_interval_ms_, &initial_bitrate_factor_},
|
&initial_scale_factor_, &scale_factor_, &initial_bitrate_interval_ms_,
|
||||||
|
&initial_bitrate_factor_},
|
||||||
key_value_config->Lookup("WebRTC-Video-QualityScalerSettings"));
|
key_value_config->Lookup("WebRTC-Video-QualityScalerSettings"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,6 +40,22 @@ QualityScalerSettings QualityScalerSettings::ParseFromFieldTrials() {
|
|||||||
return QualityScalerSettings(&field_trial_config);
|
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 {
|
absl::optional<int> QualityScalerSettings::MinFrames() const {
|
||||||
if (min_frames_ && min_frames_.Value() < kMinFrames) {
|
if (min_frames_ && min_frames_.Value() < kMinFrames) {
|
||||||
RTC_LOG(LS_WARNING) << "Unsupported min_frames value, ignored.";
|
RTC_LOG(LS_WARNING) << "Unsupported min_frames value, ignored.";
|
||||||
|
@ -21,6 +21,8 @@ class QualityScalerSettings final {
|
|||||||
public:
|
public:
|
||||||
static QualityScalerSettings ParseFromFieldTrials();
|
static QualityScalerSettings ParseFromFieldTrials();
|
||||||
|
|
||||||
|
absl::optional<int> SamplingPeriodMs() const;
|
||||||
|
absl::optional<int> AverageQpWindow() const;
|
||||||
absl::optional<int> MinFrames() const;
|
absl::optional<int> MinFrames() const;
|
||||||
absl::optional<double> InitialScaleFactor() const;
|
absl::optional<double> InitialScaleFactor() const;
|
||||||
absl::optional<double> ScaleFactor() const;
|
absl::optional<double> ScaleFactor() const;
|
||||||
@ -31,6 +33,8 @@ class QualityScalerSettings final {
|
|||||||
explicit QualityScalerSettings(
|
explicit QualityScalerSettings(
|
||||||
const WebRtcKeyValueConfig* const key_value_config);
|
const WebRtcKeyValueConfig* const key_value_config);
|
||||||
|
|
||||||
|
FieldTrialOptional<int> sampling_period_ms_;
|
||||||
|
FieldTrialOptional<int> average_qp_window_;
|
||||||
FieldTrialOptional<int> min_frames_;
|
FieldTrialOptional<int> min_frames_;
|
||||||
FieldTrialOptional<double> initial_scale_factor_;
|
FieldTrialOptional<double> initial_scale_factor_;
|
||||||
FieldTrialOptional<double> scale_factor_;
|
FieldTrialOptional<double> scale_factor_;
|
||||||
|
Reference in New Issue
Block a user