AGC2: GainController::ApplyConfig removed

When `AudioProcessingImpl::ApplyConfig()` is called, AGC2 is initialized
and then the new config is applied. That is error prone and for example
breaks bit exactness in [1].

Changes:
- `GainController2` must be created by passing configuration,
  sample rate and number of channels
- `GainController2::ApplyConfig()` removed

Bit exactness verified with audioproc_f on a collection of AEC dumps
and Wav files (42 recordings in total).

[1] https://webrtc-review.googlesource.com/c/src/+/234587.

Bug: webrtc:7494
Change-Id: I251e03603394a4fc8769b9b5c197a157893676a9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/235060
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#35206}
This commit is contained in:
Alessio Bazzica
2021-10-14 12:14:21 +02:00
committed by WebRTC LUCI CQ
parent 2625529cb1
commit 389010438d
6 changed files with 142 additions and 133 deletions

View File

@ -412,7 +412,7 @@ void AudioProcessingImpl::InitializeLocked() {
InitializeVoiceDetector();
InitializeResidualEchoDetector();
InitializeEchoController();
InitializeGainController2();
InitializeGainController2(/*config_has_changed=*/true);
InitializeNoiseSuppressor();
InitializeAnalyzer();
InitializePostProcessor();
@ -589,9 +589,7 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
config_.gain_controller2 = AudioProcessing::Config::GainController2();
}
if (agc2_config_changed) {
InitializeGainController2();
}
InitializeGainController2(agc2_config_changed);
if (pre_amplifier_config_changed || gain_adjustment_config_changed) {
InitializeCaptureLevelsAdjuster();
@ -873,7 +871,7 @@ void AudioProcessingImpl::HandleCaptureRuntimeSettings() {
float value;
setting.GetFloat(&value);
config_.gain_controller2.fixed_digital.gain_db = value;
submodules_.gain_controller2->ApplyConfig(config_.gain_controller2);
submodules_.gain_controller2->SetFixedGainDb(value);
}
break;
}
@ -1936,19 +1934,18 @@ void AudioProcessingImpl::InitializeGainController1() {
capture_.capture_output_used);
}
void AudioProcessingImpl::InitializeGainController2() {
if (config_.gain_controller2.enabled) {
if (!submodules_.gain_controller2) {
// TODO(alessiob): Move the injected gain controller once injection is
// implemented.
submodules_.gain_controller2.reset(new GainController2());
}
submodules_.gain_controller2->Initialize(proc_fullband_sample_rate_hz(),
num_input_channels());
submodules_.gain_controller2->ApplyConfig(config_.gain_controller2);
} else {
void AudioProcessingImpl::InitializeGainController2(bool config_has_changed) {
if (!config_has_changed) {
return;
}
if (!config_.gain_controller2.enabled) {
submodules_.gain_controller2.reset();
return;
}
if (!submodules_.gain_controller2 || config_has_changed) {
submodules_.gain_controller2 = std::make_unique<GainController2>(
config_.gain_controller2, proc_fullband_sample_rate_hz(),
num_input_channels());
}
}