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:
parent
42f12d5183
commit
4bad933233
@ -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)
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user