Allow audioproc_f to override the pre-amp gain in aecdumps
This CL allows audioproc_f to overrule any runtime settings for the
pre-amplifier gain that are present in the aecdump file.
Bug: webrtc:10546
Change-Id: I74dbf8d043f59b516bf0abc80f266e965af0754d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/132558
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27598}
diff --git a/modules/audio_processing/test/aec_dump_based_simulator.cc b/modules/audio_processing/test/aec_dump_based_simulator.cc
index a0106dc..0852fe0 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 @@
? *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(
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 0d57749..277b1b3 100644
--- a/modules/audio_processing/test/audio_processing_simulator.cc
+++ b/modules/audio_processing/test/audio_processing_simulator.cc
@@ -384,8 +384,10 @@
}
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 2ff2539..60ee6ea 100644
--- a/modules/audio_processing/test/audio_processing_simulator.h
+++ b/modules/audio_processing/test/audio_processing_simulator.h
@@ -78,7 +78,7 @@
float agc2_fixed_gain_db;
AudioProcessing::Config::GainController2::LevelEstimator
agc2_adaptive_level_estimator;
- float pre_amplifier_gain_factor;
+ absl::optional<float> pre_amplifier_gain_factor;
absl::optional<int> vad_likelihood;
absl::optional<int> ns_level;
absl::optional<bool> 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 d29541b4..f9cefce 100644
--- a/modules/audio_processing/test/audioproc_float_impl.cc
+++ b/modules/audio_processing/test/audioproc_float_impl.cc
@@ -163,7 +163,7 @@
"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(float value, absl::optional<float>* parameter) {
+ constexpr float kFloatParameterNotSpecifiedValue =
+ kParameterNotSpecifiedValue;
+ if (value != kFloatParameterNotSpecifiedValue) {
+ *parameter = value;
+ }
+}
+
void SetSettingIfFlagSet(int32_t flag, absl::optional<bool>* parameter) {
if (flag == 0) {
*parameter = false;
@@ -339,7 +347,8 @@
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 @@
!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