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

Side by Side Diff: webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc

Issue 2706123003: Reland of Add optional visualization file writers to VideoProcessor tests. (Closed)
Patch Set: Rebase fixes. Created 3 years, 10 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) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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 28 matching lines...) Expand all
39 // Codec/network settings. 39 // Codec/network settings.
40 CodecConfigPars process_settings; 40 CodecConfigPars process_settings;
41 SetCodecParameters(&process_settings, kVideoCodecH264, kHwCodec, 41 SetCodecParameters(&process_settings, kVideoCodecH264, kHwCodec,
42 kUseSingleCore, 0.0f, -1, 1, false, false, true, false); 42 kUseSingleCore, 0.0f, -1, 1, false, false, true, false);
43 // Metrics for expected quality. 43 // Metrics for expected quality.
44 QualityMetrics quality_metrics; 44 QualityMetrics quality_metrics;
45 SetQualityMetrics(&quality_metrics, 35.0, 25.0, 0.93, 0.70); 45 SetQualityMetrics(&quality_metrics, 35.0, 25.0, 0.93, 0.70);
46 // Metrics for rate control. 46 // Metrics for rate control.
47 RateControlMetrics rc_metrics[1]; 47 RateControlMetrics rc_metrics[1];
48 SetRateControlMetrics(rc_metrics, 0, 2, 60, 20, 10, 20, 0, 1); 48 SetRateControlMetrics(rc_metrics, 0, 2, 60, 20, 10, 20, 0, 1);
49 ProcessFramesAndVerify(quality_metrics, 49 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
50 rate_profile, 50 rc_metrics, nullptr /* visualization_params */);
51 process_settings,
52 rc_metrics);
53 } 51 }
54 52
55 #endif // defined(WEBRTC_VIDEOPROCESSOR_H264_TESTS) 53 #endif // defined(WEBRTC_VIDEOPROCESSOR_H264_TESTS)
56 54
57 // Fails on iOS. See webrtc:4755. 55 // Fails on iOS. See webrtc:4755.
58 #if !defined(WEBRTC_IOS) 56 #if !defined(WEBRTC_IOS)
59 57
60 #if !defined(RTC_DISABLE_VP9) 58 #if !defined(RTC_DISABLE_VP9)
61 // VP9: Run with no packet loss and fixed bitrate. Quality should be very high. 59 // VP9: Run with no packet loss and fixed bitrate. Quality should be very high.
62 // One key frame (first frame only) in sequence. Setting |key_frame_interval| 60 // One key frame (first frame only) in sequence. Setting |key_frame_interval|
63 // to -1 below means no periodic key frames in test. 61 // to -1 below means no periodic key frames in test.
64 TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossVP9) { 62 TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossVP9) {
65 // Bitrate and frame rate profile. 63 // Bitrate and frame rate profile.
66 RateProfile rate_profile; 64 RateProfile rate_profile;
67 SetRateProfilePars(&rate_profile, 0, 500, 30, 0); 65 SetRateProfilePars(&rate_profile, 0, 500, 30, 0);
68 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 66 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
69 rate_profile.num_frames = kNumFramesShort; 67 rate_profile.num_frames = kNumFramesShort;
70 // Codec/network settings. 68 // Codec/network settings.
71 CodecConfigPars process_settings; 69 CodecConfigPars process_settings;
72 SetCodecParameters(&process_settings, kVideoCodecVP9, kHwCodec, 70 SetCodecParameters(&process_settings, kVideoCodecVP9, kHwCodec,
73 kUseSingleCore, 0.0f, -1, 1, false, false, true, false); 71 kUseSingleCore, 0.0f, -1, 1, false, false, true, false);
74 // Metrics for expected quality. 72 // Metrics for expected quality.
75 QualityMetrics quality_metrics; 73 QualityMetrics quality_metrics;
76 SetQualityMetrics(&quality_metrics, 37.0, 36.0, 0.93, 0.92); 74 SetQualityMetrics(&quality_metrics, 37.0, 36.0, 0.93, 0.92);
77 // Metrics for rate control. 75 // Metrics for rate control.
78 RateControlMetrics rc_metrics[1]; 76 RateControlMetrics rc_metrics[1];
79 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 20, 0, 1); 77 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 20, 0, 1);
80 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 78 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
81 rc_metrics); 79 rc_metrics, nullptr /* visualization_params */);
82 } 80 }
83 81
84 // VP9: Run with 5% packet loss and fixed bitrate. Quality should be a bit 82 // VP9: Run with 5% packet loss and fixed bitrate. Quality should be a bit
85 // lower. One key frame (first frame only) in sequence. 83 // lower. One key frame (first frame only) in sequence.
86 TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLossVP9) { 84 TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLossVP9) {
87 // Bitrate and frame rate profile. 85 // Bitrate and frame rate profile.
88 RateProfile rate_profile; 86 RateProfile rate_profile;
89 SetRateProfilePars(&rate_profile, 0, 500, 30, 0); 87 SetRateProfilePars(&rate_profile, 0, 500, 30, 0);
90 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 88 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
91 rate_profile.num_frames = kNumFramesShort; 89 rate_profile.num_frames = kNumFramesShort;
92 // Codec/network settings. 90 // Codec/network settings.
93 CodecConfigPars process_settings; 91 CodecConfigPars process_settings;
94 SetCodecParameters(&process_settings, kVideoCodecVP9, kHwCodec, 92 SetCodecParameters(&process_settings, kVideoCodecVP9, kHwCodec,
95 kUseSingleCore, 0.05f, -1, 1, false, false, true, false); 93 kUseSingleCore, 0.05f, -1, 1, false, false, true, false);
96 // Metrics for expected quality. 94 // Metrics for expected quality.
97 QualityMetrics quality_metrics; 95 QualityMetrics quality_metrics;
98 SetQualityMetrics(&quality_metrics, 17.0, 14.0, 0.45, 0.36); 96 SetQualityMetrics(&quality_metrics, 17.0, 14.0, 0.45, 0.36);
99 // Metrics for rate control. 97 // Metrics for rate control.
100 RateControlMetrics rc_metrics[1]; 98 RateControlMetrics rc_metrics[1];
101 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 20, 0, 1); 99 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 20, 0, 1);
102 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 100 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
103 rc_metrics); 101 rc_metrics, nullptr /* visualization_params */);
104 } 102 }
105 103
106 // VP9: Run with no packet loss, with varying bitrate (3 rate updates): 104 // VP9: Run with no packet loss, with varying bitrate (3 rate updates):
107 // low to high to medium. Check that quality and encoder response to the new 105 // low to high to medium. Check that quality and encoder response to the new
108 // target rate/per-frame bandwidth (for each rate update) is within limits. 106 // target rate/per-frame bandwidth (for each rate update) is within limits.
109 // One key frame (first frame only) in sequence. 107 // One key frame (first frame only) in sequence.
110 TEST_F(VideoProcessorIntegrationTest, ProcessNoLossChangeBitRateVP9) { 108 TEST_F(VideoProcessorIntegrationTest, ProcessNoLossChangeBitRateVP9) {
111 // Bitrate and frame rate profile. 109 // Bitrate and frame rate profile.
112 RateProfile rate_profile; 110 RateProfile rate_profile;
113 SetRateProfilePars(&rate_profile, 0, 200, 30, 0); 111 SetRateProfilePars(&rate_profile, 0, 200, 30, 0);
114 SetRateProfilePars(&rate_profile, 1, 700, 30, 100); 112 SetRateProfilePars(&rate_profile, 1, 700, 30, 100);
115 SetRateProfilePars(&rate_profile, 2, 500, 30, 200); 113 SetRateProfilePars(&rate_profile, 2, 500, 30, 200);
116 rate_profile.frame_index_rate_update[3] = kNumFramesLong + 1; 114 rate_profile.frame_index_rate_update[3] = kNumFramesLong + 1;
117 rate_profile.num_frames = kNumFramesLong; 115 rate_profile.num_frames = kNumFramesLong;
118 // Codec/network settings. 116 // Codec/network settings.
119 CodecConfigPars process_settings; 117 CodecConfigPars process_settings;
120 SetCodecParameters(&process_settings, kVideoCodecVP9, kHwCodec, 118 SetCodecParameters(&process_settings, kVideoCodecVP9, kHwCodec,
121 kUseSingleCore, 0.0f, -1, 1, false, false, true, false); 119 kUseSingleCore, 0.0f, -1, 1, false, false, true, false);
122 // Metrics for expected quality. 120 // Metrics for expected quality.
123 QualityMetrics quality_metrics; 121 QualityMetrics quality_metrics;
124 SetQualityMetrics(&quality_metrics, 35.5, 30.0, 0.90, 0.85); 122 SetQualityMetrics(&quality_metrics, 35.5, 30.0, 0.90, 0.85);
125 // Metrics for rate control. 123 // Metrics for rate control.
126 RateControlMetrics rc_metrics[3]; 124 RateControlMetrics rc_metrics[3];
127 SetRateControlMetrics(rc_metrics, 0, 0, 30, 20, 20, 30, 0, 1); 125 SetRateControlMetrics(rc_metrics, 0, 0, 30, 20, 20, 30, 0, 1);
128 SetRateControlMetrics(rc_metrics, 1, 2, 0, 20, 20, 60, 0, 0); 126 SetRateControlMetrics(rc_metrics, 1, 2, 0, 20, 20, 60, 0, 0);
129 SetRateControlMetrics(rc_metrics, 2, 0, 0, 25, 20, 40, 0, 0); 127 SetRateControlMetrics(rc_metrics, 2, 0, 0, 25, 20, 40, 0, 0);
130 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 128 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
131 rc_metrics); 129 rc_metrics, nullptr /* visualization_params */);
132 } 130 }
133 131
134 // VP9: Run with no packet loss, with an update (decrease) in frame rate. 132 // VP9: Run with no packet loss, with an update (decrease) in frame rate.
135 // Lower frame rate means higher per-frame-bandwidth, so easier to encode. 133 // Lower frame rate means higher per-frame-bandwidth, so easier to encode.
136 // At the low bitrate in this test, this means better rate control after the 134 // At the low bitrate in this test, this means better rate control after the
137 // update(s) to lower frame rate. So expect less frame drops, and max values 135 // update(s) to lower frame rate. So expect less frame drops, and max values
138 // for the rate control metrics can be lower. One key frame (first frame only). 136 // for the rate control metrics can be lower. One key frame (first frame only).
139 // Note: quality after update should be higher but we currently compute quality 137 // Note: quality after update should be higher but we currently compute quality
140 // metrics averaged over whole sequence run. 138 // metrics averaged over whole sequence run.
141 TEST_F(VideoProcessorIntegrationTest, 139 TEST_F(VideoProcessorIntegrationTest,
(...skipping 12 matching lines...) Expand all
154 kUseSingleCore, 0.0f, -1, 1, false, false, true, false); 152 kUseSingleCore, 0.0f, -1, 1, false, false, true, false);
155 // Metrics for expected quality. 153 // Metrics for expected quality.
156 QualityMetrics quality_metrics; 154 QualityMetrics quality_metrics;
157 SetQualityMetrics(&quality_metrics, 31.5, 18.0, 0.80, 0.43); 155 SetQualityMetrics(&quality_metrics, 31.5, 18.0, 0.80, 0.43);
158 // Metrics for rate control. 156 // Metrics for rate control.
159 RateControlMetrics rc_metrics[3]; 157 RateControlMetrics rc_metrics[3];
160 SetRateControlMetrics(rc_metrics, 0, 38, 50, 75, 15, 45, 0, 1); 158 SetRateControlMetrics(rc_metrics, 0, 38, 50, 75, 15, 45, 0, 1);
161 SetRateControlMetrics(rc_metrics, 1, 10, 0, 40, 10, 30, 0, 0); 159 SetRateControlMetrics(rc_metrics, 1, 10, 0, 40, 10, 30, 0, 0);
162 SetRateControlMetrics(rc_metrics, 2, 5, 0, 30, 5, 20, 0, 0); 160 SetRateControlMetrics(rc_metrics, 2, 5, 0, 30, 5, 20, 0, 0);
163 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 161 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
164 rc_metrics); 162 rc_metrics, nullptr /* visualization_params */);
165 } 163 }
166 164
167 // VP9: Run with no packet loss and denoiser on. One key frame (first frame). 165 // VP9: Run with no packet loss and denoiser on. One key frame (first frame).
168 TEST_F(VideoProcessorIntegrationTest, ProcessNoLossDenoiserOnVP9) { 166 TEST_F(VideoProcessorIntegrationTest, ProcessNoLossDenoiserOnVP9) {
169 // Bitrate and frame rate profile. 167 // Bitrate and frame rate profile.
170 RateProfile rate_profile; 168 RateProfile rate_profile;
171 SetRateProfilePars(&rate_profile, 0, 500, 30, 0); 169 SetRateProfilePars(&rate_profile, 0, 500, 30, 0);
172 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 170 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
173 rate_profile.num_frames = kNumFramesShort; 171 rate_profile.num_frames = kNumFramesShort;
174 // Codec/network settings. 172 // Codec/network settings.
175 CodecConfigPars process_settings; 173 CodecConfigPars process_settings;
176 SetCodecParameters(&process_settings, kVideoCodecVP9, kHwCodec, 174 SetCodecParameters(&process_settings, kVideoCodecVP9, kHwCodec,
177 kUseSingleCore, 0.0f, -1, 1, false, true, true, false); 175 kUseSingleCore, 0.0f, -1, 1, false, true, true, false);
178 // Metrics for expected quality. 176 // Metrics for expected quality.
179 QualityMetrics quality_metrics; 177 QualityMetrics quality_metrics;
180 SetQualityMetrics(&quality_metrics, 36.8, 35.8, 0.92, 0.91); 178 SetQualityMetrics(&quality_metrics, 36.8, 35.8, 0.92, 0.91);
181 // Metrics for rate control. 179 // Metrics for rate control.
182 RateControlMetrics rc_metrics[1]; 180 RateControlMetrics rc_metrics[1];
183 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 20, 0, 1); 181 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 20, 0, 1);
184 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 182 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
185 rc_metrics); 183 rc_metrics, nullptr /* visualization_params */);
186 } 184 }
187 185
188 // Run with no packet loss, at low bitrate. 186 // Run with no packet loss, at low bitrate.
189 // spatial_resize is on, for this low bitrate expect one resize in sequence. 187 // spatial_resize is on, for this low bitrate expect one resize in sequence.
190 // Resize happens on delta frame. Expect only one key frame (first frame). 188 // Resize happens on delta frame. Expect only one key frame (first frame).
191 TEST_F(VideoProcessorIntegrationTest, 189 TEST_F(VideoProcessorIntegrationTest,
192 DISABLED_ProcessNoLossSpatialResizeFrameDropVP9) { 190 DISABLED_ProcessNoLossSpatialResizeFrameDropVP9) {
193 config_.networking_config.packet_loss_probability = 0; 191 config_.networking_config.packet_loss_probability = 0;
194 // Bitrate and frame rate profile. 192 // Bitrate and frame rate profile.
195 RateProfile rate_profile; 193 RateProfile rate_profile;
196 SetRateProfilePars(&rate_profile, 0, 50, 30, 0); 194 SetRateProfilePars(&rate_profile, 0, 50, 30, 0);
197 rate_profile.frame_index_rate_update[1] = kNumFramesLong + 1; 195 rate_profile.frame_index_rate_update[1] = kNumFramesLong + 1;
198 rate_profile.num_frames = kNumFramesLong; 196 rate_profile.num_frames = kNumFramesLong;
199 // Codec/network settings. 197 // Codec/network settings.
200 CodecConfigPars process_settings; 198 CodecConfigPars process_settings;
201 SetCodecParameters(&process_settings, kVideoCodecVP9, kHwCodec, 199 SetCodecParameters(&process_settings, kVideoCodecVP9, kHwCodec,
202 kUseSingleCore, 0.0f, -1, 1, false, false, true, true); 200 kUseSingleCore, 0.0f, -1, 1, false, false, true, true);
203 // Metrics for expected quality. 201 // Metrics for expected quality.
204 QualityMetrics quality_metrics; 202 QualityMetrics quality_metrics;
205 SetQualityMetrics(&quality_metrics, 24.0, 13.0, 0.65, 0.37); 203 SetQualityMetrics(&quality_metrics, 24.0, 13.0, 0.65, 0.37);
206 // Metrics for rate control. 204 // Metrics for rate control.
207 RateControlMetrics rc_metrics[1]; 205 RateControlMetrics rc_metrics[1];
208 SetRateControlMetrics(rc_metrics, 0, 228, 70, 160, 15, 80, 1, 1); 206 SetRateControlMetrics(rc_metrics, 0, 228, 70, 160, 15, 80, 1, 1);
209 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 207 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
210 rc_metrics); 208 rc_metrics, nullptr /* visualization_params */);
211 } 209 }
212 210
213 // TODO(marpan): Add temporal layer test for VP9, once changes are in 211 // TODO(marpan): Add temporal layer test for VP9, once changes are in
214 // vp9 wrapper for this. 212 // vp9 wrapper for this.
215 213
216 #endif // !defined(RTC_DISABLE_VP9) 214 #endif // !defined(RTC_DISABLE_VP9)
217 215
218 // VP8: Run with no packet loss and fixed bitrate. Quality should be very high. 216 // VP8: Run with no packet loss and fixed bitrate. Quality should be very high.
219 // One key frame (first frame only) in sequence. Setting |key_frame_interval| 217 // One key frame (first frame only) in sequence. Setting |key_frame_interval|
220 // to -1 below means no periodic key frames in test. 218 // to -1 below means no periodic key frames in test.
221 TEST_F(VideoProcessorIntegrationTest, ProcessZeroPacketLoss) { 219 TEST_F(VideoProcessorIntegrationTest, ProcessZeroPacketLoss) {
222 // Bitrate and frame rate profile. 220 // Bitrate and frame rate profile.
223 RateProfile rate_profile; 221 RateProfile rate_profile;
224 SetRateProfilePars(&rate_profile, 0, 500, 30, 0); 222 SetRateProfilePars(&rate_profile, 0, 500, 30, 0);
225 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 223 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
226 rate_profile.num_frames = kNumFramesShort; 224 rate_profile.num_frames = kNumFramesShort;
227 // Codec/network settings. 225 // Codec/network settings.
228 CodecConfigPars process_settings; 226 CodecConfigPars process_settings;
229 SetCodecParameters(&process_settings, kVideoCodecVP8, kHwCodec, 227 SetCodecParameters(&process_settings, kVideoCodecVP8, kHwCodec,
230 kUseSingleCore, 0.0f, -1, 1, false, true, true, false); 228 kUseSingleCore, 0.0f, -1, 1, false, true, true, false);
231 // Metrics for expected quality. 229 // Metrics for expected quality.
232 QualityMetrics quality_metrics; 230 QualityMetrics quality_metrics;
233 SetQualityMetrics(&quality_metrics, 34.95, 33.0, 0.90, 0.89); 231 SetQualityMetrics(&quality_metrics, 34.95, 33.0, 0.90, 0.89);
234 // Metrics for rate control. 232 // Metrics for rate control.
235 RateControlMetrics rc_metrics[1]; 233 RateControlMetrics rc_metrics[1];
236 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 15, 0, 1); 234 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 15, 0, 1);
237 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 235 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
238 rc_metrics); 236 rc_metrics, nullptr /* visualization_params */);
239 } 237 }
240 238
241 // VP8: Run with 5% packet loss and fixed bitrate. Quality should be a bit 239 // VP8: Run with 5% packet loss and fixed bitrate. Quality should be a bit
242 // lower. One key frame (first frame only) in sequence. 240 // lower. One key frame (first frame only) in sequence.
243 TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLoss) { 241 TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLoss) {
244 // Bitrate and frame rate profile. 242 // Bitrate and frame rate profile.
245 RateProfile rate_profile; 243 RateProfile rate_profile;
246 SetRateProfilePars(&rate_profile, 0, 500, 30, 0); 244 SetRateProfilePars(&rate_profile, 0, 500, 30, 0);
247 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 245 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
248 rate_profile.num_frames = kNumFramesShort; 246 rate_profile.num_frames = kNumFramesShort;
249 // Codec/network settings. 247 // Codec/network settings.
250 CodecConfigPars process_settings; 248 CodecConfigPars process_settings;
251 SetCodecParameters(&process_settings, kVideoCodecVP8, kHwCodec, 249 SetCodecParameters(&process_settings, kVideoCodecVP8, kHwCodec,
252 kUseSingleCore, 0.05f, -1, 1, false, true, true, false); 250 kUseSingleCore, 0.05f, -1, 1, false, true, true, false);
253 // Metrics for expected quality. 251 // Metrics for expected quality.
254 QualityMetrics quality_metrics; 252 QualityMetrics quality_metrics;
255 SetQualityMetrics(&quality_metrics, 20.0, 16.0, 0.60, 0.40); 253 SetQualityMetrics(&quality_metrics, 20.0, 16.0, 0.60, 0.40);
256 // Metrics for rate control. 254 // Metrics for rate control.
257 RateControlMetrics rc_metrics[1]; 255 RateControlMetrics rc_metrics[1];
258 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 15, 0, 1); 256 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 15, 0, 1);
259 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 257 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
260 rc_metrics); 258 rc_metrics, nullptr /* visualization_params */);
261 } 259 }
262 260
263 // VP8: Run with 10% packet loss and fixed bitrate. Quality should be lower. 261 // VP8: Run with 10% packet loss and fixed bitrate. Quality should be lower.
264 // One key frame (first frame only) in sequence. 262 // One key frame (first frame only) in sequence.
265 TEST_F(VideoProcessorIntegrationTest, Process10PercentPacketLoss) { 263 TEST_F(VideoProcessorIntegrationTest, Process10PercentPacketLoss) {
266 // Bitrate and frame rate profile. 264 // Bitrate and frame rate profile.
267 RateProfile rate_profile; 265 RateProfile rate_profile;
268 SetRateProfilePars(&rate_profile, 0, 500, 30, 0); 266 SetRateProfilePars(&rate_profile, 0, 500, 30, 0);
269 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 267 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
270 rate_profile.num_frames = kNumFramesShort; 268 rate_profile.num_frames = kNumFramesShort;
271 // Codec/network settings. 269 // Codec/network settings.
272 CodecConfigPars process_settings; 270 CodecConfigPars process_settings;
273 SetCodecParameters(&process_settings, kVideoCodecVP8, kHwCodec, 271 SetCodecParameters(&process_settings, kVideoCodecVP8, kHwCodec,
274 kUseSingleCore, 0.1f, -1, 1, false, true, true, false); 272 kUseSingleCore, 0.1f, -1, 1, false, true, true, false);
275 // Metrics for expected quality. 273 // Metrics for expected quality.
276 QualityMetrics quality_metrics; 274 QualityMetrics quality_metrics;
277 SetQualityMetrics(&quality_metrics, 19.0, 16.0, 0.50, 0.35); 275 SetQualityMetrics(&quality_metrics, 19.0, 16.0, 0.50, 0.35);
278 // Metrics for rate control. 276 // Metrics for rate control.
279 RateControlMetrics rc_metrics[1]; 277 RateControlMetrics rc_metrics[1];
280 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 15, 0, 1); 278 SetRateControlMetrics(rc_metrics, 0, 0, 40, 20, 10, 15, 0, 1);
281 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 279 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
282 rc_metrics); 280 rc_metrics, nullptr /* visualization_params */);
283 } 281 }
284 282
285 #endif // !defined(WEBRTC_IOS) 283 #endif // !defined(WEBRTC_IOS)
286 284
287 // The tests below are currently disabled for Android. For ARM, the encoder 285 // The tests below are currently disabled for Android. For ARM, the encoder
288 // uses |cpu_speed| = 12, as opposed to default |cpu_speed| <= 6 for x86, 286 // uses |cpu_speed| = 12, as opposed to default |cpu_speed| <= 6 for x86,
289 // which leads to significantly different quality. The quality and rate control 287 // which leads to significantly different quality. The quality and rate control
290 // settings in the tests below are defined for encoder speed setting 288 // settings in the tests below are defined for encoder speed setting
291 // |cpu_speed| <= ~6. A number of settings would need to be significantly 289 // |cpu_speed| <= ~6. A number of settings would need to be significantly
292 // modified for the |cpu_speed| = 12 case. For now, keep the tests below 290 // modified for the |cpu_speed| = 12 case. For now, keep the tests below
(...skipping 25 matching lines...) Expand all
318 kUseSingleCore, 0.0f, -1, 1, false, true, true, false); 316 kUseSingleCore, 0.0f, -1, 1, false, true, true, false);
319 // Metrics for expected quality. 317 // Metrics for expected quality.
320 QualityMetrics quality_metrics; 318 QualityMetrics quality_metrics;
321 SetQualityMetrics(&quality_metrics, 34.0, 32.0, 0.85, 0.80); 319 SetQualityMetrics(&quality_metrics, 34.0, 32.0, 0.85, 0.80);
322 // Metrics for rate control. 320 // Metrics for rate control.
323 RateControlMetrics rc_metrics[3]; 321 RateControlMetrics rc_metrics[3];
324 SetRateControlMetrics(rc_metrics, 0, 0, 45, 20, 10, 15, 0, 1); 322 SetRateControlMetrics(rc_metrics, 0, 0, 45, 20, 10, 15, 0, 1);
325 SetRateControlMetrics(rc_metrics, 1, 0, 0, 25, 20, 10, 0, 0); 323 SetRateControlMetrics(rc_metrics, 1, 0, 0, 25, 20, 10, 0, 0);
326 SetRateControlMetrics(rc_metrics, 2, 0, 0, 25, 15, 10, 0, 0); 324 SetRateControlMetrics(rc_metrics, 2, 0, 0, 25, 15, 10, 0, 0);
327 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 325 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
328 rc_metrics); 326 rc_metrics, nullptr /* visualization_params */);
329 } 327 }
330 328
331 // VP8: Run with no packet loss, with an update (decrease) in frame rate. 329 // VP8: Run with no packet loss, with an update (decrease) in frame rate.
332 // Lower frame rate means higher per-frame-bandwidth, so easier to encode. 330 // Lower frame rate means higher per-frame-bandwidth, so easier to encode.
333 // At the bitrate in this test, this means better rate control after the 331 // At the bitrate in this test, this means better rate control after the
334 // update(s) to lower frame rate. So expect less frame drops, and max values 332 // update(s) to lower frame rate. So expect less frame drops, and max values
335 // for the rate control metrics can be lower. One key frame (first frame only). 333 // for the rate control metrics can be lower. One key frame (first frame only).
336 // Note: quality after update should be higher but we currently compute quality 334 // Note: quality after update should be higher but we currently compute quality
337 // metrics averaged over whole sequence run. 335 // metrics averaged over whole sequence run.
338 // Too slow to finish before timeout on iOS. See webrtc:4755. 336 // Too slow to finish before timeout on iOS. See webrtc:4755.
(...skipping 20 matching lines...) Expand all
359 kUseSingleCore, 0.0f, -1, 1, false, true, true, false); 357 kUseSingleCore, 0.0f, -1, 1, false, true, true, false);
360 // Metrics for expected quality. 358 // Metrics for expected quality.
361 QualityMetrics quality_metrics; 359 QualityMetrics quality_metrics;
362 SetQualityMetrics(&quality_metrics, 31.0, 22.0, 0.80, 0.65); 360 SetQualityMetrics(&quality_metrics, 31.0, 22.0, 0.80, 0.65);
363 // Metrics for rate control. 361 // Metrics for rate control.
364 RateControlMetrics rc_metrics[3]; 362 RateControlMetrics rc_metrics[3];
365 SetRateControlMetrics(rc_metrics, 0, 40, 20, 75, 15, 60, 0, 1); 363 SetRateControlMetrics(rc_metrics, 0, 40, 20, 75, 15, 60, 0, 1);
366 SetRateControlMetrics(rc_metrics, 1, 10, 0, 25, 10, 35, 0, 0); 364 SetRateControlMetrics(rc_metrics, 1, 10, 0, 25, 10, 35, 0, 0);
367 SetRateControlMetrics(rc_metrics, 2, 0, 0, 20, 10, 15, 0, 0); 365 SetRateControlMetrics(rc_metrics, 2, 0, 0, 20, 10, 15, 0, 0);
368 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 366 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
369 rc_metrics); 367 rc_metrics, nullptr /* visualization_params */);
370 } 368 }
371 369
372 // VP8: Run with no packet loss, with 3 temporal layers, with a rate update in 370 // VP8: Run with no packet loss, with 3 temporal layers, with a rate update in
373 // the middle of the sequence. The max values for the frame size mismatch and 371 // the middle of the sequence. The max values for the frame size mismatch and
374 // encoding rate mismatch are applied to each layer. 372 // encoding rate mismatch are applied to each layer.
375 // No dropped frames in this test, and internal spatial resizer is off. 373 // No dropped frames in this test, and internal spatial resizer is off.
376 // One key frame (first frame only) in sequence, so no spatial resizing. 374 // One key frame (first frame only) in sequence, so no spatial resizing.
377 // Too slow to finish before timeout on iOS. See webrtc:4755. 375 // Too slow to finish before timeout on iOS. See webrtc:4755.
378 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) 376 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
379 #define MAYBE_ProcessNoLossTemporalLayersVP8 \ 377 #define MAYBE_ProcessNoLossTemporalLayersVP8 \
(...skipping 14 matching lines...) Expand all
394 SetCodecParameters(&process_settings, kVideoCodecVP8, kHwCodec, 392 SetCodecParameters(&process_settings, kVideoCodecVP8, kHwCodec,
395 kUseSingleCore, 0.0f, -1, 3, false, true, true, false); 393 kUseSingleCore, 0.0f, -1, 3, false, true, true, false);
396 // Metrics for expected quality. 394 // Metrics for expected quality.
397 QualityMetrics quality_metrics; 395 QualityMetrics quality_metrics;
398 SetQualityMetrics(&quality_metrics, 32.5, 30.0, 0.85, 0.80); 396 SetQualityMetrics(&quality_metrics, 32.5, 30.0, 0.85, 0.80);
399 // Metrics for rate control. 397 // Metrics for rate control.
400 RateControlMetrics rc_metrics[2]; 398 RateControlMetrics rc_metrics[2];
401 SetRateControlMetrics(rc_metrics, 0, 0, 20, 30, 10, 10, 0, 1); 399 SetRateControlMetrics(rc_metrics, 0, 0, 20, 30, 10, 10, 0, 1);
402 SetRateControlMetrics(rc_metrics, 1, 0, 0, 30, 15, 10, 0, 0); 400 SetRateControlMetrics(rc_metrics, 1, 0, 0, 30, 15, 10, 0, 0);
403 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings, 401 ProcessFramesAndVerify(quality_metrics, rate_profile, process_settings,
404 rc_metrics); 402 rc_metrics, nullptr /* visualization_params */);
405 } 403 }
406 } // namespace test 404 } // namespace test
407 } // namespace webrtc 405 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698