Chromium Code Reviews| Index: webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc |
| diff --git a/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc b/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc |
| index 979c64e24324bca7493001b16f37b94ed14b18d1..7e7effbd36f4fcf39f7e24a7e6179c4a4688625e 100644 |
| --- a/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc |
| +++ b/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc |
| @@ -95,17 +95,21 @@ std::vector<bool> GetTemporalLayerSync(size_t num_layers) { |
| return {false}; |
| case 2: |
| return {false, true, false, false, false, false, false, false}; |
| - case 3: |
| - return {false, true, true, false, false, false, false, false}; |
| + case 3: { |
| + std::vector<bool> sync_pattern = {false, true, true, false, |
| + false, false, false, false}; |
| + if (field_trial::IsEnabled("WebRTC-AltTemporalLayers")) |
|
pbos1
2017/08/31 19:54:38
Actually if this is not supposed to be a subset be
pbos1
2017/08/31 19:54:38
Also do you think we could generate GetTemporalLay
sprang_webrtc
2017/09/01 14:32:56
Potentially, but it's not super straight forward.
sprang_webrtc
2017/09/01 14:32:56
Done.
|
| + sync_pattern.resize(4); |
| + return sync_pattern; |
| + } |
| case 4: |
| - return {false, true, true, true, true, true, false, true, |
| - false, true, false, true, false, true, false, true}; |
| + return {false, true, true, false, true, false, false, false, |
| + false, false, false, false, false, false, false, false}; |
| default: |
| - RTC_NOTREACHED(); |
| break; |
| } |
| - RTC_NOTREACHED(); |
| - return {false}; |
| + RTC_NOTREACHED() << num_layers; |
| + return {}; |
| } |
| std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { |
| @@ -134,7 +138,7 @@ std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { |
| // TL0 also references and updates the 'last' buffer. |
| // TL1 also references 'last' and references and updates 'golden'. |
| return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| - TemporalLayers::kUpdate, |
| + TemporalLayers::kNone, |
| TemporalLayers::kReference), |
| TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| TemporalLayers::kUpdate, |
| @@ -158,35 +162,56 @@ std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { |
| TemporalLayers::kReference, TemporalLayers::kReference, |
| TemporalLayers::kReference, TemporalLayers::kFreezeEntropy)}; |
| case 3: |
| - // All layers can reference but not update the 'alt' buffer, this means |
| - // 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'. |
| - // TL2 references both 'last' and 'golden' but updates no buffer. |
| - return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| - TemporalLayers::kUpdate, |
| - TemporalLayers::kReference), |
| - TemporalLayers::FrameConfig( |
| - TemporalLayers::kReference, TemporalLayers::kNone, |
| - TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| - TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| - TemporalLayers::kUpdate, |
| - TemporalLayers::kReference), |
| - TemporalLayers::FrameConfig( |
| - TemporalLayers::kReference, TemporalLayers::kReference, |
| - TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| - TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| - TemporalLayers::kNone, |
| - TemporalLayers::kReference), |
| - TemporalLayers::FrameConfig( |
| - TemporalLayers::kReference, TemporalLayers::kReference, |
| - TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| - TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| - TemporalLayers::kReferenceAndUpdate, |
| - TemporalLayers::kReference), |
| - TemporalLayers::FrameConfig( |
| - TemporalLayers::kReference, TemporalLayers::kReference, |
| - TemporalLayers::kReference, TemporalLayers::kFreezeEntropy)}; |
| + if (field_trial::IsEnabled("WebRTC-AltTemporalLayers")) { |
|
pbos1
2017/08/31 19:54:38
Can you put down here why this is meaningfully dif
sprang_webrtc
2017/09/01 14:32:56
Done.
|
| + // TL0 references and updates the 'last' buffer. |
| + // TL1 references 'last' and references and updates 'golden'. |
| + // TL2 references both 'last' & 'golden' and references and updates |
| + // 'arf'. |
| + return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| + TemporalLayers::kNone, |
| + TemporalLayers::kNone), |
| + TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| + TemporalLayers::kNone, |
| + TemporalLayers::kUpdate), |
| + TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| + TemporalLayers::kUpdate, |
| + TemporalLayers::kNone), |
| + TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| + TemporalLayers::kReference, |
| + TemporalLayers::kReference, |
| + TemporalLayers::kFreezeEntropy)}; |
| + } else { |
| + // All layers can reference but not update the 'alt' buffer, this means |
| + // 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'. |
| + // TL2 references both 'last' and 'golden' but updates no buffer. |
| + return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| + TemporalLayers::kNone, |
| + TemporalLayers::kReference), |
| + TemporalLayers::FrameConfig( |
| + TemporalLayers::kReference, TemporalLayers::kNone, |
| + TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| + TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| + TemporalLayers::kUpdate, |
| + TemporalLayers::kReference), |
| + TemporalLayers::FrameConfig( |
| + TemporalLayers::kReference, TemporalLayers::kReference, |
| + TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| + TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| + TemporalLayers::kNone, |
| + TemporalLayers::kReference), |
| + TemporalLayers::FrameConfig( |
| + TemporalLayers::kReference, TemporalLayers::kReference, |
| + TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| + TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| + TemporalLayers::kReferenceAndUpdate, |
| + TemporalLayers::kReference), |
| + TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| + TemporalLayers::kReference, |
| + TemporalLayers::kReference, |
| + TemporalLayers::kFreezeEntropy)}; |
| + } |
| case 4: |
| // TL0 references and updates only the 'last' buffer. |
| // TL1 references 'last' and updates and references 'golden'. |
| @@ -196,13 +221,13 @@ std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { |
| TemporalLayers::kNone, |
| TemporalLayers::kNone), |
| TemporalLayers::FrameConfig( |
| - TemporalLayers::kReference, TemporalLayers::kReference, |
| - TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| + TemporalLayers::kReference, TemporalLayers::kNone, |
| + TemporalLayers::kNone, TemporalLayers::kFreezeEntropy), |
| TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| TemporalLayers::kNone, |
| TemporalLayers::kUpdate), |
| TemporalLayers::FrameConfig( |
| - TemporalLayers::kReference, TemporalLayers::kReference, |
| + TemporalLayers::kReference, TemporalLayers::kNone, |
| TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| TemporalLayers::kUpdate, |