diff --git a/pc/BUILD.gn b/pc/BUILD.gn index 4962e7580b..9d3125828b 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn @@ -2711,6 +2711,7 @@ if (rtc_include_tests && !build_with_chromium) { "../api/video_codecs:video_codecs_api", "../call:simulated_network", "../modules/video_coding:webrtc_vp9", + "../modules/video_coding/svc:scalability_mode_util", "../rtc_base/containers:flat_map", "../system_wrappers:field_trial", "../test:field_trial", diff --git a/pc/test/svc_e2e_tests.cc b/pc/test/svc_e2e_tests.cc index 6948ab3aa5..4e15c6c6f7 100644 --- a/pc/test/svc_e2e_tests.cc +++ b/pc/test/svc_e2e_tests.cc @@ -24,6 +24,7 @@ #include "api/video_codecs/vp9_profile.h" #include "call/simulated_network.h" #include "modules/video_coding/codecs/vp9/include/vp9.h" +#include "modules/video_coding/svc/scalability_mode_util.h" #include "rtc_base/containers/flat_map.h" #include "system_wrappers/include/field_trial.h" #include "test/field_trial.h" @@ -109,6 +110,22 @@ enum class UseDependencyDescriptor { }; struct SvcTestParameters { + static SvcTestParameters Create(const std::string& codec_name, + const std::string& scalability_mode_str) { + absl::optional scalability_mode = + ScalabilityModeFromString(scalability_mode_str); + RTC_CHECK(scalability_mode.has_value()) + << "Unsupported scalability mode: " << scalability_mode_str; + + int num_spatial_layers = + ScalabilityModeToNumSpatialLayers(*scalability_mode); + int num_temporal_layers = + ScalabilityModeToNumTemporalLayers(*scalability_mode); + + return SvcTestParameters{codec_name, scalability_mode_str, + num_spatial_layers, num_temporal_layers}; + } + std::string codec_name; std::string scalability_mode; int expected_spatial_layers; @@ -305,9 +322,9 @@ TEST_P(SvcTest, ScalabilityModeSupported) { INSTANTIATE_TEST_SUITE_P( SvcTestVP8, SvcTest, - Combine(Values(SvcTestParameters{kVp8CodecName, "L1T1", 1, 1}, - SvcTestParameters{kVp8CodecName, "L1T2", 1, 2}, - SvcTestParameters{kVp8CodecName, "L1T3", 1, 3}), + Combine(Values(SvcTestParameters::Create(kVp8CodecName, "L1T1"), + SvcTestParameters::Create(kVp8CodecName, "L1T2"), + SvcTestParameters::Create(kVp8CodecName, "L1T3")), Values(UseDependencyDescriptor::Disabled, UseDependencyDescriptor::Enabled)), SvcTestNameGenerator); @@ -317,9 +334,9 @@ INSTANTIATE_TEST_SUITE_P( SvcTestH264, SvcTest, Combine(ValuesIn({ - SvcTestParameters{kH264CodecName, "L1T1", 1, 1}, - // SvcTestParameters{kH264CodecName, "L1T2", 1, 2}, - // SvcTestParameters{kH264CodecName, "L1T3", 1, 3}, + SvcTestParameters::Create(kH264CodecName, "L1T1"), + // SSvcTestParameters::Create(kH264CodecName, "L1T2"), + // SSvcTestParameters::Create(kH264CodecName, "L1T3"), }), Values(UseDependencyDescriptor::Disabled, UseDependencyDescriptor::Enabled)), @@ -333,43 +350,43 @@ INSTANTIATE_TEST_SUITE_P( Combine( // TODO(bugs.webrtc.org/13960): Fix and enable remaining VP9 modes ValuesIn({ - SvcTestParameters{kVp9CodecName, "L1T1", 1, 1}, - SvcTestParameters{kVp9CodecName, "L1T2", 1, 2}, - SvcTestParameters{kVp9CodecName, "L1T3", 1, 3}, - SvcTestParameters{kVp9CodecName, "L2T1", 2, 1}, - SvcTestParameters{kVp9CodecName, "L2T1h", 2, 1}, - SvcTestParameters{kVp9CodecName, "L2T1_KEY", 2, 1}, - SvcTestParameters{kVp9CodecName, "L2T2", 2, 2}, - SvcTestParameters{kVp9CodecName, "L2T2h", 2, 2}, - SvcTestParameters{kVp9CodecName, "L2T2_KEY", 2, 2}, - SvcTestParameters{kVp9CodecName, "L2T2_KEY_SHIFT", 2, 2}, - SvcTestParameters{kVp9CodecName, "L2T3", 2, 3}, - SvcTestParameters{kVp9CodecName, "L2T3h", 2, 3}, - SvcTestParameters{kVp9CodecName, "L2T3_KEY", 2, 3}, - // SvcTestParameters{kVp9CodecName, "L2T3_KEY_SHIFT", 2, 3}, - SvcTestParameters{kVp9CodecName, "L3T1", 3, 1}, - SvcTestParameters{kVp9CodecName, "L3T1h", 3, 1}, - SvcTestParameters{kVp9CodecName, "L3T1_KEY", 3, 1}, - SvcTestParameters{kVp9CodecName, "L3T2", 3, 2}, - SvcTestParameters{kVp9CodecName, "L3T2h", 3, 2}, - SvcTestParameters{kVp9CodecName, "L3T2_KEY", 3, 2}, - // SvcTestParameters{kVp9CodecName, "L3T2_KEY_SHIFT", 3, 2}, - SvcTestParameters{kVp9CodecName, "L3T3", 3, 3}, - SvcTestParameters{kVp9CodecName, "L3T3h", 3, 3}, - SvcTestParameters{kVp9CodecName, "L3T3_KEY", 3, 3}, - // SvcTestParameters{kVp9CodecName, "L3T3_KEY_SHIFT", 3, 3}, - // SvcTestParameters{kVp9CodecName, "S2T1", 2, 1}, - // SvcTestParameters{kVp9CodecName, "S2T1h", 2, 1}, - // SvcTestParameters{kVp9CodecName, "S2T2", 2, 2}, - // SvcTestParameters{kVp9CodecName, "S2T2h", 2, 2}, - SvcTestParameters{kVp9CodecName, "S2T3", 2, 3}, - // SvcTestParameters{kVp9CodecName, "S2T3h", 2, 3}, - // SvcTestParameters{kVp9CodecName, "S3T1", 3, 1}, - // SvcTestParameters{kVp9CodecName, "S3T1h", 3, 1}, - // SvcTestParameters{kVp9CodecName, "S3T2", 3, 2}, - // SvcTestParameters{kVp9CodecName, "S3T2h", 3, 2}, - // SvcTestParameters{kVp9CodecName, "S3T3", 3, 3}, - // SvcTestParameters{kVp9CodecName, "S3T3h", 3, 3}, + SvcTestParameters::Create(kVp9CodecName, "L1T1"), + SvcTestParameters::Create(kVp9CodecName, "L1T2"), + SvcTestParameters::Create(kVp9CodecName, "L1T3"), + SvcTestParameters::Create(kVp9CodecName, "L2T1"), + SvcTestParameters::Create(kVp9CodecName, "L2T1h"), + SvcTestParameters::Create(kVp9CodecName, "L2T1_KEY"), + SvcTestParameters::Create(kVp9CodecName, "L2T2"), + SvcTestParameters::Create(kVp9CodecName, "L2T2h"), + SvcTestParameters::Create(kVp9CodecName, "L2T2_KEY"), + SvcTestParameters::Create(kVp9CodecName, "L2T2_KEY_SHIFT"), + SvcTestParameters::Create(kVp9CodecName, "L2T3"), + SvcTestParameters::Create(kVp9CodecName, "L2T3h"), + SvcTestParameters::Create(kVp9CodecName, "L2T3_KEY"), + // SvcTestParameters::Create(kVp9CodecName, "L2T3_KEY_SHIFT"), + SvcTestParameters::Create(kVp9CodecName, "L3T1"), + SvcTestParameters::Create(kVp9CodecName, "L3T1h"), + SvcTestParameters::Create(kVp9CodecName, "L3T1_KEY"), + SvcTestParameters::Create(kVp9CodecName, "L3T2"), + SvcTestParameters::Create(kVp9CodecName, "L3T2h"), + SvcTestParameters::Create(kVp9CodecName, "L3T2_KEY"), + // SvcTestParameters::Create(kVp9CodecName, "L3T2_KEY_SHIFT"), + SvcTestParameters::Create(kVp9CodecName, "L3T3"), + SvcTestParameters::Create(kVp9CodecName, "L3T3h"), + SvcTestParameters::Create(kVp9CodecName, "L3T3_KEY"), + // SvcTestParameters::Create(kVp9CodecName, "L3T3_KEY_SHIFT"), + // SvcTestParameters::Create(kVp9CodecName, "S2T1"), + // SvcTestParameters::Create(kVp9CodecName, "S2T1h"), + // SvcTestParameters::Create(kVp9CodecName, "S2T2"), + // SvcTestParameters::Create(kVp9CodecName, "S2T2h"), + SvcTestParameters::Create(kVp9CodecName, "S2T3"), + // SvcTestParameters::Create(kVp9CodecName, "S2T3h"), + // SvcTestParameters::Create(kVp9CodecName, "S3T1"), + // SvcTestParameters::Create(kVp9CodecName, "S3T1h"), + // SvcTestParameters::Create(kVp9CodecName, "S3T2"), + // SvcTestParameters::Create(kVp9CodecName, "S3T2h"), + // SvcTestParameters::Create(kVp9CodecName, "S3T3"), + // SvcTestParameters::Create(kVp9CodecName, "S3T3h"), }), Values(UseDependencyDescriptor::Disabled, UseDependencyDescriptor::Enabled)), @@ -379,43 +396,43 @@ INSTANTIATE_TEST_SUITE_P( SvcTestAV1, SvcTest, Combine(ValuesIn({ - SvcTestParameters{kAv1CodecName, "L1T1", 1, 1}, - SvcTestParameters{kAv1CodecName, "L1T2", 1, 2}, - SvcTestParameters{kAv1CodecName, "L1T3", 1, 3}, - SvcTestParameters{kAv1CodecName, "L2T1", 2, 1}, - SvcTestParameters{kAv1CodecName, "L2T1h", 2, 1}, - SvcTestParameters{kAv1CodecName, "L2T1_KEY", 2, 1}, - SvcTestParameters{kAv1CodecName, "L2T2", 2, 2}, - SvcTestParameters{kAv1CodecName, "L2T2h", 2, 2}, - SvcTestParameters{kAv1CodecName, "L2T2_KEY", 2, 2}, - SvcTestParameters{kAv1CodecName, "L2T2_KEY_SHIFT", 2, 2}, - SvcTestParameters{kAv1CodecName, "L2T3", 2, 3}, - SvcTestParameters{kAv1CodecName, "L2T3h", 2, 3}, - SvcTestParameters{kAv1CodecName, "L2T3_KEY", 2, 3}, - // SvcTestParameters{kAv1CodecName, "L2T3_KEY_SHIFT", 2, 3}, - SvcTestParameters{kAv1CodecName, "L3T1", 3, 1}, - SvcTestParameters{kAv1CodecName, "L3T1h", 3, 1}, - SvcTestParameters{kAv1CodecName, "L3T1_KEY", 3, 1}, - SvcTestParameters{kAv1CodecName, "L3T2", 3, 2}, - SvcTestParameters{kAv1CodecName, "L3T2h", 3, 2}, - SvcTestParameters{kAv1CodecName, "L3T2_KEY", 3, 2}, - // SvcTestParameters{kAv1CodecName, "L3T2_KEY_SHIFT", 3, 2}, - SvcTestParameters{kAv1CodecName, "L3T3", 3, 3}, - SvcTestParameters{kAv1CodecName, "L3T3h", 3, 3}, - SvcTestParameters{kAv1CodecName, "L3T3_KEY", 3, 3}, - // SvcTestParameters{kAv1CodecName, "L3T3_KEY_SHIFT", 3, 3}, - // SvcTestParameters{kAv1CodecName, "S2T1", 2, 1}, - // SvcTestParameters{kAv1CodecName, "S2T1h", 2, 1}, - // SvcTestParameters{kAv1CodecName, "S2T2", 2, 2}, - // SvcTestParameters{kAv1CodecName, "S2T2h", 2, 2}, - // SvcTestParameters{kAv1CodecName, "S2T3", 2, 3}, - // SvcTestParameters{kAv1CodecName, "S2T3h", 2, 3}, - // SvcTestParameters{kAv1CodecName, "S3T1", 3, 1}, - // SvcTestParameters{kAv1CodecName, "S3T1h", 3, 1}, - // SvcTestParameters{kAv1CodecName, "S3T2", 3, 2}, - // SvcTestParameters{kAv1CodecName, "S3T2h", 3, 2}, - // SvcTestParameters{kAv1CodecName, "S3T3", 3, 3}, - // SvcTestParameters{kAv1CodecName, "S3T3h", 3, 3}, + SvcTestParameters::Create(kAv1CodecName, "L1T1"), + SvcTestParameters::Create(kAv1CodecName, "L1T2"), + SvcTestParameters::Create(kAv1CodecName, "L1T3"), + SvcTestParameters::Create(kAv1CodecName, "L2T1"), + SvcTestParameters::Create(kAv1CodecName, "L2T1h"), + SvcTestParameters::Create(kAv1CodecName, "L2T1_KEY"), + SvcTestParameters::Create(kAv1CodecName, "L2T2"), + SvcTestParameters::Create(kAv1CodecName, "L2T2h"), + SvcTestParameters::Create(kAv1CodecName, "L2T2_KEY"), + SvcTestParameters::Create(kAv1CodecName, "L2T2_KEY_SHIFT"), + SvcTestParameters::Create(kAv1CodecName, "L2T3"), + SvcTestParameters::Create(kAv1CodecName, "L2T3h"), + SvcTestParameters::Create(kAv1CodecName, "L2T3_KEY"), + // SvcTestParameters::Create(kAv1CodecName, "L2T3_KEY_SHIFT"), + SvcTestParameters::Create(kAv1CodecName, "L3T1"), + SvcTestParameters::Create(kAv1CodecName, "L3T1h"), + SvcTestParameters::Create(kAv1CodecName, "L3T1_KEY"), + SvcTestParameters::Create(kAv1CodecName, "L3T2"), + SvcTestParameters::Create(kAv1CodecName, "L3T2h"), + SvcTestParameters::Create(kAv1CodecName, "L3T2_KEY"), + // SvcTestParameters::Create(kAv1CodecName, "L3T2_KEY_SHIFT"), + SvcTestParameters::Create(kAv1CodecName, "L3T3"), + SvcTestParameters::Create(kAv1CodecName, "L3T3h"), + SvcTestParameters::Create(kAv1CodecName, "L3T3_KEY"), + // SvcTestParameters::Create(kAv1CodecName, "L3T3_KEY_SHIFT"), + // SvcTestParameters::Create(kAv1CodecName, "S2T1"), + // SvcTestParameters::Create(kAv1CodecName, "S2T1h"), + // SvcTestParameters::Create(kAv1CodecName, "S2T2"), + // SvcTestParameters::Create(kAv1CodecName, "S2T2h"), + // SvcTestParameters::Create(kAv1CodecName, "S2T3"), + // SvcTestParameters::Create(kAv1CodecName, "S2T3h"), + // SvcTestParameters::Create(kAv1CodecName, "S3T1"), + // SvcTestParameters::Create(kAv1CodecName, "S3T1h"), + // SvcTestParameters::Create(kAv1CodecName, "S3T2"), + // SvcTestParameters::Create(kAv1CodecName, "S3T2h"), + // SvcTestParameters::Create(kAv1CodecName, "S3T3"), + // SvcTestParameters::Create(kAv1CodecName, "S3T3h"), }), Values(UseDependencyDescriptor::Enabled)), SvcTestNameGenerator);