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:
committed by
WebRTC LUCI CQ
parent
2625529cb1
commit
389010438d
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user