Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 1 /* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
| 2 * | 2 * |
| 3 * Use of this source code is governed by a BSD-style license | 3 * Use of this source code is governed by a BSD-style license |
| 4 * that can be found in the LICENSE file in the root of the source | 4 * that can be found in the LICENSE file in the root of the source |
| 5 * tree. An additional intellectual property rights grant can be found | 5 * tree. An additional intellectual property rights grant can be found |
| 6 * in the file PATENTS. All contributing project authors may | 6 * in the file PATENTS. All contributing project authors may |
| 7 * be found in the AUTHORS file in the root of the source tree. | 7 * be found in the AUTHORS file in the root of the source tree. |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 #include "webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.h" | 10 #include "webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.h" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 89 return {0}; | 89 return {0}; |
| 90 } | 90 } |
| 91 | 91 |
| 92 std::vector<bool> GetTemporalLayerSync(size_t num_layers) { | 92 std::vector<bool> GetTemporalLayerSync(size_t num_layers) { |
| 93 switch (num_layers) { | 93 switch (num_layers) { |
| 94 case 1: | 94 case 1: |
| 95 return {false}; | 95 return {false}; |
| 96 case 2: | 96 case 2: |
| 97 return {false, true, false, false, false, false, false, false}; | 97 return {false, true, false, false, false, false, false, false}; |
| 98 case 3: | 98 case 3: |
| 99 return {false, true, true, false, false, false, false, false}; | 99 if (field_trial::IsEnabled("WebRTC-AltTemporalLayers")) { |
|
pbos-webrtc
2017/08/29 15:46:42
Since this is a subset of the first, can you creat
sprang_webrtc
2017/08/31 11:56:18
Done.
| |
| 100 return {false, true, true, false}; | |
| 101 } else { | |
| 102 return {false, true, true, false, false, false, false, false}; | |
| 103 } | |
| 100 case 4: | 104 case 4: |
| 101 return {false, true, true, true, true, true, false, true, | 105 return {false, true, true, false, true, false, false, false, |
| 102 false, true, false, true, false, true, false, true}; | 106 false, false, false, false, false, false, false, false}; |
| 103 default: | 107 default: |
| 104 RTC_NOTREACHED(); | 108 RTC_NOTREACHED(); |
| 105 break; | 109 break; |
| 106 } | 110 } |
| 107 RTC_NOTREACHED(); | 111 RTC_NOTREACHED(); |
| 108 return {false}; | 112 return {false}; |
| 109 } | 113 } |
| 110 | 114 |
| 111 std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { | 115 std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { |
| 112 // For indexing in the patterns described below (which temporal layers they | 116 // For indexing in the patterns described below (which temporal layers they |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 127 // All frames reference all buffers and the 'last' buffer is updated. | 131 // All frames reference all buffers and the 'last' buffer is updated. |
| 128 return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, | 132 return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| 129 TemporalLayers::kReference, | 133 TemporalLayers::kReference, |
| 130 TemporalLayers::kReference)}; | 134 TemporalLayers::kReference)}; |
| 131 case 2: | 135 case 2: |
| 132 // All layers can reference but not update the 'alt' buffer, this means | 136 // All layers can reference but not update the 'alt' buffer, this means |
| 133 // that the 'alt' buffer reference is effectively the last keyframe. | 137 // that the 'alt' buffer reference is effectively the last keyframe. |
| 134 // TL0 also references and updates the 'last' buffer. | 138 // TL0 also references and updates the 'last' buffer. |
| 135 // TL1 also references 'last' and references and updates 'golden'. | 139 // TL1 also references 'last' and references and updates 'golden'. |
| 136 return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, | 140 return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| 137 TemporalLayers::kUpdate, | 141 TemporalLayers::kNone, |
| 138 TemporalLayers::kReference), | 142 TemporalLayers::kReference), |
| 139 TemporalLayers::FrameConfig(TemporalLayers::kReference, | 143 TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| 140 TemporalLayers::kUpdate, | 144 TemporalLayers::kUpdate, |
| 141 TemporalLayers::kReference), | 145 TemporalLayers::kReference), |
| 142 TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, | 146 TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| 143 TemporalLayers::kNone, | 147 TemporalLayers::kNone, |
| 144 TemporalLayers::kReference), | 148 TemporalLayers::kReference), |
| 145 TemporalLayers::FrameConfig(TemporalLayers::kReference, | 149 TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| 146 TemporalLayers::kReferenceAndUpdate, | 150 TemporalLayers::kReferenceAndUpdate, |
| 147 TemporalLayers::kReference), | 151 TemporalLayers::kReference), |
| 148 TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, | 152 TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| 149 TemporalLayers::kNone, | 153 TemporalLayers::kNone, |
| 150 TemporalLayers::kReference), | 154 TemporalLayers::kReference), |
| 151 TemporalLayers::FrameConfig(TemporalLayers::kReference, | 155 TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| 152 TemporalLayers::kReferenceAndUpdate, | 156 TemporalLayers::kReferenceAndUpdate, |
| 153 TemporalLayers::kReference), | 157 TemporalLayers::kReference), |
| 154 TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, | 158 TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| 155 TemporalLayers::kNone, | 159 TemporalLayers::kNone, |
| 156 TemporalLayers::kReference), | 160 TemporalLayers::kReference), |
| 157 TemporalLayers::FrameConfig( | 161 TemporalLayers::FrameConfig( |
| 158 TemporalLayers::kReference, TemporalLayers::kReference, | 162 TemporalLayers::kReference, TemporalLayers::kReference, |
| 159 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy)}; | 163 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy)}; |
| 160 case 3: | 164 case 3: |
| 161 // All layers can reference but not update the 'alt' buffer, this means | 165 if (field_trial::IsEnabled("WebRTC-AltTemporalLayers")) { |
|
pbos-webrtc
2017/08/29 15:46:42
Can you add a test that covers this case? You can
pbos-webrtc
2017/08/29 15:46:42
Since this is a subset of the first, can you creat
sprang_webrtc
2017/08/31 11:56:18
They are different. In this version we update altr
sprang_webrtc
2017/08/31 11:56:18
Test added.
| |
| 162 // that the 'alt' buffer reference is effectively the last keyframe. | 166 // TL0 references and updates the 'last' buffer. |
| 163 // TL0 also references and updates the 'last' buffer. | 167 // TL1 references 'last' and references and updates 'golden'. |
| 164 // TL1 also references 'last' and references and updates 'golden'. | 168 // TL2 references both 'last' & 'golden' and references and updates |
| 165 // TL2 references both 'last' and 'golden' but updates no buffer. | 169 // 'arf'. |
| 166 return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, | 170 return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| 167 TemporalLayers::kUpdate, | 171 TemporalLayers::kNone, |
| 168 TemporalLayers::kReference), | 172 TemporalLayers::kNone), |
| 169 TemporalLayers::FrameConfig( | 173 TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| 170 TemporalLayers::kReference, TemporalLayers::kNone, | 174 TemporalLayers::kNone, |
| 171 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), | 175 TemporalLayers::kUpdate), |
| 172 TemporalLayers::FrameConfig(TemporalLayers::kReference, | 176 TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| 173 TemporalLayers::kUpdate, | 177 TemporalLayers::kUpdate, |
| 174 TemporalLayers::kReference), | 178 TemporalLayers::kNone), |
| 175 TemporalLayers::FrameConfig( | 179 TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| 176 TemporalLayers::kReference, TemporalLayers::kReference, | 180 TemporalLayers::kReference, |
| 177 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), | 181 TemporalLayers::kReference)}; |
| 178 TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, | 182 } else { |
| 179 TemporalLayers::kNone, | 183 // All layers can reference but not update the 'alt' buffer, this means |
| 180 TemporalLayers::kReference), | 184 // that the 'alt' buffer reference is effectively the last keyframe. |
| 181 TemporalLayers::FrameConfig( | 185 // TL0 also references and updates the 'last' buffer. |
| 182 TemporalLayers::kReference, TemporalLayers::kReference, | 186 // TL1 also references 'last' and references and updates 'golden'. |
| 183 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), | 187 // TL2 references both 'last' and 'golden' but updates no buffer. |
| 184 TemporalLayers::FrameConfig(TemporalLayers::kReference, | 188 return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| 185 TemporalLayers::kReferenceAndUpdate, | 189 TemporalLayers::kNone, |
| 186 TemporalLayers::kReference), | 190 TemporalLayers::kReference), |
| 187 TemporalLayers::FrameConfig( | 191 TemporalLayers::FrameConfig( |
| 188 TemporalLayers::kReference, TemporalLayers::kReference, | 192 TemporalLayers::kReference, TemporalLayers::kNone, |
| 189 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy)}; | 193 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| 194 TemporalLayers::FrameConfig(TemporalLayers::kReference, | |
| 195 TemporalLayers::kUpdate, | |
| 196 TemporalLayers::kReference), | |
| 197 TemporalLayers::FrameConfig( | |
| 198 TemporalLayers::kReference, TemporalLayers::kReference, | |
| 199 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), | |
| 200 TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, | |
| 201 TemporalLayers::kNone, | |
| 202 TemporalLayers::kReference), | |
| 203 TemporalLayers::FrameConfig( | |
| 204 TemporalLayers::kReference, TemporalLayers::kReference, | |
| 205 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), | |
| 206 TemporalLayers::FrameConfig(TemporalLayers::kReference, | |
| 207 TemporalLayers::kReferenceAndUpdate, | |
| 208 TemporalLayers::kReference), | |
| 209 TemporalLayers::FrameConfig(TemporalLayers::kReference, | |
| 210 TemporalLayers::kReference, | |
| 211 TemporalLayers::kReference, | |
| 212 TemporalLayers::kFreezeEntropy)}; | |
| 213 } | |
| 190 case 4: | 214 case 4: |
| 191 // TL0 references and updates only the 'last' buffer. | 215 // TL0 references and updates only the 'last' buffer. |
| 192 // TL1 references 'last' and updates and references 'golden'. | 216 // TL1 references 'last' and updates and references 'golden'. |
| 193 // TL2 references 'last' and 'golden', and references and updates 'arf'. | 217 // TL2 references 'last' and 'golden', and references and updates 'arf'. |
| 194 // TL3 references all buffers but update none of them. | 218 // TL3 references all buffers but update none of them. |
| 195 return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, | 219 return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, |
| 196 TemporalLayers::kNone, | 220 TemporalLayers::kNone, |
| 197 TemporalLayers::kNone), | 221 TemporalLayers::kNone), |
| 198 TemporalLayers::FrameConfig( | 222 TemporalLayers::FrameConfig( |
| 199 TemporalLayers::kReference, TemporalLayers::kReference, | 223 TemporalLayers::kReference, TemporalLayers::kNone, |
| 200 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), | 224 TemporalLayers::kNone, TemporalLayers::kFreezeEntropy), |
| 201 TemporalLayers::FrameConfig(TemporalLayers::kReference, | 225 TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| 202 TemporalLayers::kNone, | 226 TemporalLayers::kNone, |
| 203 TemporalLayers::kUpdate), | 227 TemporalLayers::kUpdate), |
| 204 TemporalLayers::FrameConfig( | 228 TemporalLayers::FrameConfig( |
| 205 TemporalLayers::kReference, TemporalLayers::kReference, | 229 TemporalLayers::kReference, TemporalLayers::kNone, |
| 206 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), | 230 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| 207 TemporalLayers::FrameConfig(TemporalLayers::kReference, | 231 TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| 208 TemporalLayers::kUpdate, | 232 TemporalLayers::kUpdate, |
| 209 TemporalLayers::kNone), | 233 TemporalLayers::kNone), |
| 210 TemporalLayers::FrameConfig( | 234 TemporalLayers::FrameConfig( |
| 211 TemporalLayers::kReference, TemporalLayers::kReference, | 235 TemporalLayers::kReference, TemporalLayers::kReference, |
| 212 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), | 236 TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), |
| 213 TemporalLayers::FrameConfig(TemporalLayers::kReference, | 237 TemporalLayers::FrameConfig(TemporalLayers::kReference, |
| 214 TemporalLayers::kReference, | 238 TemporalLayers::kReference, |
| 215 TemporalLayers::kReferenceAndUpdate), | 239 TemporalLayers::kReferenceAndUpdate), |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 386 if (listener_ && !ExcludeOnTemporalLayersCreated(temporal_layers)) | 410 if (listener_ && !ExcludeOnTemporalLayersCreated(temporal_layers)) |
| 387 listener_->OnTemporalLayersCreated(simulcast_id, tl); | 411 listener_->OnTemporalLayersCreated(simulcast_id, tl); |
| 388 return tl; | 412 return tl; |
| 389 } | 413 } |
| 390 | 414 |
| 391 void TemporalLayersFactory::SetListener(TemporalLayersListener* listener) { | 415 void TemporalLayersFactory::SetListener(TemporalLayersListener* listener) { |
| 392 listener_ = listener; | 416 listener_ = listener; |
| 393 } | 417 } |
| 394 | 418 |
| 395 } // namespace webrtc | 419 } // namespace webrtc |
| OLD | NEW |