diff --git a/modules/audio_processing/test/aec_dump_based_simulator.cc b/modules/audio_processing/test/aec_dump_based_simulator.cc index a0106dc679..0852fe0121 100644 --- a/modules/audio_processing/test/aec_dump_based_simulator.cc +++ b/modules/audio_processing/test/aec_dump_based_simulator.cc @@ -15,7 +15,6 @@ #include "modules/audio_processing/echo_control_mobile_impl.h" #include "modules/audio_processing/test/aec_dump_based_simulator.h" #include "modules/audio_processing/test/protobuf_utils.h" -#include "modules/audio_processing/test/runtime_setting_util.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" #include "rtc_base/numerics/safe_conversions.h" @@ -448,8 +447,10 @@ void AecDumpBasedSimulator::HandleMessage( ? *settings_.use_pre_amplifier : msg.pre_amplifier_enabled(); apm_config.pre_amplifier.enabled = enable; - apm_config.pre_amplifier.fixed_gain_factor = - settings_.pre_amplifier_gain_factor; + if (settings_.pre_amplifier_gain_factor) { + apm_config.pre_amplifier.fixed_gain_factor = + *settings_.pre_amplifier_gain_factor; + } } if (settings_.use_verbose_logging && msg.has_experiments_description() && @@ -549,7 +550,13 @@ void AecDumpBasedSimulator::HandleMessage( void AecDumpBasedSimulator::HandleMessage( const webrtc::audioproc::RuntimeSetting& msg) { RTC_CHECK(ap_.get()); - ReplayRuntimeSetting(ap_.get(), msg); + // Handle capture pre-gain runtime setting only if not overridden. + if ((!settings_.use_pre_amplifier || !(*settings_.use_pre_amplifier)) && + !settings_.pre_amplifier_gain_factor) { + ap_->SetRuntimeSetting( + AudioProcessing::RuntimeSetting::CreateCapturePreGain( + msg.capture_pre_gain())); + } } void AecDumpBasedSimulator::MaybeOpenCallOrderFile() { diff --git a/modules/audio_processing/test/audio_processing_simulator.cc b/modules/audio_processing/test/audio_processing_simulator.cc index 0d57749fd4..277b1b3b53 100644 --- a/modules/audio_processing/test/audio_processing_simulator.cc +++ b/modules/audio_processing/test/audio_processing_simulator.cc @@ -384,8 +384,10 @@ void AudioProcessingSimulator::CreateAudioProcessor() { } if (settings_.use_pre_amplifier) { apm_config.pre_amplifier.enabled = *settings_.use_pre_amplifier; - apm_config.pre_amplifier.fixed_gain_factor = - settings_.pre_amplifier_gain_factor; + if (settings_.pre_amplifier_gain_factor) { + apm_config.pre_amplifier.fixed_gain_factor = + *settings_.pre_amplifier_gain_factor; + } } const bool use_legacy_aec = settings_.use_aec && *settings_.use_aec && diff --git a/modules/audio_processing/test/audio_processing_simulator.h b/modules/audio_processing/test/audio_processing_simulator.h index 2ff2539f89..60ee6ea4b4 100644 --- a/modules/audio_processing/test/audio_processing_simulator.h +++ b/modules/audio_processing/test/audio_processing_simulator.h @@ -78,7 +78,7 @@ struct SimulationSettings { float agc2_fixed_gain_db; AudioProcessing::Config::GainController2::LevelEstimator agc2_adaptive_level_estimator; - float pre_amplifier_gain_factor; + absl::optional pre_amplifier_gain_factor; absl::optional vad_likelihood; absl::optional ns_level; absl::optional use_refined_adaptive_filter; diff --git a/modules/audio_processing/test/audioproc_float_impl.cc b/modules/audio_processing/test/audioproc_float_impl.cc index d29541b41b..f9cefce77a 100644 --- a/modules/audio_processing/test/audioproc_float_impl.cc +++ b/modules/audio_processing/test/audioproc_float_impl.cc @@ -163,7 +163,7 @@ WEBRTC_DEFINE_string( "AGC2 adaptive digital level estimator to use [RMS, peak]"); WEBRTC_DEFINE_float(pre_amplifier_gain_factor, - 1.f, + kParameterNotSpecifiedValue, "Pre-amplifier gain factor (linear) to apply"); WEBRTC_DEFINE_int(vad_likelihood, kParameterNotSpecifiedValue, @@ -241,6 +241,14 @@ void SetSettingIfSpecified(int value, absl::optional* parameter) { } } +void SetSettingIfSpecified(float value, absl::optional* parameter) { + constexpr float kFloatParameterNotSpecifiedValue = + kParameterNotSpecifiedValue; + if (value != kFloatParameterNotSpecifiedValue) { + *parameter = value; + } +} + void SetSettingIfFlagSet(int32_t flag, absl::optional* parameter) { if (flag == 0) { *parameter = false; @@ -339,7 +347,8 @@ SimulationSettings CreateSettings() { settings.agc2_fixed_gain_db = FLAG_agc2_fixed_gain_db; settings.agc2_adaptive_level_estimator = MapAgc2AdaptiveLevelEstimator(FLAG_agc2_adaptive_level_estimator); - settings.pre_amplifier_gain_factor = FLAG_pre_amplifier_gain_factor; + SetSettingIfSpecified(FLAG_pre_amplifier_gain_factor, + &settings.pre_amplifier_gain_factor); SetSettingIfSpecified(FLAG_vad_likelihood, &settings.vad_likelihood); SetSettingIfSpecified(FLAG_ns_level, &settings.ns_level); SetSettingIfSpecified(FLAG_stream_delay, &settings.stream_delay); @@ -531,6 +540,12 @@ void PerformBasicParameterSanityChecks(const SimulationSettings& settings) { !settings.aec_dump_input_filename && settings.call_order_output_filename.has_value(), "Error: --output_custom_call_order_file needs an AEC dump input file.\n"); + + ReportConditionalErrorAndExit( + (!settings.use_pre_amplifier || !(*settings.use_pre_amplifier)) && + settings.pre_amplifier_gain_factor.has_value(), + "Error: --pre_amplifier_gain_factor needs --pre_amplifier to be " + "specified and set.\n"); } } // namespace