Remove Vp8VariableFramerateScreenshare experiemnt

Bug: webrtc:10310
Change-Id: I5d7e7bb3e303bc5d3f913daf9016051731ce2157
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/347641
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42094}
This commit is contained in:
Ilya Nikolaevskiy 2024-04-17 11:12:08 +02:00 committed by WebRTC LUCI CQ
parent a6bf03dc22
commit 39760a1c87
3 changed files with 11 additions and 49 deletions

View File

@ -811,9 +811,6 @@ POLICY_EXEMPT_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
FieldTrial('WebRTC-VP8IosMaxNumberOfThread',
'webrtc:10005',
date(2024, 4, 1)),
FieldTrial('WebRTC-VP8VariableFramerateScreenshare',
'webrtc:10310',
date(2024, 4, 1)),
FieldTrial('WebRTC-VP9-GetEncoderInfoOverride',
'',
date(2024, 4, 1)),
@ -902,7 +899,7 @@ POLICY_EXEMPT_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
]) # yapf: disable
POLICY_EXEMPT_FIELD_TRIALS_DIGEST: str = \
'4b765e142d10eccf80ec58cc9e994463c092cca0'
'785cfbd78860c15c840e509f4859e2b20bf8f250'
REGISTERED_FIELD_TRIALS: FrozenSet[FieldTrial] = ACTIVE_FIELD_TRIALS.union(
POLICY_EXEMPT_FIELD_TRIALS)
@ -1012,7 +1009,7 @@ def validate_field_trials(
invalid.append(
'POLICY_EXEMPT_FIELD_TRIALS has been modified. Please note that '
'you must not add any new entries there. If you removed an entry '
'you should also update POLICY_EXEMPT_FIELD_TRIALS_DIGEST. The'
'you should also update POLICY_EXEMPT_FIELD_TRIALS_DIGEST. The '
f'new digest is "{sha1.hexdigest()}".')
for trial in field_trials:

View File

@ -56,6 +56,11 @@ constexpr char kVP8IosMaxNumberOfThreadFieldTrial[] =
constexpr char kVP8IosMaxNumberOfThreadFieldTrialParameter[] = "max_thread";
#endif
namespace variable_framerate_screenshare {
static constexpr double kMinFps = 5.0;
static constexpr int kUndershootPct = 30;
} // namespace variable_framerate_screenshare
constexpr char kVp8ForcePartitionResilience[] =
"WebRTC-VP8-ForcePartitionResilience";
@ -310,10 +315,7 @@ LibvpxVp8Encoder::LibvpxVp8Encoder(const Environment& env,
key_frame_request_(kMaxSimulcastStreams, false),
last_encoder_output_time_(kMaxSimulcastStreams,
Timestamp::MinusInfinity()),
variable_framerate_experiment_(ParseVariableFramerateConfig(
env_.field_trials(),
"WebRTC-VP8VariableFramerateScreenshare")),
framerate_controller_(variable_framerate_experiment_.framerate_limit),
framerate_controller_(variable_framerate_screenshare::kMinFps),
max_frame_drop_interval_(ParseFrameDropInterval(env_.field_trials())),
android_specific_threading_settings_(env_.field_trials().IsEnabled(
"WebRTC-LibvpxVp8Encoder-AndroidSpecificThreadingSettings")) {
@ -933,9 +935,7 @@ size_t LibvpxVp8Encoder::SteadyStateSize(int sid, int tid) {
return 0;
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);
}
@ -1013,8 +1013,7 @@ int LibvpxVp8Encoder::Encode(const VideoFrame& frame,
if (frame.update_rect().IsEmpty() && num_steady_state_frames_ >= 3 &&
!key_frame_requested) {
if (variable_framerate_experiment_.enabled &&
framerate_controller_.DropFrame(frame.rtp_timestamp() /
if (framerate_controller_.DropFrame(frame.rtp_timestamp() /
kRtpTicksPerMs) &&
frame_drop_overrides_.empty()) {
return WEBRTC_VIDEO_CODEC_OK;
@ -1265,7 +1264,7 @@ int LibvpxVp8Encoder::GetEncodedPartitions(const VideoFrame& input_image,
&codec_specific);
const size_t steady_state_size = SteadyStateSize(
stream_idx, codec_specific.codecSpecific.VP8.temporalIdx);
if (qp_128 > variable_framerate_experiment_.steady_state_qp ||
if (qp_128 > kVp8SteadyStateQpThreshold ||
encoded_images_[encoder_idx].size() > steady_state_size) {
num_steady_state_frames_ = 0;
} else {
@ -1488,24 +1487,4 @@ LibvpxVp8Encoder::PrepareBuffers(rtc::scoped_refptr<VideoFrameBuffer> buffer) {
return prepared_buffers;
}
// static
LibvpxVp8Encoder::VariableFramerateExperiment
LibvpxVp8Encoder::ParseVariableFramerateConfig(
const FieldTrialsView& field_trials,
absl::string_view group_name) {
FieldTrialFlag disabled = FieldTrialFlag("Disabled");
FieldTrialParameter<double> framerate_limit("min_fps", 5.0);
FieldTrialParameter<int> qp("min_qp", 15);
FieldTrialParameter<int> undershoot_percentage("undershoot", 30);
ParseFieldTrial({&disabled, &framerate_limit, &qp, &undershoot_percentage},
field_trials.Lookup(group_name));
VariableFramerateExperiment config;
config.enabled = !disabled.Get();
config.framerate_limit = framerate_limit.Get();
config.steady_state_qp = qp.Get();
config.steady_state_undershoot_percentage = undershoot_percentage.Get();
return config;
}
} // namespace webrtc

View File

@ -138,20 +138,6 @@ class LibvpxVp8Encoder : public VideoEncoder {
std::vector<vpx_rational_t> downsampling_factors_;
std::vector<Timestamp> last_encoder_output_time_;
// Variable frame-rate screencast related fields and methods.
const struct VariableFramerateExperiment {
bool enabled = false;
// Framerate is limited to this value in steady state.
float framerate_limit = 5.0;
// This qp or below is considered a steady state.
int steady_state_qp = kVp8SteadyStateQpThreshold;
// Frames of at least this percentage below ideal for configured bitrate are
// considered in a steady state.
int steady_state_undershoot_percentage = 30;
} variable_framerate_experiment_;
static VariableFramerateExperiment ParseVariableFramerateConfig(
const FieldTrialsView& field_trials,
absl::string_view group_name);
FramerateControllerDeprecated framerate_controller_;
int num_steady_state_frames_ = 0;