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:
Erik Språng
2018-08-09 16:12:54 +02:00
committed by Commit Bot
parent d2b9740f48
commit b6b1cacd09
7 changed files with 62 additions and 27 deletions

View File

@ -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 ...
// / / / /

View File

@ -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) {

View File

@ -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