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',
|
FieldTrial('WebRTC-VP9QualityScaler',
|
||||||
'webrtc:11319',
|
'webrtc:11319',
|
||||||
date(2024, 4, 1)),
|
date(2024, 4, 1)),
|
||||||
FieldTrial('WebRTC-VP9VariableFramerateScreenshare',
|
|
||||||
'webrtc:10310',
|
|
||||||
date(2024, 4, 1)),
|
|
||||||
FieldTrial('WebRTC-Video-BalancedDegradation',
|
FieldTrial('WebRTC-Video-BalancedDegradation',
|
||||||
'webrtc:7607',
|
'webrtc:7607',
|
||||||
INDEFINITE),
|
INDEFINITE),
|
||||||
@ -890,7 +887,7 @@ POLICY_EXEMPT_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
|
|||||||
]) # yapf: disable
|
]) # yapf: disable
|
||||||
|
|
||||||
POLICY_EXEMPT_FIELD_TRIALS_DIGEST: str = \
|
POLICY_EXEMPT_FIELD_TRIALS_DIGEST: str = \
|
||||||
'5690e723f0ca378ceb708e02bf2334327c0f64b6'
|
'680deace2615186c4d3cf9ed3bd3595b7b6c8ae8'
|
||||||
|
|
||||||
REGISTERED_FIELD_TRIALS: FrozenSet[FieldTrial] = ACTIVE_FIELD_TRIALS.union(
|
REGISTERED_FIELD_TRIALS: FrozenSet[FieldTrial] = ACTIVE_FIELD_TRIALS.union(
|
||||||
POLICY_EXEMPT_FIELD_TRIALS)
|
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.
|
// Maximum allowed PID difference for differnet per-layer frame-rate case.
|
||||||
const int kMaxAllowedPidDiff = 30;
|
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.
|
// TODO(ilink): Tune these thresholds further.
|
||||||
// Selected using ConverenceMotion_1280_720_50.yuv clip.
|
// Selected using ConverenceMotion_1280_720_50.yuv clip.
|
||||||
// No toggling observed on any link capacity from 100-2000kbps.
|
// No toggling observed on any link capacity from 100-2000kbps.
|
||||||
@ -250,10 +257,7 @@ LibvpxVp9Encoder::LibvpxVp9Encoder(const Environment& env,
|
|||||||
ss_info_needed_(false),
|
ss_info_needed_(false),
|
||||||
force_all_active_layers_(false),
|
force_all_active_layers_(false),
|
||||||
is_flexible_mode_(false),
|
is_flexible_mode_(false),
|
||||||
variable_framerate_experiment_(
|
variable_framerate_controller_(variable_framerate_screenshare::kMinFps),
|
||||||
ParseVariableFramerateConfig(env.field_trials())),
|
|
||||||
variable_framerate_controller_(
|
|
||||||
variable_framerate_experiment_.framerate_limit),
|
|
||||||
quality_scaler_experiment_(ParseQualityScalerConfig(env.field_trials())),
|
quality_scaler_experiment_(ParseQualityScalerConfig(env.field_trials())),
|
||||||
external_ref_ctrl_(
|
external_ref_ctrl_(
|
||||||
!env.field_trials().IsDisabled("WebRTC-Vp9ExternalRefCtrl")),
|
!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.
|
// interfere, they must be queried in order of increasing limit.
|
||||||
|
|
||||||
bool use_steady_state_limiter =
|
bool use_steady_state_limiter =
|
||||||
variable_framerate_experiment_.enabled &&
|
|
||||||
input_image.update_rect().IsEmpty() &&
|
input_image.update_rect().IsEmpty() &&
|
||||||
num_steady_state_frames_ >=
|
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,
|
// Need to check all frame limiters, even if lower layers are disabled,
|
||||||
// because variable frame-rate limiter should be checked after the first
|
// 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();
|
framerate_controller_[layer_id.spatial_layer_id].GetTargetRate();
|
||||||
// Use steady state rate-limiter at the correct place.
|
// Use steady state rate-limiter at the correct place.
|
||||||
if (use_steady_state_limiter &&
|
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)) {
|
if (variable_framerate_controller_.DropFrame(frame_timestamp_ms)) {
|
||||||
layer_id.spatial_layer_id = num_active_spatial_layers_;
|
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
|
// Only frames on spatial layers, which may be limited in a steady state
|
||||||
// are considered for steady state detection.
|
// are considered for steady state detection.
|
||||||
if (framerate_controller_[spatial_idx].GetTargetRate() >
|
if (framerate_controller_[spatial_idx].GetTargetRate() >
|
||||||
variable_framerate_experiment_.framerate_limit + 1e-9) {
|
variable_framerate_screenshare::kMinFps + 1e-9) {
|
||||||
if (encoded_image_.qp_ <=
|
if (encoded_image_.qp_ <= variable_framerate_screenshare::kMinQP &&
|
||||||
variable_framerate_experiment_.steady_state_qp &&
|
|
||||||
encoded_image_.size() <= steady_state_size) {
|
encoded_image_.size() <= steady_state_size) {
|
||||||
++num_steady_state_frames_;
|
++num_steady_state_frames_;
|
||||||
} else {
|
} else {
|
||||||
@ -1876,34 +1878,10 @@ size_t LibvpxVp9Encoder::SteadyStateSize(int sid, int tid) {
|
|||||||
: codec_.maxFramerate;
|
: codec_.maxFramerate;
|
||||||
return static_cast<size_t>(
|
return static_cast<size_t>(
|
||||||
bitrate_bps / (8 * fps) *
|
bitrate_bps / (8 * fps) *
|
||||||
(100 -
|
(100 - variable_framerate_screenshare::kUndershootPct) / 100 +
|
||||||
variable_framerate_experiment_.steady_state_undershoot_percentage) /
|
|
||||||
100 +
|
|
||||||
0.5);
|
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
|
// static
|
||||||
LibvpxVp9Encoder::QualityScalerExperiment
|
LibvpxVp9Encoder::QualityScalerExperiment
|
||||||
LibvpxVp9Encoder::ParseQualityScalerConfig(const FieldTrialsView& trials) {
|
LibvpxVp9Encoder::ParseQualityScalerConfig(const FieldTrialsView& trials) {
|
||||||
|
|||||||
@ -169,22 +169,6 @@ class LibvpxVp9Encoder : public VideoEncoder {
|
|||||||
std::array<RefFrameBuffer, kNumVp9Buffers> ref_buf_;
|
std::array<RefFrameBuffer, kNumVp9Buffers> ref_buf_;
|
||||||
std::vector<ScalableVideoController::LayerFrameConfig> layer_frames_;
|
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_;
|
FramerateControllerDeprecated variable_framerate_controller_;
|
||||||
|
|
||||||
const struct QualityScalerExperiment {
|
const struct QualityScalerExperiment {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user