diff --git a/call/rtp_payload_params.cc b/call/rtp_payload_params.cc index c3387f193f..af3874bd7b 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"), - "Enabled")) { + !absl::StartsWith(trials.Lookup("WebRTC-Vp9DependencyDescriptor"), + "Disabled")) { 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 7db38dbcb8..59c8f23bc2 100644 --- a/call/rtp_payload_params_unittest.cc +++ b/call/rtp_payload_params_unittest.cc @@ -463,17 +463,9 @@ TEST_F(RtpPayloadParamsVp8ToGenericTest, FrameIdGaps) { ConvertAndCheck(1, 20, VideoFrameType::kVideoFrameDelta, kNoSync, {10, 15}); } -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_); +TEST(RtpPayloadParamsVp9ToGenericTest, NoScalability) { + RtpPayloadState state; + RtpPayloadParams params(/*ssrc=*/123, &state, FieldTrialBasedConfig()); EncodedImage encoded_image; CodecSpecificInfo codec_info; @@ -520,12 +512,13 @@ TEST_F(RtpPayloadParamsVp9ToGenericTest, NoScalability) { EXPECT_THAT(header.generic->chain_diffs, ElementsAre(3 - 1)); } -TEST_F(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith2Layers) { +TEST(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith2Layers) { // Test with 2 temporal layers structure that is not used by webrtc: // 1---3 5 // / / / ... // 0---2---4--- - RtpPayloadParams params(/*ssrc=*/123, &state_, field_trials_); + RtpPayloadState state; + RtpPayloadParams params(/*ssrc=*/123, &state, FieldTrialBasedConfig()); EncodedImage image; CodecSpecificInfo info; @@ -624,10 +617,11 @@ TEST_F(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith2Layers) { EXPECT_THAT(headers[5].generic->chain_diffs, ElementsAre(2)); } -TEST_F(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith3Layers) { +TEST(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith3Layers) { // Test with 3 temporal layers structure that is not used by webrtc, but used // by chromium: https://imgur.com/pURAGvp - RtpPayloadParams params(/*ssrc=*/123, &state_, field_trials_); + RtpPayloadState state; + RtpPayloadParams params(/*ssrc=*/123, &state, FieldTrialBasedConfig()); EncodedImage image; CodecSpecificInfo info; @@ -768,11 +762,12 @@ TEST_F(RtpPayloadParamsVp9ToGenericTest, TemporalScalabilityWith3Layers) { EXPECT_THAT(headers[8].generic->chain_diffs, ElementsAre(8)); } -TEST_F(RtpPayloadParamsVp9ToGenericTest, SpatialScalabilityKSvc) { +TEST(RtpPayloadParamsVp9ToGenericTest, SpatialScalabilityKSvc) { // 1---3-- // | ... // 0---2-- - RtpPayloadParams params(/*ssrc=*/123, &state_, field_trials_); + RtpPayloadState state; + RtpPayloadParams params(/*ssrc=*/123, &state, FieldTrialBasedConfig()); EncodedImage image; CodecSpecificInfo info; diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc index b778563cdd..16f4f25405 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"), - "Enabled")), + "Disabled")), active_(false), suspended_ssrcs_(std::move(suspended_ssrcs)), fec_controller_(std::move(fec_controller)), diff --git a/call/rtp_video_sender_unittest.cc b/call/rtp_video_sender_unittest.cc index 334d97ccfa..a45473f251 100644 --- a/call/rtp_video_sender_unittest.cc +++ b/call/rtp_video_sender_unittest.cc @@ -772,8 +772,6 @@ 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 f920a64ead..71368953ff 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"), - "Enabled")), + !absl::StartsWith(trials.Lookup("WebRTC-Vp9DependencyDescriptor"), + "Disabled")), 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 f61f673d49..277f46af52 100644 --- a/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc +++ b/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc @@ -257,8 +257,6 @@ 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), @@ -301,8 +299,6 @@ 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; @@ -350,8 +346,6 @@ 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; @@ -487,8 +481,6 @@ 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. @@ -563,8 +555,6 @@ 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, @@ -763,8 +753,6 @@ 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. @@ -2323,8 +2311,17 @@ TEST(Vp9SpeedSettingsTrialsTest, DefaultPerLayerFlagsWithSvc) { absl::WrapUnique(vpx), trials); VideoCodec settings = DefaultCodecSettings(); - const int kNumSpatialLayers = 3; - ConfigureSvc(settings, kNumSpatialLayers, /*num_temporal_layers=*/3); + 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); + } + } vpx_image_t img; // Speed settings per spatial layer, for TL0. @@ -2336,6 +2333,11 @@ 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)); @@ -2360,6 +2362,9 @@ 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 9c793ae9aa..eba4db5f6c 100644 --- a/test/fuzzers/vp9_encoder_references_fuzzer.cc +++ b/test/fuzzers/vp9_encoder_references_fuzzer.cc @@ -174,7 +174,6 @@ 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", };