Enable WebRTC-Vp9DependencyDescriptor by default
Bug: chromium:1178444
Change-Id: I420e1e9b3c557b8b186cb08c15b962a779e1ca17
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/226941
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Emil Lundmark <lndmrk@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34584}
diff --git a/call/rtp_payload_params.cc b/call/rtp_payload_params.cc
index c6a56a3..ad8c1da 100644
--- a/call/rtp_payload_params.cc
+++ b/call/rtp_payload_params.cc
@@ -133,8 +133,8 @@
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 7db38db..59c8f23 100644
--- a/call/rtp_payload_params_unittest.cc
+++ b/call/rtp_payload_params_unittest.cc
@@ -463,17 +463,9 @@
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 @@
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 @@
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 @@
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 5b6712d..0e29a4c 100644
--- a/call/rtp_video_sender.cc
+++ b/call/rtp_video_sender.cc
@@ -367,9 +367,9 @@
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 334d97c..a45473f 100644
--- a/call/rtp_video_sender_unittest.cc
+++ b/call/rtp_video_sender_unittest.cc
@@ -772,8 +772,6 @@
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 f29ad92..88d3b7d 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 @@
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 e965384..41e349e 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, EncodeAttachesTemplateStructureWithSvcController) {
- test::ScopedFieldTrials override_field_trials(
- "WebRTC-Vp9DependencyDescriptor/Enabled/");
std::unique_ptr<VideoEncoder> encoder = VP9Encoder::Create();
VideoCodec codec_settings = DefaultCodecSettings();
EXPECT_EQ(encoder->InitEncode(&codec_settings, kSettings),
@@ -301,8 +299,6 @@
}
TEST(Vp9ImplTest, EncodeTemporalLayersWithSvcController) {
- test::ScopedFieldTrials override_field_trials(
- "WebRTC-Vp9DependencyDescriptor/Enabled/");
std::unique_ptr<VideoEncoder> encoder = VP9Encoder::Create();
VideoCodec codec_settings = DefaultCodecSettings();
codec_settings.VP9()->numberOfTemporalLayers = 2;
@@ -350,8 +346,6 @@
}
TEST(Vp9ImplTest, EncodeSpatialLayersWithSvcController) {
- test::ScopedFieldTrials override_field_trials(
- "WebRTC-Vp9DependencyDescriptor/Enabled/");
std::unique_ptr<VideoEncoder> encoder = VP9Encoder::Create();
VideoCodec codec_settings = DefaultCodecSettings();
codec_settings.VP9()->numberOfSpatialLayers = 2;
@@ -487,8 +481,6 @@
}
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 @@
}
TEST(Vp9ImplTest, SpatialUpswitchNotAtGOFBoundary) {
- test::ScopedFieldTrials override_field_trials(
- "WebRTC-Vp9DependencyDescriptor/Enabled/");
std::unique_ptr<VideoEncoder> encoder = VP9Encoder::Create();
VideoCodec codec_settings = DefaultCodecSettings();
ConfigureSvc(codec_settings, /*num_spatial_layers=*/3,
@@ -763,8 +753,6 @@
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.
@@ -2354,8 +2342,17 @@
absl::WrapUnique<LibvpxInterface>(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.
@@ -2367,6 +2364,11 @@
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));
@@ -2391,6 +2393,9 @@
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 9c793ae..eba4db5 100644
--- a/test/fuzzers/vp9_encoder_references_fuzzer.cc
+++ b/test/fuzzers/vp9_encoder_references_fuzzer.cc
@@ -174,7 +174,6 @@
~FieldTrials() override = default;
std::string Lookup(absl::string_view key) const override {
static constexpr absl::string_view kBinaryFieldTrials[] = {
- "WebRTC-Vp9DependencyDescriptor",
"WebRTC-Vp9ExternalRefCtrl",
"WebRTC-Vp9IssueKeyFrameOnLayerDeactivation",
};