The CL includes several changes:
- Adding flags describing the streams and spatial layers.
- Reorganizing the order of the flags, to make them easier to maintain.
- Adding a member .params_ to VideoQualityAnalyzer.
(instead of passing it to every member function manually)
- Updating VideoAnalyzer to support simulcast.
(select appropriate ssrc and fix timestamps which are sometimes increased by 1)
- VP9EncoderImpl already had code for automatic calculation of bitrate for each layer.
Changing to first read bitrates and resolution ratios from the flags, if specified.
If not specified, reverting to the old code are setting the values automatically.
- Changing the parameters in LayerFilteringTransport, replacing
xx_discard_thresholds with selected_xx, to make it easier to use for the end user.
Review URL: https://codereview.webrtc.org/1353263005
Cr-Commit-Position: refs/heads/master@{#10215}
157 lines
5.0 KiB
C++
157 lines
5.0 KiB
C++
/*
|
|
* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
#include <stdio.h>
|
|
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
|
#include "webrtc/video/video_quality_test.h"
|
|
|
|
namespace webrtc {
|
|
|
|
static const int kFullStackTestDurationSecs = 60;
|
|
|
|
class FullStackTest : public VideoQualityTest {
|
|
public:
|
|
void RunTest(const VideoQualityTest::Params ¶ms) {
|
|
RunWithAnalyzer(params);
|
|
}
|
|
};
|
|
|
|
// VideoQualityTest::Params params = {
|
|
// { ... }, // Common.
|
|
// { ... }, // Video-specific settings.
|
|
// { ... }, // Screenshare-specific settings.
|
|
// { ... }, // Analyzer settings.
|
|
// pipe, // FakeNetworkPipe::Config
|
|
// { ... }, // Spatial scalability.
|
|
// logs // bool
|
|
// };
|
|
|
|
TEST_F(FullStackTest, ParisQcifWithoutPacketLoss) {
|
|
VideoQualityTest::Params paris_qcif = {
|
|
{176, 144, 30, 300000, 300000, 300000, "VP8", 1},
|
|
{"paris_qcif"},
|
|
{},
|
|
{"net_delay_0_0_plr_0", 36.0, 0.96, kFullStackTestDurationSecs}};
|
|
RunTest(paris_qcif);
|
|
}
|
|
|
|
TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) {
|
|
// TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
|
|
VideoQualityTest::Params foreman_cif = {
|
|
{352, 288, 30, 700000, 700000, 700000, "VP8", 1},
|
|
{"foreman_cif"},
|
|
{},
|
|
{"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0, kFullStackTestDurationSecs}
|
|
};
|
|
RunTest(foreman_cif);
|
|
}
|
|
|
|
TEST_F(FullStackTest, ForemanCifPlr5) {
|
|
VideoQualityTest::Params foreman_cif = {
|
|
{352, 288, 30, 30000, 500000, 2000000, "VP8", 1},
|
|
{"foreman_cif"},
|
|
{},
|
|
{"foreman_cif_delay_50_0_plr_5", 0.0, 0.0, kFullStackTestDurationSecs}};
|
|
foreman_cif.pipe.loss_percent = 5;
|
|
foreman_cif.pipe.queue_delay_ms = 50;
|
|
RunTest(foreman_cif);
|
|
}
|
|
|
|
TEST_F(FullStackTest, ForemanCif500kbps) {
|
|
VideoQualityTest::Params foreman_cif = {
|
|
{352, 288, 30, 30000, 500000, 2000000, "VP8", 1},
|
|
{"foreman_cif"},
|
|
{},
|
|
{"foreman_cif_500kbps", 0.0, 0.0, kFullStackTestDurationSecs}};
|
|
foreman_cif.pipe.queue_length_packets = 0;
|
|
foreman_cif.pipe.queue_delay_ms = 0;
|
|
foreman_cif.pipe.link_capacity_kbps = 500;
|
|
RunTest(foreman_cif);
|
|
}
|
|
|
|
TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) {
|
|
VideoQualityTest::Params foreman_cif = {
|
|
{352, 288, 30, 30000, 500000, 2000000, "VP8", 1},
|
|
{"foreman_cif"},
|
|
{},
|
|
{"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0, kFullStackTestDurationSecs}
|
|
};
|
|
foreman_cif.pipe.queue_length_packets = 32;
|
|
foreman_cif.pipe.queue_delay_ms = 0;
|
|
foreman_cif.pipe.link_capacity_kbps = 500;
|
|
RunTest(foreman_cif);
|
|
}
|
|
|
|
TEST_F(FullStackTest, ForemanCif500kbps100ms) {
|
|
VideoQualityTest::Params foreman_cif = {
|
|
{352, 288, 30, 30000, 500000, 2000000, "VP8", 1},
|
|
{"foreman_cif"},
|
|
{},
|
|
{"foreman_cif_500kbps_100ms", 0.0, 0.0, kFullStackTestDurationSecs}};
|
|
foreman_cif.pipe.queue_length_packets = 0;
|
|
foreman_cif.pipe.queue_delay_ms = 100;
|
|
foreman_cif.pipe.link_capacity_kbps = 500;
|
|
RunTest(foreman_cif);
|
|
}
|
|
|
|
TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
|
|
VideoQualityTest::Params foreman_cif = {
|
|
{352, 288, 30, 30000, 500000, 2000000, "VP8", 1},
|
|
{"foreman_cif"},
|
|
{},
|
|
{"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
|
|
kFullStackTestDurationSecs}};
|
|
foreman_cif.pipe.queue_length_packets = 32;
|
|
foreman_cif.pipe.queue_delay_ms = 100;
|
|
foreman_cif.pipe.link_capacity_kbps = 500;
|
|
RunTest(foreman_cif);
|
|
}
|
|
|
|
TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
|
|
VideoQualityTest::Params foreman_cif = {
|
|
{352, 288, 30, 30000, 2000000, 2000000, "VP8", 1},
|
|
{"foreman_cif"},
|
|
{},
|
|
{"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
|
|
kFullStackTestDurationSecs}};
|
|
foreman_cif.pipe.queue_length_packets = 32;
|
|
foreman_cif.pipe.queue_delay_ms = 100;
|
|
foreman_cif.pipe.link_capacity_kbps = 1000;
|
|
RunTest(foreman_cif);
|
|
}
|
|
|
|
TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL) {
|
|
VideoQualityTest::Params screenshare = {
|
|
{1850, 1110, 5, 50000, 200000, 2000000, "VP8", 2, 1, 400000},
|
|
{},
|
|
{true, 10},
|
|
{"screenshare_slides", 0.0, 0.0, kFullStackTestDurationSecs}};
|
|
RunTest(screenshare);
|
|
}
|
|
|
|
TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
|
|
VideoQualityTest::Params config = {
|
|
{1850, 1110 / 2, 5, 50000, 200000, 2000000, "VP8", 2, 1, 400000},
|
|
{},
|
|
{true, 10, 2},
|
|
{"screenshare_slides_scrolling", 0.0, 0.0, kFullStackTestDurationSecs}};
|
|
RunTest(config);
|
|
}
|
|
|
|
TEST_F(FullStackTest, ScreenshareSlidesVP9_2TL) {
|
|
VideoQualityTest::Params screenshare = {
|
|
{1850, 1110, 5, 50000, 200000, 2000000, "VP9", 2, 1, 400000},
|
|
{},
|
|
{true, 10},
|
|
{"screenshare_slides_vp9_2tl", 0.0, 0.0, kFullStackTestDurationSecs}};
|
|
RunTest(screenshare);
|
|
}
|
|
} // namespace webrtc
|