From 19da5ced24220caef35d71b641ecc0133de475e9 Mon Sep 17 00:00:00 2001 From: Sergey Silkin Date: Mon, 20 May 2019 17:57:17 +0200 Subject: [PATCH] Formatting of WebRTC-Vp9InterLayerPred field trial. Use conventional style ../{Default|Disabled|Enabled} with parameter inter_layer_pred_mode:{off|on|onkeypic} which maps directly to InterLayerPredMode enum. Bug: chromium:949536 Change-Id: If34e789b031d0db3eb2748b0b824492237ad5187 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/137800 Reviewed-by: Ilya Nikolaevskiy Commit-Queue: Sergey Silkin Cr-Commit-Position: refs/heads/master@{#28008} --- media/engine/webrtc_video_engine.cc | 22 +++++++----- media/engine/webrtc_video_engine_unittest.cc | 36 +++++++++++++------- 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index 1f5e3023b1..580b0a7027 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -29,6 +29,7 @@ #include "media/engine/webrtc_media_engine.h" #include "media/engine/webrtc_voice_engine.h" #include "rtc_base/copy_on_write_buffer.h" +#include "rtc_base/experiments/field_trial_parser.h" #include "rtc_base/logging.h" #include "rtc_base/strings/string_builder.h" #include "rtc_base/time_utils.h" @@ -387,15 +388,18 @@ WebRtcVideoChannel::WebRtcVideoSendStream::ConfigureVideoEncoderSettings( // Ensure frame dropping is always enabled. RTC_DCHECK(vp9_settings.frameDroppingOn); if (!is_screencast) { - const std::string group = - webrtc::field_trial::FindFullName("WebRTC-Vp9InterLayerPred"); - int mode; - if (!group.empty() && sscanf(group.c_str(), "%d", &mode) == 1 && - (mode == static_cast(webrtc::InterLayerPredMode::kOn) || - mode == static_cast(webrtc::InterLayerPredMode::kOnKeyPic) || - mode == static_cast(webrtc::InterLayerPredMode::kOff))) { - vp9_settings.interLayerPred = - static_cast(mode); + webrtc::FieldTrialFlag interlayer_pred_experiment_enabled = + webrtc::FieldTrialFlag("Enabled"); + webrtc::FieldTrialEnum inter_layer_pred_mode( + "inter_layer_pred_mode", webrtc::InterLayerPredMode::kOnKeyPic, + {{"off", webrtc::InterLayerPredMode::kOff}, + {"on", webrtc::InterLayerPredMode::kOn}, + {"onkeypic", webrtc::InterLayerPredMode::kOnKeyPic}}); + webrtc::ParseFieldTrial( + {&interlayer_pred_experiment_enabled, &inter_layer_pred_mode}, + webrtc::field_trial::FindFullName("WebRTC-Vp9InterLayerPred")); + if (interlayer_pred_experiment_enabled) { + vp9_settings.interLayerPred = inter_layer_pred_mode; } else { // Limit inter-layer prediction to key pictures by default. vp9_settings.interLayerPred = webrtc::InterLayerPredMode::kOnKeyPic; diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc index b6deb57a08..4e7a8b6dbf 100644 --- a/media/engine/webrtc_video_engine_unittest.cc +++ b/media/engine/webrtc_video_engine_unittest.cc @@ -3215,7 +3215,7 @@ class Vp9SettingsTestWithFieldTrial : Vp9SettingsTest(::testing::get<0>(GetParam())), num_spatial_layers_(::testing::get<1>(GetParam())), num_temporal_layers_(::testing::get<2>(GetParam())), - inter_layer_pred_(::testing::get<3>(GetParam())) {} + inter_layer_pred_mode_(::testing::get<3>(GetParam())) {} void VerifySettings(int num_spatial_layers, int num_temporal_layers, @@ -3236,18 +3236,19 @@ class Vp9SettingsTestWithFieldTrial ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; EXPECT_EQ(num_spatial_layers, vp9_settings.numberOfSpatialLayers); EXPECT_EQ(num_temporal_layers, vp9_settings.numberOfTemporalLayers); - EXPECT_EQ(inter_layer_pred_, vp9_settings.interLayerPred); + EXPECT_EQ(inter_layer_pred_mode_, vp9_settings.interLayerPred); EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, nullptr, nullptr)); } const uint8_t num_spatial_layers_; const uint8_t num_temporal_layers_; - const webrtc::InterLayerPredMode inter_layer_pred_; + const webrtc::InterLayerPredMode inter_layer_pred_mode_; }; TEST_P(Vp9SettingsTestWithFieldTrial, VerifyCodecSettings) { - VerifySettings(num_spatial_layers_, num_temporal_layers_, inter_layer_pred_); + VerifySettings(num_spatial_layers_, num_temporal_layers_, + inter_layer_pred_mode_); } INSTANTIATE_TEST_SUITE_P( @@ -3263,18 +3264,29 @@ INSTANTIATE_TEST_SUITE_P( 2, 3, webrtc::InterLayerPredMode::kOnKeyPic), - std::make_tuple("WebRTC-Vp9InterLayerPred/0/", + std::make_tuple("WebRTC-Vp9InterLayerPred/Default/", 1, 1, - webrtc::InterLayerPredMode::kOff), - std::make_tuple("WebRTC-Vp9InterLayerPred/1/", + webrtc::InterLayerPredMode::kOnKeyPic), + std::make_tuple("WebRTC-Vp9InterLayerPred/Disabled/", 1, 1, - webrtc::InterLayerPredMode::kOn), - std::make_tuple("WebRTC-Vp9InterLayerPred/2/", - 1, - 1, - webrtc::InterLayerPredMode::kOnKeyPic))); + webrtc::InterLayerPredMode::kOnKeyPic), + std::make_tuple( + "WebRTC-Vp9InterLayerPred/Enabled,inter_layer_pred_mode:off/", + 1, + 1, + webrtc::InterLayerPredMode::kOff), + std::make_tuple( + "WebRTC-Vp9InterLayerPred/Enabled,inter_layer_pred_mode:on/", + 1, + 1, + webrtc::InterLayerPredMode::kOn), + std::make_tuple( + "WebRTC-Vp9InterLayerPred/Enabled,inter_layer_pred_mode:onkeypic/", + 1, + 1, + webrtc::InterLayerPredMode::kOnKeyPic))); TEST_F(WebRtcVideoChannelTest, VerifyMinBitrate) { std::vector streams = AddSendStream()->GetVideoStreams();