Experimental improvements for simulcast screenshare
* Make shorter 4-frame pattern default if 2 temporal layers are used. * Make DefaultTemporalLayers usable by upper simulcast stream with 2tl. * If experimental settings are enable, bump the max bitrate for the top stream. Since we're now using probing everywhere the rampup should be less of an issue. * Additionally, fixes an issue in full stack tests, where ScopedFieldTrials in an experiment would override the --force_fieldtrials specified at command line. Some trials added by the test bots caused timeouts without this. Bug: webrtc:9477 Change-Id: I42410605d416b51c4fbfe5b6b850997484af583c Reviewed-on: https://webrtc-review.googlesource.com/92883 Reviewed-by: Sergey Silkin <ssilkin@webrtc.org> Commit-Queue: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24252}
This commit is contained in:
@ -93,7 +93,7 @@ std::vector<bool> GetTemporalLayerSync(size_t num_layers) {
|
||||
case 1:
|
||||
return {false};
|
||||
case 2:
|
||||
if (field_trial::IsEnabled("WebRTC-UseShortVP8TL2Pattern")) {
|
||||
if (!field_trial::IsDisabled("WebRTC-UseShortVP8TL2Pattern")) {
|
||||
return {false, true, false, false};
|
||||
} else {
|
||||
return {false, true, false, false, false, false, false, false};
|
||||
@ -139,7 +139,7 @@ std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) {
|
||||
// that the 'alt' buffer reference is effectively the last keyframe.
|
||||
// TL0 also references and updates the 'last' buffer.
|
||||
// TL1 also references 'last' and references and updates 'golden'.
|
||||
if (field_trial::IsEnabled("WebRTC-UseShortVP8TL2Pattern")) {
|
||||
if (!field_trial::IsDisabled("WebRTC-UseShortVP8TL2Pattern")) {
|
||||
// Shortened 4-frame pattern:
|
||||
// 1---1 1---1 ...
|
||||
// / / / /
|
||||
|
||||
@ -81,26 +81,26 @@ TEST(TemporalLayersTest, 2Layers) {
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateGoldenWithoutDependencyRefAltRef,
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateGoldenRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateGoldenRefAltRef,
|
||||
kTemporalUpdateGoldenWithoutDependencyRefAltRef,
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateGoldenWithoutDependencyRefAltRef,
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateGoldenRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateGoldenRefAltRef,
|
||||
kTemporalUpdateGoldenWithoutDependencyRefAltRef,
|
||||
kTemporalUpdateLastRefAltRef,
|
||||
kTemporalUpdateNone,
|
||||
};
|
||||
int expected_temporal_idx[16] = {0, 1, 0, 1, 0, 1, 0, 1,
|
||||
0, 1, 0, 1, 0, 1, 0, 1};
|
||||
|
||||
bool expected_layer_sync[16] = {false, true, false, false, false, false,
|
||||
bool expected_layer_sync[16] = {false, true, false, false, false, true,
|
||||
false, false, false, true, false, false,
|
||||
false, false, false, false};
|
||||
false, true, false, false};
|
||||
|
||||
uint32_t timestamp = 0;
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
|
||||
@ -39,10 +39,15 @@ uint8_t NumTemporalLayers(const VideoCodec& codec, int spatial_id) {
|
||||
}
|
||||
|
||||
bool IsConferenceModeScreenshare(const VideoCodec& codec) {
|
||||
if (codec.mode != VideoCodecMode::kScreensharing) {
|
||||
if (codec.mode != VideoCodecMode::kScreensharing ||
|
||||
NumTemporalLayers(codec, 0) != 2) {
|
||||
return false;
|
||||
}
|
||||
return NumTemporalLayers(codec, 0) == 2;
|
||||
// Fixed default bitrates for legacy screenshare layers mode.
|
||||
return (codec.numberOfSimulcastStreams == 0 && codec.maxBitrate == 1000) ||
|
||||
(codec.numberOfSimulcastStreams >= 1 &&
|
||||
codec.simulcastStream[0].maxBitrate == 1000 &&
|
||||
codec.simulcastStream[0].targetBitrate == 200);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
|
||||
Reference in New Issue
Block a user