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

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

Issue 2924993002: Move temporal-layer properties to FrameConfig. (Closed)
Patch Set: improve unittests Created 3 years, 5 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 bool expected_layer_sync[16] = {false, true, false, false, false, false, 81 bool expected_layer_sync[16] = {false, true, false, false, false, false,
82 false, false, false, true, false, false, 82 false, false, false, true, false, false,
83 false, false, false, false}; 83 false, false, false, false};
84 84
85 uint32_t timestamp = 0; 85 uint32_t timestamp = 0;
86 for (int i = 0; i < 16; ++i) { 86 for (int i = 0; i < 16; ++i) {
87 TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); 87 TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp);
88 EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)); 88 EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config));
89 tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0); 89 tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0);
90 EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx); 90 EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx);
91 EXPECT_EQ(expected_temporal_idx[i], tl_config.packetizer_temporal_idx);
92 EXPECT_EQ(expected_temporal_idx[i], tl_config.encoder_layer_id);
91 EXPECT_EQ(expected_layer_sync[i], vp8_info.layerSync); 93 EXPECT_EQ(expected_layer_sync[i], vp8_info.layerSync);
94 EXPECT_EQ(expected_layer_sync[i], tl_config.layer_sync);
92 timestamp += 3000; 95 timestamp += 3000;
93 } 96 }
94 } 97 }
95 98
96 TEST(TemporalLayersTest, 3Layers) { 99 TEST(TemporalLayersTest, 3Layers) {
97 DefaultTemporalLayers tl(3, 0); 100 DefaultTemporalLayers tl(3, 0);
98 vpx_codec_enc_cfg_t cfg; 101 vpx_codec_enc_cfg_t cfg;
99 CodecSpecificInfoVP8 vp8_info; 102 CodecSpecificInfoVP8 vp8_info;
100 tl.OnRatesUpdated(500, 500, 30); 103 tl.OnRatesUpdated(500, 500, 30);
101 tl.UpdateConfiguration(&cfg); 104 tl.UpdateConfiguration(&cfg);
(...skipping 22 matching lines...) Expand all
124 bool expected_layer_sync[16] = {false, true, true, false, false, false, 127 bool expected_layer_sync[16] = {false, true, true, false, false, false,
125 false, false, false, true, true, false, 128 false, false, false, true, true, false,
126 false, false, false, false}; 129 false, false, false, false};
127 130
128 unsigned int timestamp = 0; 131 unsigned int timestamp = 0;
129 for (int i = 0; i < 16; ++i) { 132 for (int i = 0; i < 16; ++i) {
130 TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); 133 TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp);
131 EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)); 134 EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config));
132 tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0); 135 tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0);
133 EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx); 136 EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx);
137 EXPECT_EQ(expected_temporal_idx[i], tl_config.packetizer_temporal_idx);
138 EXPECT_EQ(expected_temporal_idx[i], tl_config.encoder_layer_id);
134 EXPECT_EQ(expected_layer_sync[i], vp8_info.layerSync); 139 EXPECT_EQ(expected_layer_sync[i], vp8_info.layerSync);
140 EXPECT_EQ(expected_layer_sync[i], tl_config.layer_sync);
135 timestamp += 3000; 141 timestamp += 3000;
136 } 142 }
137 } 143 }
138 144
139 TEST(TemporalLayersTest, 4Layers) { 145 TEST(TemporalLayersTest, 4Layers) {
140 DefaultTemporalLayers tl(4, 0); 146 DefaultTemporalLayers tl(4, 0);
141 vpx_codec_enc_cfg_t cfg; 147 vpx_codec_enc_cfg_t cfg;
142 CodecSpecificInfoVP8 vp8_info; 148 CodecSpecificInfoVP8 vp8_info;
143 tl.OnRatesUpdated(500, 500, 30); 149 tl.OnRatesUpdated(500, 500, 30);
144 tl.UpdateConfiguration(&cfg); 150 tl.UpdateConfiguration(&cfg);
(...skipping 21 matching lines...) Expand all
166 bool expected_layer_sync[16] = {false, true, true, true, true, true, 172 bool expected_layer_sync[16] = {false, true, true, true, true, true,
167 false, true, false, true, false, true, 173 false, true, false, true, false, true,
168 false, true, false, true}; 174 false, true, false, true};
169 175
170 uint32_t timestamp = 0; 176 uint32_t timestamp = 0;
171 for (int i = 0; i < 16; ++i) { 177 for (int i = 0; i < 16; ++i) {
172 TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); 178 TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp);
173 EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)); 179 EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config));
174 tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0); 180 tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0);
175 EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx); 181 EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx);
182 EXPECT_EQ(expected_temporal_idx[i], tl_config.packetizer_temporal_idx);
183 EXPECT_EQ(expected_temporal_idx[i], tl_config.encoder_layer_id);
176 EXPECT_EQ(expected_layer_sync[i], vp8_info.layerSync); 184 EXPECT_EQ(expected_layer_sync[i], vp8_info.layerSync);
185 EXPECT_EQ(expected_layer_sync[i], tl_config.layer_sync);
177 timestamp += 3000; 186 timestamp += 3000;
178 } 187 }
179 } 188 }
180 189
181 TEST(TemporalLayersTest, KeyFrame) { 190 TEST(TemporalLayersTest, KeyFrame) {
182 DefaultTemporalLayers tl(3, 0); 191 DefaultTemporalLayers tl(3, 0);
183 vpx_codec_enc_cfg_t cfg; 192 vpx_codec_enc_cfg_t cfg;
184 CodecSpecificInfoVP8 vp8_info; 193 CodecSpecificInfoVP8 vp8_info;
185 tl.OnRatesUpdated(500, 500, 30); 194 tl.OnRatesUpdated(500, 500, 30);
186 tl.UpdateConfiguration(&cfg); 195 tl.UpdateConfiguration(&cfg);
187 196
188 int expected_flags[8] = { 197 int expected_flags[8] = {
189 kTemporalUpdateLastAndGoldenRefAltRef, 198 kTemporalUpdateLastAndGoldenRefAltRef,
190 kTemporalUpdateNoneNoRefGolden, 199 kTemporalUpdateNoneNoRefGolden,
191 kTemporalUpdateGoldenWithoutDependencyRefAltRef, 200 kTemporalUpdateGoldenWithoutDependencyRefAltRef,
192 kTemporalUpdateNone, 201 kTemporalUpdateNone,
193 kTemporalUpdateLastRefAltRef, 202 kTemporalUpdateLastRefAltRef,
194 kTemporalUpdateNone, 203 kTemporalUpdateNone,
195 kTemporalUpdateGoldenRefAltRef, 204 kTemporalUpdateGoldenRefAltRef,
196 kTemporalUpdateNone, 205 kTemporalUpdateNone,
197 }; 206 };
198 int expected_temporal_idx[8] = {0, 0, 0, 0, 0, 0, 0, 2}; 207 int expected_temporal_idx[8] = {0, 2, 1, 2, 0, 2, 1, 2};
208 bool expected_layer_sync[8] = {false, true, true, false,
209 false, false, false, false};
199 210
200 uint32_t timestamp = 0; 211 uint32_t timestamp = 0;
201 for (int i = 0; i < 7; ++i) { 212 for (int i = 0; i < 7; ++i) {
202 TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); 213 TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp);
203 EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)); 214 EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config));
204 tl.PopulateCodecSpecific(true, tl_config, &vp8_info, 0); 215 tl.PopulateCodecSpecific(true, tl_config, &vp8_info, 0);
205 EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx); 216 EXPECT_EQ(expected_temporal_idx[i], tl_config.packetizer_temporal_idx);
206 EXPECT_EQ(true, vp8_info.layerSync); 217 EXPECT_EQ(expected_temporal_idx[i], tl_config.encoder_layer_id);
218 EXPECT_EQ(0, vp8_info.temporalIdx)
219 << "Key frame should always be packetized as layer 0";
220 EXPECT_EQ(expected_layer_sync[i], tl_config.layer_sync);
221 EXPECT_TRUE(vp8_info.layerSync) << "Key frame should be marked layer sync.";
207 timestamp += 3000; 222 timestamp += 3000;
208 } 223 }
209 TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); 224 TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp);
210 EXPECT_EQ(expected_flags[7], VP8EncoderImpl::EncodeFlags(tl_config)); 225 EXPECT_EQ(expected_flags[7], VP8EncoderImpl::EncodeFlags(tl_config));
211 tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0); 226 tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0);
212 EXPECT_EQ(expected_temporal_idx[7], vp8_info.temporalIdx); 227 EXPECT_NE(0, vp8_info.temporalIdx)
213 EXPECT_EQ(true, vp8_info.layerSync); 228 << "To test something useful, this frame should not use layer 0.";
229 EXPECT_EQ(expected_temporal_idx[7], vp8_info.temporalIdx)
230 << "Non-keyframe, should use frame temporal index.";
231 EXPECT_EQ(expected_temporal_idx[7], tl_config.packetizer_temporal_idx);
232 EXPECT_EQ(expected_temporal_idx[7], tl_config.encoder_layer_id);
233 EXPECT_FALSE(tl_config.layer_sync);
234 EXPECT_TRUE(vp8_info.layerSync) << "Frame after keyframe should always be "
235 "marked layer sync since it only depends "
236 "on the base layer.";
214 } 237 }
215 } // namespace webrtc 238 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698