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

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

Issue 2956243002: Add SetCodecSettings method for configuring VideoCodec settings. (Closed)
Patch Set: address comment 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
« no previous file with comments | « webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
11 #include "webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest .h" 11 #include "webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest .h"
12 12
13 namespace webrtc { 13 namespace webrtc {
14 namespace test { 14 namespace test {
15 15
16 namespace { 16 namespace {
17 17
18 // In these correctness tests, we only consider SW codecs. 18 // In these correctness tests, we only consider SW codecs.
19 const bool kHwCodec = false; 19 const bool kHwCodec = false;
20 const bool kBatchMode = false;
21 const bool kVerboseLogging = false;
20 22
21 // Only allow encoder/decoder to use single core, for predictability. 23 // Only allow encoder/decoder to use single core, for predictability.
22 const bool kUseSingleCore = true; 24 const bool kUseSingleCore = true;
23 25
24 // Default codec setting is on. 26 // Default codec setting is on.
25 const bool kResilienceOn = true; 27 const bool kResilienceOn = true;
26 28
29 // Default sequence is foreman (CIF): may be better to use VGA for resize test.
30 const int kCifWidth = 352;
31 const int kCifHeight = 288;
32 const char kForemanCif[] = "foreman_cif";
33
27 } // namespace 34 } // namespace
28 35
29 #if defined(WEBRTC_VIDEOPROCESSOR_H264_TESTS) 36 #if defined(WEBRTC_VIDEOPROCESSOR_H264_TESTS)
30 37
31 // H264: Run with no packet loss and fixed bitrate. Quality should be very high. 38 // H264: Run with no packet loss and fixed bitrate. Quality should be very high.
32 // Note(hbos): The PacketManipulatorImpl code used to simulate packet loss in 39 // Note(hbos): The PacketManipulatorImpl code used to simulate packet loss in
33 // these unittests appears to drop "packets" in a way that is not compatible 40 // these unittests appears to drop "packets" in a way that is not compatible
34 // with H264. Therefore ProcessXPercentPacketLossH264, X != 0, unittests have 41 // with H264. Therefore ProcessXPercentPacketLossH264, X != 0, unittests have
35 // not been added. 42 // not been added.
36 TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossH264) { 43 TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossH264) {
37 // Bit rate and frame rate profile. 44 // Bit rate and frame rate profile.
38 RateProfile rate_profile; 45 RateProfile rate_profile;
39 SetRateProfile(&rate_profile, 0, 500, 30, 0); 46 SetRateProfile(&rate_profile, 0, 500, 30, 0);
40 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 47 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
41 rate_profile.num_frames = kNumFramesShort; 48 rate_profile.num_frames = kNumFramesShort;
42 // Codec/network settings. 49 // Codec/network settings.
43 CodecParams process_settings; 50 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
44 SetCodecParams(&process_settings, kVideoCodecH264, kHwCodec, kUseSingleCore, 51 kForemanCif, kVerboseLogging, kBatchMode);
45 0.0f, -1, 1, false, false, true, false, kResilienceOn); 52 SetCodecSettings(&config_, &codec_settings_, kVideoCodecH264, 1, false, false,
53 true, false, kResilienceOn, kCifWidth, kCifHeight);
46 // Thresholds for expected quality. 54 // Thresholds for expected quality.
47 QualityThresholds quality_thresholds; 55 QualityThresholds quality_thresholds;
48 SetQualityThresholds(&quality_thresholds, 35.0, 25.0, 0.93, 0.70); 56 SetQualityThresholds(&quality_thresholds, 35.0, 25.0, 0.93, 0.70);
49 // Thresholds for rate control. 57 // Thresholds for rate control.
50 RateControlThresholds rc_thresholds[1]; 58 RateControlThresholds rc_thresholds[1];
51 SetRateControlThresholds(rc_thresholds, 0, 2, 60, 20, 10, 20, 0, 1); 59 SetRateControlThresholds(rc_thresholds, 0, 2, 60, 20, 10, 20, 0, 1);
52 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 60 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
53 rc_thresholds, nullptr /* visualization_params */); 61 rc_thresholds, nullptr /* visualization_params */);
54 } 62 }
55 63
56 #endif // defined(WEBRTC_VIDEOPROCESSOR_H264_TESTS) 64 #endif // defined(WEBRTC_VIDEOPROCESSOR_H264_TESTS)
57 65
58 // Fails on iOS. See webrtc:4755. 66 // Fails on iOS. See webrtc:4755.
59 #if !defined(WEBRTC_IOS) 67 #if !defined(WEBRTC_IOS)
60 68
61 #if !defined(RTC_DISABLE_VP9) 69 #if !defined(RTC_DISABLE_VP9)
62 // VP9: Run with no packet loss and fixed bitrate. Quality should be very high. 70 // VP9: Run with no packet loss and fixed bitrate. Quality should be very high.
63 // One key frame (first frame only) in sequence. Setting |key_frame_interval| 71 // One key frame (first frame only) in sequence. Setting |key_frame_interval|
64 // to -1 below means no periodic key frames in test. 72 // to -1 below means no periodic key frames in test.
65 TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossVP9) { 73 TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossVP9) {
66 // Bit rate and frame rate profile. 74 // Bit rate and frame rate profile.
67 RateProfile rate_profile; 75 RateProfile rate_profile;
68 SetRateProfile(&rate_profile, 0, 500, 30, 0); 76 SetRateProfile(&rate_profile, 0, 500, 30, 0);
69 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 77 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
70 rate_profile.num_frames = kNumFramesShort; 78 rate_profile.num_frames = kNumFramesShort;
71 // Codec/network settings. 79 // Codec/network settings.
72 CodecParams process_settings; 80 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
73 SetCodecParams(&process_settings, kVideoCodecVP9, kHwCodec, kUseSingleCore, 81 kForemanCif, kVerboseLogging, kBatchMode);
74 0.0f, -1, 1, false, false, true, false, kResilienceOn); 82 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP9, 1, false, false,
83 true, false, kResilienceOn, kCifWidth, kCifHeight);
75 // Thresholds for expected quality. 84 // Thresholds for expected quality.
76 QualityThresholds quality_thresholds; 85 QualityThresholds quality_thresholds;
77 SetQualityThresholds(&quality_thresholds, 37.0, 36.0, 0.93, 0.92); 86 SetQualityThresholds(&quality_thresholds, 37.0, 36.0, 0.93, 0.92);
78 // Thresholds for rate control. 87 // Thresholds for rate control.
79 RateControlThresholds rc_thresholds[1]; 88 RateControlThresholds rc_thresholds[1];
80 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 20, 0, 1); 89 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 20, 0, 1);
81 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 90 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
82 rc_thresholds, nullptr /* visualization_params */); 91 rc_thresholds, nullptr /* visualization_params */);
83 } 92 }
84 93
85 // VP9: Run with 5% packet loss and fixed bitrate. Quality should be a bit 94 // VP9: Run with 5% packet loss and fixed bitrate. Quality should be a bit
86 // lower. One key frame (first frame only) in sequence. 95 // lower. One key frame (first frame only) in sequence.
87 TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLossVP9) { 96 TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLossVP9) {
88 // Bit rate and frame rate profile. 97 // Bit rate and frame rate profile.
89 RateProfile rate_profile; 98 RateProfile rate_profile;
90 SetRateProfile(&rate_profile, 0, 500, 30, 0); 99 SetRateProfile(&rate_profile, 0, 500, 30, 0);
91 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 100 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
92 rate_profile.num_frames = kNumFramesShort; 101 rate_profile.num_frames = kNumFramesShort;
93 // Codec/network settings. 102 // Codec/network settings.
94 CodecParams process_settings; 103 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.05f, -1,
95 SetCodecParams(&process_settings, kVideoCodecVP9, kHwCodec, kUseSingleCore, 104 kForemanCif, kVerboseLogging, kBatchMode);
96 0.05f, -1, 1, false, false, true, false, kResilienceOn); 105 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP9, 1, false, false,
106 true, false, kResilienceOn, kCifWidth, kCifHeight);
97 // Thresholds for expected quality. 107 // Thresholds for expected quality.
98 QualityThresholds quality_thresholds; 108 QualityThresholds quality_thresholds;
99 SetQualityThresholds(&quality_thresholds, 17.0, 14.0, 0.45, 0.36); 109 SetQualityThresholds(&quality_thresholds, 17.0, 14.0, 0.45, 0.36);
100 // Thresholds for rate control. 110 // Thresholds for rate control.
101 RateControlThresholds rc_thresholds[1]; 111 RateControlThresholds rc_thresholds[1];
102 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 20, 0, 1); 112 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 20, 0, 1);
103 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 113 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
104 rc_thresholds, nullptr /* visualization_params */); 114 rc_thresholds, nullptr /* visualization_params */);
105 } 115 }
106 116
107 // VP9: Run with no packet loss, with varying bitrate (3 rate updates): 117 // VP9: Run with no packet loss, with varying bitrate (3 rate updates):
108 // low to high to medium. Check that quality and encoder response to the new 118 // low to high to medium. Check that quality and encoder response to the new
109 // target rate/per-frame bandwidth (for each rate update) is within limits. 119 // target rate/per-frame bandwidth (for each rate update) is within limits.
110 // One key frame (first frame only) in sequence. 120 // One key frame (first frame only) in sequence.
111 TEST_F(VideoProcessorIntegrationTest, ProcessNoLossChangeBitRateVP9) { 121 TEST_F(VideoProcessorIntegrationTest, ProcessNoLossChangeBitRateVP9) {
112 // Bit rate and frame rate profile. 122 // Bit rate and frame rate profile.
113 RateProfile rate_profile; 123 RateProfile rate_profile;
114 SetRateProfile(&rate_profile, 0, 200, 30, 0); 124 SetRateProfile(&rate_profile, 0, 200, 30, 0);
115 SetRateProfile(&rate_profile, 1, 700, 30, 100); 125 SetRateProfile(&rate_profile, 1, 700, 30, 100);
116 SetRateProfile(&rate_profile, 2, 500, 30, 200); 126 SetRateProfile(&rate_profile, 2, 500, 30, 200);
117 rate_profile.frame_index_rate_update[3] = kNumFramesLong + 1; 127 rate_profile.frame_index_rate_update[3] = kNumFramesLong + 1;
118 rate_profile.num_frames = kNumFramesLong; 128 rate_profile.num_frames = kNumFramesLong;
119 // Codec/network settings. 129 // Codec/network settings.
120 CodecParams process_settings; 130 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
121 SetCodecParams(&process_settings, kVideoCodecVP9, kHwCodec, kUseSingleCore, 131 kForemanCif, kVerboseLogging, kBatchMode);
122 0.0f, -1, 1, false, false, true, false, kResilienceOn); 132 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP9, 1, false, false,
133 true, false, kResilienceOn, kCifWidth, kCifHeight);
123 // Thresholds for expected quality. 134 // Thresholds for expected quality.
124 QualityThresholds quality_thresholds; 135 QualityThresholds quality_thresholds;
125 SetQualityThresholds(&quality_thresholds, 35.5, 30.0, 0.90, 0.85); 136 SetQualityThresholds(&quality_thresholds, 35.5, 30.0, 0.90, 0.85);
126 // Thresholds for rate control. 137 // Thresholds for rate control.
127 RateControlThresholds rc_thresholds[3]; 138 RateControlThresholds rc_thresholds[3];
128 SetRateControlThresholds(rc_thresholds, 0, 0, 30, 20, 20, 35, 0, 1); 139 SetRateControlThresholds(rc_thresholds, 0, 0, 30, 20, 20, 35, 0, 1);
129 SetRateControlThresholds(rc_thresholds, 1, 2, 0, 20, 20, 60, 0, 0); 140 SetRateControlThresholds(rc_thresholds, 1, 2, 0, 20, 20, 60, 0, 0);
130 SetRateControlThresholds(rc_thresholds, 2, 0, 0, 25, 20, 40, 0, 0); 141 SetRateControlThresholds(rc_thresholds, 2, 0, 0, 25, 20, 40, 0, 0);
131 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 142 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
132 rc_thresholds, nullptr /* visualization_params */); 143 rc_thresholds, nullptr /* visualization_params */);
(...skipping 10 matching lines...) Expand all
143 ProcessNoLossChangeFrameRateFrameDropVP9) { 154 ProcessNoLossChangeFrameRateFrameDropVP9) {
144 config_.networking_config.packet_loss_probability = 0; 155 config_.networking_config.packet_loss_probability = 0;
145 // Bit rate and frame rate profile. 156 // Bit rate and frame rate profile.
146 RateProfile rate_profile; 157 RateProfile rate_profile;
147 SetRateProfile(&rate_profile, 0, 100, 24, 0); 158 SetRateProfile(&rate_profile, 0, 100, 24, 0);
148 SetRateProfile(&rate_profile, 1, 100, 15, 100); 159 SetRateProfile(&rate_profile, 1, 100, 15, 100);
149 SetRateProfile(&rate_profile, 2, 100, 10, 200); 160 SetRateProfile(&rate_profile, 2, 100, 10, 200);
150 rate_profile.frame_index_rate_update[3] = kNumFramesLong + 1; 161 rate_profile.frame_index_rate_update[3] = kNumFramesLong + 1;
151 rate_profile.num_frames = kNumFramesLong; 162 rate_profile.num_frames = kNumFramesLong;
152 // Codec/network settings. 163 // Codec/network settings.
153 CodecParams process_settings; 164 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
154 SetCodecParams(&process_settings, kVideoCodecVP9, kHwCodec, kUseSingleCore, 165 kForemanCif, kVerboseLogging, kBatchMode);
155 0.0f, -1, 1, false, false, true, false, kResilienceOn); 166 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP9, 1, false, false,
167 true, false, kResilienceOn, kCifWidth, kCifHeight);
156 // Thresholds for expected quality. 168 // Thresholds for expected quality.
157 QualityThresholds quality_thresholds; 169 QualityThresholds quality_thresholds;
158 SetQualityThresholds(&quality_thresholds, 31.5, 18.0, 0.80, 0.43); 170 SetQualityThresholds(&quality_thresholds, 31.5, 18.0, 0.80, 0.43);
159 // Thresholds for rate control. 171 // Thresholds for rate control.
160 RateControlThresholds rc_thresholds[3]; 172 RateControlThresholds rc_thresholds[3];
161 SetRateControlThresholds(rc_thresholds, 0, 45, 50, 95, 15, 45, 0, 1); 173 SetRateControlThresholds(rc_thresholds, 0, 45, 50, 95, 15, 45, 0, 1);
162 SetRateControlThresholds(rc_thresholds, 1, 20, 0, 50, 10, 30, 0, 0); 174 SetRateControlThresholds(rc_thresholds, 1, 20, 0, 50, 10, 30, 0, 0);
163 SetRateControlThresholds(rc_thresholds, 2, 5, 0, 30, 5, 25, 0, 0); 175 SetRateControlThresholds(rc_thresholds, 2, 5, 0, 30, 5, 25, 0, 0);
164 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 176 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
165 rc_thresholds, nullptr /* visualization_params */); 177 rc_thresholds, nullptr /* visualization_params */);
166 } 178 }
167 179
168 // VP9: Run with no packet loss and denoiser on. One key frame (first frame). 180 // VP9: Run with no packet loss and denoiser on. One key frame (first frame).
169 TEST_F(VideoProcessorIntegrationTest, ProcessNoLossDenoiserOnVP9) { 181 TEST_F(VideoProcessorIntegrationTest, ProcessNoLossDenoiserOnVP9) {
170 // Bit rate and frame rate profile. 182 // Bit rate and frame rate profile.
171 RateProfile rate_profile; 183 RateProfile rate_profile;
172 SetRateProfile(&rate_profile, 0, 500, 30, 0); 184 SetRateProfile(&rate_profile, 0, 500, 30, 0);
173 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 185 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
174 rate_profile.num_frames = kNumFramesShort; 186 rate_profile.num_frames = kNumFramesShort;
175 // Codec/network settings. 187 // Codec/network settings.
176 CodecParams process_settings; 188 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
177 SetCodecParams(&process_settings, kVideoCodecVP9, kHwCodec, kUseSingleCore, 189 kForemanCif, kVerboseLogging, kBatchMode);
178 0.0f, -1, 1, false, true, true, false, kResilienceOn); 190 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP9, 1, false, true,
191 true, false, kResilienceOn, kCifWidth, kCifHeight);
179 // Thresholds for expected quality. 192 // Thresholds for expected quality.
180 QualityThresholds quality_thresholds; 193 QualityThresholds quality_thresholds;
181 SetQualityThresholds(&quality_thresholds, 36.8, 35.8, 0.92, 0.91); 194 SetQualityThresholds(&quality_thresholds, 36.8, 35.8, 0.92, 0.91);
182 // Thresholds for rate control. 195 // Thresholds for rate control.
183 RateControlThresholds rc_thresholds[1]; 196 RateControlThresholds rc_thresholds[1];
184 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 20, 0, 1); 197 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 20, 0, 1);
185 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 198 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
186 rc_thresholds, nullptr /* visualization_params */); 199 rc_thresholds, nullptr /* visualization_params */);
187 } 200 }
188 201
189 // Run with no packet loss, at low bitrate. 202 // Run with no packet loss, at low bitrate.
190 // spatial_resize is on, for this low bitrate expect one resize in sequence. 203 // spatial_resize is on, for this low bitrate expect one resize in sequence.
191 // Resize happens on delta frame. Expect only one key frame (first frame). 204 // Resize happens on delta frame. Expect only one key frame (first frame).
192 TEST_F(VideoProcessorIntegrationTest, 205 TEST_F(VideoProcessorIntegrationTest,
193 DISABLED_ProcessNoLossSpatialResizeFrameDropVP9) { 206 DISABLED_ProcessNoLossSpatialResizeFrameDropVP9) {
194 config_.networking_config.packet_loss_probability = 0; 207 config_.networking_config.packet_loss_probability = 0;
195 // Bit rate and frame rate profile. 208 // Bit rate and frame rate profile.
196 RateProfile rate_profile; 209 RateProfile rate_profile;
197 SetRateProfile(&rate_profile, 0, 50, 30, 0); 210 SetRateProfile(&rate_profile, 0, 50, 30, 0);
198 rate_profile.frame_index_rate_update[1] = kNumFramesLong + 1; 211 rate_profile.frame_index_rate_update[1] = kNumFramesLong + 1;
199 rate_profile.num_frames = kNumFramesLong; 212 rate_profile.num_frames = kNumFramesLong;
200 // Codec/network settings. 213 // Codec/network settings.
201 CodecParams process_settings; 214 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
202 SetCodecParams(&process_settings, kVideoCodecVP9, kHwCodec, kUseSingleCore, 215 kForemanCif, kVerboseLogging, kBatchMode);
203 0.0f, -1, 1, false, false, true, true, kResilienceOn); 216 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP9, 1, false, false,
217 true, true, kResilienceOn, kCifWidth, kCifHeight);
204 // Thresholds for expected quality. 218 // Thresholds for expected quality.
205 QualityThresholds quality_thresholds; 219 QualityThresholds quality_thresholds;
206 SetQualityThresholds(&quality_thresholds, 24.0, 13.0, 0.65, 0.37); 220 SetQualityThresholds(&quality_thresholds, 24.0, 13.0, 0.65, 0.37);
207 // Thresholds for rate control. 221 // Thresholds for rate control.
208 RateControlThresholds rc_thresholds[1]; 222 RateControlThresholds rc_thresholds[1];
209 SetRateControlThresholds(rc_thresholds, 0, 228, 70, 160, 15, 80, 1, 1); 223 SetRateControlThresholds(rc_thresholds, 0, 228, 70, 160, 15, 80, 1, 1);
210 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 224 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
211 rc_thresholds, nullptr /* visualization_params */); 225 rc_thresholds, nullptr /* visualization_params */);
212 } 226 }
213 227
214 // TODO(marpan): Add temporal layer test for VP9, once changes are in 228 // TODO(marpan): Add temporal layer test for VP9, once changes are in
215 // vp9 wrapper for this. 229 // vp9 wrapper for this.
216 230
217 #endif // !defined(RTC_DISABLE_VP9) 231 #endif // !defined(RTC_DISABLE_VP9)
218 232
219 // VP8: Run with no packet loss and fixed bitrate. Quality should be very high. 233 // VP8: Run with no packet loss and fixed bitrate. Quality should be very high.
220 // One key frame (first frame only) in sequence. Setting |key_frame_interval| 234 // One key frame (first frame only) in sequence. Setting |key_frame_interval|
221 // to -1 below means no periodic key frames in test. 235 // to -1 below means no periodic key frames in test.
222 TEST_F(VideoProcessorIntegrationTest, ProcessZeroPacketLoss) { 236 TEST_F(VideoProcessorIntegrationTest, ProcessZeroPacketLoss) {
223 // Bit rate and frame rate profile. 237 // Bit rate and frame rate profile.
224 RateProfile rate_profile; 238 RateProfile rate_profile;
225 SetRateProfile(&rate_profile, 0, 500, 30, 0); 239 SetRateProfile(&rate_profile, 0, 500, 30, 0);
226 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 240 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
227 rate_profile.num_frames = kNumFramesShort; 241 rate_profile.num_frames = kNumFramesShort;
228 // Codec/network settings. 242 // Codec/network settings.
229 CodecParams process_settings; 243 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
230 SetCodecParams(&process_settings, kVideoCodecVP8, kHwCodec, kUseSingleCore, 244 kForemanCif, kVerboseLogging, kBatchMode);
231 0.0f, -1, 1, false, true, true, false, kResilienceOn); 245 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP8, 1, false, true,
246 true, false, kResilienceOn, kCifWidth, kCifHeight);
232 // Thresholds for expected quality. 247 // Thresholds for expected quality.
233 QualityThresholds quality_thresholds; 248 QualityThresholds quality_thresholds;
234 SetQualityThresholds(&quality_thresholds, 34.95, 33.0, 0.90, 0.89); 249 SetQualityThresholds(&quality_thresholds, 34.95, 33.0, 0.90, 0.89);
235 // Thresholds for rate control. 250 // Thresholds for rate control.
236 RateControlThresholds rc_thresholds[1]; 251 RateControlThresholds rc_thresholds[1];
237 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 15, 0, 1); 252 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 15, 0, 1);
238 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 253 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
239 rc_thresholds, nullptr /* visualization_params */); 254 rc_thresholds, nullptr /* visualization_params */);
240 } 255 }
241 256
242 // VP8: Run with 5% packet loss and fixed bitrate. Quality should be a bit 257 // VP8: Run with 5% packet loss and fixed bitrate. Quality should be a bit
243 // lower. One key frame (first frame only) in sequence. 258 // lower. One key frame (first frame only) in sequence.
244 TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLoss) { 259 TEST_F(VideoProcessorIntegrationTest, Process5PercentPacketLoss) {
245 // Bit rate and frame rate profile. 260 // Bit rate and frame rate profile.
246 RateProfile rate_profile; 261 RateProfile rate_profile;
247 SetRateProfile(&rate_profile, 0, 500, 30, 0); 262 SetRateProfile(&rate_profile, 0, 500, 30, 0);
248 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 263 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
249 rate_profile.num_frames = kNumFramesShort; 264 rate_profile.num_frames = kNumFramesShort;
250 // Codec/network settings. 265 // Codec/network settings.
251 CodecParams process_settings; 266 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.05f, -1,
252 SetCodecParams(&process_settings, kVideoCodecVP8, kHwCodec, kUseSingleCore, 267 kForemanCif, kVerboseLogging, kBatchMode);
253 0.05f, -1, 1, false, true, true, false, kResilienceOn); 268 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP8, 1, false, true,
269 true, false, kResilienceOn, kCifWidth, kCifHeight);
254 // Thresholds for expected quality. 270 // Thresholds for expected quality.
255 QualityThresholds quality_thresholds; 271 QualityThresholds quality_thresholds;
256 SetQualityThresholds(&quality_thresholds, 20.0, 16.0, 0.60, 0.40); 272 SetQualityThresholds(&quality_thresholds, 20.0, 16.0, 0.60, 0.40);
257 // Thresholds for rate control. 273 // Thresholds for rate control.
258 RateControlThresholds rc_thresholds[1]; 274 RateControlThresholds rc_thresholds[1];
259 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 15, 0, 1); 275 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 15, 0, 1);
260 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 276 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
261 rc_thresholds, nullptr /* visualization_params */); 277 rc_thresholds, nullptr /* visualization_params */);
262 } 278 }
263 279
264 // VP8: Run with 10% packet loss and fixed bitrate. Quality should be lower. 280 // VP8: Run with 10% packet loss and fixed bitrate. Quality should be lower.
265 // One key frame (first frame only) in sequence. 281 // One key frame (first frame only) in sequence.
266 TEST_F(VideoProcessorIntegrationTest, Process10PercentPacketLoss) { 282 TEST_F(VideoProcessorIntegrationTest, Process10PercentPacketLoss) {
267 // Bit rate and frame rate profile. 283 // Bit rate and frame rate profile.
268 RateProfile rate_profile; 284 RateProfile rate_profile;
269 SetRateProfile(&rate_profile, 0, 500, 30, 0); 285 SetRateProfile(&rate_profile, 0, 500, 30, 0);
270 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 286 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
271 rate_profile.num_frames = kNumFramesShort; 287 rate_profile.num_frames = kNumFramesShort;
272 // Codec/network settings. 288 // Codec/network settings.
273 CodecParams process_settings; 289 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.1f, -1,
274 SetCodecParams(&process_settings, kVideoCodecVP8, kHwCodec, kUseSingleCore, 290 kForemanCif, kVerboseLogging, kBatchMode);
275 0.1f, -1, 1, false, true, true, false, kResilienceOn); 291 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP8, 1, false, true,
292 true, false, kResilienceOn, kCifWidth, kCifHeight);
276 // Thresholds for expected quality. 293 // Thresholds for expected quality.
277 QualityThresholds quality_thresholds; 294 QualityThresholds quality_thresholds;
278 SetQualityThresholds(&quality_thresholds, 19.0, 16.0, 0.50, 0.35); 295 SetQualityThresholds(&quality_thresholds, 19.0, 16.0, 0.50, 0.35);
279 // Thresholds for rate control. 296 // Thresholds for rate control.
280 RateControlThresholds rc_thresholds[1]; 297 RateControlThresholds rc_thresholds[1];
281 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 15, 0, 1); 298 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 15, 0, 1);
282 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 299 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
283 rc_thresholds, nullptr /* visualization_params */); 300 rc_thresholds, nullptr /* visualization_params */);
284 } 301 }
285 302
286 // This test is identical to VideoProcessorIntegrationTest.ProcessZeroPacketLoss 303 // This test is identical to VideoProcessorIntegrationTest.ProcessZeroPacketLoss
287 // except that |batch_mode| is turned on. The main point of this test is to see 304 // except that |batch_mode| is turned on. The main point of this test is to see
288 // that the reported stats are not wildly varying between batch mode and the 305 // that the reported stats are not wildly varying between batch mode and the
289 // regular online mode. 306 // regular online mode.
290 TEST_F(VideoProcessorIntegrationTest, ProcessInBatchMode) { 307 TEST_F(VideoProcessorIntegrationTest, ProcessInBatchMode) {
291 // Bit rate and frame rate profile. 308 // Bit rate and frame rate profile.
292 RateProfile rate_profile; 309 RateProfile rate_profile;
293 SetRateProfile(&rate_profile, 0, 500, 30, 0); 310 SetRateProfile(&rate_profile, 0, 500, 30, 0);
294 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1; 311 rate_profile.frame_index_rate_update[1] = kNumFramesShort + 1;
295 rate_profile.num_frames = kNumFramesShort; 312 rate_profile.num_frames = kNumFramesShort;
296 // Codec/network settings. 313 // Codec/network settings.
297 CodecParams process_settings; 314 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
298 SetCodecParams(&process_settings, kVideoCodecVP8, kHwCodec, kUseSingleCore, 315 kForemanCif, kVerboseLogging,
299 0.0f, -1, 1, false, true, true, false, kResilienceOn, 352, 288, 316 true /* batch_mode */);
300 "foreman_cif", false /* verbose_logging */, 317 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP8, 1, false, true,
301 true /* batch_mode */); 318 true, false, kResilienceOn, kCifWidth, kCifHeight);
302 // Thresholds for expected quality. 319 // Thresholds for expected quality.
303 QualityThresholds quality_thresholds; 320 QualityThresholds quality_thresholds;
304 SetQualityThresholds(&quality_thresholds, 34.95, 33.0, 0.90, 0.89); 321 SetQualityThresholds(&quality_thresholds, 34.95, 33.0, 0.90, 0.89);
305 // Thresholds for rate control. 322 // Thresholds for rate control.
306 RateControlThresholds rc_thresholds[1]; 323 RateControlThresholds rc_thresholds[1];
307 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 15, 0, 1); 324 SetRateControlThresholds(rc_thresholds, 0, 0, 40, 20, 10, 15, 0, 1);
308 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 325 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
309 rc_thresholds, nullptr /* visualization_params */); 326 rc_thresholds, nullptr /* visualization_params */);
310 } 327 }
311 328
(...skipping 21 matching lines...) Expand all
333 #endif 350 #endif
334 TEST_F(VideoProcessorIntegrationTest, MAYBE_ProcessNoLossChangeBitRateVP8) { 351 TEST_F(VideoProcessorIntegrationTest, MAYBE_ProcessNoLossChangeBitRateVP8) {
335 // Bit rate and frame rate profile. 352 // Bit rate and frame rate profile.
336 RateProfile rate_profile; 353 RateProfile rate_profile;
337 SetRateProfile(&rate_profile, 0, 200, 30, 0); 354 SetRateProfile(&rate_profile, 0, 200, 30, 0);
338 SetRateProfile(&rate_profile, 1, 800, 30, 100); 355 SetRateProfile(&rate_profile, 1, 800, 30, 100);
339 SetRateProfile(&rate_profile, 2, 500, 30, 200); 356 SetRateProfile(&rate_profile, 2, 500, 30, 200);
340 rate_profile.frame_index_rate_update[3] = kNumFramesLong + 1; 357 rate_profile.frame_index_rate_update[3] = kNumFramesLong + 1;
341 rate_profile.num_frames = kNumFramesLong; 358 rate_profile.num_frames = kNumFramesLong;
342 // Codec/network settings. 359 // Codec/network settings.
343 CodecParams process_settings; 360 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
344 SetCodecParams(&process_settings, kVideoCodecVP8, kHwCodec, kUseSingleCore, 361 kForemanCif, kVerboseLogging, kBatchMode);
345 0.0f, -1, 1, false, true, true, false, kResilienceOn); 362 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP8, 1, false, true,
363 true, false, kResilienceOn, kCifWidth, kCifHeight);
346 // Thresholds for expected quality. 364 // Thresholds for expected quality.
347 QualityThresholds quality_thresholds; 365 QualityThresholds quality_thresholds;
348 SetQualityThresholds(&quality_thresholds, 34.0, 32.0, 0.85, 0.80); 366 SetQualityThresholds(&quality_thresholds, 34.0, 32.0, 0.85, 0.80);
349 // Thresholds for rate control. 367 // Thresholds for rate control.
350 RateControlThresholds rc_thresholds[3]; 368 RateControlThresholds rc_thresholds[3];
351 SetRateControlThresholds(rc_thresholds, 0, 0, 45, 20, 10, 15, 0, 1); 369 SetRateControlThresholds(rc_thresholds, 0, 0, 45, 20, 10, 15, 0, 1);
352 SetRateControlThresholds(rc_thresholds, 1, 0, 0, 25, 20, 10, 0, 0); 370 SetRateControlThresholds(rc_thresholds, 1, 0, 0, 25, 20, 10, 0, 0);
353 SetRateControlThresholds(rc_thresholds, 2, 0, 0, 25, 15, 10, 0, 0); 371 SetRateControlThresholds(rc_thresholds, 2, 0, 0, 25, 15, 10, 0, 0);
354 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 372 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
355 rc_thresholds, nullptr /* visualization_params */); 373 rc_thresholds, nullptr /* visualization_params */);
(...skipping 18 matching lines...) Expand all
374 MAYBE_ProcessNoLossChangeFrameRateFrameDropVP8) { 392 MAYBE_ProcessNoLossChangeFrameRateFrameDropVP8) {
375 config_.networking_config.packet_loss_probability = 0; 393 config_.networking_config.packet_loss_probability = 0;
376 // Bit rate and frame rate profile. 394 // Bit rate and frame rate profile.
377 RateProfile rate_profile; 395 RateProfile rate_profile;
378 SetRateProfile(&rate_profile, 0, 80, 24, 0); 396 SetRateProfile(&rate_profile, 0, 80, 24, 0);
379 SetRateProfile(&rate_profile, 1, 80, 15, 100); 397 SetRateProfile(&rate_profile, 1, 80, 15, 100);
380 SetRateProfile(&rate_profile, 2, 80, 10, 200); 398 SetRateProfile(&rate_profile, 2, 80, 10, 200);
381 rate_profile.frame_index_rate_update[3] = kNumFramesLong + 1; 399 rate_profile.frame_index_rate_update[3] = kNumFramesLong + 1;
382 rate_profile.num_frames = kNumFramesLong; 400 rate_profile.num_frames = kNumFramesLong;
383 // Codec/network settings. 401 // Codec/network settings.
384 CodecParams process_settings; 402 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
385 SetCodecParams(&process_settings, kVideoCodecVP8, kHwCodec, kUseSingleCore, 403 kForemanCif, kVerboseLogging, kBatchMode);
386 0.0f, -1, 1, false, true, true, false, kResilienceOn); 404 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP8, 1, false, true,
405 true, false, kResilienceOn, kCifWidth, kCifHeight);
387 // Thresholds for expected quality. 406 // Thresholds for expected quality.
388 QualityThresholds quality_thresholds; 407 QualityThresholds quality_thresholds;
389 SetQualityThresholds(&quality_thresholds, 31.0, 22.0, 0.80, 0.65); 408 SetQualityThresholds(&quality_thresholds, 31.0, 22.0, 0.80, 0.65);
390 // Thresholds for rate control. 409 // Thresholds for rate control.
391 RateControlThresholds rc_thresholds[3]; 410 RateControlThresholds rc_thresholds[3];
392 SetRateControlThresholds(rc_thresholds, 0, 40, 20, 75, 15, 60, 0, 1); 411 SetRateControlThresholds(rc_thresholds, 0, 40, 20, 75, 15, 60, 0, 1);
393 SetRateControlThresholds(rc_thresholds, 1, 10, 0, 25, 10, 35, 0, 0); 412 SetRateControlThresholds(rc_thresholds, 1, 10, 0, 25, 10, 35, 0, 0);
394 SetRateControlThresholds(rc_thresholds, 2, 0, 0, 20, 10, 15, 0, 0); 413 SetRateControlThresholds(rc_thresholds, 2, 0, 0, 20, 10, 15, 0, 0);
395 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 414 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
396 rc_thresholds, nullptr /* visualization_params */); 415 rc_thresholds, nullptr /* visualization_params */);
(...skipping 13 matching lines...) Expand all
410 #endif 429 #endif
411 TEST_F(VideoProcessorIntegrationTest, MAYBE_ProcessNoLossTemporalLayersVP8) { 430 TEST_F(VideoProcessorIntegrationTest, MAYBE_ProcessNoLossTemporalLayersVP8) {
412 config_.networking_config.packet_loss_probability = 0; 431 config_.networking_config.packet_loss_probability = 0;
413 // Bit rate and frame rate profile. 432 // Bit rate and frame rate profile.
414 RateProfile rate_profile; 433 RateProfile rate_profile;
415 SetRateProfile(&rate_profile, 0, 200, 30, 0); 434 SetRateProfile(&rate_profile, 0, 200, 30, 0);
416 SetRateProfile(&rate_profile, 1, 400, 30, 150); 435 SetRateProfile(&rate_profile, 1, 400, 30, 150);
417 rate_profile.frame_index_rate_update[2] = kNumFramesLong + 1; 436 rate_profile.frame_index_rate_update[2] = kNumFramesLong + 1;
418 rate_profile.num_frames = kNumFramesLong; 437 rate_profile.num_frames = kNumFramesLong;
419 // Codec/network settings. 438 // Codec/network settings.
420 CodecParams process_settings; 439 ProcessParams process_settings(kHwCodec, kUseSingleCore, 0.0f, -1,
421 SetCodecParams(&process_settings, kVideoCodecVP8, kHwCodec, kUseSingleCore, 440 kForemanCif, kVerboseLogging, kBatchMode);
422 0.0f, -1, 3, false, true, true, false, kResilienceOn); 441 SetCodecSettings(&config_, &codec_settings_, kVideoCodecVP8, 3, false, true,
442 true, false, kResilienceOn, kCifWidth, kCifHeight);
423 // Thresholds for expected quality. 443 // Thresholds for expected quality.
424 QualityThresholds quality_thresholds; 444 QualityThresholds quality_thresholds;
425 SetQualityThresholds(&quality_thresholds, 32.5, 30.0, 0.85, 0.80); 445 SetQualityThresholds(&quality_thresholds, 32.5, 30.0, 0.85, 0.80);
426 // Thresholds for rate control. 446 // Thresholds for rate control.
427 RateControlThresholds rc_thresholds[2]; 447 RateControlThresholds rc_thresholds[2];
428 SetRateControlThresholds(rc_thresholds, 0, 0, 20, 30, 10, 10, 0, 1); 448 SetRateControlThresholds(rc_thresholds, 0, 0, 20, 30, 10, 10, 0, 1);
429 SetRateControlThresholds(rc_thresholds, 1, 0, 0, 30, 15, 10, 0, 0); 449 SetRateControlThresholds(rc_thresholds, 1, 0, 0, 30, 15, 10, 0, 0);
430 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings, 450 ProcessFramesAndVerify(quality_thresholds, rate_profile, process_settings,
431 rc_thresholds, nullptr /* visualization_params */); 451 rc_thresholds, nullptr /* visualization_params */);
432 } 452 }
433 } // namespace test 453 } // namespace test
434 } // namespace webrtc 454 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698