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 |