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:
parent
8dcaed97a9
commit
1e49ab2d40
@ -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.
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user