WebRTC-DeprecateGlobalFieldTrialString/Enabled/ - part 5/inf

Add field trials to audio api.

It is added as a pointer with nullptr as default.
It is not (yet) used anywhere.
Usage of field trials comes in subsequent patches.

Bug: webrtc:10335
Change-Id: Icbe22d95c356a6fefde34590f11ea63f005ab09e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/255521
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36213}
diff --git a/api/audio_codecs/BUILD.gn b/api/audio_codecs/BUILD.gn
index 5926f5e..3c84af8 100644
--- a/api/audio_codecs/BUILD.gn
+++ b/api/audio_codecs/BUILD.gn
@@ -32,6 +32,7 @@
     "..:array_view",
     "..:bitrate_allocation",
     "..:scoped_refptr",
+    "../../api:webrtc_key_value_config",
     "../../rtc_base:checks",
     "../../rtc_base:rtc_base_approved",
     "../../rtc_base:sanitizer",
diff --git a/api/audio_codecs/L16/BUILD.gn b/api/audio_codecs/L16/BUILD.gn
index 1f7a1e5..9e4a0f1 100644
--- a/api/audio_codecs/L16/BUILD.gn
+++ b/api/audio_codecs/L16/BUILD.gn
@@ -21,6 +21,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:pcm16b",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base:safe_minmax",
@@ -41,6 +42,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:pcm16b",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
diff --git a/api/audio_codecs/L16/audio_decoder_L16.cc b/api/audio_codecs/L16/audio_decoder_L16.cc
index 93863f1..874a8a5 100644
--- a/api/audio_codecs/L16/audio_decoder_L16.cc
+++ b/api/audio_codecs/L16/audio_decoder_L16.cc
@@ -37,7 +37,8 @@
 
 std::unique_ptr<AudioDecoder> AudioDecoderL16::MakeAudioDecoder(
     const Config& config,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   if (!config.IsOk()) {
     return nullptr;
   }
diff --git a/api/audio_codecs/L16/audio_decoder_L16.h b/api/audio_codecs/L16/audio_decoder_L16.h
index 581a5b8..ade8f98 100644
--- a/api/audio_codecs/L16/audio_decoder_L16.h
+++ b/api/audio_codecs/L16/audio_decoder_L16.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -39,7 +40,8 @@
   static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* specs);
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       const Config& config,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/L16/audio_encoder_L16.cc b/api/audio_codecs/L16/audio_encoder_L16.cc
index 590d3e3..3994f5c 100644
--- a/api/audio_codecs/L16/audio_encoder_L16.cc
+++ b/api/audio_codecs/L16/audio_encoder_L16.cc
@@ -59,7 +59,8 @@
 std::unique_ptr<AudioEncoder> AudioEncoderL16::MakeAudioEncoder(
     const AudioEncoderL16::Config& config,
     int payload_type,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   AudioEncoderPcm16B::Config c;
   c.sample_rate_hz = config.sample_rate_hz;
   c.num_channels = config.num_channels;
diff --git a/api/audio_codecs/L16/audio_encoder_L16.h b/api/audio_codecs/L16/audio_encoder_L16.h
index 25d2211..e0916df 100644
--- a/api/audio_codecs/L16/audio_encoder_L16.h
+++ b/api/audio_codecs/L16/audio_encoder_L16.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -44,7 +45,8 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       const Config& config,
       int payload_type,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/audio_decoder_factory_template.h b/api/audio_codecs/audio_decoder_factory_template.h
index 976f9c6..4badd82 100644
--- a/api/audio_codecs/audio_decoder_factory_template.h
+++ b/api/audio_codecs/audio_decoder_factory_template.h
@@ -16,6 +16,7 @@
 
 #include "api/audio_codecs/audio_decoder_factory.h"
 #include "api/scoped_refptr.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
@@ -32,7 +33,8 @@
   static bool IsSupportedDecoder(const SdpAudioFormat& format) { return false; }
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       const SdpAudioFormat& format,
-      absl::optional<AudioCodecPairId> codec_pair_id) {
+      absl::optional<AudioCodecPairId> codec_pair_id,
+      const WebRtcKeyValueConfig* field_trials) {
     return nullptr;
   }
 };
@@ -55,16 +57,22 @@
   }
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       const SdpAudioFormat& format,
-      absl::optional<AudioCodecPairId> codec_pair_id) {
+      absl::optional<AudioCodecPairId> codec_pair_id,
+      const WebRtcKeyValueConfig* field_trials) {
     auto opt_config = T::SdpToConfig(format);
     return opt_config ? T::MakeAudioDecoder(*opt_config, codec_pair_id)
-                      : Helper<Ts...>::MakeAudioDecoder(format, codec_pair_id);
+                      : Helper<Ts...>::MakeAudioDecoder(format, codec_pair_id,
+                                                        field_trials);
   }
 };
 
 template <typename... Ts>
 class AudioDecoderFactoryT : public AudioDecoderFactory {
  public:
+  explicit AudioDecoderFactoryT(const WebRtcKeyValueConfig* field_trials) {
+    field_trials_ = field_trials;
+  }
+
   std::vector<AudioCodecSpec> GetSupportedDecoders() override {
     std::vector<AudioCodecSpec> specs;
     Helper<Ts...>::AppendSupportedDecoders(&specs);
@@ -78,8 +86,11 @@
   std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       const SdpAudioFormat& format,
       absl::optional<AudioCodecPairId> codec_pair_id) override {
-    return Helper<Ts...>::MakeAudioDecoder(format, codec_pair_id);
+    return Helper<Ts...>::MakeAudioDecoder(format, codec_pair_id,
+                                           field_trials_);
   }
+
+  const WebRtcKeyValueConfig* field_trials_;
 };
 
 }  // namespace audio_decoder_factory_template_impl
@@ -115,7 +126,8 @@
 // TODO(kwiberg): Point at CreateBuiltinAudioDecoderFactory() for an example of
 // how it is used.
 template <typename... Ts>
-rtc::scoped_refptr<AudioDecoderFactory> CreateAudioDecoderFactory() {
+rtc::scoped_refptr<AudioDecoderFactory> CreateAudioDecoderFactory(
+    const WebRtcKeyValueConfig* field_trials = nullptr) {
   // There's no technical reason we couldn't allow zero template parameters,
   // but such a factory couldn't create any decoders, and callers can do this
   // by mistake by simply forgetting the <> altogether. So we forbid it in
@@ -124,7 +136,8 @@
                 "Caller must give at least one template parameter");
 
   return rtc::make_ref_counted<
-      audio_decoder_factory_template_impl::AudioDecoderFactoryT<Ts...>>();
+      audio_decoder_factory_template_impl::AudioDecoderFactoryT<Ts...>>(
+      field_trials);
 }
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/audio_encoder_factory_template.h b/api/audio_codecs/audio_encoder_factory_template.h
index 4dc0672..ceefab2 100644
--- a/api/audio_codecs/audio_encoder_factory_template.h
+++ b/api/audio_codecs/audio_encoder_factory_template.h
@@ -16,6 +16,7 @@
 
 #include "api/audio_codecs/audio_encoder_factory.h"
 #include "api/scoped_refptr.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
@@ -36,7 +37,8 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       int payload_type,
       const SdpAudioFormat& format,
-      absl::optional<AudioCodecPairId> codec_pair_id) {
+      absl::optional<AudioCodecPairId> codec_pair_id,
+      const WebRtcKeyValueConfig* field_trials) {
     return nullptr;
   }
 };
@@ -63,13 +65,14 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       int payload_type,
       const SdpAudioFormat& format,
-      absl::optional<AudioCodecPairId> codec_pair_id) {
+      absl::optional<AudioCodecPairId> codec_pair_id,
+      const WebRtcKeyValueConfig* field_trials) {
     auto opt_config = T::SdpToConfig(format);
     if (opt_config) {
       return T::MakeAudioEncoder(*opt_config, payload_type, codec_pair_id);
     } else {
       return Helper<Ts...>::MakeAudioEncoder(payload_type, format,
-                                             codec_pair_id);
+                                             codec_pair_id, field_trials);
     }
   }
 };
@@ -77,6 +80,10 @@
 template <typename... Ts>
 class AudioEncoderFactoryT : public AudioEncoderFactory {
  public:
+  explicit AudioEncoderFactoryT(const WebRtcKeyValueConfig* field_trials) {
+    field_trials_ = field_trials;
+  }
+
   std::vector<AudioCodecSpec> GetSupportedEncoders() override {
     std::vector<AudioCodecSpec> specs;
     Helper<Ts...>::AppendSupportedEncoders(&specs);
@@ -92,8 +99,11 @@
       int payload_type,
       const SdpAudioFormat& format,
       absl::optional<AudioCodecPairId> codec_pair_id) override {
-    return Helper<Ts...>::MakeAudioEncoder(payload_type, format, codec_pair_id);
+    return Helper<Ts...>::MakeAudioEncoder(payload_type, format, codec_pair_id,
+                                           field_trials_);
   }
+
+  const WebRtcKeyValueConfig* field_trials_;
 };
 
 }  // namespace audio_encoder_factory_template_impl
@@ -134,7 +144,8 @@
 // TODO(kwiberg): Point at CreateBuiltinAudioEncoderFactory() for an example of
 // how it is used.
 template <typename... Ts>
-rtc::scoped_refptr<AudioEncoderFactory> CreateAudioEncoderFactory() {
+rtc::scoped_refptr<AudioEncoderFactory> CreateAudioEncoderFactory(
+    const WebRtcKeyValueConfig* field_trials = nullptr) {
   // There's no technical reason we couldn't allow zero template parameters,
   // but such a factory couldn't create any encoders, and callers can do this
   // by mistake by simply forgetting the <> altogether. So we forbid it in
@@ -143,7 +154,8 @@
                 "Caller must give at least one template parameter");
 
   return rtc::make_ref_counted<
-      audio_encoder_factory_template_impl::AudioEncoderFactoryT<Ts...>>();
+      audio_encoder_factory_template_impl::AudioEncoderFactoryT<Ts...>>(
+      field_trials);
 }
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/builtin_audio_encoder_factory.cc b/api/audio_codecs/builtin_audio_encoder_factory.cc
index 99fac09..4433893 100644
--- a/api/audio_codecs/builtin_audio_encoder_factory.cc
+++ b/api/audio_codecs/builtin_audio_encoder_factory.cc
@@ -47,8 +47,10 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       const Config& config,
       int payload_type,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt) {
-    return T::MakeAudioEncoder(config, payload_type, codec_pair_id);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr) {
+    return T::MakeAudioEncoder(config, payload_type, codec_pair_id,
+                               field_trials);
   }
 };
 
diff --git a/api/audio_codecs/g711/BUILD.gn b/api/audio_codecs/g711/BUILD.gn
index 92d77be..1f0b7df 100644
--- a/api/audio_codecs/g711/BUILD.gn
+++ b/api/audio_codecs/g711/BUILD.gn
@@ -21,6 +21,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:g711",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base:safe_minmax",
@@ -41,6 +42,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:g711",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
diff --git a/api/audio_codecs/g711/audio_decoder_g711.cc b/api/audio_codecs/g711/audio_decoder_g711.cc
index f3d3378..b34b464 100644
--- a/api/audio_codecs/g711/audio_decoder_g711.cc
+++ b/api/audio_codecs/g711/audio_decoder_g711.cc
@@ -47,7 +47,8 @@
 
 std::unique_ptr<AudioDecoder> AudioDecoderG711::MakeAudioDecoder(
     const Config& config,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/g711/audio_decoder_g711.h b/api/audio_codecs/g711/audio_decoder_g711.h
index 18c15a8..62b0f88 100644
--- a/api/audio_codecs/g711/audio_decoder_g711.h
+++ b/api/audio_codecs/g711/audio_decoder_g711.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -39,7 +40,8 @@
   static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* specs);
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       const Config& config,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/g711/audio_encoder_g711.cc b/api/audio_codecs/g711/audio_encoder_g711.cc
index 4c1ce0f..8c60304 100644
--- a/api/audio_codecs/g711/audio_encoder_g711.cc
+++ b/api/audio_codecs/g711/audio_encoder_g711.cc
@@ -64,7 +64,8 @@
 std::unique_ptr<AudioEncoder> AudioEncoderG711::MakeAudioEncoder(
     const Config& config,
     int payload_type,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/g711/audio_encoder_g711.h b/api/audio_codecs/g711/audio_encoder_g711.h
index 29fe38f..c2750e2 100644
--- a/api/audio_codecs/g711/audio_encoder_g711.h
+++ b/api/audio_codecs/g711/audio_encoder_g711.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -44,7 +45,8 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       const Config& config,
       int payload_type,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/g722/BUILD.gn b/api/audio_codecs/g722/BUILD.gn
index a186eab..fbce2c5 100644
--- a/api/audio_codecs/g722/BUILD.gn
+++ b/api/audio_codecs/g722/BUILD.gn
@@ -27,6 +27,7 @@
   deps = [
     ":audio_encoder_g722_config",
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:g722",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base:safe_minmax",
@@ -47,6 +48,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:g722",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
diff --git a/api/audio_codecs/g722/audio_decoder_g722.cc b/api/audio_codecs/g722/audio_decoder_g722.cc
index 0049e5a..8f3a5c0 100644
--- a/api/audio_codecs/g722/audio_decoder_g722.cc
+++ b/api/audio_codecs/g722/audio_decoder_g722.cc
@@ -36,7 +36,8 @@
 
 std::unique_ptr<AudioDecoder> AudioDecoderG722::MakeAudioDecoder(
     Config config,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/g722/audio_decoder_g722.h b/api/audio_codecs/g722/audio_decoder_g722.h
index 2a67492..05e6130 100644
--- a/api/audio_codecs/g722/audio_decoder_g722.h
+++ b/api/audio_codecs/g722/audio_decoder_g722.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -33,7 +34,8 @@
   static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* specs);
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       Config config,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/g722/audio_encoder_g722.cc b/api/audio_codecs/g722/audio_encoder_g722.cc
index 66cf9e1..812d66f 100644
--- a/api/audio_codecs/g722/audio_encoder_g722.cc
+++ b/api/audio_codecs/g722/audio_encoder_g722.cc
@@ -62,7 +62,8 @@
 std::unique_ptr<AudioEncoder> AudioEncoderG722::MakeAudioEncoder(
     const AudioEncoderG722Config& config,
     int payload_type,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/g722/audio_encoder_g722.h b/api/audio_codecs/g722/audio_encoder_g722.h
index 327c0af..14ddff7 100644
--- a/api/audio_codecs/g722/audio_encoder_g722.h
+++ b/api/audio_codecs/g722/audio_encoder_g722.h
@@ -19,6 +19,7 @@
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/audio_codecs/g722/audio_encoder_g722_config.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -34,7 +35,8 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       const AudioEncoderG722Config& config,
       int payload_type,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/ilbc/BUILD.gn b/api/audio_codecs/ilbc/BUILD.gn
index b6a5045..1cac7ed 100644
--- a/api/audio_codecs/ilbc/BUILD.gn
+++ b/api/audio_codecs/ilbc/BUILD.gn
@@ -27,6 +27,7 @@
   deps = [
     ":audio_encoder_ilbc_config",
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:ilbc",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base:safe_minmax",
@@ -46,6 +47,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:ilbc",
     "../../../rtc_base:rtc_base_approved",
   ]
diff --git a/api/audio_codecs/ilbc/audio_decoder_ilbc.cc b/api/audio_codecs/ilbc/audio_decoder_ilbc.cc
index 237cef2..9a291ee 100644
--- a/api/audio_codecs/ilbc/audio_decoder_ilbc.cc
+++ b/api/audio_codecs/ilbc/audio_decoder_ilbc.cc
@@ -34,7 +34,8 @@
 
 std::unique_ptr<AudioDecoder> AudioDecoderIlbc::MakeAudioDecoder(
     Config config,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   return std::make_unique<AudioDecoderIlbcImpl>();
 }
 
diff --git a/api/audio_codecs/ilbc/audio_decoder_ilbc.h b/api/audio_codecs/ilbc/audio_decoder_ilbc.h
index 9ab8479..4d9a4b7 100644
--- a/api/audio_codecs/ilbc/audio_decoder_ilbc.h
+++ b/api/audio_codecs/ilbc/audio_decoder_ilbc.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 
 namespace webrtc {
 
@@ -29,7 +30,8 @@
   static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* specs);
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       Config config,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/ilbc/audio_encoder_ilbc.cc b/api/audio_codecs/ilbc/audio_encoder_ilbc.cc
index 52ba8f6..6525887 100644
--- a/api/audio_codecs/ilbc/audio_encoder_ilbc.cc
+++ b/api/audio_codecs/ilbc/audio_encoder_ilbc.cc
@@ -76,7 +76,8 @@
 std::unique_ptr<AudioEncoder> AudioEncoderIlbc::MakeAudioEncoder(
     const AudioEncoderIlbcConfig& config,
     int payload_type,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/ilbc/audio_encoder_ilbc.h b/api/audio_codecs/ilbc/audio_encoder_ilbc.h
index e4aeca7..8dd4928 100644
--- a/api/audio_codecs/ilbc/audio_encoder_ilbc.h
+++ b/api/audio_codecs/ilbc/audio_encoder_ilbc.h
@@ -19,6 +19,7 @@
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/audio_codecs/ilbc/audio_encoder_ilbc_config.h"
+#include "api/webrtc_key_value_config.h"
 
 namespace webrtc {
 
@@ -33,7 +34,8 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       const AudioEncoderIlbcConfig& config,
       int payload_type,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/isac/BUILD.gn b/api/audio_codecs/isac/BUILD.gn
index 6ff6e5f..b6aa810 100644
--- a/api/audio_codecs/isac/BUILD.gn
+++ b/api/audio_codecs/isac/BUILD.gn
@@ -65,6 +65,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:isac_fix",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -84,6 +85,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:isac_fix",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -103,6 +105,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:isac",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -122,6 +125,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:isac",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
diff --git a/api/audio_codecs/isac/audio_decoder_isac_fix.cc b/api/audio_codecs/isac/audio_decoder_isac_fix.cc
index 305e15a..8927a16 100644
--- a/api/audio_codecs/isac/audio_decoder_isac_fix.cc
+++ b/api/audio_codecs/isac/audio_decoder_isac_fix.cc
@@ -33,7 +33,8 @@
 
 std::unique_ptr<AudioDecoder> AudioDecoderIsacFix::MakeAudioDecoder(
     Config config,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   AudioDecoderIsacFixImpl::Config c;
   c.sample_rate_hz = 16000;
   return std::make_unique<AudioDecoderIsacFixImpl>(c);
diff --git a/api/audio_codecs/isac/audio_decoder_isac_fix.h b/api/audio_codecs/isac/audio_decoder_isac_fix.h
index 200914a..11b8766 100644
--- a/api/audio_codecs/isac/audio_decoder_isac_fix.h
+++ b/api/audio_codecs/isac/audio_decoder_isac_fix.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -30,7 +31,8 @@
   static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* specs);
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       Config config,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/isac/audio_decoder_isac_float.cc b/api/audio_codecs/isac/audio_decoder_isac_float.cc
index 683eb6c..ef27293 100644
--- a/api/audio_codecs/isac/audio_decoder_isac_float.cc
+++ b/api/audio_codecs/isac/audio_decoder_isac_float.cc
@@ -42,7 +42,8 @@
 
 std::unique_ptr<AudioDecoder> AudioDecoderIsacFloat::MakeAudioDecoder(
     Config config,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   AudioDecoderIsacFloatImpl::Config c;
   c.sample_rate_hz = config.sample_rate_hz;
   if (!config.IsOk()) {
diff --git a/api/audio_codecs/isac/audio_decoder_isac_float.h b/api/audio_codecs/isac/audio_decoder_isac_float.h
index e78f8b8..501edfc 100644
--- a/api/audio_codecs/isac/audio_decoder_isac_float.h
+++ b/api/audio_codecs/isac/audio_decoder_isac_float.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -35,7 +36,8 @@
   static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* specs);
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       Config config,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/isac/audio_encoder_isac_fix.cc b/api/audio_codecs/isac/audio_encoder_isac_fix.cc
index b590be1..65a2d8f 100644
--- a/api/audio_codecs/isac/audio_encoder_isac_fix.cc
+++ b/api/audio_codecs/isac/audio_encoder_isac_fix.cc
@@ -56,7 +56,8 @@
 std::unique_ptr<AudioEncoder> AudioEncoderIsacFix::MakeAudioEncoder(
     AudioEncoderIsacFix::Config config,
     int payload_type,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   AudioEncoderIsacFixImpl::Config c;
   c.frame_size_ms = config.frame_size_ms;
   c.bit_rate = config.bit_rate;
diff --git a/api/audio_codecs/isac/audio_encoder_isac_fix.h b/api/audio_codecs/isac/audio_encoder_isac_fix.h
index e50d9f5..e8ff0fc 100644
--- a/api/audio_codecs/isac/audio_encoder_isac_fix.h
+++ b/api/audio_codecs/isac/audio_encoder_isac_fix.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -44,7 +45,8 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       Config config,
       int payload_type,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/isac/audio_encoder_isac_float.cc b/api/audio_codecs/isac/audio_encoder_isac_float.cc
index e2afeae..852cb69 100644
--- a/api/audio_codecs/isac/audio_encoder_isac_float.cc
+++ b/api/audio_codecs/isac/audio_encoder_isac_float.cc
@@ -68,7 +68,8 @@
 std::unique_ptr<AudioEncoder> AudioEncoderIsacFloat::MakeAudioEncoder(
     const AudioEncoderIsacFloat::Config& config,
     int payload_type,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   AudioEncoderIsacFloatImpl::Config c;
   c.payload_type = payload_type;
   c.sample_rate_hz = config.sample_rate_hz;
diff --git a/api/audio_codecs/isac/audio_encoder_isac_float.h b/api/audio_codecs/isac/audio_encoder_isac_float.h
index 0cb9c17..8e1d505 100644
--- a/api/audio_codecs/isac/audio_encoder_isac_float.h
+++ b/api/audio_codecs/isac/audio_encoder_isac_float.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -58,7 +59,8 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       const Config& config,
       int payload_type,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus/BUILD.gn b/api/audio_codecs/opus/BUILD.gn
index 586e9b3..fbb116b 100644
--- a/api/audio_codecs/opus/BUILD.gn
+++ b/api/audio_codecs/opus/BUILD.gn
@@ -46,6 +46,7 @@
   deps = [
     ":audio_encoder_opus_config",
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:webrtc_opus",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -65,6 +66,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:webrtc_opus",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -82,6 +84,7 @@
   sources = [ "audio_encoder_multi_channel_opus.cc" ]
   deps = [
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:webrtc_multiopus",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -100,6 +103,7 @@
   deps = [
     ":audio_decoder_opus_config",
     "..:audio_codecs_api",
+    "../../../api:webrtc_key_value_config",
     "../../../modules/audio_coding:webrtc_multiopus",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
diff --git a/api/audio_codecs/opus/audio_decoder_multi_channel_opus.cc b/api/audio_codecs/opus/audio_decoder_multi_channel_opus.cc
index 6ba2b6d..5a0b794 100644
--- a/api/audio_codecs/opus/audio_decoder_multi_channel_opus.cc
+++ b/api/audio_codecs/opus/audio_decoder_multi_channel_opus.cc
@@ -64,7 +64,8 @@
 
 std::unique_ptr<AudioDecoder> AudioDecoderMultiChannelOpus::MakeAudioDecoder(
     AudioDecoderMultiChannelOpusConfig config,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   return AudioDecoderMultiChannelOpusImpl::MakeAudioDecoder(config);
 }
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus/audio_decoder_multi_channel_opus.h b/api/audio_codecs/opus/audio_decoder_multi_channel_opus.h
index b5ca0fe..2dcd26b 100644
--- a/api/audio_codecs/opus/audio_decoder_multi_channel_opus.h
+++ b/api/audio_codecs/opus/audio_decoder_multi_channel_opus.h
@@ -19,6 +19,7 @@
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/audio_codecs/opus/audio_decoder_multi_channel_opus_config.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -32,7 +33,8 @@
   static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* specs);
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       AudioDecoderMultiChannelOpusConfig config,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus/audio_decoder_opus.cc b/api/audio_codecs/opus/audio_decoder_opus.cc
index 7e0d88b..0fe3367 100644
--- a/api/audio_codecs/opus/audio_decoder_opus.cc
+++ b/api/audio_codecs/opus/audio_decoder_opus.cc
@@ -73,7 +73,8 @@
 
 std::unique_ptr<AudioDecoder> AudioDecoderOpus::MakeAudioDecoder(
     Config config,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/opus/audio_decoder_opus.h b/api/audio_codecs/opus/audio_decoder_opus.h
index ec0f61d..4e44309 100644
--- a/api/audio_codecs/opus/audio_decoder_opus.h
+++ b/api/audio_codecs/opus/audio_decoder_opus.h
@@ -18,6 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -34,7 +35,8 @@
   static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* specs);
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       Config config,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus/audio_encoder_multi_channel_opus.cc b/api/audio_codecs/opus/audio_encoder_multi_channel_opus.cc
index 758eaae..b71a000 100644
--- a/api/audio_codecs/opus/audio_encoder_multi_channel_opus.cc
+++ b/api/audio_codecs/opus/audio_encoder_multi_channel_opus.cc
@@ -66,7 +66,8 @@
 std::unique_ptr<AudioEncoder> AudioEncoderMultiChannelOpus::MakeAudioEncoder(
     const AudioEncoderMultiChannelOpusConfig& config,
     int payload_type,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   return AudioEncoderMultiChannelOpusImpl::MakeAudioEncoder(config,
                                                             payload_type);
 }
diff --git a/api/audio_codecs/opus/audio_encoder_multi_channel_opus.h b/api/audio_codecs/opus/audio_encoder_multi_channel_opus.h
index 977a3a4..58b959a 100644
--- a/api/audio_codecs/opus/audio_encoder_multi_channel_opus.h
+++ b/api/audio_codecs/opus/audio_encoder_multi_channel_opus.h
@@ -19,6 +19,7 @@
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/audio_codecs/opus/audio_encoder_multi_channel_opus_config.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -33,7 +34,8 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       const Config& config,
       int payload_type,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus/audio_encoder_opus.cc b/api/audio_codecs/opus/audio_encoder_opus.cc
index 6d950c5..26fe8cc 100644
--- a/api/audio_codecs/opus/audio_encoder_opus.cc
+++ b/api/audio_codecs/opus/audio_encoder_opus.cc
@@ -32,7 +32,8 @@
 std::unique_ptr<AudioEncoder> AudioEncoderOpus::MakeAudioEncoder(
     const AudioEncoderOpusConfig& config,
     int payload_type,
-    absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
+    absl::optional<AudioCodecPairId> /*codec_pair_id*/,
+    const WebRtcKeyValueConfig* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/opus/audio_encoder_opus.h b/api/audio_codecs/opus/audio_encoder_opus.h
index 03cb0d6..4fb0337 100644
--- a/api/audio_codecs/opus/audio_encoder_opus.h
+++ b/api/audio_codecs/opus/audio_encoder_opus.h
@@ -19,6 +19,7 @@
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/audio_codecs/opus/audio_encoder_opus_config.h"
+#include "api/webrtc_key_value_config.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -34,7 +35,8 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       const AudioEncoderOpusConfig& config,
       int payload_type,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus_audio_encoder_factory.cc b/api/audio_codecs/opus_audio_encoder_factory.cc
index 5f0c714..867d200 100644
--- a/api/audio_codecs/opus_audio_encoder_factory.cc
+++ b/api/audio_codecs/opus_audio_encoder_factory.cc
@@ -37,8 +37,10 @@
   static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
       const Config& config,
       int payload_type,
-      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt) {
-    return T::MakeAudioEncoder(config, payload_type, codec_pair_id);
+      absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
+      const WebRtcKeyValueConfig* field_trials = nullptr) {
+    return T::MakeAudioEncoder(config, payload_type, codec_pair_id,
+                               field_trials);
   }
 };
 
diff --git a/api/audio_codecs/test/BUILD.gn b/api/audio_codecs/test/BUILD.gn
index 575f062..dabcc3d 100644
--- a/api/audio_codecs/test/BUILD.gn
+++ b/api/audio_codecs/test/BUILD.gn
@@ -23,6 +23,7 @@
       "..:audio_codecs_api",
       "../../../rtc_base:rtc_base_approved",
       "../../../test:audio_codec_mocks",
+      "../../../test:scoped_key_value_config",
       "../../../test:test_support",
       "../L16:audio_decoder_L16",
       "../L16:audio_encoder_L16",
diff --git a/api/audio_codecs/test/audio_decoder_factory_template_unittest.cc b/api/audio_codecs/test/audio_decoder_factory_template_unittest.cc
index 464ecfd..3662f3b 100644
--- a/api/audio_codecs/test/audio_decoder_factory_template_unittest.cc
+++ b/api/audio_codecs/test/audio_decoder_factory_template_unittest.cc
@@ -22,6 +22,7 @@
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/mock_audio_decoder.h"
+#include "test/scoped_key_value_config.h"
 
 namespace webrtc {
 
@@ -77,9 +78,11 @@
 }  // namespace
 
 TEST(AudioDecoderFactoryTemplateTest, NoDecoderTypes) {
+  test::ScopedKeyValueConfig field_trials;
   rtc::scoped_refptr<AudioDecoderFactory> factory(
       rtc::make_ref_counted<
-          audio_decoder_factory_template_impl::AudioDecoderFactoryT<>>());
+          audio_decoder_factory_template_impl::AudioDecoderFactoryT<>>(
+          &field_trials));
   EXPECT_THAT(factory->GetSupportedDecoders(), ::testing::IsEmpty());
   EXPECT_FALSE(factory->IsSupportedDecoder({"foo", 8000, 1}));
   EXPECT_EQ(nullptr,
diff --git a/api/audio_codecs/test/audio_encoder_factory_template_unittest.cc b/api/audio_codecs/test/audio_encoder_factory_template_unittest.cc
index 110f993..67b6883 100644
--- a/api/audio_codecs/test/audio_encoder_factory_template_unittest.cc
+++ b/api/audio_codecs/test/audio_encoder_factory_template_unittest.cc
@@ -22,6 +22,7 @@
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/mock_audio_encoder.h"
+#include "test/scoped_key_value_config.h"
 
 namespace webrtc {
 
@@ -77,9 +78,11 @@
 }  // namespace
 
 TEST(AudioEncoderFactoryTemplateTest, NoEncoderTypes) {
+  test::ScopedKeyValueConfig field_trials;
   rtc::scoped_refptr<AudioEncoderFactory> factory(
       rtc::make_ref_counted<
-          audio_encoder_factory_template_impl::AudioEncoderFactoryT<>>());
+          audio_encoder_factory_template_impl::AudioEncoderFactoryT<>>(
+          &field_trials));
   EXPECT_THAT(factory->GetSupportedEncoders(), ::testing::IsEmpty());
   EXPECT_EQ(absl::nullopt, factory->QueryAudioEncoder({"foo", 8000, 1}));
   EXPECT_EQ(nullptr,
diff --git a/modules/audio_coding/BUILD.gn b/modules/audio_coding/BUILD.gn
index 0d5e429..c4814ce 100644
--- a/modules/audio_coding/BUILD.gn
+++ b/modules/audio_coding/BUILD.gn
@@ -1396,6 +1396,7 @@
       "../../rtc_base:rtc_base_approved",
       "../../rtc_base/synchronization:mutex",
       "../../test:fileutils",
+      "../../test:scoped_key_value_config",
       "../../test:test_support",
     ]
     absl_deps = [