summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/rtc_base/experiments/quality_scaling_experiment.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/rtc_base/experiments/quality_scaling_experiment.h')
-rw-r--r--third_party/libwebrtc/rtc_base/experiments/quality_scaling_experiment.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/third_party/libwebrtc/rtc_base/experiments/quality_scaling_experiment.h b/third_party/libwebrtc/rtc_base/experiments/quality_scaling_experiment.h
new file mode 100644
index 0000000000..bd24c06e55
--- /dev/null
+++ b/third_party/libwebrtc/rtc_base/experiments/quality_scaling_experiment.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2018 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+#ifndef RTC_BASE_EXPERIMENTS_QUALITY_SCALING_EXPERIMENT_H_
+#define RTC_BASE_EXPERIMENTS_QUALITY_SCALING_EXPERIMENT_H_
+
+#include "absl/types/optional.h"
+#include "api/field_trials_view.h"
+#include "api/video_codecs/video_encoder.h"
+
+namespace webrtc {
+class QualityScalingExperiment {
+ public:
+ struct Settings {
+ int vp8_low; // VP8: low QP threshold.
+ int vp8_high; // VP8: high QP threshold.
+ int vp9_low; // VP9: low QP threshold.
+ int vp9_high; // VP9: high QP threshold.
+ int h264_low; // H264: low QP threshold.
+ int h264_high; // H264: high QP threshold.
+ int generic_low; // Generic: low QP threshold.
+ int generic_high; // Generic: high QP threshold.
+ float alpha_high; // `alpha_` for ExpFilter used when checking high QP.
+ float alpha_low; // `alpha_` for ExpFilter used when checking low QP.
+ int drop; // >0 sets `use_all_drop_reasons` to true.
+ };
+
+ // Used by QualityScaler.
+ struct Config {
+ float alpha_high = 0.9995f;
+ float alpha_low = 0.9999f;
+ // If set, all type of dropped frames are used.
+ // Otherwise only dropped frames by MediaOptimization are used.
+ bool use_all_drop_reasons = false;
+ };
+
+ // Returns true if the experiment is enabled.
+ static bool Enabled(const FieldTrialsView& field_trials);
+
+ // Returns settings from field trial.
+ static absl::optional<Settings> ParseSettings(
+ const FieldTrialsView& field_trials);
+
+ // Returns QpThresholds for the `codec_type`.
+ static absl::optional<VideoEncoder::QpThresholds> GetQpThresholds(
+ VideoCodecType codec_type,
+ const FieldTrialsView& field_trials);
+
+ // Returns parsed values. If the parsing fails, default values are returned.
+ static Config GetConfig(const FieldTrialsView& field_trials);
+};
+
+} // namespace webrtc
+
+#endif // RTC_BASE_EXPERIMENTS_QUALITY_SCALING_EXPERIMENT_H_