blob: 73744e01ede3441cfcede28129131431276b9b77 [file] [log] [blame]
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001/*
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
kwiberg77eab702016-09-28 17:42:01 -070012#include "webrtc/test/gtest.h"
ivica5d6a06c2015-09-17 05:30:24 -070013#include "webrtc/video/video_quality_test.h"
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000014
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000015namespace webrtc {
16
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +000017static const int kFullStackTestDurationSecs = 60;
pbos@webrtc.orgb613b5a2013-12-03 10:13:04 +000018
ivica5d6a06c2015-09-17 05:30:24 -070019class FullStackTest : public VideoQualityTest {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000020 public:
ivica5d6a06c2015-09-17 05:30:24 -070021 void RunTest(const VideoQualityTest::Params &params) {
22 RunWithAnalyzer(params);
pbos@webrtc.org94015242013-10-16 11:05:37 +000023 }
asapersson88b0a222016-02-12 13:16:43 -080024
25 void ForemanCifWithoutPacketLoss(const std::string& video_codec) {
26 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
minyue626bc952016-10-31 05:47:02 -070027 VideoQualityTest::Params foreman_cif;
28 foreman_cif.video = {true, 352, 288, 30, 700000, 700000, 700000, false,
brandtr1293aca2016-11-16 22:47:29 -080029 video_codec, 1, 0, 0, false, false, "", "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -070030 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_" + video_codec,
31 0.0, 0.0, kFullStackTestDurationSecs};
asapersson88b0a222016-02-12 13:16:43 -080032 RunTest(foreman_cif);
33 }
34
35 void ForemanCifPlr5(const std::string& video_codec) {
minyue626bc952016-10-31 05:47:02 -070036 VideoQualityTest::Params foreman_cif;
37 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false,
brandtr1293aca2016-11-16 22:47:29 -080038 video_codec, 1, 0, 0, false, false, "", "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -070039 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_" + video_codec, 0.0,
40 0.0, kFullStackTestDurationSecs};
asapersson88b0a222016-02-12 13:16:43 -080041 foreman_cif.pipe.loss_percent = 5;
42 foreman_cif.pipe.queue_delay_ms = 50;
43 RunTest(foreman_cif);
44 }
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000045};
46
sprangce4aef12015-11-02 07:23:20 -080047// VideoQualityTest::Params params = {
48// { ... }, // Common.
49// { ... }, // Video-specific settings.
50// { ... }, // Screenshare-specific settings.
51// { ... }, // Analyzer settings.
52// pipe, // FakeNetworkPipe::Config
53// { ... }, // Spatial scalability.
54// logs // bool
55// };
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000056
Peter Boström12996152016-05-14 02:03:18 +020057#if !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -080058TEST_F(FullStackTest, ForemanCifWithoutPacketLossVp9) {
59 ForemanCifWithoutPacketLoss("VP9");
60}
61
62TEST_F(FullStackTest, ForemanCifPlr5Vp9) {
63 ForemanCifPlr5("VP9");
64}
Peter Boström12996152016-05-14 02:03:18 +020065#endif // !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -080066
pbos@webrtc.org994d0b72014-06-27 08:47:52 +000067TEST_F(FullStackTest, ParisQcifWithoutPacketLoss) {
minyue626bc952016-10-31 05:47:02 -070068 VideoQualityTest::Params paris_qcif;
69 paris_qcif.call.send_side_bwe = true;
70 paris_qcif.video = {true, 176, 144, 30, 300000, 300000, 300000, false,
brandtr1293aca2016-11-16 22:47:29 -080071 "VP8", 1, 0, 0, false, false, "", "paris_qcif"};
minyue626bc952016-10-31 05:47:02 -070072 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
73 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +000074 RunTest(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +000075}
76
77TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) {
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +000078 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
minyue626bc952016-10-31 05:47:02 -070079 VideoQualityTest::Params foreman_cif;
80 foreman_cif.call.send_side_bwe = true;
81 foreman_cif.video = {true, 352, 288, 30, 700000, 700000, 700000, false, "VP8",
brandtr1293aca2016-11-16 22:47:29 -080082 1, 0, 0, false, false, "", "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -070083 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0,
84 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +000085 RunTest(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +000086}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000087
sprang@webrtc.org343096a2015-02-23 08:34:17 +000088TEST_F(FullStackTest, ForemanCifPlr5) {
minyue626bc952016-10-31 05:47:02 -070089 VideoQualityTest::Params foreman_cif;
90 foreman_cif.call.send_side_bwe = true;
91 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8",
brandtr1293aca2016-11-16 22:47:29 -080092 1, 0, 0, false, false, "", "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -070093 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5", 0.0, 0.0,
94 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -070095 foreman_cif.pipe.loss_percent = 5;
96 foreman_cif.pipe.queue_delay_ms = 50;
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +000097 RunTest(foreman_cif);
98}
99
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000100TEST_F(FullStackTest, ForemanCif500kbps) {
minyue626bc952016-10-31 05:47:02 -0700101 VideoQualityTest::Params foreman_cif;
102 foreman_cif.call.send_side_bwe = true;
103 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8",
brandtr1293aca2016-11-16 22:47:29 -0800104 1, 0, 0, false, false, "", "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700105 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
106 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700107 foreman_cif.pipe.queue_length_packets = 0;
108 foreman_cif.pipe.queue_delay_ms = 0;
109 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000110 RunTest(foreman_cif);
111}
112
113TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700114 VideoQualityTest::Params foreman_cif;
115 foreman_cif.call.send_side_bwe = true;
116 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8",
brandtr1293aca2016-11-16 22:47:29 -0800117 1, 0, 0, false, false, "", "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700118 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
119 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700120 foreman_cif.pipe.queue_length_packets = 32;
121 foreman_cif.pipe.queue_delay_ms = 0;
122 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000123 RunTest(foreman_cif);
124}
125
126TEST_F(FullStackTest, ForemanCif500kbps100ms) {
minyue626bc952016-10-31 05:47:02 -0700127 VideoQualityTest::Params foreman_cif;
128 foreman_cif.call.send_side_bwe = true;
129 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8",
brandtr1293aca2016-11-16 22:47:29 -0800130 1, 0, 0, false, false, "", "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700131 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
132 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700133 foreman_cif.pipe.queue_length_packets = 0;
134 foreman_cif.pipe.queue_delay_ms = 100;
135 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000136 RunTest(foreman_cif);
137}
138
139TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700140 VideoQualityTest::Params foreman_cif;
141 foreman_cif.call.send_side_bwe = true;
142 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8",
brandtr1293aca2016-11-16 22:47:29 -0800143 1, 0, 0, false, false, "", "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700144 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
145 kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700146 foreman_cif.pipe.queue_length_packets = 32;
147 foreman_cif.pipe.queue_delay_ms = 100;
148 foreman_cif.pipe.link_capacity_kbps = 500;
149 RunTest(foreman_cif);
150}
151
152TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
minyue626bc952016-10-31 05:47:02 -0700153 VideoQualityTest::Params foreman_cif;
154 foreman_cif.video = {true, 352, 288, 30, 30000, 500000, 2000000, false, "VP8",
brandtr1293aca2016-11-16 22:47:29 -0800155 1, 0, 0, false, false, "", "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700156 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
157 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700158 foreman_cif.pipe.queue_length_packets = 32;
159 foreman_cif.pipe.queue_delay_ms = 100;
160 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000161 RunTest(foreman_cif);
162}
163
164TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700165 VideoQualityTest::Params foreman_cif;
166 foreman_cif.call.send_side_bwe = true;
167 foreman_cif.video = {true, 352, 288, 30, 30000, 2000000, 2000000, false,
brandtr1293aca2016-11-16 22:47:29 -0800168 "VP8", 1, 0, 0, false, false, "", "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700169 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
170 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700171 foreman_cif.pipe.queue_length_packets = 32;
172 foreman_cif.pipe.queue_delay_ms = 100;
173 foreman_cif.pipe.link_capacity_kbps = 1000;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000174 RunTest(foreman_cif);
175}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000176
stefanb1797672016-08-11 07:00:57 -0700177TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700178 VideoQualityTest::Params conf_motion_hd;
179 conf_motion_hd.call.send_side_bwe = true;
180 conf_motion_hd.video = {true, 1280, 720, 50, 30000, 3000000, 3000000, false,
brandtr1293aca2016-11-16 22:47:29 -0800181 "VP8", 1, 0, 0, false, false, "",
minyue626bc952016-10-31 05:47:02 -0700182 "ConferenceMotion_1280_720_50"};
183 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
184 0.0, 0.0, kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700185 conf_motion_hd.pipe.queue_length_packets = 32;
186 conf_motion_hd.pipe.queue_delay_ms = 100;
187 conf_motion_hd.pipe.link_capacity_kbps = 2000;
188 RunTest(conf_motion_hd);
189}
190
ivica7bd242e2015-10-06 02:04:06 -0700191TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL) {
minyue626bc952016-10-31 05:47:02 -0700192 VideoQualityTest::Params screenshare;
193 screenshare.call.send_side_bwe = true;
194 screenshare.video = {true, 1850, 1110, 5, 50000, 200000, 2000000, false,
brandtr1293aca2016-11-16 22:47:29 -0800195 "VP8", 2, 1, 400000, false, false, "", ""};
minyue626bc952016-10-31 05:47:02 -0700196 screenshare.screenshare = {true, 10};
197 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
198 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700199 RunTest(screenshare);
Erik Språng6ee69aa2015-09-03 15:58:05 +0200200}
201
ivica7bd242e2015-10-06 02:04:06 -0700202TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
minyue626bc952016-10-31 05:47:02 -0700203 VideoQualityTest::Params config;
204 config.call.send_side_bwe = true;
205 config.video = {true, 1850, 1110 / 2, 5, 50000, 200000, 2000000, false,
brandtr1293aca2016-11-16 22:47:29 -0800206 "VP8", 2, 1, 400000, false, false, "", ""};
minyue626bc952016-10-31 05:47:02 -0700207 config.screenshare = {true, 10, 2};
208 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
209 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700210 RunTest(config);
ivica028cf482015-07-30 02:15:56 -0700211}
212
sprangee37de32015-11-23 06:10:23 -0800213TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNet) {
minyue626bc952016-10-31 05:47:02 -0700214 VideoQualityTest::Params screenshare;
215 screenshare.call.send_side_bwe = true;
216 screenshare.video = {true, 1850, 1110, 5, 50000, 200000, 2000000, false,
brandtr1293aca2016-11-16 22:47:29 -0800217 "VP8", 2, 1, 400000, false, false, "", ""};
minyue626bc952016-10-31 05:47:02 -0700218 screenshare.screenshare = {true, 10};
219 screenshare.analyzer = {"screenshare_slides_lossy_net", 0.0, 0.0,
220 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800221 screenshare.pipe.loss_percent = 5;
222 screenshare.pipe.queue_delay_ms = 200;
223 screenshare.pipe.link_capacity_kbps = 500;
224 RunTest(screenshare);
225}
226
227TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
minyue626bc952016-10-31 05:47:02 -0700228 VideoQualityTest::Params screenshare;
229 screenshare.call.send_side_bwe = true;
230 screenshare.video = {true, 1850, 1110, 5, 50000, 200000, 2000000, false,
brandtr1293aca2016-11-16 22:47:29 -0800231 "VP8", 2, 1, 400000, false, false, "", ""};
minyue626bc952016-10-31 05:47:02 -0700232 screenshare.screenshare = {true, 10};
233 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
234 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800235 screenshare.pipe.loss_percent = 10;
236 screenshare.pipe.queue_delay_ms = 200;
237 screenshare.pipe.link_capacity_kbps = 500;
238 RunTest(screenshare);
239}
240
Peter Boström12996152016-05-14 02:03:18 +0200241#if !defined(RTC_DISABLE_VP9)
philipelcfc319b2015-11-10 07:17:23 -0800242TEST_F(FullStackTest, ScreenshareSlidesVP9_2SL) {
minyue626bc952016-10-31 05:47:02 -0700243 VideoQualityTest::Params screenshare;
244 screenshare.call.send_side_bwe = true;
245 screenshare.video = {true, 1850, 1110, 5, 50000, 200000, 2000000, false,
brandtr1293aca2016-11-16 22:47:29 -0800246 "VP9", 1, 0, 400000, false, false, "", ""};
minyue626bc952016-10-31 05:47:02 -0700247 screenshare.screenshare = {true, 10};
248 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
249 kFullStackTestDurationSecs};
250 screenshare.logs = false;
251 screenshare.ss = {std::vector<VideoStream>(), 0, 2, 1};
ivica5d6a06c2015-09-17 05:30:24 -0700252 RunTest(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000253}
Peter Boström12996152016-05-14 02:03:18 +0200254#endif // !defined(RTC_DISABLE_VP9)
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000255} // namespace webrtc