diff --git a/api/audio/builtin_audio_processing_builder.cc b/api/audio/builtin_audio_processing_builder.cc index fdc03eb293..293750ae5d 100644 --- a/api/audio/builtin_audio_processing_builder.cc +++ b/api/audio/builtin_audio_processing_builder.cc @@ -22,11 +22,9 @@ namespace webrtc { absl::Nullable> -BuiltinAudioProcessingBuilder::Build(const Environment& /*env*/) { - // TODO: bugs.webrtc.org/369904700 - Pass `env` when AudioProcessingImpl gets - // constructor that accepts it. +BuiltinAudioProcessingBuilder::Build(const Environment& env) { return make_ref_counted( - config_, std::move(capture_post_processing_), + env, config_, std::move(capture_post_processing_), std::move(render_pre_processing_), std::move(echo_control_factory_), std::move(echo_detector_), std::move(capture_analyzer_)); } diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn index b63ee19dba..f8fab87604 100644 --- a/modules/audio_processing/BUILD.gn +++ b/modules/audio_processing/BUILD.gn @@ -152,6 +152,7 @@ rtc_library("audio_processing") { ":high_pass_filter", ":rms_level", "../../api:array_view", + "../../api:field_trials_view", "../../api:function_view", "../../api:make_ref_counted", "../../api/audio:aec3_config", @@ -159,9 +160,13 @@ rtc_library("audio_processing") { "../../api/audio:audio_processing", "../../api/audio:audio_processing_statistics", "../../api/audio:echo_control", + "../../api/environment", "../../api/task_queue", "../../audio/utility:audio_frame_operations", + "../../common_audio", "../../common_audio:common_audio_c", + "../../common_audio:fir_filter", + "../../common_audio:fir_filter_factory", "../../common_audio/third_party/ooura:fft_size_256", "../../rtc_base:checks", "../../rtc_base:event_tracer", @@ -172,7 +177,6 @@ rtc_library("audio_processing") { "../../rtc_base:sanitizer", "../../rtc_base:swap_queue", "../../rtc_base:timeutils", - "../../rtc_base/experiments:field_trial_parser", "../../rtc_base/synchronization:mutex", "../../rtc_base/system:rtc_export", "../../system_wrappers", @@ -180,7 +184,7 @@ rtc_library("audio_processing") { "../../system_wrappers:field_trial", "../../system_wrappers:metrics", "aec3", - "aec_dump:aec_dump", + "aec_dump", "aecm:aecm_core", "agc", "agc:gain_control_interface", @@ -190,17 +194,9 @@ rtc_library("audio_processing") { "ns", "vad", "//third_party/abseil-cpp/absl/base:nullability", - "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:string_view", ] - deps += [ - "../../common_audio", - "../../common_audio:fir_filter", - "../../common_audio:fir_filter_factory", - "../../system_wrappers", - ] - if (rtc_enable_protobuf) { deps += [ "aec_dump:aec_dump_impl" ] } else { diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc index ed80ba4328..44ee9c903a 100644 --- a/modules/audio_processing/audio_processing_impl.cc +++ b/modules/audio_processing/audio_processing_impl.cc @@ -20,10 +20,11 @@ #include #include "absl/base/nullability.h" -#include "absl/strings/match.h" #include "absl/strings/string_view.h" #include "api/array_view.h" #include "api/audio/audio_frame.h" +#include "api/environment/environment.h" +#include "api/field_trials_view.h" #include "api/task_queue/task_queue_base.h" #include "common_audio/audio_converter.h" #include "common_audio/include/audio_util.h" @@ -32,12 +33,10 @@ #include "modules/audio_processing/include/audio_frame_view.h" #include "modules/audio_processing/logging/apm_data_dumper.h" #include "rtc_base/checks.h" -#include "rtc_base/experiments/field_trial_parser.h" #include "rtc_base/logging.h" #include "rtc_base/time_utils.h" #include "rtc_base/trace_event.h" #include "system_wrappers/include/denormal_disabler.h" -#include "system_wrappers/include/field_trial.h" #include "system_wrappers/include/metrics.h" #define RETURN_ON_ERR(expr) \ @@ -58,15 +57,15 @@ bool SampleRateSupportsMultiBand(int sample_rate_hz) { } // Checks whether the high-pass filter should be done in the full-band. -bool EnforceSplitBandHpf() { - return field_trial::IsEnabled("WebRTC-FullBandHpfKillSwitch"); +bool EnforceSplitBandHpf(const FieldTrialsView& field_trials) { + return field_trials.IsEnabled("WebRTC-FullBandHpfKillSwitch"); } // Checks whether AEC3 should be allowed to decide what the default // configuration should be based on the render and capture channel configuration // at hand. -bool UseSetupSpecificDefaultAec3Congfig() { - return !field_trial::IsEnabled( +bool UseSetupSpecificDefaultAec3Congfig(const FieldTrialsView& field_trials) { + return !field_trials.IsEnabled( "WebRTC-Aec3SetupSpecificDefaultConfigDefaultsKillSwitch"); } @@ -102,8 +101,8 @@ GainControl::Mode Agc1ConfigModeToInterfaceMode( RTC_CHECK_NOTREACHED(); } -bool MinimizeProcessingForUnusedOutput() { - return !field_trial::IsEnabled("WebRTC-MutedStateKillSwitch"); +bool MinimizeProcessingForUnusedOutput(const FieldTrialsView& field_trials) { + return !field_trials.IsEnabled("WebRTC-MutedStateKillSwitch"); } // Maximum lengths that frame of samples being passed from the render side to @@ -413,8 +412,9 @@ bool AudioProcessingImpl::SubmoduleStates::HighPassFilteringRequired() const { noise_suppressor_enabled_; } -AudioProcessingImpl::AudioProcessingImpl() - : AudioProcessingImpl(/*config=*/{}, +AudioProcessingImpl::AudioProcessingImpl(const Environment& env) + : AudioProcessingImpl(env, + /*config=*/{}, /*capture_post_processor=*/nullptr, /*render_pre_processor=*/nullptr, /*echo_control_factory=*/nullptr, @@ -424,6 +424,7 @@ AudioProcessingImpl::AudioProcessingImpl() std::atomic AudioProcessingImpl::instance_count_(0); AudioProcessingImpl::AudioProcessingImpl( + const Environment& env, const AudioProcessing::Config& config, std::unique_ptr capture_post_processor, std::unique_ptr render_pre_processor, @@ -432,7 +433,7 @@ AudioProcessingImpl::AudioProcessingImpl( std::unique_ptr capture_analyzer) : data_dumper_(new ApmDataDumper(instance_count_.fetch_add(1) + 1)), use_setup_specific_default_aec3_config_( - UseSetupSpecificDefaultAec3Congfig()), + UseSetupSpecificDefaultAec3Congfig(env.field_trials())), capture_runtime_settings_(RuntimeSettingQueueSize()), render_runtime_settings_(RuntimeSettingQueueSize()), capture_runtime_settings_enqueuer_(&capture_runtime_settings_), @@ -446,12 +447,12 @@ AudioProcessingImpl::AudioProcessingImpl( std::move(render_pre_processor), std::move(echo_detector), std::move(capture_analyzer)), - constants_(!field_trial::IsEnabled( + constants_(!env.field_trials().IsEnabled( "WebRTC-ApmExperimentalMultiChannelRenderKillSwitch"), - !field_trial::IsEnabled( + !env.field_trials().IsEnabled( "WebRTC-ApmExperimentalMultiChannelCaptureKillSwitch"), - EnforceSplitBandHpf(), - MinimizeProcessingForUnusedOutput()), + EnforceSplitBandHpf(env.field_trials()), + MinimizeProcessingForUnusedOutput(env.field_trials())), capture_(), capture_nonlocked_(), applied_input_volume_stats_reporter_( diff --git a/modules/audio_processing/audio_processing_impl.h b/modules/audio_processing/audio_processing_impl.h index 19c6dccf43..b3d5548aef 100644 --- a/modules/audio_processing/audio_processing_impl.h +++ b/modules/audio_processing/audio_processing_impl.h @@ -25,6 +25,7 @@ #include "api/array_view.h" #include "api/audio/audio_processing.h" #include "api/audio/audio_processing_statistics.h" +#include "api/environment/environment.h" #include "api/function_view.h" #include "api/task_queue/task_queue_base.h" #include "modules/audio_processing/aec3/echo_canceller3.h" @@ -60,8 +61,9 @@ class AudioProcessingImpl : public AudioProcessing { public: // Methods forcing APM to run in a single-threaded manner. // Acquires both the render and capture locks. - AudioProcessingImpl(); - AudioProcessingImpl(const AudioProcessing::Config& config, + explicit AudioProcessingImpl(const Environment& env); + AudioProcessingImpl(const Environment& env, + const AudioProcessing::Config& config, std::unique_ptr capture_post_processor, std::unique_ptr render_pre_processor, std::unique_ptr echo_control_factory, diff --git a/modules/audio_processing/audio_processing_impl_unittest.cc b/modules/audio_processing/audio_processing_impl_unittest.cc index d4503389fd..3b5584f322 100644 --- a/modules/audio_processing/audio_processing_impl_unittest.cc +++ b/modules/audio_processing/audio_processing_impl_unittest.cc @@ -40,7 +40,7 @@ using ::testing::NotNull; class MockInitialize : public AudioProcessingImpl { public: - MockInitialize() : AudioProcessingImpl() {} + MockInitialize() : AudioProcessingImpl(CreateEnvironment()) {} MOCK_METHOD(void, InitializeLocked, (), (override)); void RealInitializeLocked() {