Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Side by Side Diff: webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc

Issue 3003823003: Fix FrameConfigs used for VP8 with four temporal layers. (Closed)
Patch Set: Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | webrtc/video/replay.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | webrtc/video/replay.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698