diff --git a/call/rtp_payload_params.cc b/call/rtp_payload_params.cc index 3f98a580d2..45445fc69d 100644 --- a/call/rtp_payload_params.cc +++ b/call/rtp_payload_params.cc @@ -133,8 +133,8 @@ RtpPayloadParams::RtpPayloadParams(const uint32_t ssrc, absl::StartsWith(trials.Lookup("WebRTC-GenericPictureId"), "Enabled")), simulate_generic_vp9_( - !absl::StartsWith(trials.Lookup("WebRTC-Vp9DependencyDescriptor"), - "Disabled")) { + absl::StartsWith(trials.Lookup("WebRTC-Vp9DependencyDescriptor"), + "Enabled")) { for (auto& spatial_layer : last_shared_frame_id_) spatial_layer.fill(-1); diff --git a/call/rtp_payload_params_unittest.cc b/call/rtp_payload_params_unittest.cc index 8b22716f43..386430bff7 100644 --- a/call/rtp_payload_params_unittest.cc +++ b/call/rtp_payload_params_unittest.cc @@ -475,9 +475,17 @@ TEST_F(RtpPayloadParamsVp8ToGenericTest, FrameIdGaps) { ConvertAndCheck(1, 20, VideoFrameType::kVideoFrameDelta, kNoSync, {10, 15}); } -TEST(RtpPayloadParamsVp9ToGenericTest, NoScalability) { - RtpPayloadState state; - RtpPayloadParams params(/*ssrc=*/123, &state, FieldTrialBasedConfig()); +class RtpPayloadParamsVp9ToGenericTest : public ::testing::Test { + protected: + RtpPayloadParamsVp9ToGenericTest() + : field_trials_("WebRTC-Vp9DependencyDescriptor/Enabled/") {} + + test::ExplicitKeyValueConfig field_trials_; + RtpPayloadState state_; +}; + +TEST_F(RtpPayloadParamsVp9ToGenericTest, NoScalability) { + RtpPayloadParams params(/*ssrc=*/123, &state_, field_trials_); EncodedImage encoded_image; CodecSpecificInfo codec_info; @@ -524,13 +532,12 @@ TEST(RtpPayloadParamsVp9ToGenericTest, NoScalability) { EXPECT_THAT(header.generic->chain_diffs, ElementsAre(3 - 1)); } -TEST(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith2Layers) { +TEST_F(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith2Layers) { // Test with 2 temporal layers structure that is not used by webrtc: // 1---3 5 // / / / ... // 0---2---4--- - RtpPayloadState state; - RtpPayloadParams params(/*ssrc=*/123, &state, FieldTrialBasedConfig()); + RtpPayloadParams params(/*ssrc=*/123, &state_, field_trials_); EncodedImage image; CodecSpecificInfo info; @@ -629,11 +636,10 @@ TEST(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith2Layers) { EXPECT_THAT(headers[5].generic->chain_diffs, ElementsAre(2)); } -TEST(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith3Layers) { +TEST_F(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith3Layers) { // Test with 3 temporal layers structure that is not used by webrtc, but used // by chromium: https://imgur.com/pURAGvp - RtpPayloadState state; - RtpPayloadParams params(/*ssrc=*/123, &state, FieldTrialBasedConfig()); + RtpPayloadParams params(/*ssrc=*/123, &state_, field_trials_); EncodedImage image; CodecSpecificInfo info; @@ -774,12 +780,11 @@ TEST(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith3Layers) { EXPECT_THAT(headers[8].generic->chain_diffs, ElementsAre(8)); } -TEST(RtpPayloadParamsVp9ToGenericTest, SpatialScalabilityKSvc) { +TEST_F(RtpPayloadParamsVp9ToGenericTest, SpatialScalabilityKSvc) { // 1---3-- // | ... // 0---2-- - RtpPayloadState state; - RtpPayloadParams params(/*ssrc=*/123, &state, FieldTrialBasedConfig()); + RtpPayloadParams params(/*ssrc=*/123, &state_, field_trials_); EncodedImage image; CodecSpecificInfo info; diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc index 39296cf65e..700d5fdf1e 100644 --- a/call/rtp_video_sender.cc +++ b/call/rtp_video_sender.cc @@ -367,9 +367,9 @@ RtpVideoSender::RtpVideoSender( field_trials_.Lookup("WebRTC-Video-UseFrameRateForOverhead"), "Enabled")), has_packet_feedback_(TransportSeqNumExtensionConfigured(rtp_config)), - simulate_vp9_structure_(!absl::StartsWith( + simulate_vp9_structure_(absl::StartsWith( field_trials_.Lookup("WebRTC-Vp9DependencyDescriptor"), - "Disabled")), + "Enabled")), simulate_generic_structure_(absl::StartsWith( field_trials_.Lookup("WebRTC-GenericCodecDependencyDescriptor"), "Enabled")), diff --git a/call/rtp_video_sender_unittest.cc b/call/rtp_video_sender_unittest.cc index 689a61d7b9..e58ee3c5c0 100644 --- a/call/rtp_video_sender_unittest.cc +++ b/call/rtp_video_sender_unittest.cc @@ -772,6 +772,8 @@ TEST(RtpVideoSenderTest, SupportsDependencyDescriptorForVp9) { TEST(RtpVideoSenderTest, SupportsDependencyDescriptorForVp9NotProvidedByEncoder) { + test::ScopedFieldTrials field_trials( + "WebRTC-Vp9DependencyDescriptor/Enabled/"); RtpVideoSenderTestFixture test({kSsrc1}, {}, kPayloadType, {}); test.router()->SetActive(true); diff --git a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc index 71368953ff..f920a64ead 100644 --- a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc +++ b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc @@ -228,8 +228,8 @@ LibvpxVp9Encoder::LibvpxVp9Encoder(const cricket::VideoCodec& codec, ss_info_needed_(false), force_all_active_layers_(false), use_svc_controller_( - !absl::StartsWith(trials.Lookup("WebRTC-Vp9DependencyDescriptor"), - "Disabled")), + absl::StartsWith(trials.Lookup("WebRTC-Vp9DependencyDescriptor"), + "Enabled")), is_flexible_mode_(false), variable_framerate_experiment_(ParseVariableFramerateConfig(trials)), variable_framerate_controller_( diff --git a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc index 277f46af52..f61f673d49 100644 --- a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc +++ b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc @@ -257,6 +257,8 @@ TEST(Vp9ImplTest, ParserQpEqualsEncodedQp) { } TEST(Vp9ImplTest, EncodeAttachesTemplateStructureWithSvcController) { + test::ScopedFieldTrials override_field_trials( + "WebRTC-Vp9DependencyDescriptor/Enabled/"); std::unique_ptr encoder = VP9Encoder::Create(); VideoCodec codec_settings = DefaultCodecSettings(); EXPECT_EQ(encoder->InitEncode(&codec_settings, kSettings), @@ -299,6 +301,8 @@ TEST(Vp9ImplTest, EncoderWith2TemporalLayers) { } TEST(Vp9ImplTest, EncodeTemporalLayersWithSvcController) { + test::ScopedFieldTrials override_field_trials( + "WebRTC-Vp9DependencyDescriptor/Enabled/"); std::unique_ptr encoder = VP9Encoder::Create(); VideoCodec codec_settings = DefaultCodecSettings(); codec_settings.VP9()->numberOfTemporalLayers = 2; @@ -346,6 +350,8 @@ TEST(Vp9ImplTest, EncoderWith2SpatialLayers) { } TEST(Vp9ImplTest, EncodeSpatialLayersWithSvcController) { + test::ScopedFieldTrials override_field_trials( + "WebRTC-Vp9DependencyDescriptor/Enabled/"); std::unique_ptr encoder = VP9Encoder::Create(); VideoCodec codec_settings = DefaultCodecSettings(); codec_settings.VP9()->numberOfSpatialLayers = 2; @@ -481,6 +487,8 @@ TEST_F(TestVp9Impl, EnableDisableSpatialLayers) { } TEST(Vp9ImplTest, EnableDisableSpatialLayersWithSvcController) { + test::ScopedFieldTrials override_field_trials( + "WebRTC-Vp9DependencyDescriptor/Enabled/"); const int num_spatial_layers = 3; // Configure encoder to produce 3 spatial layers. Encode frames of layer 0 // then enable layer 1 and encode more frames and so on. @@ -555,6 +563,8 @@ MATCHER_P2(GenericLayerIs, spatial_id, temporal_id, "") { } TEST(Vp9ImplTest, SpatialUpswitchNotAtGOFBoundary) { + test::ScopedFieldTrials override_field_trials( + "WebRTC-Vp9DependencyDescriptor/Enabled/"); std::unique_ptr encoder = VP9Encoder::Create(); VideoCodec codec_settings = DefaultCodecSettings(); ConfigureSvc(codec_settings, /*num_spatial_layers=*/3, @@ -753,6 +763,8 @@ TEST_F(TestVp9Impl, DisableEnableBaseLayerTriggersKeyFrame) { TEST(Vp9ImplTest, DisableEnableBaseLayerWithSvcControllerTriggersKeyFrame) { // Configure encoder to produce N spatial layers. Encode frames for all // layers. Then disable all but the last layer. Then reenable all back again. + test::ScopedFieldTrials override_field_trials( + "WebRTC-Vp9DependencyDescriptor/Enabled/"); const size_t num_spatial_layers = 3; const size_t num_temporal_layers = 3; // Must not be multiple of temporal period to exercise all code paths. @@ -2311,17 +2323,8 @@ TEST(Vp9SpeedSettingsTrialsTest, DefaultPerLayerFlagsWithSvc) { absl::WrapUnique(vpx), trials); VideoCodec settings = DefaultCodecSettings(); - constexpr int kNumSpatialLayers = 3; - constexpr int kNumTemporalLayers = 3; - ConfigureSvc(settings, kNumSpatialLayers, kNumTemporalLayers); - VideoBitrateAllocation bitrate_allocation; - for (int si = 0; si < kNumSpatialLayers; ++si) { - for (int ti = 0; ti < kNumTemporalLayers; ++ti) { - uint32_t bitrate_bps = - settings.spatialLayers[si].targetBitrate * 1'000 / kNumTemporalLayers; - bitrate_allocation.SetBitrate(si, ti, bitrate_bps); - } - } + const int kNumSpatialLayers = 3; + ConfigureSvc(settings, kNumSpatialLayers, /*num_temporal_layers=*/3); vpx_image_t img; // Speed settings per spatial layer, for TL0. @@ -2333,11 +2336,6 @@ TEST(Vp9SpeedSettingsTrialsTest, DefaultPerLayerFlagsWithSvc) { const int kLoopFilter[VPX_MAX_LAYERS] = {1, 0, 0}; ON_CALL(*vpx, img_wrap).WillByDefault(GetWrapImageFunction(&img)); - ON_CALL(*vpx, codec_enc_init) - .WillByDefault(WithArg<0>([](vpx_codec_ctx_t* ctx) { - memset(ctx, 0, sizeof(*ctx)); - return VPX_CODEC_OK; - })); ON_CALL(*vpx, codec_enc_config_default) .WillByDefault(DoAll(WithArg<1>([](vpx_codec_enc_cfg_t* cfg) { memset(cfg, 0, sizeof(vpx_codec_enc_cfg_t)); @@ -2362,9 +2360,6 @@ TEST(Vp9SpeedSettingsTrialsTest, DefaultPerLayerFlagsWithSvc) { EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, encoder.InitEncode(&settings, kSettings)); - encoder.SetRates(VideoEncoder::RateControlParameters(bitrate_allocation, - settings.maxFramerate)); - MockEncodedImageCallback callback; encoder.RegisterEncodeCompleteCallback(&callback); auto frame_generator = test::CreateSquareFrameGenerator( diff --git a/test/fuzzers/vp9_encoder_references_fuzzer.cc b/test/fuzzers/vp9_encoder_references_fuzzer.cc index eba4db5f6c..9c793ae9aa 100644 --- a/test/fuzzers/vp9_encoder_references_fuzzer.cc +++ b/test/fuzzers/vp9_encoder_references_fuzzer.cc @@ -174,6 +174,7 @@ class FieldTrials : public WebRtcKeyValueConfig { ~FieldTrials() override = default; std::string Lookup(absl::string_view key) const override { static constexpr absl::string_view kBinaryFieldTrials[] = { + "WebRTC-Vp9DependencyDescriptor", "WebRTC-Vp9ExternalRefCtrl", "WebRTC-Vp9IssueKeyFrameOnLayerDeactivation", };