Enable flexible mode by default

Added a dedicated kill-switch WebRTC-Video-Vp9FlexibleMode.

Bug: webrtc:329396373
Change-Id: I1acb28032898379eecf7dd81a770c73708286d74
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/355700
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42543}
This commit is contained in:
Sergey Silkin 2024-06-26 10:03:03 +02:00 committed by WebRTC LUCI CQ
parent 1030eaaffe
commit 0bbc8ce12b
2 changed files with 26 additions and 22 deletions

View File

@ -155,6 +155,9 @@ ACTIVE_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
FieldTrial('WebRTC-Video-H26xPacketBuffer',
41480904,
date(2024, 6, 1)),
FieldTrial('WebRTC-Video-Vp9FlexibleMode',
329396373,
date(2025, 6, 26)),
# keep-sorted end
]) # yapf: disable

View File

@ -978,10 +978,8 @@ WebRtcVideoSendChannel::WebRtcVideoSendStream::ConfigureVideoEncoderSettings(
{{"off", webrtc::InterLayerPredMode::kOff},
{"on", webrtc::InterLayerPredMode::kOn},
{"onkeypic", webrtc::InterLayerPredMode::kOnKeyPic}});
webrtc::FieldTrialFlag force_flexible_mode("FlexibleMode");
webrtc::ParseFieldTrial(
{&interlayer_pred_experiment_enabled, &inter_layer_pred_mode,
&force_flexible_mode},
{&interlayer_pred_experiment_enabled, &inter_layer_pred_mode},
call_->trials().Lookup("WebRTC-Vp9InterLayerPred"));
if (interlayer_pred_experiment_enabled) {
vp9_settings.interLayerPred = inter_layer_pred_mode;
@ -989,7 +987,10 @@ WebRtcVideoSendChannel::WebRtcVideoSendStream::ConfigureVideoEncoderSettings(
// Limit inter-layer prediction to key pictures by default.
vp9_settings.interLayerPred = webrtc::InterLayerPredMode::kOnKeyPic;
}
vp9_settings.flexibleMode = force_flexible_mode.Get();
// TODO(webrtc:329396373): Remove after flexible mode is fully deployed.
vp9_settings.flexibleMode =
IsDisabled(call_->trials(), "WebRTC-Video-Vp9FlexibleMode");
} else {
// Multiple spatial layers vp9 screenshare needs flexible mode.
vp9_settings.flexibleMode = vp9_settings.numberOfSpatialLayers > 1;
@ -1503,9 +1504,9 @@ bool WebRtcVideoSendChannel::AddSendStream(const StreamParams& sp) {
RTC_DCHECK(ssrc != 0);
send_streams_[ssrc] = stream;
if (ssrc_list_changed_callback_) {
ssrc_list_changed_callback_(send_ssrcs_);
}
if (ssrc_list_changed_callback_) {
ssrc_list_changed_callback_(send_ssrcs_);
}
if (sending_) {
stream->SetSend(true);
@ -3146,22 +3147,22 @@ bool WebRtcVideoReceiveChannel::MaybeCreateDefaultReceiveStream(
// BWE has already been notified of this received packet.
return false;
}
// Ignore unknown ssrcs if we recently created an unsignalled receive
// stream since this shouldn't happen frequently. Getting into a state
// of creating decoders on every packet eats up processing time (e.g.
// https://crbug.com/1069603) and this cooldown prevents that.
if (last_unsignalled_ssrc_creation_time_ms_.has_value()) {
int64_t now_ms = rtc::TimeMillis();
if (now_ms - last_unsignalled_ssrc_creation_time_ms_.value() <
kUnsignaledSsrcCooldownMs) {
// We've already created an unsignalled ssrc stream within the last
// 0.5 s, ignore with a warning.
RTC_LOG(LS_WARNING)
<< "Another unsignalled ssrc packet arrived shortly after the "
<< "creation of an unsignalled ssrc stream. Dropping packet.";
return false;
}
// Ignore unknown ssrcs if we recently created an unsignalled receive
// stream since this shouldn't happen frequently. Getting into a state
// of creating decoders on every packet eats up processing time (e.g.
// https://crbug.com/1069603) and this cooldown prevents that.
if (last_unsignalled_ssrc_creation_time_ms_.has_value()) {
int64_t now_ms = rtc::TimeMillis();
if (now_ms - last_unsignalled_ssrc_creation_time_ms_.value() <
kUnsignaledSsrcCooldownMs) {
// We've already created an unsignalled ssrc stream within the last
// 0.5 s, ignore with a warning.
RTC_LOG(LS_WARNING)
<< "Another unsignalled ssrc packet arrived shortly after the "
<< "creation of an unsignalled ssrc stream. Dropping packet.";
return false;
}
}
// RTX SSRC not yet known.
ReCreateDefaultReceiveStream(packet.Ssrc(), absl::nullopt);