From 39760a1c87ded74ae0895e82818d2acfc181f23f Mon Sep 17 00:00:00 2001 From: Ilya Nikolaevskiy Date: Wed, 17 Apr 2024 11:12:08 +0200 Subject: [PATCH] Remove Vp8VariableFramerateScreenshare experiemnt Bug: webrtc:10310 Change-Id: I5d7e7bb3e303bc5d3f913daf9016051731ce2157 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/347641 Reviewed-by: Philip Eliasson Commit-Queue: Ilya Nikolaevskiy Cr-Commit-Position: refs/heads/main@{#42094} --- experiments/field_trials.py | 7 +--- .../codecs/vp8/libvpx_vp8_encoder.cc | 39 +++++-------------- .../codecs/vp8/libvpx_vp8_encoder.h | 14 ------- 3 files changed, 11 insertions(+), 49 deletions(-) diff --git a/experiments/field_trials.py b/experiments/field_trials.py index d162144e3b..053f12b8a2 100755 --- a/experiments/field_trials.py +++ b/experiments/field_trials.py @@ -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: diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc index 4593ecc6e0..e9cf5d8ef4 100644 --- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc +++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc @@ -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( 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 buffer) { return prepared_buffers; } -// static -LibvpxVp8Encoder::VariableFramerateExperiment -LibvpxVp8Encoder::ParseVariableFramerateConfig( - const FieldTrialsView& field_trials, - absl::string_view group_name) { - FieldTrialFlag disabled = FieldTrialFlag("Disabled"); - FieldTrialParameter framerate_limit("min_fps", 5.0); - FieldTrialParameter qp("min_qp", 15); - FieldTrialParameter 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 diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h index ed2a86a41a..18007410cc 100644 --- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h +++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h @@ -138,20 +138,6 @@ class LibvpxVp8Encoder : public VideoEncoder { std::vector downsampling_factors_; std::vector 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;