Remove Vp9VariableFramerateScreenshare experiment

Bug: webrtc:10310
Change-Id: Ibd31e111bccbbc61d9f3da63bfdf54448820fb80
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/347661
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42109}
This commit is contained in:
Ilya Nikolaevskiy 2024-04-17 16:27:44 +02:00 committed by WebRTC LUCI CQ
parent 42f12d5183
commit 4bad933233
3 changed files with 14 additions and 55 deletions

View File

@ -814,9 +814,6 @@ POLICY_EXEMPT_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
FieldTrial('WebRTC-VP9QualityScaler',
'webrtc:11319',
date(2024, 4, 1)),
FieldTrial('WebRTC-VP9VariableFramerateScreenshare',
'webrtc:10310',
date(2024, 4, 1)),
FieldTrial('WebRTC-Video-BalancedDegradation',
'webrtc:7607',
INDEFINITE),
@ -890,7 +887,7 @@ POLICY_EXEMPT_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
]) # yapf: disable
POLICY_EXEMPT_FIELD_TRIALS_DIGEST: str = \
'5690e723f0ca378ceb708e02bf2334327c0f64b6'
'680deace2615186c4d3cf9ed3bd3595b7b6c8ae8'
REGISTERED_FIELD_TRIALS: FrozenSet[FieldTrial] = ACTIVE_FIELD_TRIALS.union(
POLICY_EXEMPT_FIELD_TRIALS)

View File

@ -63,6 +63,13 @@ uint8_t kUpdBufIdx[4] = {0, 0, 1, 0};
// Maximum allowed PID difference for differnet per-layer frame-rate case.
const int kMaxAllowedPidDiff = 30;
namespace variable_framerate_screenshare {
constexpr double kMinFps = 5.0;
constexpr int kMinQP = 32;
constexpr int kUndershootPct = 30;
constexpr int kFramesBeforeSteadyState = 5;
} // namespace variable_framerate_screenshare
// TODO(ilink): Tune these thresholds further.
// Selected using ConverenceMotion_1280_720_50.yuv clip.
// No toggling observed on any link capacity from 100-2000kbps.
@ -250,10 +257,7 @@ LibvpxVp9Encoder::LibvpxVp9Encoder(const Environment& env,
ss_info_needed_(false),
force_all_active_layers_(false),
is_flexible_mode_(false),
variable_framerate_experiment_(
ParseVariableFramerateConfig(env.field_trials())),
variable_framerate_controller_(
variable_framerate_experiment_.framerate_limit),
variable_framerate_controller_(variable_framerate_screenshare::kMinFps),
quality_scaler_experiment_(ParseQualityScalerConfig(env.field_trials())),
external_ref_ctrl_(
!env.field_trials().IsDisabled("WebRTC-Vp9ExternalRefCtrl")),
@ -1033,10 +1037,9 @@ int LibvpxVp9Encoder::Encode(const VideoFrame& input_image,
// interfere, they must be queried in order of increasing limit.
bool use_steady_state_limiter =
variable_framerate_experiment_.enabled &&
input_image.update_rect().IsEmpty() &&
num_steady_state_frames_ >=
variable_framerate_experiment_.frames_before_steady_state;
variable_framerate_screenshare::kFramesBeforeSteadyState;
// Need to check all frame limiters, even if lower layers are disabled,
// because variable frame-rate limiter should be checked after the first
@ -1047,7 +1050,7 @@ int LibvpxVp9Encoder::Encode(const VideoFrame& input_image,
framerate_controller_[layer_id.spatial_layer_id].GetTargetRate();
// Use steady state rate-limiter at the correct place.
if (use_steady_state_limiter &&
layer_fps > variable_framerate_experiment_.framerate_limit - 1e-9) {
layer_fps > variable_framerate_screenshare::kMinFps - 1e-9) {
if (variable_framerate_controller_.DropFrame(frame_timestamp_ms)) {
layer_id.spatial_layer_id = num_active_spatial_layers_;
}
@ -1794,9 +1797,8 @@ void LibvpxVp9Encoder::DeliverBufferedFrame(bool end_of_picture) {
// Only frames on spatial layers, which may be limited in a steady state
// are considered for steady state detection.
if (framerate_controller_[spatial_idx].GetTargetRate() >
variable_framerate_experiment_.framerate_limit + 1e-9) {
if (encoded_image_.qp_ <=
variable_framerate_experiment_.steady_state_qp &&
variable_framerate_screenshare::kMinFps + 1e-9) {
if (encoded_image_.qp_ <= variable_framerate_screenshare::kMinQP &&
encoded_image_.size() <= steady_state_size) {
++num_steady_state_frames_;
} else {
@ -1876,34 +1878,10 @@ size_t LibvpxVp9Encoder::SteadyStateSize(int sid, int tid) {
: codec_.maxFramerate;
return static_cast<size_t>(
bitrate_bps / (8 * fps) *
(100 -
variable_framerate_experiment_.steady_state_undershoot_percentage) /
100 +
(100 - variable_framerate_screenshare::kUndershootPct) / 100 +
0.5);
}
// static
LibvpxVp9Encoder::VariableFramerateExperiment
LibvpxVp9Encoder::ParseVariableFramerateConfig(const FieldTrialsView& trials) {
FieldTrialFlag enabled = FieldTrialFlag("Enabled");
FieldTrialParameter<double> framerate_limit("min_fps", 5.0);
FieldTrialParameter<int> qp("min_qp", 32);
FieldTrialParameter<int> undershoot_percentage("undershoot", 30);
FieldTrialParameter<int> frames_before_steady_state(
"frames_before_steady_state", 5);
ParseFieldTrial({&enabled, &framerate_limit, &qp, &undershoot_percentage,
&frames_before_steady_state},
trials.Lookup("WebRTC-VP9VariableFramerateScreenshare"));
VariableFramerateExperiment config;
config.enabled = enabled.Get();
config.framerate_limit = framerate_limit.Get();
config.steady_state_qp = qp.Get();
config.steady_state_undershoot_percentage = undershoot_percentage.Get();
config.frames_before_steady_state = frames_before_steady_state.Get();
return config;
}
// static
LibvpxVp9Encoder::QualityScalerExperiment
LibvpxVp9Encoder::ParseQualityScalerConfig(const FieldTrialsView& trials) {

View File

@ -169,22 +169,6 @@ class LibvpxVp9Encoder : public VideoEncoder {
std::array<RefFrameBuffer, kNumVp9Buffers> ref_buf_;
std::vector<ScalableVideoController::LayerFrameConfig> layer_frames_;
// Variable frame-rate related fields and methods.
const struct VariableFramerateExperiment {
bool enabled;
// Framerate is limited to this value in steady state.
float framerate_limit;
// This qp or below is considered a steady state.
int steady_state_qp;
// Frames of at least this percentage below ideal for configured bitrate are
// considered in a steady state.
int steady_state_undershoot_percentage;
// Number of consecutive frames with good QP and size required to detect
// the steady state.
int frames_before_steady_state;
} variable_framerate_experiment_;
static VariableFramerateExperiment ParseVariableFramerateConfig(
const FieldTrialsView& trials);
FramerateControllerDeprecated variable_framerate_controller_;
const struct QualityScalerExperiment {