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