Revert "Wires up WebrtcKeyValueBasedConfig in media engines."
This reverts commit 591b2ab82ead157b5f5a85d5082bd15fe8c51809.
Reason for revert: Breaks downstream project
Original change's description:
> Wires up WebrtcKeyValueBasedConfig in media engines.
>
> This replaces field_trial:: -based functions from system_wrappers.
> Field trials are still used as fallback, but injectable trials are now
> possible.
>
> Bug: webrtc:11926
> Change-Id: I70f28c4fbabf6d9e55052342000e38612b46682c
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/174261
> Reviewed-by: Per Kjellander <perkj@webrtc.org>
> Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> Reviewed-by: Stefan Holmer <stefan@webrtc.org>
> Reviewed-by: Sebastian Jansson <srte@webrtc.org>
> Commit-Queue: Erik Språng <sprang@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32129}
TBR=mbonadei@webrtc.org,kthelgason@webrtc.org,sprang@webrtc.org,stefan@webrtc.org,srte@webrtc.org,perkj@webrtc.org
Change-Id: I3e169149a8b787aa6366bb357abb71794534c63a
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:11926
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184507
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32132}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 5e5172f..c257a7d 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -55,7 +55,6 @@
"audio:audio_mixer_api",
"audio_codecs:audio_codecs_api",
"task_queue:default_task_queue_factory",
- "transport:field_trial_based_config",
"video_codecs:video_codecs_api",
]
}
diff --git a/api/create_peerconnection_factory.cc b/api/create_peerconnection_factory.cc
index 6eba7d4..6223150 100644
--- a/api/create_peerconnection_factory.cc
+++ b/api/create_peerconnection_factory.cc
@@ -18,7 +18,6 @@
#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "api/scoped_refptr.h"
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/transport/field_trial_based_config.h"
#include "media/base/media_engine.h"
#include "media/engine/webrtc_media_engine.h"
#include "modules/audio_device/include/audio_device.h"
@@ -46,7 +45,6 @@
dependencies.call_factory = CreateCallFactory();
dependencies.event_log_factory = std::make_unique<RtcEventLogFactory>(
dependencies.task_queue_factory.get());
- dependencies.trials = std::make_unique<webrtc::FieldTrialBasedConfig>();
cricket::MediaEngineDependencies media_dependencies;
media_dependencies.task_queue_factory = dependencies.task_queue_factory.get();
@@ -61,7 +59,6 @@
media_dependencies.audio_mixer = std::move(audio_mixer);
media_dependencies.video_encoder_factory = std::move(video_encoder_factory);
media_dependencies.video_decoder_factory = std::move(video_decoder_factory);
- media_dependencies.trials = dependencies.trials.get();
dependencies.media_engine =
cricket::CreateMediaEngine(std::move(media_dependencies));
diff --git a/call/call.cc b/call/call.cc
index e814cff..f53f779 100644
--- a/call/call.cc
+++ b/call/call.cc
@@ -260,8 +260,6 @@
Stats GetStats() const override;
- const WebRtcKeyValueConfig& trials() const override;
-
// Implements PacketReceiver.
DeliveryStatus DeliverPacket(MediaType media_type,
rtc::CopyOnWriteBuffer packet,
@@ -1114,10 +1112,6 @@
return stats;
}
-const WebRtcKeyValueConfig& Call::trials() const {
- return *config_.trials;
-}
-
void Call::SignalChannelNetworkState(MediaType media, NetworkState state) {
RTC_DCHECK_RUN_ON(worker_thread_);
switch (media) {
diff --git a/call/call.h b/call/call.h
index a2b3b89..7527224 100644
--- a/call/call.h
+++ b/call/call.h
@@ -156,8 +156,6 @@
virtual void SetClientBitratePreferences(
const BitrateSettings& preferences) = 0;
- virtual const WebRtcKeyValueConfig& trials() const = 0;
-
virtual ~Call() {}
};
diff --git a/call/degraded_call.cc b/call/degraded_call.cc
index 0cd4301..007e0af 100644
--- a/call/degraded_call.cc
+++ b/call/degraded_call.cc
@@ -266,10 +266,6 @@
return call_->GetStats();
}
-const WebRtcKeyValueConfig& DegradedCall::trials() const {
- return call_->trials();
-}
-
void DegradedCall::SignalChannelNetworkState(MediaType media,
NetworkState state) {
call_->SignalChannelNetworkState(media, state);
diff --git a/call/degraded_call.h b/call/degraded_call.h
index d81c65c..ac072b7 100644
--- a/call/degraded_call.h
+++ b/call/degraded_call.h
@@ -85,8 +85,6 @@
Stats GetStats() const override;
- const WebRtcKeyValueConfig& trials() const override;
-
void SignalChannelNetworkState(MediaType media, NetworkState state) override;
void OnAudioTransportOverheadChanged(
int transport_overhead_per_packet) override;
diff --git a/media/BUILD.gn b/media/BUILD.gn
index 41f3532..284cd45 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -93,7 +93,6 @@
"../api/crypto:frame_encryptor_interface",
"../api/crypto:options",
"../api/transport:stun_types",
- "../api/transport:webrtc_key_value_config",
"../api/transport/rtp:rtp_source",
"../api/video:video_bitrate_allocation",
"../api/video:video_bitrate_allocator_factory",
@@ -288,8 +287,6 @@
"../api/audio_codecs:audio_codecs_api",
"../api/task_queue",
"../api/transport:bitrate_settings",
- "../api/transport:field_trial_based_config",
- "../api/transport:webrtc_key_value_config",
"../api/transport/rtp:rtp_source",
"../api/units:data_rate",
"../api/video:video_bitrate_allocation",
@@ -327,6 +324,7 @@
"../rtc_base/system:rtc_export",
"../rtc_base/third_party/base64",
"../system_wrappers",
+ "../system_wrappers:field_trial",
"../system_wrappers:metrics",
]
absl_deps = [
@@ -458,7 +456,6 @@
"../api:call_api",
"../api:fec_controller_api",
"../api:scoped_refptr",
- "../api/transport:field_trial_based_config",
"../api/video:encoded_image",
"../api/video:video_bitrate_allocation",
"../api/video:video_frame",
diff --git a/media/base/media_engine.cc b/media/base/media_engine.cc
index 36a9694..8050258 100644
--- a/media/base/media_engine.cc
+++ b/media/base/media_engine.cc
@@ -161,20 +161,11 @@
}
CompositeMediaEngine::CompositeMediaEngine(
- std::unique_ptr<webrtc::WebRtcKeyValueConfig> trials,
- std::unique_ptr<VoiceEngineInterface> audio_engine,
+ std::unique_ptr<VoiceEngineInterface> voice_engine,
std::unique_ptr<VideoEngineInterface> video_engine)
- : trials_(std::move(trials)),
- voice_engine_(std::move(audio_engine)),
+ : voice_engine_(std::move(voice_engine)),
video_engine_(std::move(video_engine)) {}
-CompositeMediaEngine::CompositeMediaEngine(
- std::unique_ptr<VoiceEngineInterface> audio_engine,
- std::unique_ptr<VideoEngineInterface> video_engine)
- : CompositeMediaEngine(nullptr,
- std::move(audio_engine),
- std::move(video_engine)) {}
-
CompositeMediaEngine::~CompositeMediaEngine() = default;
bool CompositeMediaEngine::Init() {
diff --git a/media/base/media_engine.h b/media/base/media_engine.h
index 1d8917c..4d9cc56 100644
--- a/media/base/media_engine.h
+++ b/media/base/media_engine.h
@@ -19,7 +19,6 @@
#include "api/audio_codecs/audio_encoder_factory.h"
#include "api/crypto/crypto_options.h"
#include "api/rtp_parameters.h"
-#include "api/transport/webrtc_key_value_config.h"
#include "api/video/video_bitrate_allocator_factory.h"
#include "call/audio_state.h"
#include "media/base/codec.h"
@@ -132,12 +131,8 @@
// CompositeMediaEngine constructs a MediaEngine from separate
// voice and video engine classes.
-// Optionally owns a WebRtcKeyValueConfig trials map.
class CompositeMediaEngine : public MediaEngineInterface {
public:
- CompositeMediaEngine(std::unique_ptr<webrtc::WebRtcKeyValueConfig> trials,
- std::unique_ptr<VoiceEngineInterface> audio_engine,
- std::unique_ptr<VideoEngineInterface> video_engine);
CompositeMediaEngine(std::unique_ptr<VoiceEngineInterface> audio_engine,
std::unique_ptr<VideoEngineInterface> video_engine);
~CompositeMediaEngine() override;
@@ -149,7 +144,6 @@
const VideoEngineInterface& video() const override;
private:
- const std::unique_ptr<webrtc::WebRtcKeyValueConfig> trials_;
std::unique_ptr<VoiceEngineInterface> voice_engine_;
std::unique_ptr<VideoEngineInterface> video_engine_;
};
diff --git a/media/engine/fake_webrtc_call.h b/media/engine/fake_webrtc_call.h
index 385bbcd7..d134163 100644
--- a/media/engine/fake_webrtc_call.h
+++ b/media/engine/fake_webrtc_call.h
@@ -24,7 +24,6 @@
#include <string>
#include <vector>
-#include "api/transport/field_trial_based_config.h"
#include "api/video/video_frame.h"
#include "call/audio_receive_stream.h"
#include "call/audio_send_stream.h"
@@ -363,10 +362,6 @@
webrtc::Call::Stats GetStats() const override;
- const webrtc::WebRtcKeyValueConfig& trials() const override {
- return trials_;
- }
-
void SignalChannelNetworkState(webrtc::MediaType media,
webrtc::NetworkState state) override;
void OnAudioTransportOverheadChanged(
@@ -390,7 +385,6 @@
int num_created_send_streams_;
int num_created_receive_streams_;
- webrtc::FieldTrialBasedConfig trials_;
};
} // namespace cricket
diff --git a/media/engine/null_webrtc_video_engine_unittest.cc b/media/engine/null_webrtc_video_engine_unittest.cc
index a11c207..832bf8a 100644
--- a/media/engine/null_webrtc_video_engine_unittest.cc
+++ b/media/engine/null_webrtc_video_engine_unittest.cc
@@ -15,7 +15,6 @@
#include "api/task_queue/default_task_queue_factory.h"
#include "api/task_queue/task_queue_factory.h"
-#include "api/transport/field_trial_based_config.h"
#include "media/engine/webrtc_voice_engine.h"
#include "modules/audio_device/include/mock_audio_device.h"
#include "modules/audio_processing/include/audio_processing.h"
@@ -32,12 +31,11 @@
webrtc::CreateDefaultTaskQueueFactory();
rtc::scoped_refptr<webrtc::test::MockAudioDeviceModule> adm =
webrtc::test::MockAudioDeviceModule::CreateNice();
- webrtc::FieldTrialBasedConfig trials;
auto audio_engine = std::make_unique<WebRtcVoiceEngine>(
task_queue_factory.get(), adm,
webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr,
- webrtc::AudioProcessingBuilder().Create(), trials);
+ webrtc::AudioProcessingBuilder().Create());
CompositeMediaEngine engine(std::move(audio_engine),
std::make_unique<NullWebRtcVideoEngine>());
diff --git a/media/engine/simulcast.cc b/media/engine/simulcast.cc
index 6d64bfa..6e63ec6 100644
--- a/media/engine/simulcast.cc
+++ b/media/engine/simulcast.cc
@@ -16,7 +16,6 @@
#include <algorithm>
#include <string>
-#include "absl/strings/match.h"
#include "absl/types/optional.h"
#include "api/video/video_codec_constants.h"
#include "media/base/media_constants.h"
@@ -27,6 +26,7 @@
#include "rtc_base/experiments/normalize_simulcast_size_experiment.h"
#include "rtc_base/experiments/rate_control_settings.h"
#include "rtc_base/logging.h"
+#include "system_wrappers/include/field_trial.h"
namespace cricket {
@@ -103,9 +103,7 @@
const int kMaxScreenshareSimulcastLayers = 2;
// Multiway: Number of temporal layers for each simulcast stream.
-int DefaultNumberOfTemporalLayers(int simulcast_id,
- bool screenshare,
- const webrtc::WebRtcKeyValueConfig& trials) {
+int DefaultNumberOfTemporalLayers(int simulcast_id, bool screenshare) {
RTC_CHECK_GE(simulcast_id, 0);
RTC_CHECK_LT(simulcast_id, webrtc::kMaxSimulcastStreams);
@@ -116,8 +114,10 @@
: kDefaultNumTemporalLayers;
const std::string group_name =
- screenshare ? trials.Lookup("WebRTC-VP8ScreenshareTemporalLayers")
- : trials.Lookup("WebRTC-VP8ConferenceTemporalLayers");
+ screenshare ? webrtc::field_trial::FindFullName(
+ "WebRTC-VP8ScreenshareTemporalLayers")
+ : webrtc::field_trial::FindFullName(
+ "WebRTC-VP8ConferenceTemporalLayers");
if (group_name.empty())
return default_num_temporal_layers;
@@ -231,10 +231,9 @@
size_t LimitSimulcastLayerCount(int width,
int height,
size_t need_layers,
- size_t layer_count,
- const webrtc::WebRtcKeyValueConfig& trials) {
- if (!absl::StartsWith(trials.Lookup(kUseLegacySimulcastLayerLimitFieldTrial),
- "Disabled")) {
+ size_t layer_count) {
+ if (!webrtc::field_trial::IsDisabled(
+ kUseLegacySimulcastLayerLimitFieldTrial)) {
size_t adaptive_layer_count = std::max(
need_layers,
kSimulcastFormats[FindSimulcastFormatIndex(width, height)].max_layers);
@@ -255,28 +254,27 @@
double bitrate_priority,
int max_qp,
bool is_screenshare_with_conference_mode,
- bool temporal_layers_supported,
- const webrtc::WebRtcKeyValueConfig& trials) {
+ bool temporal_layers_supported) {
RTC_DCHECK_LE(min_layers, max_layers);
RTC_DCHECK(max_layers > 1 || is_screenshare_with_conference_mode);
const bool base_heavy_tl3_rate_alloc =
- webrtc::RateControlSettings::ParseFromKeyValueConfig(&trials)
+ webrtc::RateControlSettings::ParseFromFieldTrials()
.Vp8BaseHeavyTl3RateAllocation();
if (is_screenshare_with_conference_mode) {
return GetScreenshareLayers(max_layers, width, height, bitrate_priority,
max_qp, temporal_layers_supported,
- base_heavy_tl3_rate_alloc, trials);
+ base_heavy_tl3_rate_alloc);
} else {
// Some applications rely on the old behavior limiting the simulcast layer
// count based on the resolution automatically, which they can get through
// the WebRTC-LegacySimulcastLayerLimit field trial until they update.
max_layers =
- LimitSimulcastLayerCount(width, height, min_layers, max_layers, trials);
+ LimitSimulcastLayerCount(width, height, min_layers, max_layers);
return GetNormalSimulcastLayers(max_layers, width, height, bitrate_priority,
max_qp, temporal_layers_supported,
- base_heavy_tl3_rate_alloc, trials);
+ base_heavy_tl3_rate_alloc);
}
}
@@ -287,8 +285,7 @@
double bitrate_priority,
int max_qp,
bool temporal_layers_supported,
- bool base_heavy_tl3_rate_alloc,
- const webrtc::WebRtcKeyValueConfig& trials) {
+ bool base_heavy_tl3_rate_alloc) {
std::vector<webrtc::VideoStream> layers(layer_count);
// Format width and height has to be divisible by |2 ^ num_simulcast_layers -
@@ -303,13 +300,11 @@
// TODO(pbos): Fill actual temporal-layer bitrate thresholds.
layers[s].max_qp = max_qp;
layers[s].num_temporal_layers =
- temporal_layers_supported
- ? DefaultNumberOfTemporalLayers(s, false, trials)
- : 1;
+ temporal_layers_supported ? DefaultNumberOfTemporalLayers(s, false) : 1;
layers[s].max_bitrate_bps = FindSimulcastMaxBitrate(width, height).bps();
layers[s].target_bitrate_bps =
FindSimulcastTargetBitrate(width, height).bps();
- int num_temporal_layers = DefaultNumberOfTemporalLayers(s, false, trials);
+ int num_temporal_layers = DefaultNumberOfTemporalLayers(s, false);
if (s == 0) {
// If alternative temporal rate allocation is selected, adjust the
// bitrate of the lowest simulcast stream so that absolute bitrate for
@@ -361,8 +356,7 @@
double bitrate_priority,
int max_qp,
bool temporal_layers_supported,
- bool base_heavy_tl3_rate_alloc,
- const webrtc::WebRtcKeyValueConfig& trials) {
+ bool base_heavy_tl3_rate_alloc) {
auto max_screenshare_layers = kMaxScreenshareSimulcastLayers;
size_t num_simulcast_layers =
std::min<int>(max_layers, max_screenshare_layers);
@@ -385,8 +379,7 @@
// restrictions. The base simulcast layer will still use legacy setup.
if (num_simulcast_layers == kMaxScreenshareSimulcastLayers) {
// Add optional upper simulcast layer.
- const int num_temporal_layers =
- DefaultNumberOfTemporalLayers(1, true, trials);
+ const int num_temporal_layers = DefaultNumberOfTemporalLayers(1, true);
int max_bitrate_bps;
bool using_boosted_bitrate = false;
if (!temporal_layers_supported) {
@@ -396,7 +389,7 @@
kScreenshareHighStreamMaxBitrate.bps() *
webrtc::SimulcastRateAllocator::GetTemporalRateAllocation(
num_temporal_layers, 0, base_heavy_tl3_rate_alloc));
- } else if (DefaultNumberOfTemporalLayers(1, true, trials) != 3 ||
+ } else if (DefaultNumberOfTemporalLayers(1, true) != 3 ||
base_heavy_tl3_rate_alloc) {
// Experimental temporal layer mode used, use increased max bitrate.
max_bitrate_bps = kScreenshareHighStreamMaxBitrate.bps();
@@ -416,9 +409,7 @@
layers[1].max_qp = max_qp;
layers[1].max_framerate = kDefaultVideoMaxFramerate;
layers[1].num_temporal_layers =
- temporal_layers_supported
- ? DefaultNumberOfTemporalLayers(1, true, trials)
- : 1;
+ temporal_layers_supported ? DefaultNumberOfTemporalLayers(1, true) : 1;
layers[1].min_bitrate_bps = using_boosted_bitrate
? kScreenshareHighStreamMinBitrate.bps()
: layers[0].target_bitrate_bps * 2;
diff --git a/media/engine/simulcast.h b/media/engine/simulcast.h
index 5defa52..28b0856 100644
--- a/media/engine/simulcast.h
+++ b/media/engine/simulcast.h
@@ -15,7 +15,6 @@
#include <vector>
-#include "api/transport/webrtc_key_value_config.h"
#include "api/units/data_rate.h"
#include "api/video_codecs/video_encoder_config.h"
@@ -42,8 +41,7 @@
double bitrate_priority,
int max_qp,
bool is_screenshare_with_conference_mode,
- bool temporal_layers_supported,
- const webrtc::WebRtcKeyValueConfig& trials);
+ bool temporal_layers_supported);
// Gets the simulcast config layers for a non-screensharing case.
std::vector<webrtc::VideoStream> GetNormalSimulcastLayers(
@@ -53,8 +51,7 @@
double bitrate_priority,
int max_qp,
bool temporal_layers_supported,
- bool base_heavy_tl3_rate_alloc,
- const webrtc::WebRtcKeyValueConfig& trials);
+ bool base_heavy_tl3_rate_alloc);
// Gets simulcast config layers for screenshare settings.
std::vector<webrtc::VideoStream> GetScreenshareLayers(
@@ -64,8 +61,7 @@
double bitrate_priority,
int max_qp,
bool temporal_layers_supported,
- bool base_heavy_tl3_rate_alloc,
- const webrtc::WebRtcKeyValueConfig& trials);
+ bool base_heavy_tl3_rate_alloc);
} // namespace cricket
diff --git a/media/engine/simulcast_unittest.cc b/media/engine/simulcast_unittest.cc
index 2c72272..0ce388a 100644
--- a/media/engine/simulcast_unittest.cc
+++ b/media/engine/simulcast_unittest.cc
@@ -10,7 +10,6 @@
#include "media/engine/simulcast.h"
-#include "api/transport/field_trial_based_config.h"
#include "media/base/media_constants.h"
#include "media/engine/constants.h"
#include "test/field_trial.h"
@@ -81,13 +80,12 @@
TEST(SimulcastTest, GetConfig) {
const std::vector<VideoStream> kExpected = GetSimulcastBitrates720p();
- const FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const size_t kMaxLayers = 3;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 1280, 720, kBitratePriority, kQpMax,
- !kScreenshare, true, trials);
+ !kScreenshare, true);
EXPECT_EQ(kMaxLayers, streams.size());
EXPECT_EQ(320u, streams[0].width);
@@ -115,7 +113,6 @@
TEST(SimulcastTest, GetConfigWithBaseHeavyVP8TL3RateAllocation) {
test::ScopedFieldTrials field_trials(
"WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/");
- FieldTrialBasedConfig trials;
const std::vector<VideoStream> kExpected = GetSimulcastBitrates720p();
@@ -123,7 +120,7 @@
const size_t kMaxLayers = 3;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 1280, 720, kBitratePriority, kQpMax,
- !kScreenshare, true, trials);
+ !kScreenshare, true);
EXPECT_EQ(kExpected[0].min_bitrate_bps, streams[0].min_bitrate_bps);
EXPECT_EQ(static_cast<int>(0.4 * kExpected[0].target_bitrate_bps / 0.6),
@@ -140,10 +137,9 @@
TEST(SimulcastTest, GetConfigWithLimitedMaxLayers) {
const size_t kMinLayers = 1;
const size_t kMaxLayers = 2;
- FieldTrialBasedConfig trials;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 1280, 720, kBitratePriority, kQpMax,
- !kScreenshare, true, trials);
+ !kScreenshare, true);
EXPECT_EQ(kMaxLayers, streams.size());
EXPECT_EQ(640u, streams[0].width);
@@ -155,12 +151,11 @@
TEST(SimulcastTest, GetConfigWithLimitedMaxLayersForResolution) {
test::ScopedFieldTrials field_trials(
"WebRTC-LegacySimulcastLayerLimit/Enabled/");
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const size_t kMaxLayers = 3;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 800, 600, kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
EXPECT_EQ(2u, streams.size());
EXPECT_EQ(400u, streams[0].width);
@@ -172,12 +167,11 @@
TEST(SimulcastTest, GetConfigWithLowResolutionScreenshare) {
test::ScopedFieldTrials field_trials(
"WebRTC-LegacySimulcastLayerLimit/Enabled/");
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const size_t kMaxLayers = 3;
- std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
- kMinLayers, kMaxLayers, 100, 100, kBitratePriority, kQpMax, kScreenshare,
- true, trials);
+ std::vector<VideoStream> streams =
+ cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 100, 100,
+ kBitratePriority, kQpMax, kScreenshare, true);
// Simulcast streams number is never decreased for screenshare,
// even for very low resolution.
@@ -187,12 +181,11 @@
TEST(SimulcastTest, GetConfigWithNotLimitedMaxLayersForResolution) {
test::ScopedFieldTrials field_trials(
"WebRTC-LegacySimulcastLayerLimit/Disabled/");
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const size_t kMaxLayers = 3;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 800, 600, kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
EXPECT_EQ(kMaxLayers, streams.size());
EXPECT_EQ(200u, streams[0].width);
@@ -204,12 +197,11 @@
}
TEST(SimulcastTest, GetConfigWithNormalizedResolution) {
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const size_t kMaxLayers = 2;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 640 + 1, 360 + 1, kBitratePriority, kQpMax,
- !kScreenshare, true, trials);
+ !kScreenshare, true);
// Must be divisible by |2 ^ (num_layers - 1)|.
EXPECT_EQ(kMaxLayers, streams.size());
@@ -222,13 +214,12 @@
TEST(SimulcastTest, GetConfigWithNormalizedResolutionDivisibleBy4) {
test::ScopedFieldTrials field_trials(
"WebRTC-NormalizeSimulcastResolution/Enabled-2/");
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const size_t kMaxLayers = 2;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 709, 501, kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
// Must be divisible by |2 ^ 2|.
EXPECT_EQ(kMaxLayers, streams.size());
@@ -241,13 +232,12 @@
TEST(SimulcastTest, GetConfigWithNormalizedResolutionDivisibleBy8) {
test::ScopedFieldTrials field_trials(
"WebRTC-NormalizeSimulcastResolution/Enabled-3/");
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const size_t kMaxLayers = 2;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 709, 501, kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
// Must be divisible by |2 ^ 3|.
EXPECT_EQ(kMaxLayers, streams.size());
@@ -260,56 +250,53 @@
TEST(SimulcastTest, GetConfigForLegacyLayerLimit) {
test::ScopedFieldTrials field_trials(
"WebRTC-LegacySimulcastLayerLimit/Enabled/");
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const int kMaxLayers = 3;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 320, 180, kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
EXPECT_EQ(1u, streams.size());
streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 640, 360,
kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
EXPECT_EQ(2u, streams.size());
streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 1920, 1080,
kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
EXPECT_EQ(3u, streams.size());
}
TEST(SimulcastTest, GetConfigForLegacyLayerLimitWithRequiredHD) {
test::ScopedFieldTrials field_trials(
"WebRTC-LegacySimulcastLayerLimit/Enabled/");
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 3; // "HD" layer must be present!
const int kMaxLayers = 3;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 320, 180, kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
EXPECT_EQ(3u, streams.size());
streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 640, 360,
kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
EXPECT_EQ(3u, streams.size());
streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 1920, 1080,
kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
EXPECT_EQ(3u, streams.size());
}
TEST(SimulcastTest, GetConfigForScreenshareSimulcast) {
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const size_t kMaxLayers = 3;
- std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
- kMinLayers, kMaxLayers, 1400, 800, kBitratePriority, kQpMax, kScreenshare,
- true, trials);
+ std::vector<VideoStream> streams =
+ cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 1400, 800,
+ kBitratePriority, kQpMax, kScreenshare, true);
EXPECT_GT(streams.size(), 1u);
for (size_t i = 0; i < streams.size(); ++i) {
@@ -326,12 +313,11 @@
}
TEST(SimulcastTest, GetConfigForScreenshareSimulcastWithLimitedMaxLayers) {
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const size_t kMaxLayers = 1;
- std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
- kMinLayers, kMaxLayers, 1400, 800, kBitratePriority, kQpMax, kScreenshare,
- true, trials);
+ std::vector<VideoStream> streams =
+ cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 1400, 800,
+ kBitratePriority, kQpMax, kScreenshare, true);
EXPECT_EQ(kMaxLayers, streams.size());
}
@@ -340,23 +326,22 @@
constexpr int kScreenshareHighStreamMinBitrateBps = 600000;
constexpr int kScreenshareHighStreamMaxBitrateBps = 1250000;
constexpr int kMaxBitrate960_540 = 1200000;
- FieldTrialBasedConfig trials;
// Normal case, max bitrate not limited by resolution.
const size_t kMinLayers = 1;
const size_t kMaxLayers = 2;
- std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
- kMinLayers, kMaxLayers, 1920, 1080, kBitratePriority, kQpMax,
- kScreenshare, true, trials);
+ std::vector<VideoStream> streams =
+ cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 1920, 1080,
+ kBitratePriority, kQpMax, kScreenshare, true);
EXPECT_EQ(kMaxLayers, streams.size());
EXPECT_EQ(streams[1].max_bitrate_bps, kScreenshareHighStreamMaxBitrateBps);
EXPECT_EQ(streams[1].min_bitrate_bps, kScreenshareHighStreamMinBitrateBps);
EXPECT_GE(streams[1].max_bitrate_bps, streams[1].min_bitrate_bps);
// At 960x540, the max bitrate is limited to 900kbps.
- streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 960, 540,
- kBitratePriority, kQpMax, kScreenshare,
- true, trials);
+ streams =
+ cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 960, 540,
+ kBitratePriority, kQpMax, kScreenshare, true);
EXPECT_EQ(kMaxLayers, streams.size());
EXPECT_EQ(streams[1].max_bitrate_bps, kMaxBitrate960_540);
EXPECT_EQ(streams[1].min_bitrate_bps, kScreenshareHighStreamMinBitrateBps);
@@ -364,9 +349,9 @@
// At 480x270, the max bitrate is limited to 450kbps. This is lower than
// the min bitrate, so use that as a lower bound.
- streams = cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 480, 270,
- kBitratePriority, kQpMax, kScreenshare,
- true, trials);
+ streams =
+ cricket::GetSimulcastConfig(kMinLayers, kMaxLayers, 480, 270,
+ kBitratePriority, kQpMax, kScreenshare, true);
EXPECT_EQ(kMaxLayers, streams.size());
EXPECT_EQ(streams[1].max_bitrate_bps, kScreenshareHighStreamMinBitrateBps);
EXPECT_EQ(streams[1].min_bitrate_bps, kScreenshareHighStreamMinBitrateBps);
@@ -374,12 +359,11 @@
}
TEST(SimulcastTest, AveragesBitratesForNonStandardResolution) {
- FieldTrialBasedConfig trials;
const size_t kMinLayers = 1;
const size_t kMaxLayers = 3;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, 900, 800, kBitratePriority, kQpMax, !kScreenshare,
- true, trials);
+ true);
EXPECT_EQ(kMaxLayers, streams.size());
EXPECT_EQ(900u, streams[2].width);
@@ -396,11 +380,10 @@
const size_t kWidth = 1280;
const size_t kHeight = 716;
const std::vector<VideoStream> kExpectedNear = GetSimulcastBitrates720p();
- FieldTrialBasedConfig trials;
std::vector<VideoStream> streams = cricket::GetSimulcastConfig(
kMinLayers, kMaxLayers, kWidth, kHeight, kBitratePriority, kQpMax,
- !kScreenshare, true, trials);
+ !kScreenshare, true);
EXPECT_EQ(kMaxLayers, streams.size());
EXPECT_EQ(kWidth, streams[2].width);
diff --git a/media/engine/webrtc_media_engine.cc b/media/engine/webrtc_media_engine.cc
index 23353ac..b026b9d 100644
--- a/media/engine/webrtc_media_engine.cc
+++ b/media/engine/webrtc_media_engine.cc
@@ -14,8 +14,8 @@
#include <utility>
#include "absl/algorithm/container.h"
-#include "absl/strings/match.h"
#include "media/engine/webrtc_voice_engine.h"
+#include "system_wrappers/include/field_trial.h"
#ifdef HAVE_WEBRTC_VIDEO
#include "media/engine/webrtc_video_engine.h"
@@ -27,27 +27,20 @@
std::unique_ptr<MediaEngineInterface> CreateMediaEngine(
MediaEngineDependencies dependencies) {
- // TODO(sprang): Make populating |dependencies.trials| mandatory and remove
- // these fallbacks.
- std::unique_ptr<webrtc::WebRtcKeyValueConfig> fallback_trials(
- dependencies.trials ? nullptr : new webrtc::FieldTrialBasedConfig());
- const webrtc::WebRtcKeyValueConfig& trials =
- dependencies.trials ? *dependencies.trials : *fallback_trials;
auto audio_engine = std::make_unique<WebRtcVoiceEngine>(
dependencies.task_queue_factory, std::move(dependencies.adm),
std::move(dependencies.audio_encoder_factory),
std::move(dependencies.audio_decoder_factory),
std::move(dependencies.audio_mixer),
- std::move(dependencies.audio_processing), trials);
+ std::move(dependencies.audio_processing));
#ifdef HAVE_WEBRTC_VIDEO
auto video_engine = std::make_unique<WebRtcVideoEngine>(
std::move(dependencies.video_encoder_factory),
- std::move(dependencies.video_decoder_factory), trials);
+ std::move(dependencies.video_decoder_factory));
#else
auto video_engine = std::make_unique<NullWebRtcVideoEngine>();
#endif
- return std::make_unique<CompositeMediaEngine>(std::move(fallback_trials),
- std::move(audio_engine),
+ return std::make_unique<CompositeMediaEngine>(std::move(audio_engine),
std::move(video_engine));
}
@@ -94,8 +87,7 @@
std::vector<webrtc::RtpExtension> FilterRtpExtensions(
const std::vector<webrtc::RtpExtension>& extensions,
bool (*supported)(absl::string_view),
- bool filter_redundant_extensions,
- const webrtc::WebRtcKeyValueConfig& trials) {
+ bool filter_redundant_extensions) {
RTC_DCHECK(ValidateRtpExtensions(extensions));
RTC_DCHECK(supported);
std::vector<webrtc::RtpExtension> result;
@@ -129,8 +121,7 @@
result.erase(it, result.end());
// Keep just the highest priority extension of any in the following lists.
- if (absl::StartsWith(trials.Lookup("WebRTC-FilterAbsSendTimeExtension"),
- "Enabled")) {
+ if (webrtc::field_trial::IsEnabled("WebRTC-FilterAbsSendTimeExtension")) {
static const char* const kBweExtensionPriorities[] = {
webrtc::RtpExtension::kTransportSequenceNumberUri,
webrtc::RtpExtension::kAbsSendTimeUri,
diff --git a/media/engine/webrtc_media_engine.h b/media/engine/webrtc_media_engine.h
index 1511d4b..dbb2a5f 100644
--- a/media/engine/webrtc_media_engine.h
+++ b/media/engine/webrtc_media_engine.h
@@ -21,7 +21,6 @@
#include "api/rtp_parameters.h"
#include "api/task_queue/task_queue_factory.h"
#include "api/transport/bitrate_settings.h"
-#include "api/transport/webrtc_key_value_config.h"
#include "api/video_codecs/video_decoder_factory.h"
#include "api/video_codecs/video_encoder_factory.h"
#include "media/base/codec.h"
@@ -49,8 +48,6 @@
std::unique_ptr<webrtc::VideoEncoderFactory> video_encoder_factory;
std::unique_ptr<webrtc::VideoDecoderFactory> video_decoder_factory;
-
- const webrtc::WebRtcKeyValueConfig* trials = nullptr;
};
// CreateMediaEngine may be called on any thread, though the engine is
@@ -69,8 +66,7 @@
std::vector<webrtc::RtpExtension> FilterRtpExtensions(
const std::vector<webrtc::RtpExtension>& extensions,
bool (*supported)(absl::string_view),
- bool filter_redundant_extensions,
- const webrtc::WebRtcKeyValueConfig& trials);
+ bool filter_redundant_extensions);
webrtc::BitrateConstraints GetBitrateConfigForCodec(const Codec& codec);
diff --git a/media/engine/webrtc_media_engine_unittest.cc b/media/engine/webrtc_media_engine_unittest.cc
index 78d13fc..005a2d4 100644
--- a/media/engine/webrtc_media_engine_unittest.cc
+++ b/media/engine/webrtc_media_engine_unittest.cc
@@ -13,7 +13,6 @@
#include <memory>
#include <utility>
-#include "api/transport/field_trial_based_config.h"
#include "media/engine/webrtc_media_engine_defaults.h"
#include "test/field_trial.h"
#include "test/gtest.h"
@@ -102,17 +101,15 @@
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_EmptyList) {
std::vector<RtpExtension> extensions;
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions1, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions1, true);
EXPECT_EQ(0u, filtered.size());
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_IncludeOnlySupported) {
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions1, false, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions1, false);
EXPECT_EQ(2u, filtered.size());
EXPECT_EQ("c", filtered[0].uri);
EXPECT_EQ("i", filtered[1].uri);
@@ -120,27 +117,24 @@
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_SortedByName_1) {
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, false, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, false);
EXPECT_EQ(12u, filtered.size());
EXPECT_TRUE(IsSorted(filtered));
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_SortedByName_2) {
std::vector<RtpExtension> extensions = MakeUniqueExtensions();
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(12u, filtered.size());
EXPECT_TRUE(IsSorted(filtered));
}
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_DontRemoveRedundant) {
std::vector<RtpExtension> extensions = MakeRedundantExtensions();
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, false, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, false);
EXPECT_EQ(12u, filtered.size());
EXPECT_TRUE(IsSorted(filtered));
EXPECT_EQ(filtered[0].uri, filtered[1].uri);
@@ -148,9 +142,8 @@
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundant) {
std::vector<RtpExtension> extensions = MakeRedundantExtensions();
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(6u, filtered.size());
EXPECT_TRUE(IsSorted(filtered));
EXPECT_NE(filtered[0].uri, filtered[1].uri);
@@ -162,9 +155,8 @@
extensions.push_back(webrtc::RtpExtension("b", 2, true));
extensions.push_back(webrtc::RtpExtension("c", 3));
extensions.push_back(webrtc::RtpExtension("b", 4));
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(3u, filtered.size());
EXPECT_TRUE(IsSorted(filtered));
EXPECT_EQ(filtered[0].uri, filtered[1].uri);
@@ -179,9 +171,8 @@
extensions.push_back(webrtc::RtpExtension("b", 2));
extensions.push_back(webrtc::RtpExtension("c", 3));
extensions.push_back(webrtc::RtpExtension("b", 4));
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(3u, filtered.size());
EXPECT_TRUE(IsSorted(filtered));
EXPECT_EQ(filtered[0].uri, filtered[1].uri);
@@ -193,7 +184,6 @@
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBwe_1) {
webrtc::test::ScopedFieldTrials override_field_trials_(
"WebRTC-FilterAbsSendTimeExtension/Enabled/");
- webrtc::FieldTrialBasedConfig trials;
std::vector<RtpExtension> extensions;
extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 3));
@@ -203,7 +193,7 @@
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1));
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(1u, filtered.size());
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
}
@@ -218,9 +208,8 @@
extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 1));
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(2u, filtered.size());
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
EXPECT_EQ(RtpExtension::kAbsSendTimeUri, filtered[1].uri);
@@ -229,7 +218,6 @@
TEST(WebRtcMediaEngineTest, FilterRtpExtensions_RemoveRedundantBweEncrypted_1) {
webrtc::test::ScopedFieldTrials override_field_trials_(
"WebRTC-FilterAbsSendTimeExtension/Enabled/");
- webrtc::FieldTrialBasedConfig trials;
std::vector<RtpExtension> extensions;
extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 3));
@@ -243,7 +231,7 @@
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 2, true));
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(2u, filtered.size());
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[1].uri);
@@ -264,9 +252,8 @@
extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumberUri, 2, true));
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(3u, filtered.size());
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[0].uri);
EXPECT_EQ(RtpExtension::kTransportSequenceNumberUri, filtered[1].uri);
@@ -279,9 +266,8 @@
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 1));
extensions.push_back(RtpExtension(RtpExtension::kAbsSendTimeUri, 14));
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 7));
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(1u, filtered.size());
EXPECT_EQ(RtpExtension::kAbsSendTimeUri, filtered[0].uri);
}
@@ -290,9 +276,8 @@
std::vector<RtpExtension> extensions;
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 2));
extensions.push_back(RtpExtension(RtpExtension::kTimestampOffsetUri, 14));
- webrtc::FieldTrialBasedConfig trials;
std::vector<webrtc::RtpExtension> filtered =
- FilterRtpExtensions(extensions, SupportedExtensions2, true, trials);
+ FilterRtpExtensions(extensions, SupportedExtensions2, true);
EXPECT_EQ(1u, filtered.size());
EXPECT_EQ(RtpExtension::kTimestampOffsetUri, filtered[0].uri);
}
@@ -300,8 +285,6 @@
TEST(WebRtcMediaEngineTest, Create) {
MediaEngineDependencies deps;
webrtc::SetMediaEngineDefaults(&deps);
- webrtc::FieldTrialBasedConfig trials;
- deps.trials = &trials;
std::unique_ptr<MediaEngineInterface> engine =
CreateMediaEngine(std::move(deps));
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index 33ea6df..fa46e92 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -40,6 +40,7 @@
#include "rtc_base/strings/string_builder.h"
#include "rtc_base/time_utils.h"
#include "rtc_base/trace_event.h"
+#include "system_wrappers/include/field_trial.h"
namespace cricket {
@@ -60,13 +61,23 @@
return nullptr;
}
-bool IsEnabled(const webrtc::WebRtcKeyValueConfig& trials,
- absl::string_view name) {
- return absl::StartsWith(trials.Lookup(name), "Enabled");
+// If this field trial is enabled, we will enable sending FlexFEC and disable
+// sending ULPFEC whenever the former has been negotiated in the SDPs.
+bool IsFlexfecFieldTrialEnabled() {
+ return webrtc::field_trial::IsEnabled("WebRTC-FlexFEC-03");
}
-void AddDefaultFeedbackParams(VideoCodec* codec,
- const webrtc::WebRtcKeyValueConfig& trials) {
+// If this field trial is enabled, the "flexfec-03" codec will be advertised
+// as being supported. This means that "flexfec-03" will appear in the default
+// SDP offer, and we therefore need to be ready to receive FlexFEC packets from
+// the remote. It also means that FlexFEC SSRCs will be generated by
+// MediaSession and added as "a=ssrc:" and "a=ssrc-group:" lines in the local
+// SDP.
+bool IsFlexfecAdvertisedFieldTrialEnabled() {
+ return webrtc::field_trial::IsEnabled("WebRTC-FlexFEC-03-Advertised");
+}
+
+void AddDefaultFeedbackParams(VideoCodec* codec) {
// Don't add any feedback params for RED and ULPFEC.
if (codec->name == kRedCodecName || codec->name == kUlpfecCodecName)
return;
@@ -80,7 +91,7 @@
codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kParamValueEmpty));
codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kRtcpFbNackParamPli));
if (codec->name == kVp8CodecName &&
- IsEnabled(trials, "WebRTC-RtcpLossNotification")) {
+ webrtc::field_trial::IsEnabled("WebRTC-RtcpLossNotification")) {
codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamLntf, kParamValueEmpty));
}
}
@@ -90,8 +101,7 @@
// codecs for recognized codecs (VP8, VP9, H264, and RED). It will also add
// default feedback params to the codecs.
std::vector<VideoCodec> AssignPayloadTypesAndDefaultCodecs(
- std::vector<webrtc::SdpVideoFormat> input_formats,
- const webrtc::WebRtcKeyValueConfig& trials) {
+ std::vector<webrtc::SdpVideoFormat> input_formats) {
if (input_formats.empty())
return std::vector<VideoCodec>();
static const int kFirstDynamicPayloadType = 96;
@@ -101,7 +111,7 @@
input_formats.push_back(webrtc::SdpVideoFormat(kRedCodecName));
input_formats.push_back(webrtc::SdpVideoFormat(kUlpfecCodecName));
- if (IsEnabled(trials, "WebRTC-FlexFEC-03-Advertised")) {
+ if (IsFlexfecAdvertisedFieldTrialEnabled()) {
webrtc::SdpVideoFormat flexfec_format(kFlexfecCodecName);
// This value is currently arbitrarily set to 10 seconds. (The unit
// is microseconds.) This parameter MUST be present in the SDP, but
@@ -115,7 +125,7 @@
for (const webrtc::SdpVideoFormat& format : input_formats) {
VideoCodec codec(format);
codec.id = payload_type;
- AddDefaultFeedbackParams(&codec, trials);
+ AddDefaultFeedbackParams(&codec);
output_codecs.push_back(codec);
// Increment payload type.
@@ -149,8 +159,7 @@
template <class T>
std::vector<VideoCodec> GetPayloadTypesAndDefaultCodecs(
const T* factory,
- bool is_decoder_factory,
- const webrtc::WebRtcKeyValueConfig& trials) {
+ bool is_decoder_factory) {
if (!factory) {
return {};
}
@@ -161,8 +170,7 @@
AddH264ConstrainedBaselineProfileToSupportedFormats(&supported_formats);
}
- return AssignPayloadTypesAndDefaultCodecs(std::move(supported_formats),
- trials);
+ return AssignPayloadTypesAndDefaultCodecs(std::move(supported_formats));
}
bool IsTemporalLayersSupported(const std::string& codec_name) {
@@ -237,9 +245,8 @@
}
// Returns true if the given codec is disallowed from doing simulcast.
-bool IsCodecDisabledForSimulcast(const std::string& codec_name,
- const webrtc::WebRtcKeyValueConfig& trials) {
- return !absl::StartsWith(trials.Lookup("WebRTC-H264Simulcast"), "Disabled")
+bool IsCodecDisabledForSimulcast(const std::string& codec_name) {
+ return !webrtc::field_trial::IsDisabled("WebRTC-H264Simulcast")
? absl::EqualsIgnoreCase(codec_name, kVp9CodecName)
: absl::EqualsIgnoreCase(codec_name, kH264CodecName) ||
absl::EqualsIgnoreCase(codec_name, kVp9CodecName);
@@ -265,11 +272,9 @@
return max_bitrate;
}
-bool GetVp9LayersFromFieldTrialGroup(
- size_t* num_spatial_layers,
- size_t* num_temporal_layers,
- const webrtc::WebRtcKeyValueConfig& trials) {
- std::string group = trials.Lookup("WebRTC-SupportVP9SVC");
+bool GetVp9LayersFromFieldTrialGroup(size_t* num_spatial_layers,
+ size_t* num_temporal_layers) {
+ std::string group = webrtc::field_trial::FindFullName("WebRTC-SupportVP9SVC");
if (group.empty())
return false;
@@ -288,21 +293,19 @@
return true;
}
-absl::optional<size_t> GetVp9SpatialLayersFromFieldTrial(
- const webrtc::WebRtcKeyValueConfig& trials) {
+absl::optional<size_t> GetVp9SpatialLayersFromFieldTrial() {
size_t num_sl;
size_t num_tl;
- if (GetVp9LayersFromFieldTrialGroup(&num_sl, &num_tl, trials)) {
+ if (GetVp9LayersFromFieldTrialGroup(&num_sl, &num_tl)) {
return num_sl;
}
return absl::nullopt;
}
-absl::optional<size_t> GetVp9TemporalLayersFromFieldTrial(
- const webrtc::WebRtcKeyValueConfig& trials) {
+absl::optional<size_t> GetVp9TemporalLayersFromFieldTrial() {
size_t num_sl;
size_t num_tl;
- if (GetVp9LayersFromFieldTrialGroup(&num_sl, &num_tl, trials)) {
+ if (GetVp9LayersFromFieldTrialGroup(&num_sl, &num_tl)) {
return num_tl;
}
return absl::nullopt;
@@ -464,14 +467,14 @@
const size_t default_num_spatial_layers =
parameters_.config.rtp.ssrcs.size();
const size_t num_spatial_layers =
- GetVp9SpatialLayersFromFieldTrial(call_->trials())
- .value_or(default_num_spatial_layers);
+ GetVp9SpatialLayersFromFieldTrial().value_or(
+ default_num_spatial_layers);
const size_t default_num_temporal_layers =
num_spatial_layers > 1 ? kConferenceDefaultNumTemporalLayers : 1;
const size_t num_temporal_layers =
- GetVp9TemporalLayersFromFieldTrial(call_->trials())
- .value_or(default_num_temporal_layers);
+ GetVp9TemporalLayersFromFieldTrial().value_or(
+ default_num_temporal_layers);
vp9_settings.numberOfSpatialLayers = std::min<unsigned char>(
num_spatial_layers, kConferenceMaxNumSpatialLayers);
@@ -493,7 +496,7 @@
{"onkeypic", webrtc::InterLayerPredMode::kOnKeyPic}});
webrtc::ParseFieldTrial(
{&interlayer_pred_experiment_enabled, &inter_layer_pred_mode},
- call_->trials().Lookup("WebRTC-Vp9InterLayerPred"));
+ webrtc::field_trial::FindFullName("WebRTC-Vp9InterLayerPred"));
if (interlayer_pred_experiment_enabled) {
vp9_settings.interLayerPred = inter_layer_pred_mode;
} else {
@@ -564,11 +567,9 @@
WebRtcVideoEngine::WebRtcVideoEngine(
std::unique_ptr<webrtc::VideoEncoderFactory> video_encoder_factory,
- std::unique_ptr<webrtc::VideoDecoderFactory> video_decoder_factory,
- const webrtc::WebRtcKeyValueConfig& trials)
+ std::unique_ptr<webrtc::VideoDecoderFactory> video_decoder_factory)
: decoder_factory_(std::move(video_decoder_factory)),
- encoder_factory_(std::move(video_encoder_factory)),
- trials_(trials) {
+ encoder_factory_(std::move(video_encoder_factory)) {
RTC_LOG(LS_INFO) << "WebRtcVideoEngine::WebRtcVideoEngine()";
}
@@ -589,12 +590,12 @@
}
std::vector<VideoCodec> WebRtcVideoEngine::send_codecs() const {
return GetPayloadTypesAndDefaultCodecs(encoder_factory_.get(),
- /*is_decoder_factory=*/false, trials_);
+ /*is_decoder_factory=*/false);
}
std::vector<VideoCodec> WebRtcVideoEngine::recv_codecs() const {
return GetPayloadTypesAndDefaultCodecs(decoder_factory_.get(),
- /*is_decoder_factory=*/true, trials_);
+ /*is_decoder_factory=*/true);
}
std::vector<webrtc::RtpHeaderExtensionCapability>
@@ -613,10 +614,11 @@
webrtc::RtpExtension::kRidUri, webrtc::RtpExtension::kRepairedRidUri}) {
result.emplace_back(uri, id++, webrtc::RtpTransceiverDirection::kSendRecv);
}
- result.emplace_back(webrtc::RtpExtension::kGenericFrameDescriptorUri00, id,
- IsEnabled(trials_, "WebRTC-GenericDescriptorAdvertised")
- ? webrtc::RtpTransceiverDirection::kSendRecv
- : webrtc::RtpTransceiverDirection::kStopped);
+ result.emplace_back(
+ webrtc::RtpExtension::kGenericFrameDescriptorUri00, id,
+ webrtc::field_trial::IsEnabled("WebRTC-GenericDescriptorAdvertised")
+ ? webrtc::RtpTransceiverDirection::kSendRecv
+ : webrtc::RtpTransceiverDirection::kStopped);
return result;
}
@@ -638,13 +640,12 @@
bitrate_allocator_factory_(bitrate_allocator_factory),
default_send_options_(options),
last_stats_log_ms_(-1),
- discard_unknown_ssrc_packets_(
- IsEnabled(call_->trials(),
- "WebRTC-Video-DiscardPacketsWithUnknownSsrc")),
+ discard_unknown_ssrc_packets_(webrtc::field_trial::IsEnabled(
+ "WebRTC-Video-DiscardPacketsWithUnknownSsrc")),
crypto_options_(crypto_options),
unknown_ssrc_packet_buffer_(
- IsEnabled(call_->trials(),
- "WebRTC-Video-BufferPacketsWithUnknownSsrc")
+ webrtc::field_trial::IsEnabled(
+ "WebRTC-Video-BufferPacketsWithUnknownSsrc")
? new UnhandledPacketsBuffer()
: nullptr) {
RTC_DCHECK(thread_checker_.IsCurrent());
@@ -652,7 +653,7 @@
rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc;
sending_ = false;
recv_codecs_ = MapCodecs(GetPayloadTypesAndDefaultCodecs(
- decoder_factory_, /*is_decoder_factory=*/true, call_->trials()));
+ decoder_factory_, /*is_decoder_factory=*/true));
recv_flexfec_payload_type_ =
recv_codecs_.empty() ? 0 : recv_codecs_.front().flexfec_payload_type;
}
@@ -746,7 +747,7 @@
}
// Never enable sending FlexFEC, unless we are in the experiment.
- if (!IsEnabled(call_->trials(), "WebRTC-FlexFEC-03")) {
+ if (!IsFlexfecFieldTrialEnabled()) {
RTC_LOG(LS_INFO) << "WebRTC-FlexFEC-03 field trial is not enabled.";
for (VideoCodecSettings& codec : negotiated_codecs)
codec.flexfec_payload_type = -1;
@@ -766,8 +767,7 @@
changed_params->extmap_allow_mixed = params.extmap_allow_mixed;
}
std::vector<webrtc::RtpExtension> filtered_extensions = FilterRtpExtensions(
- params.extensions, webrtc::RtpExtension::IsSupportedForVideo, true,
- call_->trials());
+ params.extensions, webrtc::RtpExtension::IsSupportedForVideo, true);
if (!send_rtp_extensions_ || (*send_rtp_extensions_ != filtered_extensions)) {
changed_params->rtp_header_extensions =
absl::optional<std::vector<webrtc::RtpExtension>>(filtered_extensions);
@@ -1119,8 +1119,7 @@
if (params.is_stream_active) {
const std::vector<VideoCodec> local_supported_codecs =
GetPayloadTypesAndDefaultCodecs(decoder_factory_,
- /*is_decoder_factory=*/true,
- call_->trials());
+ /*is_decoder_factory=*/true);
for (const VideoCodecSettings& mapped_codec : mapped_codecs) {
if (!FindMatchingCodec(local_supported_codecs, mapped_codec.codec)) {
RTC_LOG(LS_ERROR)
@@ -1138,8 +1137,7 @@
// Handle RTP header extensions.
std::vector<webrtc::RtpExtension> filtered_extensions = FilterRtpExtensions(
- params.extensions, webrtc::RtpExtension::IsSupportedForVideo, false,
- call_->trials());
+ params.extensions, webrtc::RtpExtension::IsSupportedForVideo, false);
if (filtered_extensions != recv_rtp_extensions_) {
changed_params->rtp_header_extensions =
absl::optional<std::vector<webrtc::RtpExtension>>(filtered_extensions);
@@ -1468,7 +1466,7 @@
// TODO(brandtr): Generalize when we add support for multistream protection.
flexfec_config->payload_type = recv_flexfec_payload_type_;
- if (IsEnabled(call_->trials(), "WebRTC-FlexFEC-03-Advertised") &&
+ if (IsFlexfecAdvertisedFieldTrialEnabled() &&
sp.GetFecFrSsrc(ssrc, &flexfec_config->remote_ssrc)) {
flexfec_config->protected_media_ssrcs = {ssrc};
flexfec_config->local_ssrc = config->rtp.local_ssrc;
@@ -1701,7 +1699,7 @@
int delivery_packet_error_cnt = 0;
webrtc::PacketReceiver* receiver = this->call_->Receiver();
unknown_ssrc_packet_buffer_->BackfillPackets(
- ssrcs, [&](uint32_t /*ssrc*/, int64_t packet_time_us,
+ ssrcs, [&](uint32_t ssrc, int64_t packet_time_us,
rtc::CopyOnWriteBuffer packet) {
switch (receiver->DeliverPacket(webrtc::MediaType::VIDEO, packet,
packet_time_us)) {
@@ -1762,7 +1760,7 @@
// which case that is used as UDP recevie buffer size. All other values shall
// result in the default value being used.
const std::string group_name_recv_buf_size =
- call_->trials().Lookup("WebRTC-IncreasedReceivebuffers");
+ webrtc::field_trial::FindFullName("WebRTC-IncreasedReceivebuffers");
int recv_buffer_size = kVideoRtpRecvBufferSize;
if (!group_name_recv_buf_size.empty() &&
(sscanf(group_name_recv_buf_size.c_str(), "%d", &recv_buffer_size) != 1 ||
@@ -1780,7 +1778,7 @@
// due to lack of socket buffer space, although it's not yet clear what the
// ideal value should be.
const std::string group_name_send_buf_size =
- call_->trials().Lookup("WebRTC-SendBufferSizeBytes");
+ webrtc::field_trial::FindFullName("WebRTC-SendBufferSizeBytes");
int send_buffer_size = kVideoRtpSendBufferSize;
if (!group_name_send_buf_size.empty() &&
(sscanf(group_name_send_buf_size.c_str(), "%d", &send_buffer_size) != 1 ||
@@ -1963,8 +1961,8 @@
parameters_(std::move(config), options, max_bitrate_bps, codec_settings),
rtp_parameters_(CreateRtpParametersWithEncodings(sp)),
sending_(false),
- disable_automatic_resize_(
- IsEnabled(call->trials(), "WebRTC-Video-DisableAutomaticResize")) {
+ disable_automatic_resize_(webrtc::field_trial::IsEnabled(
+ "WebRTC-Video-DisableAutomaticResize")) {
// Maximum packet size may come in RtpConfig from external transport, for
// example from QuicTransportInterface implementation, so do not exceed
// given max_packet_size.
@@ -1985,7 +1983,7 @@
// FlexFEC SSRCs.
// TODO(brandtr): This code needs to be generalized when we add support for
// multistream protection.
- if (IsEnabled(call_->trials(), "WebRTC-FlexFEC-03")) {
+ if (IsFlexfecFieldTrialEnabled()) {
uint32_t flexfec_ssrc;
bool flexfec_enabled = false;
for (uint32_t primary_ssrc : parameters_.config.rtp.ssrcs) {
@@ -2090,7 +2088,8 @@
webrtc::VideoTrackInterface::ContentHint::kText) {
degradation_preference =
webrtc::DegradationPreference::MAINTAIN_RESOLUTION;
- } else if (IsEnabled(call_->trials(), "WebRTC-Video-BalancedDegradation")) {
+ } else if (webrtc::field_trial::IsEnabled(
+ "WebRTC-Video-BalancedDegradation")) {
// Standard wants balanced by default, but it needs to be tuned first.
degradation_preference = webrtc::DegradationPreference::BALANCED;
} else {
@@ -2341,7 +2340,7 @@
// or a screencast (and not in simulcast screenshare experiment), only
// configure a single stream.
encoder_config.number_of_streams = parameters_.config.rtp.ssrcs.size();
- if (IsCodecDisabledForSimulcast(codec.name, call_->trials())) {
+ if (IsCodecDisabledForSimulcast(codec.name)) {
encoder_config.number_of_streams = 1;
}
@@ -2936,7 +2935,8 @@
MaybeAssociateFlexfecWithVideo();
stream_->Start();
- if (IsEnabled(call_->trials(), "WebRTC-Video-BufferPacketsWithUnknownSsrc")) {
+ if (webrtc::field_trial::IsEnabled(
+ "WebRTC-Video-BufferPacketsWithUnknownSsrc")) {
channel_->BackfillBufferedPackets(stream_params_.ssrcs);
}
}
@@ -3387,18 +3387,15 @@
// TODO(bugs.webrtc.org/8785): Consider removing max_qp as member of
// EncoderStreamFactory and instead set this value individually for each stream
// in the VideoEncoderConfig.simulcast_layers.
-EncoderStreamFactory::EncoderStreamFactory(
- std::string codec_name,
- int max_qp,
- bool is_screenshare,
- bool conference_mode,
- const webrtc::WebRtcKeyValueConfig* trials)
+EncoderStreamFactory::EncoderStreamFactory(std::string codec_name,
+ int max_qp,
+ bool is_screenshare,
+ bool conference_mode)
: codec_name_(codec_name),
max_qp_(max_qp),
is_screenshare_(is_screenshare),
- conference_mode_(conference_mode),
- trials_(trials ? *trials : fallback_trials_) {}
+ conference_mode_(conference_mode) {}
std::vector<webrtc::VideoStream> EncoderStreamFactory::CreateEncoderStreams(
int width,
@@ -3520,7 +3517,7 @@
encoder_config.number_of_streams, width, height,
encoder_config.bitrate_priority, max_qp_,
is_screenshare_ && conference_mode_,
- temporal_layers_supported, trials_);
+ temporal_layers_supported);
// Allow an experiment to override the minimum bitrate for the lowest
// spatial layer. The experiment's configuration has the lowest priority.
if (experimental_min_bitrate) {
diff --git a/media/engine/webrtc_video_engine.h b/media/engine/webrtc_video_engine.h
index 40b3b9a..3705ebf 100644
--- a/media/engine/webrtc_video_engine.h
+++ b/media/engine/webrtc_video_engine.h
@@ -19,7 +19,6 @@
#include "absl/types/optional.h"
#include "api/call/transport.h"
-#include "api/transport/field_trial_based_config.h"
#include "api/video/video_bitrate_allocator_factory.h"
#include "api/video/video_frame.h"
#include "api/video/video_sink_interface.h"
@@ -99,8 +98,7 @@
// and external hardware codecs.
WebRtcVideoEngine(
std::unique_ptr<webrtc::VideoEncoderFactory> video_encoder_factory,
- std::unique_ptr<webrtc::VideoDecoderFactory> video_decoder_factory,
- const webrtc::WebRtcKeyValueConfig& trials);
+ std::unique_ptr<webrtc::VideoDecoderFactory> video_decoder_factory);
~WebRtcVideoEngine() override;
@@ -122,7 +120,6 @@
const std::unique_ptr<webrtc::VideoEncoderFactory> encoder_factory_;
const std::unique_ptr<webrtc::VideoBitrateAllocatorFactory>
bitrate_allocator_factory_;
- const webrtc::WebRtcKeyValueConfig& trials_;
};
class WebRtcVideoChannel : public VideoMediaChannel,
@@ -569,7 +566,7 @@
void FillSendAndReceiveCodecStats(VideoMediaInfo* video_media_info)
RTC_EXCLUSIVE_LOCKS_REQUIRED(thread_checker_);
- rtc::Thread* const worker_thread_;
+ rtc::Thread* worker_thread_;
rtc::ThreadChecker thread_checker_;
uint32_t rtcp_receiver_report_ssrc_ RTC_GUARDED_BY(thread_checker_);
@@ -654,18 +651,7 @@
EncoderStreamFactory(std::string codec_name,
int max_qp,
bool is_screenshare,
- bool conference_mode)
- : EncoderStreamFactory(codec_name,
- max_qp,
- is_screenshare,
- conference_mode,
- nullptr) {}
-
- EncoderStreamFactory(std::string codec_name,
- int max_qp,
- bool is_screenshare,
- bool conference_mode,
- const webrtc::WebRtcKeyValueConfig* trials);
+ bool conference_mode);
private:
std::vector<webrtc::VideoStream> CreateEncoderStreams(
@@ -692,8 +678,6 @@
// Allows a screenshare specific configuration, which enables temporal
// layering and various settings.
const bool conference_mode_;
- const webrtc::FieldTrialBasedConfig fallback_trials_;
- const webrtc::WebRtcKeyValueConfig& trials_;
};
} // namespace cricket
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index 9353f19..6d2e971 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -257,8 +257,7 @@
engine_(std::unique_ptr<cricket::FakeWebRtcVideoEncoderFactory>(
encoder_factory_),
std::unique_ptr<cricket::FakeWebRtcVideoDecoderFactory>(
- decoder_factory_),
- field_trials_) {
+ decoder_factory_)) {
// Ensure fake clock doesn't return 0, which will cause some initializations
// fail inside RTP senders.
fake_clock_.AdvanceTime(webrtc::TimeDelta::Micros(1));
@@ -1044,9 +1043,8 @@
TEST(WebRtcVideoEngineNewVideoCodecFactoryTest, NullFactories) {
std::unique_ptr<webrtc::VideoEncoderFactory> encoder_factory;
std::unique_ptr<webrtc::VideoDecoderFactory> decoder_factory;
- webrtc::FieldTrialBasedConfig trials;
WebRtcVideoEngine engine(std::move(encoder_factory),
- std::move(decoder_factory), trials);
+ std::move(decoder_factory));
EXPECT_EQ(0u, engine.send_codecs().size());
EXPECT_EQ(0u, engine.recv_codecs().size());
}
@@ -1057,10 +1055,9 @@
new webrtc::MockVideoEncoderFactory();
webrtc::MockVideoDecoderFactory* decoder_factory =
new webrtc::MockVideoDecoderFactory();
- webrtc::FieldTrialBasedConfig trials;
WebRtcVideoEngine engine(
(std::unique_ptr<webrtc::VideoEncoderFactory>(encoder_factory)),
- (std::unique_ptr<webrtc::VideoDecoderFactory>(decoder_factory)), trials);
+ (std::unique_ptr<webrtc::VideoDecoderFactory>(decoder_factory)));
// TODO(kron): Change to Times(1) once send and receive codecs are changed
// to be treated independently.
EXPECT_CALL(*encoder_factory, GetSupportedFormats()).Times(1);
@@ -1088,10 +1085,9 @@
webrtc::kVideoCodecVP8)))
.WillOnce(
[] { return std::make_unique<webrtc::MockVideoBitrateAllocator>(); });
- webrtc::FieldTrialBasedConfig trials;
WebRtcVideoEngine engine(
(std::unique_ptr<webrtc::VideoEncoderFactory>(encoder_factory)),
- (std::unique_ptr<webrtc::VideoDecoderFactory>(decoder_factory)), trials);
+ (std::unique_ptr<webrtc::VideoDecoderFactory>(decoder_factory)));
const webrtc::SdpVideoFormat vp8_format("VP8");
const std::vector<webrtc::SdpVideoFormat> supported_formats = {vp8_format};
EXPECT_CALL(*encoder_factory, GetSupportedFormats())
@@ -1208,10 +1204,9 @@
std::unique_ptr<webrtc::MockVideoBitrateAllocatorFactory>
rate_allocator_factory =
std::make_unique<webrtc::MockVideoBitrateAllocatorFactory>();
- webrtc::FieldTrialBasedConfig trials;
WebRtcVideoEngine engine(
(std::unique_ptr<webrtc::VideoEncoderFactory>(encoder_factory)),
- (std::unique_ptr<webrtc::VideoDecoderFactory>(decoder_factory)), trials);
+ (std::unique_ptr<webrtc::VideoDecoderFactory>(decoder_factory)));
const webrtc::SdpVideoFormat vp8_format("VP8");
const std::vector<webrtc::SdpVideoFormat> supported_formats = {vp8_format};
EXPECT_CALL(*encoder_factory, GetSupportedFormats())
@@ -1329,8 +1324,7 @@
webrtc::CreateBuiltinVideoEncoderFactory(),
std::make_unique<webrtc::test::FunctionVideoDecoderFactory>(
[]() { return std::make_unique<webrtc::test::FakeDecoder>(); },
- kSdpVideoFormats),
- field_trials_),
+ kSdpVideoFormats)),
channel_(absl::WrapUnique(static_cast<cricket::WebRtcVideoChannel*>(
engine_.CreateMediaChannel(
call_.get(),
@@ -1462,8 +1456,7 @@
video_bitrate_allocator_factory_(
webrtc::CreateBuiltinVideoBitrateAllocatorFactory()),
engine_(webrtc::CreateBuiltinVideoEncoderFactory(),
- webrtc::CreateBuiltinVideoDecoderFactory(),
- field_trials_) {}
+ webrtc::CreateBuiltinVideoDecoderFactory()) {}
virtual void SetUp() {
// One testcase calls SetUp in a loop, only create call_ once.
@@ -8162,8 +8155,7 @@
engine_(std::unique_ptr<cricket::FakeWebRtcVideoEncoderFactory>(
encoder_factory_),
std::unique_ptr<cricket::FakeWebRtcVideoDecoderFactory>(
- decoder_factory_),
- field_trials_),
+ decoder_factory_)),
last_ssrc_(0) {}
void SetUp() override {
@@ -8223,7 +8215,7 @@
expected_streams = GetSimulcastConfig(
/*min_layers=*/1, num_configured_streams, capture_width,
capture_height, webrtc::kDefaultBitratePriority, kDefaultQpMax,
- screenshare && conference_mode, true, field_trials_);
+ screenshare && conference_mode, true);
if (screenshare && conference_mode) {
for (const webrtc::VideoStream& stream : expected_streams) {
// Never scale screen content.
@@ -8324,7 +8316,6 @@
cricket::FakeWebRtcVideoDecoderFactory* decoder_factory_;
std::unique_ptr<webrtc::MockVideoBitrateAllocatorFactory>
mock_rate_allocator_factory_;
- webrtc::FieldTrialBasedConfig field_trials_;
WebRtcVideoEngine engine_;
std::unique_ptr<VideoMediaChannel> channel_;
uint32_t last_ssrc_;
diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc
index 2c9e15d..7a0192a 100644
--- a/media/engine/webrtc_voice_engine.cc
+++ b/media/engine/webrtc_voice_engine.cc
@@ -20,7 +20,6 @@
#include "absl/strings/match.h"
#include "api/audio_codecs/audio_codec_pair_id.h"
#include "api/call/audio_sink.h"
-#include "api/transport/webrtc_key_value_config.h"
#include "media/base/audio_source.h"
#include "media/base/media_constants.h"
#include "media/base/stream_params.h"
@@ -46,6 +45,7 @@
#include "rtc_base/strings/string_format.h"
#include "rtc_base/third_party/base64/base64.h"
#include "rtc_base/trace_event.h"
+#include "system_wrappers/include/field_trial.h"
#include "system_wrappers/include/metrics.h"
#if WEBRTC_ENABLE_PROTOBUF
@@ -111,6 +111,12 @@
return ss.Release();
}
+// If this field trial is enabled, we will negotiate and use RFC 2198
+// redundancy for opus audio.
+bool IsAudioRedForOpusFieldTrialEnabled() {
+ return webrtc::field_trial::IsEnabled("WebRTC-Audio-Red-For-Opus");
+}
+
bool IsCodec(const AudioCodec& codec, const char* ref_name) {
return absl::EqualsIgnoreCase(codec.name, ref_name);
}
@@ -197,11 +203,6 @@
}
}
-bool IsEnabled(const webrtc::WebRtcKeyValueConfig& config,
- absl::string_view trial) {
- return absl::StartsWith(config.Lookup(trial), "Enabled");
-}
-
struct AdaptivePtimeConfig {
bool enabled = false;
webrtc::DataRate min_payload_bitrate = webrtc::DataRate::KilobitsPerSec(16);
@@ -218,8 +219,9 @@
"use_slow_adaptation", &use_slow_adaptation);
}
- explicit AdaptivePtimeConfig(const webrtc::WebRtcKeyValueConfig& trials) {
- Parser()->Parse(trials.Lookup("WebRTC-Audio-AdaptivePtime"));
+ AdaptivePtimeConfig() {
+ Parser()->Parse(
+ webrtc::field_trial::FindFullName("WebRTC-Audio-AdaptivePtime"));
#if WEBRTC_ENABLE_PROTOBUF
webrtc::audio_network_adaptor::config::ControllerManager config;
auto* frame_length_controller =
@@ -241,18 +243,13 @@
const rtc::scoped_refptr<webrtc::AudioEncoderFactory>& encoder_factory,
const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory,
rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer,
- rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing,
- const webrtc::WebRtcKeyValueConfig& trials)
+ rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing)
: task_queue_factory_(task_queue_factory),
adm_(adm),
encoder_factory_(encoder_factory),
decoder_factory_(decoder_factory),
audio_mixer_(audio_mixer),
- apm_(audio_processing),
- audio_red_for_opus_trial_enabled_(
- IsEnabled(trials, "WebRTC-Audio-Red-For-Opus")),
- minimized_remsampling_on_mobile_trial_enabled_(
- IsEnabled(trials, "WebRTC-Audio-MinimizeResamplingOnMobile")) {
+ apm_(audio_processing) {
// This may be called from any thread, so detach thread checkers.
worker_thread_checker_.Detach();
signal_thread_checker_.Detach();
@@ -418,7 +415,8 @@
// performed inside the audio processing module on mobile platforms by
// whenever possible turning off the fixed AGC mode and the high-pass filter.
// (https://bugs.chromium.org/p/webrtc/issues/detail?id=6181).
- if (minimized_remsampling_on_mobile_trial_enabled_) {
+ if (webrtc::field_trial::IsEnabled(
+ "WebRTC-Audio-MinimizeResamplingOnMobile")) {
options.auto_gain_control = false;
RTC_LOG(LS_INFO) << "Disable AGC according to field trial.";
if (!(options.noise_suppression.value_or(false) ||
@@ -724,7 +722,8 @@
out.push_back(codec);
- if (codec.name == kOpusCodecName && audio_red_for_opus_trial_enabled_) {
+ if (codec.name == kOpusCodecName &&
+ IsAudioRedForOpusFieldTrialEnabled()) {
map_format({kRedCodecName, 48000, 2}, &out);
}
}
@@ -768,8 +767,7 @@
const absl::optional<webrtc::AudioCodecPairId> codec_pair_id,
rtc::scoped_refptr<webrtc::FrameEncryptorInterface> frame_encryptor,
const webrtc::CryptoOptions& crypto_options)
- : adaptive_ptime_config_(call->trials()),
- call_(call),
+ : call_(call),
config_(send_transport),
max_send_bitrate_bps_(max_send_bitrate_bps),
rtp_parameters_(CreateRtpParametersWithOneEncoding()) {
@@ -1370,9 +1368,7 @@
engine_(engine),
call_(call),
audio_config_(config.audio),
- crypto_options_(crypto_options),
- audio_red_for_opus_trial_enabled_(
- IsEnabled(call->trials(), "WebRTC-Audio-Red-For-Opus")) {
+ crypto_options_(crypto_options) {
RTC_LOG(LS_VERBOSE) << "WebRtcVoiceMediaChannel::WebRtcVoiceMediaChannel";
RTC_DCHECK(call);
engine->RegisterChannel(this);
@@ -1419,8 +1415,7 @@
}
std::vector<webrtc::RtpExtension> filtered_extensions = FilterRtpExtensions(
- params.extensions, webrtc::RtpExtension::IsSupportedForAudio, true,
- call_->trials());
+ params.extensions, webrtc::RtpExtension::IsSupportedForAudio, true);
if (send_rtp_extensions_ != filtered_extensions) {
send_rtp_extensions_.swap(filtered_extensions);
for (auto& it : send_streams_) {
@@ -1457,8 +1452,7 @@
return false;
}
std::vector<webrtc::RtpExtension> filtered_extensions = FilterRtpExtensions(
- params.extensions, webrtc::RtpExtension::IsSupportedForAudio, false,
- call_->trials());
+ params.extensions, webrtc::RtpExtension::IsSupportedForAudio, false);
if (recv_rtp_extensions_ != filtered_extensions) {
recv_rtp_extensions_.swap(filtered_extensions);
for (auto& it : recv_streams_) {
@@ -1634,7 +1628,7 @@
}
auto format = AudioCodecToSdpAudioFormat(codec);
if (!IsCodec(codec, kCnCodecName) && !IsCodec(codec, kDtmfCodecName) &&
- (!audio_red_for_opus_trial_enabled_ ||
+ (!IsAudioRedForOpusFieldTrialEnabled() ||
!IsCodec(codec, kRedCodecName)) &&
!engine()->decoder_factory_->IsSupportedDecoder(format)) {
RTC_LOG(LS_ERROR) << "Unsupported codec: " << rtc::ToString(format);
@@ -1788,7 +1782,7 @@
}
}
- if (audio_red_for_opus_trial_enabled_) {
+ if (IsAudioRedForOpusFieldTrialEnabled()) {
// Loop through the codecs to find the RED codec that matches opus
// with respect to clockrate and number of channels.
size_t red_codec_position = 0;
diff --git a/media/engine/webrtc_voice_engine.h b/media/engine/webrtc_voice_engine.h
index f805d6c..9cea318 100644
--- a/media/engine/webrtc_voice_engine.h
+++ b/media/engine/webrtc_voice_engine.h
@@ -20,7 +20,6 @@
#include "api/scoped_refptr.h"
#include "api/task_queue/task_queue_factory.h"
#include "api/transport/rtp/rtp_source.h"
-#include "api/transport/webrtc_key_value_config.h"
#include "call/audio_state.h"
#include "call/call.h"
#include "media/base/media_engine.h"
@@ -50,8 +49,7 @@
const rtc::scoped_refptr<webrtc::AudioEncoderFactory>& encoder_factory,
const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory,
rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer,
- rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing,
- const webrtc::WebRtcKeyValueConfig& trials);
+ rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing);
~WebRtcVoiceEngine() override;
// Does initialization that needs to occur on the worker thread.
@@ -129,11 +127,6 @@
int audio_jitter_buffer_min_delay_ms_ = 0;
bool audio_jitter_buffer_enable_rtx_handling_ = false;
- // If this field trial is enabled, we will negotiate and use RFC 2198
- // redundancy for opus audio.
- const bool audio_red_for_opus_trial_enabled_;
- const bool minimized_remsampling_on_mobile_trial_enabled_;
-
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(WebRtcVoiceEngine);
};
@@ -338,8 +331,6 @@
rtc::scoped_refptr<webrtc::FrameDecryptorInterface>
unsignaled_frame_decryptor_;
- const bool audio_red_for_opus_trial_enabled_;
-
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(WebRtcVoiceMediaChannel);
};
} // namespace cricket
diff --git a/media/engine/webrtc_voice_engine_unittest.cc b/media/engine/webrtc_voice_engine_unittest.cc
index b051107..518badb 100644
--- a/media/engine/webrtc_voice_engine_unittest.cc
+++ b/media/engine/webrtc_voice_engine_unittest.cc
@@ -158,12 +158,10 @@
EXPECT_CALL(*apm, DetachAecDump());
}
{
- webrtc::FieldTrialBasedConfig trials;
cricket::WebRtcVoiceEngine engine(
task_queue_factory.get(), adm,
webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm,
- trials);
+ webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
engine.Init();
}
}
@@ -212,7 +210,7 @@
auto decoder_factory = webrtc::CreateBuiltinAudioDecoderFactory();
engine_.reset(new cricket::WebRtcVoiceEngine(
task_queue_factory_.get(), adm_, encoder_factory, decoder_factory,
- nullptr, apm_, trials_config_));
+ nullptr, apm_));
engine_->Init();
send_parameters_.codecs.push_back(kPcmuCodec);
recv_parameters_.codecs.push_back(kPcmuCodec);
@@ -803,7 +801,6 @@
private:
webrtc::test::ScopedFieldTrials override_field_trials_;
- webrtc::FieldTrialBasedConfig trials_config_;
};
INSTANTIATE_TEST_SUITE_P(TestBothWithAndWithoutNullApm,
@@ -3631,15 +3628,14 @@
webrtc::test::MockAudioDeviceModule::CreateNice();
rtc::scoped_refptr<webrtc::AudioProcessing> apm =
use_null_apm ? nullptr : webrtc::AudioProcessingBuilder().Create();
- webrtc::FieldTrialBasedConfig field_trials;
cricket::WebRtcVoiceEngine engine(
task_queue_factory.get(), adm,
webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm,
- field_trials);
+ webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
engine.Init();
webrtc::RtcEventLogNull event_log;
webrtc::Call::Config call_config(&event_log);
+ webrtc::FieldTrialBasedConfig field_trials;
call_config.trials = &field_trials;
call_config.task_queue_factory = task_queue_factory.get();
auto call = absl::WrapUnique(webrtc::Call::Create(call_config));
@@ -3663,15 +3659,14 @@
{
rtc::scoped_refptr<webrtc::AudioProcessing> apm =
use_null_apm ? nullptr : webrtc::AudioProcessingBuilder().Create();
- webrtc::FieldTrialBasedConfig field_trials;
cricket::WebRtcVoiceEngine engine(
task_queue_factory.get(), adm,
webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm,
- field_trials);
+ webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
engine.Init();
webrtc::RtcEventLogNull event_log;
webrtc::Call::Config call_config(&event_log);
+ webrtc::FieldTrialBasedConfig field_trials;
call_config.trials = &field_trials;
call_config.task_queue_factory = task_queue_factory.get();
auto call = absl::WrapUnique(webrtc::Call::Create(call_config));
@@ -3697,12 +3692,10 @@
webrtc::test::MockAudioDeviceModule::CreateNice();
rtc::scoped_refptr<webrtc::AudioProcessing> apm =
use_null_apm ? nullptr : webrtc::AudioProcessingBuilder().Create();
- webrtc::FieldTrialBasedConfig field_trials;
cricket::WebRtcVoiceEngine engine(
task_queue_factory.get(), adm,
webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm,
- field_trials);
+ webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
engine.Init();
for (const cricket::AudioCodec& codec : engine.send_codecs()) {
auto is_codec = [&codec](const char* name, int clockrate = 0) {
@@ -3750,15 +3743,14 @@
webrtc::test::MockAudioDeviceModule::CreateNice();
rtc::scoped_refptr<webrtc::AudioProcessing> apm =
use_null_apm ? nullptr : webrtc::AudioProcessingBuilder().Create();
- webrtc::FieldTrialBasedConfig field_trials;
cricket::WebRtcVoiceEngine engine(
task_queue_factory.get(), adm,
webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm,
- field_trials);
+ webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
engine.Init();
webrtc::RtcEventLogNull event_log;
webrtc::Call::Config call_config(&event_log);
+ webrtc::FieldTrialBasedConfig field_trials;
call_config.trials = &field_trials;
call_config.task_queue_factory = task_queue_factory.get();
auto call = absl::WrapUnique(webrtc::Call::Create(call_config));
@@ -3799,14 +3791,14 @@
webrtc::test::MockAudioDeviceModule::CreateNice();
rtc::scoped_refptr<webrtc::AudioProcessing> apm =
use_null_apm ? nullptr : webrtc::AudioProcessingBuilder().Create();
- webrtc::FieldTrialBasedConfig field_trials;
cricket::WebRtcVoiceEngine engine(
task_queue_factory.get(), adm,
webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
- webrtc::CreateBuiltinAudioDecoderFactory(), nullptr, apm, field_trials);
+ webrtc::CreateBuiltinAudioDecoderFactory(), nullptr, apm);
engine.Init();
webrtc::RtcEventLogNull event_log;
webrtc::Call::Config call_config(&event_log);
+ webrtc::FieldTrialBasedConfig field_trials;
call_config.trials = &field_trials;
call_config.task_queue_factory = task_queue_factory.get();
auto call = absl::WrapUnique(webrtc::Call::Create(call_config));
@@ -3851,10 +3843,9 @@
rtc::scoped_refptr<webrtc::AudioProcessing> apm =
use_null_apm ? nullptr : webrtc::AudioProcessingBuilder().Create();
- webrtc::FieldTrialBasedConfig field_trials;
- cricket::WebRtcVoiceEngine engine(
- task_queue_factory.get(), adm, unused_encoder_factory,
- mock_decoder_factory, nullptr, apm, field_trials);
+ cricket::WebRtcVoiceEngine engine(task_queue_factory.get(), adm,
+ unused_encoder_factory,
+ mock_decoder_factory, nullptr, apm);
engine.Init();
auto codecs = engine.recv_codecs();
EXPECT_EQ(11u, codecs.size());
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 310363c..e98200a 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -759,7 +759,6 @@
"../../api:array_view",
"../../api:videocodec_test_fixture_api",
"../../api/test/video:function_video_factory",
- "../../api/transport:field_trial_based_config",
"../../api/video:video_bitrate_allocation",
"../../api/video_codecs:video_codecs_api",
"../../call:video_stream_api",
diff --git a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
index aa3ffed..ee6301b 100644
--- a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
+++ b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
@@ -22,7 +22,6 @@
#include "absl/types/optional.h"
#include "api/array_view.h"
-#include "api/transport/field_trial_based_config.h"
#include "api/video/video_bitrate_allocation.h"
#include "api/video_codecs/sdp_video_format.h"
#include "api/video_codecs/video_codec.h"
@@ -62,11 +61,10 @@
const int kMaxQp = 56;
void ConfigureSimulcast(VideoCodec* codec_settings) {
- FieldTrialBasedConfig trials;
const std::vector<webrtc::VideoStream> streams = cricket::GetSimulcastConfig(
/*min_layer=*/1, codec_settings->numberOfSimulcastStreams,
codec_settings->width, codec_settings->height, kBitratePriority, kMaxQp,
- /* is_screenshare = */ false, true, trials);
+ /* is_screenshare = */ false, true);
for (size_t i = 0; i < streams.size(); ++i) {
SpatialLayer* ss = &codec_settings->simulcastStream[i];
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 2c4d6f4..dd35de0 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -584,7 +584,6 @@
"../api/rtc_event_log",
"../api/rtc_event_log:rtc_event_log_factory",
"../api/task_queue:default_task_queue_factory",
- "../api/transport:field_trial_based_config",
"../api/transport/rtp:rtp_source",
"../api/units:time_delta",
"../api/video:builtin_video_bitrate_allocator_factory",
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index 913fe1d..36dc5b2 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -58,6 +58,7 @@
#include "rtc_base/strings/string_builder.h"
#include "rtc_base/trace_event.h"
#include "system_wrappers/include/clock.h"
+#include "system_wrappers/include/field_trial.h"
#include "system_wrappers/include/metrics.h"
using cricket::ContentInfo;
@@ -4343,9 +4344,7 @@
bool PeerConnection::StartRtcEventLog(
std::unique_ptr<RtcEventLogOutput> output) {
int64_t output_period_ms = webrtc::RtcEventLog::kImmediateOutput;
- if (absl::StartsWith(
- call_ptr_->trials().Lookup("WebRTC-RtcEventLogNewFormat"),
- "Enabled")) {
+ if (field_trial::IsEnabled("WebRTC-RtcEventLogNewFormat")) {
output_period_ms = 5000;
}
return StartRtcEventLog(std::move(output), output_period_ms);
@@ -5788,8 +5787,9 @@
// by experiment.
if (configuration.disable_ipv6) {
port_allocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
- } else if (absl::StartsWith(call_ptr_->trials().Lookup("WebRTC-IPv6Default"),
- "Disabled")) {
+ } else if (absl::StartsWith(
+ webrtc::field_trial::FindFullName("WebRTC-IPv6Default"),
+ "Disabled")) {
port_allocator_flags &= ~(cricket::PORTALLOCATOR_ENABLE_IPV6);
}
diff --git a/pc/peer_connection_factory.h b/pc/peer_connection_factory.h
index 552d5ab..8e7a2e2 100644
--- a/pc/peer_connection_factory.h
+++ b/pc/peer_connection_factory.h
@@ -87,8 +87,6 @@
const Options& options() const { return options_; }
- const WebRtcKeyValueConfig& trials() const { return *trials_.get(); }
-
protected:
// This structure allows simple management of all new dependencies being added
// to the PeerConnectionFactory.
diff --git a/pc/peer_connection_integrationtest.cc b/pc/peer_connection_integrationtest.cc
index 4b098e1..f38ad23 100644
--- a/pc/peer_connection_integrationtest.cc
+++ b/pc/peer_connection_integrationtest.cc
@@ -28,7 +28,6 @@
#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "api/rtp_receiver_interface.h"
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/transport/field_trial_based_config.h"
#include "api/uma_metrics.h"
#include "api/video_codecs/sdp_video_format.h"
#include "call/call.h"
@@ -634,7 +633,6 @@
pc_factory_dependencies.signaling_thread = signaling_thread;
pc_factory_dependencies.task_queue_factory =
webrtc::CreateDefaultTaskQueueFactory();
- pc_factory_dependencies.trials = std::make_unique<FieldTrialBasedConfig>();
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory =
pc_factory_dependencies.task_queue_factory.get();
@@ -654,8 +652,6 @@
media_deps.audio_processing = AudioProcessingBuilderForTesting().Create();
}
- media_deps.trials = pc_factory_dependencies.trials.get();
-
pc_factory_dependencies.media_engine =
cricket::CreateMediaEngine(std::move(media_deps));
pc_factory_dependencies.call_factory = webrtc::CreateCallFactory();
diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc
index 1092876..046d1c9 100644
--- a/pc/peer_connection_interface_unittest.cc
+++ b/pc/peer_connection_interface_unittest.cc
@@ -43,7 +43,6 @@
#include "api/rtp_transceiver_interface.h"
#include "api/scoped_refptr.h"
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/transport/field_trial_based_config.h"
#include "api/video_codecs/builtin_video_decoder_factory.h"
#include "api/video_codecs/builtin_video_encoder_factory.h"
#include "api/video_codecs/video_decoder_factory.h"
@@ -647,14 +646,12 @@
dependencies.network_thread = rtc::Thread::Current();
dependencies.signaling_thread = rtc::Thread::Current();
dependencies.task_queue_factory = CreateDefaultTaskQueueFactory();
- dependencies.trials = std::make_unique<FieldTrialBasedConfig>();
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory = dependencies.task_queue_factory.get();
// Use fake audio device module since we're only testing the interface
// level, and using a real one could make tests flaky when run in parallel.
media_deps.adm = FakeAudioCaptureModule::Create();
SetMediaEngineDefaults(&media_deps);
- media_deps.trials = dependencies.trials.get();
dependencies.media_engine =
cricket::CreateMediaEngine(std::move(media_deps));
dependencies.call_factory = webrtc::CreateCallFactory();
diff --git a/pc/peer_connection_jsep_unittest.cc b/pc/peer_connection_jsep_unittest.cc
index ba51214..4d9884d 100644
--- a/pc/peer_connection_jsep_unittest.cc
+++ b/pc/peer_connection_jsep_unittest.cc
@@ -11,7 +11,6 @@
#include <memory>
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/transport/field_trial_based_config.h"
#include "media/engine/webrtc_media_engine.h"
#include "media/engine/webrtc_media_engine_defaults.h"
#include "pc/media_session.h"
@@ -48,11 +47,9 @@
dependencies.network_thread = rtc::Thread::Current();
dependencies.signaling_thread = rtc::Thread::Current();
dependencies.task_queue_factory = CreateDefaultTaskQueueFactory();
- dependencies.trials = std::make_unique<FieldTrialBasedConfig>();
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory = dependencies.task_queue_factory.get();
media_deps.adm = FakeAudioCaptureModule::Create();
- media_deps.trials = dependencies.trials.get();
SetMediaEngineDefaults(&media_deps);
dependencies.media_engine = cricket::CreateMediaEngine(std::move(media_deps));
dependencies.call_factory = CreateCallFactory();
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index d2ee7b5..289536e 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -973,7 +973,6 @@
"../api/crypto:frame_encryptor_interface",
"../api/rtc_event_log:rtc_event_log_factory",
"../api/task_queue:default_task_queue_factory",
- "../api/transport:field_trial_based_config",
"../api/video:video_frame",
"../api/video:video_rtp_headers",
"../api/video_codecs:video_codecs_api",
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
index e466f99..3fa5159 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
@@ -37,7 +37,6 @@
#include "api/audio_codecs/builtin_audio_encoder_factory.h" // nogncheck
#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/transport/field_trial_based_config.h"
#include "modules/audio_device/include/audio_device.h" // nogncheck
#include "modules/audio_processing/include/audio_processing.h" // nogncheck
@@ -191,7 +190,6 @@
}
#ifndef HAVE_NO_MEDIA
dependencies.task_queue_factory = webrtc::CreateDefaultTaskQueueFactory();
- dependencies.trials = std::make_unique<webrtc::FieldTrialBasedConfig>();
cricket::MediaEngineDependencies media_deps;
media_deps.adm = std::move(audioDeviceModule);
media_deps.task_queue_factory = dependencies.task_queue_factory.get();
@@ -204,7 +202,6 @@
} else {
media_deps.audio_processing = webrtc::AudioProcessingBuilder().Create();
}
- media_deps.trials = dependencies.trials.get();
dependencies.media_engine = cricket::CreateMediaEngine(std::move(media_deps));
dependencies.call_factory = webrtc::CreateCallFactory();
dependencies.event_log_factory =
diff --git a/test/network/BUILD.gn b/test/network/BUILD.gn
index 71d0533..058f473 100644
--- a/test/network/BUILD.gn
+++ b/test/network/BUILD.gn
@@ -93,7 +93,6 @@
"../../api:simulated_network_api",
"../../api/rtc_event_log:rtc_event_log_factory",
"../../api/task_queue:default_task_queue_factory",
- "../../api/transport:field_trial_based_config",
"../../call:simulated_network",
"../../media:rtc_audio_video",
"../../media:rtc_media_engine_defaults",
diff --git a/test/network/network_emulation_pc_unittest.cc b/test/network/network_emulation_pc_unittest.cc
index 3d0140f..e04da34 100644
--- a/test/network/network_emulation_pc_unittest.cc
+++ b/test/network/network_emulation_pc_unittest.cc
@@ -16,7 +16,6 @@
#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "api/scoped_refptr.h"
#include "api/task_queue/default_task_queue_factory.h"
-#include "api/transport/field_trial_based_config.h"
#include "call/simulated_network.h"
#include "media/engine/webrtc_media_engine.h"
#include "media/engine/webrtc_media_engine_defaults.h"
@@ -60,7 +59,6 @@
std::make_unique<RtcEventLogFactory>(pcf_deps.task_queue_factory.get());
pcf_deps.network_thread = network_thread;
pcf_deps.signaling_thread = signaling_thread;
- pcf_deps.trials = std::make_unique<FieldTrialBasedConfig>();
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory = pcf_deps.task_queue_factory.get();
media_deps.adm = TestAudioDeviceModule::Create(
@@ -69,7 +67,6 @@
kSamplingFrequency),
TestAudioDeviceModule::CreateDiscardRenderer(kSamplingFrequency),
/*speed=*/1.f);
- media_deps.trials = pcf_deps.trials.get();
SetMediaEngineDefaults(&media_deps);
pcf_deps.media_engine = cricket::CreateMediaEngine(std::move(media_deps));
return CreateModularPeerConnectionFactory(std::move(pcf_deps));
diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index 2f8d403..fbcaa35 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -58,7 +58,6 @@
"../../../api/rtc_event_log",
"../../../api/task_queue",
"../../../api/transport:network_control",
- "../../../api/transport:webrtc_key_value_config",
"../../../api/video_codecs:video_codecs_api",
"../../../rtc_base",
]
@@ -270,7 +269,6 @@
"../../../api:time_controller",
"../../../api/rtc_event_log:rtc_event_log_factory",
"../../../api/task_queue:default_task_queue_factory",
- "../../../api/transport:field_trial_based_config",
"../../../api/video_codecs:builtin_video_decoder_factory",
"../../../api/video_codecs:builtin_video_encoder_factory",
"../../../media:rtc_audio_video",
diff --git a/test/pc/e2e/peer_connection_quality_test_params.h b/test/pc/e2e/peer_connection_quality_test_params.h
index e1c0232..edefc7a 100644
--- a/test/pc/e2e/peer_connection_quality_test_params.h
+++ b/test/pc/e2e/peer_connection_quality_test_params.h
@@ -21,7 +21,6 @@
#include "api/task_queue/task_queue_factory.h"
#include "api/test/peerconnection_quality_test_fixture.h"
#include "api/transport/network_control.h"
-#include "api/transport/webrtc_key_value_config.h"
#include "api/video_codecs/video_decoder_factory.h"
#include "api/video_codecs/video_encoder_factory.h"
#include "rtc_base/network.h"
@@ -53,8 +52,6 @@
// PeerConnectionFactory.
std::unique_ptr<VideoEncoderFactory> video_encoder_factory;
std::unique_ptr<VideoDecoderFactory> video_decoder_factory;
-
- std::unique_ptr<WebRtcKeyValueConfig> trials;
};
// Contains most parts from PeerConnectionDependencies. Also all fields are
diff --git a/test/pc/e2e/test_peer_factory.cc b/test/pc/e2e/test_peer_factory.cc
index eceec77..634a37e9 100644
--- a/test/pc/e2e/test_peer_factory.cc
+++ b/test/pc/e2e/test_peer_factory.cc
@@ -16,7 +16,6 @@
#include "api/task_queue/default_task_queue_factory.h"
#include "api/test/create_time_controller.h"
#include "api/test/time_controller.h"
-#include "api/transport/field_trial_based_config.h"
#include "api/video_codecs/builtin_video_decoder_factory.h"
#include "api/video_codecs/builtin_video_encoder_factory.h"
#include "media/engine/webrtc_media_engine.h"
@@ -65,10 +64,6 @@
std::make_unique<RtcEventLogFactory>(
components->pcf_dependencies->task_queue_factory.get());
}
- if (!components->pcf_dependencies->trials) {
- components->pcf_dependencies->trials =
- std::make_unique<FieldTrialBasedConfig>();
- }
}
// Returns mapping from stream label to optional spatial index.
@@ -178,9 +173,6 @@
media_deps.video_decoder_factory =
std::move(pcf_dependencies->video_decoder_factory);
webrtc::SetMediaEngineDefaults(&media_deps);
- RTC_DCHECK(pcf_dependencies->trials);
- media_deps.trials = pcf_dependencies->trials.get();
-
return cricket::CreateMediaEngine(std::move(media_deps));
}
@@ -246,9 +238,6 @@
if (pcf_dependencies->neteq_factory != nullptr) {
pcf_deps.neteq_factory = std::move(pcf_dependencies->neteq_factory);
}
- if (pcf_dependencies->trials != nullptr) {
- pcf_deps.trials = std::move(pcf_dependencies->trials);
- }
return pcf_deps;
}
diff --git a/test/peer_scenario/BUILD.gn b/test/peer_scenario/BUILD.gn
index 70a7471..bdc77b7 100644
--- a/test/peer_scenario/BUILD.gn
+++ b/test/peer_scenario/BUILD.gn
@@ -37,7 +37,6 @@
"../../api/audio_codecs:builtin_audio_encoder_factory",
"../../api/rtc_event_log:rtc_event_log_factory",
"../../api/task_queue:default_task_queue_factory",
- "../../api/transport:field_trial_based_config",
"../../api/video_codecs:builtin_video_decoder_factory",
"../../api/video_codecs:builtin_video_encoder_factory",
"../../media:rtc_audio_video",
diff --git a/test/peer_scenario/peer_scenario_client.cc b/test/peer_scenario/peer_scenario_client.cc
index 681a907..1ced030 100644
--- a/test/peer_scenario/peer_scenario_client.cc
+++ b/test/peer_scenario/peer_scenario_client.cc
@@ -18,7 +18,6 @@
#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "api/task_queue/default_task_queue_factory.h"
#include "api/test/create_time_controller.h"
-#include "api/transport/field_trial_based_config.h"
#include "api/video_codecs/builtin_video_decoder_factory.h"
#include "api/video_codecs/builtin_video_encoder_factory.h"
#include "media/engine/webrtc_media_engine.h"
@@ -198,7 +197,6 @@
net->time_controller()->CreateTaskQueueFactory();
pcf_deps.event_log_factory =
std::make_unique<RtcEventLogFactory>(task_queue_factory_);
- pcf_deps.trials = std::make_unique<FieldTrialBasedConfig>();
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory = task_queue_factory_;
@@ -223,7 +221,6 @@
}
media_deps.audio_encoder_factory = CreateBuiltinAudioEncoderFactory();
media_deps.audio_decoder_factory = CreateBuiltinAudioDecoderFactory();
- media_deps.trials = pcf_deps.trials.get();
pcf_deps.media_engine = cricket::CreateMediaEngine(std::move(media_deps));
pcf_deps.fec_controller_factory = nullptr;