OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | |
3 * | |
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 | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 #include <stdio.h> | |
11 | |
12 #include "webrtc/test/gtest.h" | |
13 #include "webrtc/video/video_quality_test.h" | |
14 | |
15 namespace webrtc { | |
16 | |
17 static const int kFullStackTestDurationSecs = 45; | |
18 | |
19 class FullStackTest : public VideoQualityTest { | |
20 public: | |
21 void RunTest(const VideoQualityTest::Params ¶ms) { | |
22 RunWithAnalyzer(params); | |
23 } | |
24 | |
25 void ForemanCifWithoutPacketLoss(const std::string& video_codec) { | |
26 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif. | |
27 VideoQualityTest::Params foreman_cif; | |
28 foreman_cif.video = {true, 352, 288, 30, 700000, 700000, 700000, false, | |
29 video_codec, 1, 0, 0, false, false, "", "foreman_cif"}; | |
30 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_" + video_codec, | |
31 0.0, 0.0, kFullStackTestDurationSecs}; | |
32 RunTest(foreman_cif); | |
33 } | |
34 | |
35 void ForemanCifPlr5(const std::string& video_codec, | |
36 bool use_ulpfec, | |
37 bool use_flexfec) { | |
38 VideoQualityTest::Params foreman_cif; | |
39 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, | |
40 video_codec, 1, 0, 0, use_ulpfec, use_flexfec, "", | |
41 "foreman_cif"}; | |
42 std::string fec_description; | |
43 if (use_ulpfec) | |
44 fec_description += "_ulpfec"; | |
45 if (use_flexfec) | |
46 fec_description += "_flexfec"; | |
47 foreman_cif.analyzer = { | |
48 "foreman_cif_delay_50_0_plr_5_" + video_codec + fec_description, 0.0, | |
49 0.0, kFullStackTestDurationSecs}; | |
50 foreman_cif.pipe.loss_percent = 5; | |
51 foreman_cif.pipe.queue_delay_ms = 50; | |
52 RunTest(foreman_cif); | |
53 } | |
54 }; | |
55 | |
56 // VideoQualityTest::Params params = { | |
57 // { ... }, // Common. | |
58 // { ... }, // Video-specific settings. | |
59 // { ... }, // Screenshare-specific settings. | |
60 // { ... }, // Analyzer settings. | |
61 // pipe, // FakeNetworkPipe::Config | |
62 // { ... }, // Spatial scalability. | |
63 // logs // bool | |
64 // }; | |
65 | |
66 #if !defined(RTC_DISABLE_VP9) | |
67 TEST_F(FullStackTest, ForemanCifWithoutPacketLossVp9) { | |
68 ForemanCifWithoutPacketLoss("VP9"); | |
69 } | |
70 | |
71 TEST_F(FullStackTest, ForemanCifPlr5Vp9) { | |
72 const bool kUlpfec = false; | |
73 const bool kFlexfec = false; | |
74 ForemanCifPlr5("VP9", kUlpfec, kFlexfec); | |
75 } | |
76 #endif // !defined(RTC_DISABLE_VP9) | |
77 | |
78 TEST_F(FullStackTest, ParisQcifWithoutPacketLoss) { | |
79 VideoQualityTest::Params paris_qcif; | |
80 paris_qcif.call.send_side_bwe = true; | |
81 paris_qcif.video = {true, 176, 144, 30, 300000, 300000, 300000, false, | |
82 "VP8", 1, 0, 0, false, false, "", "paris_qcif"}; | |
83 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96, | |
84 kFullStackTestDurationSecs}; | |
85 RunTest(paris_qcif); | |
86 } | |
87 | |
88 TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) { | |
89 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif. | |
90 VideoQualityTest::Params foreman_cif; | |
91 foreman_cif.call.send_side_bwe = true; | |
92 foreman_cif.video = {true, 352, 288, 30, 700000, 700000, 700000, false, "VP8", | |
93 1, 0, 0, false, false, "", "foreman_cif"}; | |
94 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0, | |
95 kFullStackTestDurationSecs}; | |
96 RunTest(foreman_cif); | |
97 } | |
98 | |
99 TEST_F(FullStackTest, ForemanCifPlr5) { | |
100 VideoQualityTest::Params foreman_cif; | |
101 foreman_cif.call.send_side_bwe = true; | |
102 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8", | |
103 1, 0, 0, false, false, "", "foreman_cif"}; | |
104 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5", 0.0, 0.0, | |
105 kFullStackTestDurationSecs}; | |
106 foreman_cif.pipe.loss_percent = 5; | |
107 foreman_cif.pipe.queue_delay_ms = 50; | |
108 RunTest(foreman_cif); | |
109 } | |
110 | |
111 #if defined(WEBRTC_USE_H264) | |
112 TEST_F(FullStackTest, ForemanCifWithoutPacketlossH264) { | |
113 ForemanCifWithoutPacketLoss("H264"); | |
114 } | |
115 | |
116 TEST_F(FullStackTest, ForemanCifPlr5H264) { | |
117 const bool kUlpfec = false; | |
118 const bool kFlexfec = false; | |
119 ForemanCifPlr5("H264", kUlpfec, kFlexfec); | |
120 } | |
121 | |
122 // Verify that this is worth the bot time, before enabling. | |
123 TEST_F(FullStackTest, ForemanCifPlr5H264Flexfec) { | |
124 const bool kUlpfec = false; | |
125 const bool kFlexfec = true; | |
126 ForemanCifPlr5("H264", kUlpfec, kFlexfec); | |
127 } | |
128 | |
129 // Ulpfec with H264 is an unsupported combination, so this test is only useful | |
130 // for debugging. It is therefore disabled by default. | |
131 TEST_F(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) { | |
132 const bool kUlpfec = true; | |
133 const bool kFlexfec = false; | |
134 ForemanCifPlr5("H264", kUlpfec, kFlexfec); | |
135 } | |
136 #endif // defined(WEBRTC_USE_H264) | |
137 | |
138 TEST_F(FullStackTest, ForemanCif500kbps) { | |
139 VideoQualityTest::Params foreman_cif; | |
140 foreman_cif.call.send_side_bwe = true; | |
141 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8", | |
142 1, 0, 0, false, false, "", "foreman_cif"}; | |
143 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0, | |
144 kFullStackTestDurationSecs}; | |
145 foreman_cif.pipe.queue_length_packets = 0; | |
146 foreman_cif.pipe.queue_delay_ms = 0; | |
147 foreman_cif.pipe.link_capacity_kbps = 500; | |
148 RunTest(foreman_cif); | |
149 } | |
150 | |
151 TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) { | |
152 VideoQualityTest::Params foreman_cif; | |
153 foreman_cif.call.send_side_bwe = true; | |
154 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8", | |
155 1, 0, 0, false, false, "", "foreman_cif"}; | |
156 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0, | |
157 kFullStackTestDurationSecs}; | |
158 foreman_cif.pipe.queue_length_packets = 32; | |
159 foreman_cif.pipe.queue_delay_ms = 0; | |
160 foreman_cif.pipe.link_capacity_kbps = 500; | |
161 RunTest(foreman_cif); | |
162 } | |
163 | |
164 TEST_F(FullStackTest, ForemanCif500kbps100ms) { | |
165 VideoQualityTest::Params foreman_cif; | |
166 foreman_cif.call.send_side_bwe = true; | |
167 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8", | |
168 1, 0, 0, false, false, "", "foreman_cif"}; | |
169 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0, | |
170 kFullStackTestDurationSecs}; | |
171 foreman_cif.pipe.queue_length_packets = 0; | |
172 foreman_cif.pipe.queue_delay_ms = 100; | |
173 foreman_cif.pipe.link_capacity_kbps = 500; | |
174 RunTest(foreman_cif); | |
175 } | |
176 | |
177 TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) { | |
178 VideoQualityTest::Params foreman_cif; | |
179 foreman_cif.call.send_side_bwe = true; | |
180 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8", | |
181 1, 0, 0, false, false, "", "foreman_cif"}; | |
182 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0, | |
183 kFullStackTestDurationSecs}; | |
184 foreman_cif.pipe.queue_length_packets = 32; | |
185 foreman_cif.pipe.queue_delay_ms = 100; | |
186 foreman_cif.pipe.link_capacity_kbps = 500; | |
187 RunTest(foreman_cif); | |
188 } | |
189 | |
190 TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) { | |
191 VideoQualityTest::Params foreman_cif; | |
192 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8", | |
193 1, 0, 0, false, false, "", "foreman_cif"}; | |
194 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0, | |
195 kFullStackTestDurationSecs}; | |
196 foreman_cif.pipe.queue_length_packets = 32; | |
197 foreman_cif.pipe.queue_delay_ms = 100; | |
198 foreman_cif.pipe.link_capacity_kbps = 500; | |
199 RunTest(foreman_cif); | |
200 } | |
201 | |
202 TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) { | |
203 VideoQualityTest::Params foreman_cif; | |
204 foreman_cif.call.send_side_bwe = true; | |
205 foreman_cif.video = {true, 352, 288, 30, 30000, 2000000, 2000000, false, | |
206 "VP8", 1, 0, 0, false, false, "", "foreman_cif"}; | |
207 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0, | |
208 kFullStackTestDurationSecs}; | |
209 foreman_cif.pipe.queue_length_packets = 32; | |
210 foreman_cif.pipe.queue_delay_ms = 100; | |
211 foreman_cif.pipe.link_capacity_kbps = 1000; | |
212 RunTest(foreman_cif); | |
213 } | |
214 | |
215 TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) { | |
216 VideoQualityTest::Params conf_motion_hd; | |
217 conf_motion_hd.call.send_side_bwe = true; | |
218 conf_motion_hd.video = {true, 1280, 720, 50, 30000, 3000000, 3000000, false, | |
219 "VP8", 1, 0, 0, false, false, "", | |
220 "ConferenceMotion_1280_720_50"}; | |
221 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue", | |
222 0.0, 0.0, kFullStackTestDurationSecs}; | |
223 conf_motion_hd.pipe.queue_length_packets = 32; | |
224 conf_motion_hd.pipe.queue_delay_ms = 100; | |
225 conf_motion_hd.pipe.link_capacity_kbps = 2000; | |
226 RunTest(conf_motion_hd); | |
227 } | |
228 | |
229 TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL) { | |
230 VideoQualityTest::Params screenshare; | |
231 screenshare.call.send_side_bwe = true; | |
232 screenshare.video = {true, 1850, 1110, 5, 50000, 200000, 2000000, false, | |
233 "VP8", 2, 1, 400000, false, false, "", ""}; | |
234 screenshare.screenshare = {true, 10}; | |
235 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0, | |
236 kFullStackTestDurationSecs}; | |
237 RunTest(screenshare); | |
238 } | |
239 | |
240 TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) { | |
241 VideoQualityTest::Params config; | |
242 config.call.send_side_bwe = true; | |
243 config.video = {true, 1850, 1110 / 2, 5, 50000, 200000, 2000000, false, | |
244 "VP8", 2, 1, 400000, false, false, "", ""}; | |
245 config.screenshare = {true, 10, 2}; | |
246 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0, | |
247 kFullStackTestDurationSecs}; | |
248 RunTest(config); | |
249 } | |
250 | |
251 TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNet) { | |
252 VideoQualityTest::Params screenshare; | |
253 screenshare.call.send_side_bwe = true; | |
254 screenshare.video = {true, 1850, 1110, 5, 50000, 200000, 2000000, false, | |
255 "VP8", 2, 1, 400000, false, false, "", ""}; | |
256 screenshare.screenshare = {true, 10}; | |
257 screenshare.analyzer = {"screenshare_slides_lossy_net", 0.0, 0.0, | |
258 kFullStackTestDurationSecs}; | |
259 screenshare.pipe.loss_percent = 5; | |
260 screenshare.pipe.queue_delay_ms = 200; | |
261 screenshare.pipe.link_capacity_kbps = 500; | |
262 RunTest(screenshare); | |
263 } | |
264 | |
265 TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) { | |
266 VideoQualityTest::Params screenshare; | |
267 screenshare.call.send_side_bwe = true; | |
268 screenshare.video = {true, 1850, 1110, 5, 50000, 200000, 2000000, false, | |
269 "VP8", 2, 1, 400000, false, false, "", ""}; | |
270 screenshare.screenshare = {true, 10}; | |
271 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0, | |
272 kFullStackTestDurationSecs}; | |
273 screenshare.pipe.loss_percent = 10; | |
274 screenshare.pipe.queue_delay_ms = 200; | |
275 screenshare.pipe.link_capacity_kbps = 500; | |
276 RunTest(screenshare); | |
277 } | |
278 | |
279 #if !defined(RTC_DISABLE_VP9) | |
280 TEST_F(FullStackTest, ScreenshareSlidesVP9_2SL) { | |
281 VideoQualityTest::Params screenshare; | |
282 screenshare.call.send_side_bwe = true; | |
283 screenshare.video = {true, 1850, 1110, 5, 50000, 200000, 2000000, false, | |
284 "VP9", 1, 0, 400000, false, false, "", ""}; | |
285 screenshare.screenshare = {true, 10}; | |
286 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0, | |
287 kFullStackTestDurationSecs}; | |
288 screenshare.logs = false; | |
289 screenshare.ss = {std::vector<VideoStream>(), 0, 2, 1}; | |
290 RunTest(screenshare); | |
291 } | |
292 #endif // !defined(RTC_DISABLE_VP9) | |
293 } // namespace webrtc | |
OLD | NEW |