diff --git a/api/audio_codecs/BUILD.gn b/api/audio_codecs/BUILD.gn index 5926f5ec2e..3c84af8d19 100644 --- a/api/audio_codecs/BUILD.gn +++ b/api/audio_codecs/BUILD.gn @@ -32,6 +32,7 @@ rtc_library("audio_codecs_api") { "..: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 1f7a1e5a0b..9e4a0f1002 100644 --- a/api/audio_codecs/L16/BUILD.gn +++ b/api/audio_codecs/L16/BUILD.gn @@ -21,6 +21,7 @@ rtc_library("audio_encoder_L16") { ] 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 @@ rtc_library("audio_decoder_L16") { ] 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 93863f1020..874a8a5111 100644 --- a/api/audio_codecs/L16/audio_decoder_L16.cc +++ b/api/audio_codecs/L16/audio_decoder_L16.cc @@ -37,7 +37,8 @@ void AudioDecoderL16::AppendSupportedDecoders( std::unique_ptr AudioDecoderL16::MakeAudioDecoder( const Config& config, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 581a5b82c1..ade8f98088 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 @@ struct RTC_EXPORT AudioDecoderL16 { static void AppendSupportedDecoders(std::vector* specs); static std::unique_ptr MakeAudioDecoder( const Config& config, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 590d3e32d9..3994f5c20d 100644 --- a/api/audio_codecs/L16/audio_encoder_L16.cc +++ b/api/audio_codecs/L16/audio_encoder_L16.cc @@ -59,7 +59,8 @@ AudioCodecInfo AudioEncoderL16::QueryAudioEncoder( std::unique_ptr AudioEncoderL16::MakeAudioEncoder( const AudioEncoderL16::Config& config, int payload_type, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 25d221148e..e0916dfb24 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 @@ struct RTC_EXPORT AudioEncoderL16 { static std::unique_ptr MakeAudioEncoder( const Config& config, int payload_type, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 976f9c62d7..4badd825b1 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 @@ struct Helper<> { static bool IsSupportedDecoder(const SdpAudioFormat& format) { return false; } static std::unique_ptr MakeAudioDecoder( const SdpAudioFormat& format, - absl::optional codec_pair_id) { + absl::optional codec_pair_id, + const WebRtcKeyValueConfig* field_trials) { return nullptr; } }; @@ -55,16 +57,22 @@ struct Helper { } static std::unique_ptr MakeAudioDecoder( const SdpAudioFormat& format, - absl::optional codec_pair_id) { + absl::optional codec_pair_id, + const WebRtcKeyValueConfig* field_trials) { auto opt_config = T::SdpToConfig(format); return opt_config ? T::MakeAudioDecoder(*opt_config, codec_pair_id) - : Helper::MakeAudioDecoder(format, codec_pair_id); + : Helper::MakeAudioDecoder(format, codec_pair_id, + field_trials); } }; template class AudioDecoderFactoryT : public AudioDecoderFactory { public: + explicit AudioDecoderFactoryT(const WebRtcKeyValueConfig* field_trials) { + field_trials_ = field_trials; + } + std::vector GetSupportedDecoders() override { std::vector specs; Helper::AppendSupportedDecoders(&specs); @@ -78,8 +86,11 @@ class AudioDecoderFactoryT : public AudioDecoderFactory { std::unique_ptr MakeAudioDecoder( const SdpAudioFormat& format, absl::optional codec_pair_id) override { - return Helper::MakeAudioDecoder(format, codec_pair_id); + return Helper::MakeAudioDecoder(format, codec_pair_id, + field_trials_); } + + const WebRtcKeyValueConfig* field_trials_; }; } // namespace audio_decoder_factory_template_impl @@ -115,7 +126,8 @@ class AudioDecoderFactoryT : public AudioDecoderFactory { // TODO(kwiberg): Point at CreateBuiltinAudioDecoderFactory() for an example of // how it is used. template -rtc::scoped_refptr CreateAudioDecoderFactory() { +rtc::scoped_refptr 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 @@ rtc::scoped_refptr CreateAudioDecoderFactory() { "Caller must give at least one template parameter"); return rtc::make_ref_counted< - audio_decoder_factory_template_impl::AudioDecoderFactoryT>(); + audio_decoder_factory_template_impl::AudioDecoderFactoryT>( + 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 4dc0672c46..ceefab2dd5 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 @@ struct Helper<> { static std::unique_ptr MakeAudioEncoder( int payload_type, const SdpAudioFormat& format, - absl::optional codec_pair_id) { + absl::optional codec_pair_id, + const WebRtcKeyValueConfig* field_trials) { return nullptr; } }; @@ -63,13 +65,14 @@ struct Helper { static std::unique_ptr MakeAudioEncoder( int payload_type, const SdpAudioFormat& format, - absl::optional codec_pair_id) { + absl::optional 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::MakeAudioEncoder(payload_type, format, - codec_pair_id); + codec_pair_id, field_trials); } } }; @@ -77,6 +80,10 @@ struct Helper { template class AudioEncoderFactoryT : public AudioEncoderFactory { public: + explicit AudioEncoderFactoryT(const WebRtcKeyValueConfig* field_trials) { + field_trials_ = field_trials; + } + std::vector GetSupportedEncoders() override { std::vector specs; Helper::AppendSupportedEncoders(&specs); @@ -92,8 +99,11 @@ class AudioEncoderFactoryT : public AudioEncoderFactory { int payload_type, const SdpAudioFormat& format, absl::optional codec_pair_id) override { - return Helper::MakeAudioEncoder(payload_type, format, codec_pair_id); + return Helper::MakeAudioEncoder(payload_type, format, codec_pair_id, + field_trials_); } + + const WebRtcKeyValueConfig* field_trials_; }; } // namespace audio_encoder_factory_template_impl @@ -134,7 +144,8 @@ class AudioEncoderFactoryT : public AudioEncoderFactory { // TODO(kwiberg): Point at CreateBuiltinAudioEncoderFactory() for an example of // how it is used. template -rtc::scoped_refptr CreateAudioEncoderFactory() { +rtc::scoped_refptr 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 @@ rtc::scoped_refptr CreateAudioEncoderFactory() { "Caller must give at least one template parameter"); return rtc::make_ref_counted< - audio_encoder_factory_template_impl::AudioEncoderFactoryT>(); + audio_encoder_factory_template_impl::AudioEncoderFactoryT>( + 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 99fac09a57..4433893c1b 100644 --- a/api/audio_codecs/builtin_audio_encoder_factory.cc +++ b/api/audio_codecs/builtin_audio_encoder_factory.cc @@ -47,8 +47,10 @@ struct NotAdvertised { static std::unique_ptr MakeAudioEncoder( const Config& config, int payload_type, - absl::optional codec_pair_id = absl::nullopt) { - return T::MakeAudioEncoder(config, payload_type, codec_pair_id); + absl::optional 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 92d77bed9f..1f0b7dff7a 100644 --- a/api/audio_codecs/g711/BUILD.gn +++ b/api/audio_codecs/g711/BUILD.gn @@ -21,6 +21,7 @@ rtc_library("audio_encoder_g711") { ] 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 @@ rtc_library("audio_decoder_g711") { ] 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 f3d3378cf2..b34b464ebd 100644 --- a/api/audio_codecs/g711/audio_decoder_g711.cc +++ b/api/audio_codecs/g711/audio_decoder_g711.cc @@ -47,7 +47,8 @@ void AudioDecoderG711::AppendSupportedDecoders( std::unique_ptr AudioDecoderG711::MakeAudioDecoder( const Config& config, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 18c15a8d60..62b0f880d5 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 @@ struct RTC_EXPORT AudioDecoderG711 { static void AppendSupportedDecoders(std::vector* specs); static std::unique_ptr MakeAudioDecoder( const Config& config, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 4c1ce0f8e6..8c60304c20 100644 --- a/api/audio_codecs/g711/audio_encoder_g711.cc +++ b/api/audio_codecs/g711/audio_encoder_g711.cc @@ -64,7 +64,8 @@ AudioCodecInfo AudioEncoderG711::QueryAudioEncoder(const Config& config) { std::unique_ptr AudioEncoderG711::MakeAudioEncoder( const Config& config, int payload_type, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 29fe38f1a0..c2750e26ec 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 @@ struct RTC_EXPORT AudioEncoderG711 { static std::unique_ptr MakeAudioEncoder( const Config& config, int payload_type, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 a186eabbb7..fbce2c5e33 100644 --- a/api/audio_codecs/g722/BUILD.gn +++ b/api/audio_codecs/g722/BUILD.gn @@ -27,6 +27,7 @@ rtc_library("audio_encoder_g722") { 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 @@ rtc_library("audio_decoder_g722") { ] 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 0049e5ab32..8f3a5c0d28 100644 --- a/api/audio_codecs/g722/audio_decoder_g722.cc +++ b/api/audio_codecs/g722/audio_decoder_g722.cc @@ -36,7 +36,8 @@ void AudioDecoderG722::AppendSupportedDecoders( std::unique_ptr AudioDecoderG722::MakeAudioDecoder( Config config, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 2a674926db..05e613055a 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 @@ struct RTC_EXPORT AudioDecoderG722 { static void AppendSupportedDecoders(std::vector* specs); static std::unique_ptr MakeAudioDecoder( Config config, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 66cf9e19d6..812d66ffc9 100644 --- a/api/audio_codecs/g722/audio_encoder_g722.cc +++ b/api/audio_codecs/g722/audio_encoder_g722.cc @@ -62,7 +62,8 @@ AudioCodecInfo AudioEncoderG722::QueryAudioEncoder( std::unique_ptr AudioEncoderG722::MakeAudioEncoder( const AudioEncoderG722Config& config, int payload_type, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 327c0af04a..14ddff72bd 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 @@ struct RTC_EXPORT AudioEncoderG722 { static std::unique_ptr MakeAudioEncoder( const AudioEncoderG722Config& config, int payload_type, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 b6a5045eaf..1cac7ed7b9 100644 --- a/api/audio_codecs/ilbc/BUILD.gn +++ b/api/audio_codecs/ilbc/BUILD.gn @@ -27,6 +27,7 @@ rtc_library("audio_encoder_ilbc") { 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 @@ rtc_library("audio_decoder_ilbc") { ] 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 237cef23c1..9a291ee41d 100644 --- a/api/audio_codecs/ilbc/audio_decoder_ilbc.cc +++ b/api/audio_codecs/ilbc/audio_decoder_ilbc.cc @@ -34,7 +34,8 @@ void AudioDecoderIlbc::AppendSupportedDecoders( std::unique_ptr AudioDecoderIlbc::MakeAudioDecoder( Config config, - absl::optional /*codec_pair_id*/) { + absl::optional /*codec_pair_id*/, + const WebRtcKeyValueConfig* field_trials) { return std::make_unique(); } diff --git a/api/audio_codecs/ilbc/audio_decoder_ilbc.h b/api/audio_codecs/ilbc/audio_decoder_ilbc.h index 9ab847977d..4d9a4b7d6a 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 @@ struct AudioDecoderIlbc { static void AppendSupportedDecoders(std::vector* specs); static std::unique_ptr MakeAudioDecoder( Config config, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 52ba8f6b88..6525887eab 100644 --- a/api/audio_codecs/ilbc/audio_encoder_ilbc.cc +++ b/api/audio_codecs/ilbc/audio_encoder_ilbc.cc @@ -76,7 +76,8 @@ AudioCodecInfo AudioEncoderIlbc::QueryAudioEncoder( std::unique_ptr AudioEncoderIlbc::MakeAudioEncoder( const AudioEncoderIlbcConfig& config, int payload_type, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 e4aeca70de..8dd4928558 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 @@ struct AudioEncoderIlbc { static std::unique_ptr MakeAudioEncoder( const AudioEncoderIlbcConfig& config, int payload_type, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 6ff6e5f092..b6aa810fb5 100644 --- a/api/audio_codecs/isac/BUILD.gn +++ b/api/audio_codecs/isac/BUILD.gn @@ -65,6 +65,7 @@ rtc_library("audio_encoder_isac_fix") { ] 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 @@ rtc_library("audio_decoder_isac_fix") { ] 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 @@ rtc_library("audio_encoder_isac_float") { ] 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 @@ rtc_library("audio_decoder_isac_float") { ] 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 305e15a525..8927a164b0 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 @@ void AudioDecoderIsacFix::AppendSupportedDecoders( std::unique_ptr AudioDecoderIsacFix::MakeAudioDecoder( Config config, - absl::optional /*codec_pair_id*/) { + absl::optional /*codec_pair_id*/, + const WebRtcKeyValueConfig* field_trials) { AudioDecoderIsacFixImpl::Config c; c.sample_rate_hz = 16000; return std::make_unique(c); diff --git a/api/audio_codecs/isac/audio_decoder_isac_fix.h b/api/audio_codecs/isac/audio_decoder_isac_fix.h index 200914adfe..11b87669c9 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 @@ struct RTC_EXPORT AudioDecoderIsacFix { static void AppendSupportedDecoders(std::vector* specs); static std::unique_ptr MakeAudioDecoder( Config config, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 683eb6c0ad..ef27293117 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 @@ void AudioDecoderIsacFloat::AppendSupportedDecoders( std::unique_ptr AudioDecoderIsacFloat::MakeAudioDecoder( Config config, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 e78f8b81ee..501edfcab9 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 @@ struct RTC_EXPORT AudioDecoderIsacFloat { static void AppendSupportedDecoders(std::vector* specs); static std::unique_ptr MakeAudioDecoder( Config config, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 b590be1ea3..65a2d8f391 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 @@ AudioCodecInfo AudioEncoderIsacFix::QueryAudioEncoder( std::unique_ptr AudioEncoderIsacFix::MakeAudioEncoder( AudioEncoderIsacFix::Config config, int payload_type, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 e50d9f5112..e8ff0fc57b 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 @@ struct RTC_EXPORT AudioEncoderIsacFix { static std::unique_ptr MakeAudioEncoder( Config config, int payload_type, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 e2afeae84e..852cb69c9d 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 @@ AudioCodecInfo AudioEncoderIsacFloat::QueryAudioEncoder( std::unique_ptr AudioEncoderIsacFloat::MakeAudioEncoder( const AudioEncoderIsacFloat::Config& config, int payload_type, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 0cb9c17d71..8e1d505c31 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 @@ struct RTC_EXPORT AudioEncoderIsacFloat { static std::unique_ptr MakeAudioEncoder( const Config& config, int payload_type, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 586e9b3dd8..fbb116b88a 100644 --- a/api/audio_codecs/opus/BUILD.gn +++ b/api/audio_codecs/opus/BUILD.gn @@ -46,6 +46,7 @@ rtc_library("audio_encoder_opus") { 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 @@ rtc_library("audio_decoder_opus") { ] 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 @@ rtc_library("audio_encoder_multiopus") { 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 @@ rtc_library("audio_decoder_multiopus") { 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 6ba2b6d9d3..5a0b794430 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 @@ void AudioDecoderMultiChannelOpus::AppendSupportedDecoders( std::unique_ptr AudioDecoderMultiChannelOpus::MakeAudioDecoder( AudioDecoderMultiChannelOpusConfig config, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 b5ca0fe41b..2dcd26b102 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 @@ struct RTC_EXPORT AudioDecoderMultiChannelOpus { static void AppendSupportedDecoders(std::vector* specs); static std::unique_ptr MakeAudioDecoder( AudioDecoderMultiChannelOpusConfig config, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 7e0d88b7ad..0fe3367a64 100644 --- a/api/audio_codecs/opus/audio_decoder_opus.cc +++ b/api/audio_codecs/opus/audio_decoder_opus.cc @@ -73,7 +73,8 @@ void AudioDecoderOpus::AppendSupportedDecoders( std::unique_ptr AudioDecoderOpus::MakeAudioDecoder( Config config, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 ec0f61d5bb..4e44309c24 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 @@ struct RTC_EXPORT AudioDecoderOpus { static void AppendSupportedDecoders(std::vector* specs); static std::unique_ptr MakeAudioDecoder( Config config, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 758eaaeebe..b71a0003fd 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 @@ AudioCodecInfo AudioEncoderMultiChannelOpus::QueryAudioEncoder( std::unique_ptr AudioEncoderMultiChannelOpus::MakeAudioEncoder( const AudioEncoderMultiChannelOpusConfig& config, int payload_type, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 977a3a4b9c..58b959a9b8 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 @@ struct RTC_EXPORT AudioEncoderMultiChannelOpus { static std::unique_ptr MakeAudioEncoder( const Config& config, int payload_type, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 6d950c5e74..26fe8cc786 100644 --- a/api/audio_codecs/opus/audio_encoder_opus.cc +++ b/api/audio_codecs/opus/audio_encoder_opus.cc @@ -32,7 +32,8 @@ AudioCodecInfo AudioEncoderOpus::QueryAudioEncoder( std::unique_ptr AudioEncoderOpus::MakeAudioEncoder( const AudioEncoderOpusConfig& config, int payload_type, - absl::optional /*codec_pair_id*/) { + absl::optional /*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 03cb0d6b38..4fb0337490 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 @@ struct RTC_EXPORT AudioEncoderOpus { static std::unique_ptr MakeAudioEncoder( const AudioEncoderOpusConfig& config, int payload_type, - absl::optional codec_pair_id = absl::nullopt); + absl::optional 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 5f0c7147f5..867d200e5f 100644 --- a/api/audio_codecs/opus_audio_encoder_factory.cc +++ b/api/audio_codecs/opus_audio_encoder_factory.cc @@ -37,8 +37,10 @@ struct NotAdvertised { static std::unique_ptr MakeAudioEncoder( const Config& config, int payload_type, - absl::optional codec_pair_id = absl::nullopt) { - return T::MakeAudioEncoder(config, payload_type, codec_pair_id); + absl::optional 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 575f062ce7..dabcc3da8d 100644 --- a/api/audio_codecs/test/BUILD.gn +++ b/api/audio_codecs/test/BUILD.gn @@ -23,6 +23,7 @@ if (rtc_include_tests) { "..: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 464ecfd487..3662f3b76d 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 @@ struct AudioDecoderFakeApi { } // namespace TEST(AudioDecoderFactoryTemplateTest, NoDecoderTypes) { + test::ScopedKeyValueConfig field_trials; rtc::scoped_refptr 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 110f9930bd..67b6883583 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 @@ struct AudioEncoderFakeApi { } // namespace TEST(AudioEncoderFactoryTemplateTest, NoEncoderTypes) { + test::ScopedKeyValueConfig field_trials; rtc::scoped_refptr 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 0d5e429d42..c4814ce1f8 100644 --- a/modules/audio_coding/BUILD.gn +++ b/modules/audio_coding/BUILD.gn @@ -1396,6 +1396,7 @@ if (rtc_include_tests) { "../../rtc_base:rtc_base_approved", "../../rtc_base/synchronization:mutex", "../../test:fileutils", + "../../test:scoped_key_value_config", "../../test:test_support", ] absl_deps = [