Migrate part of Vp9 SVC tests on PC framework. Add temporal layers support.

Bug: webrtc:10138
Change-Id: I3f0fc38cbe8c31a2aea2f231fed4428b39e3125a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/147260
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28782}
This commit is contained in:
Artem Titov 2019-07-30 13:17:25 +02:00 committed by Commit Bot
parent 8dcaed97a9
commit 1e49ab2d40
4 changed files with 110 additions and 42 deletions

View File

@ -182,6 +182,10 @@ class PeerConnectionE2EQualityTestFixture {
// but only on non-lossy networks. See more in documentation to
// VideoSimulcastConfig.
absl::optional<VideoSimulcastConfig> simulcast_config;
// Count of temporal layers for video stream. This value will be set into
// each RtpEncodingParameters of RtpParameters of corresponding
// RtpSenderInterface for this video stream.
absl::optional<int> temporal_layers_count;
// If specified the input stream will be also copied to specified file.
// It is actually one of the test's output file, which contains copy of what
// was captured during the test for this video stream on sender side.

View File

@ -154,6 +154,7 @@ TEST_F(PeerConnectionE2EQualityTestSmokeTest, MAYBE_Smoke) {
[](PeerConfigurer* bob) {
VideoConfig video(640, 360, 30);
video.stream_label = "bob-video";
video.temporal_layers_count = 2;
bob->AddVideoConfig(std::move(video));
VideoConfig screenshare(640, 360, 30);

View File

@ -697,7 +697,18 @@ PeerConnectionE2EQualityTest::MaybeAddVideo(TestPeer* peer) {
if (video_config.screen_share_config) {
track->set_content_hint(VideoTrackInterface::ContentHint::kText);
}
peer->AddTrack(track, {video_config.stream_label.value()});
RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> sender =
peer->AddTrack(track, {video_config.stream_label.value()});
RTC_CHECK(sender.ok());
if (video_config.temporal_layers_count) {
RtpParameters rtp_parameters = sender.value()->GetParameters();
for (auto& encoding_parameters : rtp_parameters.encodings) {
encoding_parameters.num_temporal_layers =
video_config.temporal_layers_count;
}
RTCError res = sender.value()->SetParameters(rtp_parameters);
RTC_CHECK(res.ok()) << "Failed to set RTP parameters";
}
}
return out;
}

View File

@ -1382,6 +1382,9 @@ ParamsWithLogging::Video SimulcastVp8VideoLow() {
#if defined(RTC_ENABLE_VP9)
TEST(PCFullStackTest, ScreenshareSlidesVP9_3SL_High_Fps) {
webrtc::test::ScopedFieldTrials override_trials(
AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
"Enabled,inter_layer_pred_mode:on/"));
std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
CreateNetworkEmulationManager();
auto fixture = CreateTestFixture(
@ -1409,7 +1412,9 @@ TEST(PCFullStackTest, ScreenshareSlidesVP9_3SL_Variable_Fps) {
webrtc::test::ScopedFieldTrials override_trials(
AppendFieldTrials("WebRTC-VP9VariableFramerateScreenshare/"
"Enabled,min_qp:32,min_fps:5.0,undershoot:30,frames_"
"before_steady_state:5/"));
"before_steady_state:5/"
"WebRTC-Vp9InterLayerPred/"
"Enabled,inter_layer_pred_mode:on/"));
std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
CreateNetworkEmulationManager();
auto fixture = CreateTestFixture(
@ -1433,49 +1438,96 @@ TEST(PCFullStackTest, ScreenshareSlidesVP9_3SL_Variable_Fps) {
fixture->Run(std::move(run_params));
}
TEST(PCFullStackTest, VP9SVC_3SL_High) {
webrtc::test::ScopedFieldTrials override_trials(
AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
"Enabled,inter_layer_pred_mode:on/"));
std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
CreateNetworkEmulationManager();
auto fixture = CreateTestFixture(
"pc_vp9svc_3sl_high",
CreateTwoNetworkLinks(network_emulation_manager.get(),
BuiltInNetworkBehaviorConfig()),
[](PeerConfigurer* alice) {
VideoConfig video(1280, 720, 30);
video.stream_label = "alice-video";
video.input_file_name =
ClipNameToClipPath("ConferenceMotion_1280_720_50");
video.simulcast_config = VideoSimulcastConfig(3, 2);
video.temporal_layers_count = 3;
alice->AddVideoConfig(std::move(video));
},
[](PeerConfigurer* bob) {});
RunParams run_params(TimeDelta::seconds(kTestDurationSec));
run_params.video_codec_name = cricket::kVp9CodecName;
run_params.video_codec_required_params = {
{kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}};
run_params.use_flex_fec = false;
run_params.use_ulp_fec = false;
fixture->Run(std::move(run_params));
}
TEST(PCFullStackTest, VP9SVC_3SL_Medium) {
webrtc::test::ScopedFieldTrials override_trials(
AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
"Enabled,inter_layer_pred_mode:on/"));
std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
CreateNetworkEmulationManager();
auto fixture = CreateTestFixture(
"pc_vp9svc_3sl_medium",
CreateTwoNetworkLinks(network_emulation_manager.get(),
BuiltInNetworkBehaviorConfig()),
[](PeerConfigurer* alice) {
VideoConfig video(1280, 720, 30);
video.stream_label = "alice-video";
video.input_file_name =
ClipNameToClipPath("ConferenceMotion_1280_720_50");
video.simulcast_config = VideoSimulcastConfig(3, 1);
video.temporal_layers_count = 3;
alice->AddVideoConfig(std::move(video));
},
[](PeerConfigurer* bob) {});
RunParams run_params(TimeDelta::seconds(kTestDurationSec));
run_params.video_codec_name = cricket::kVp9CodecName;
run_params.video_codec_required_params = {
{kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}};
run_params.use_flex_fec = false;
run_params.use_ulp_fec = false;
fixture->Run(std::move(run_params));
}
TEST(PCFullStackTest, VP9SVC_3SL_Low) {
webrtc::test::ScopedFieldTrials override_trials(
AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
"Enabled,inter_layer_pred_mode:on/"));
std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
CreateNetworkEmulationManager();
auto fixture = CreateTestFixture(
"pc_vp9svc_3sl_low",
CreateTwoNetworkLinks(network_emulation_manager.get(),
BuiltInNetworkBehaviorConfig()),
[](PeerConfigurer* alice) {
VideoConfig video(1280, 720, 30);
video.stream_label = "alice-video";
video.input_file_name =
ClipNameToClipPath("ConferenceMotion_1280_720_50");
video.simulcast_config = VideoSimulcastConfig(3, 0);
video.temporal_layers_count = 3;
alice->AddVideoConfig(std::move(video));
},
[](PeerConfigurer* bob) {});
RunParams run_params(TimeDelta::seconds(kTestDurationSec));
run_params.video_codec_name = cricket::kVp9CodecName;
run_params.video_codec_required_params = {
{kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile0)}};
run_params.use_flex_fec = false;
run_params.use_ulp_fec = false;
fixture->Run(std::move(run_params));
}
#endif // defined(RTC_ENABLE_VP9)
/*
// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
TEST(PCFullStackTest, VP9SVC_3SL_High) {
auto fixture = CreateVideoQualityTestFixture();
ParamsWithLogging simulcast;
simulcast.call.send_side_bwe = true;
simulcast.video[0] = SvcVp9Video();
simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0, kTestDurationSec};
simulcast.ss[0] = {
std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
std::vector<SpatialLayer>(), false};
fixture->RunWithAnalyzer(simulcast);
}
// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
TEST(PCFullStackTest, VP9SVC_3SL_Medium) {
auto fixture = CreateVideoQualityTestFixture();
ParamsWithLogging simulcast;
simulcast.call.send_side_bwe = true;
simulcast.video[0] = SvcVp9Video();
simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0, kTestDurationSec};
simulcast.ss[0] = {
std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
std::vector<SpatialLayer>(), false};
fixture->RunWithAnalyzer(simulcast);
}
// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
TEST(PCFullStackTest, VP9SVC_3SL_Low) {
auto fixture = CreateVideoQualityTestFixture();
ParamsWithLogging simulcast;
simulcast.call.send_side_bwe = true;
simulcast.video[0] = SvcVp9Video();
simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kTestDurationSec};
simulcast.ss[0] = {
std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
std::vector<SpatialLayer>(), false};
fixture->RunWithAnalyzer(simulcast);
}
// bugs.webrtc.org/9506
#if !defined(WEBRTC_MAC)