Correcting the analog AGC re-initialization at device changes
This CL corrects the re-initialization behavior of the analog
AGC to work correctly when the AGC is reinitialized.
Bug: webrtc:11131
Change-Id: Ie455ba3db1aa3936cbcbb2fab023528124853284
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/160650
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29924}
diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc
index ff68909..b6e79be 100644
--- a/modules/audio_processing/audio_processing_impl.cc
+++ b/modules/audio_processing/audio_processing_impl.cc
@@ -482,12 +482,20 @@
static_cast<int>(num_proc_channels()) ||
submodules_.agc_manager->sample_rate_hz() !=
capture_nonlocked_.split_rate) {
+ int stream_analog_level = -1;
+ const bool re_creation = !!submodules_.agc_manager;
+ if (re_creation) {
+ stream_analog_level = submodules_.agc_manager->stream_analog_level();
+ }
submodules_.agc_manager.reset(new AgcManagerDirect(
num_proc_channels(), constants_.agc_startup_min_volume,
constants_.agc_clipped_level_min,
constants_.use_experimental_agc_agc2_level_estimation,
constants_.use_experimental_agc_agc2_digital_adaptive,
capture_nonlocked_.split_rate));
+ if (re_creation) {
+ submodules_.agc_manager->set_stream_analog_level(stream_analog_level);
+ }
}
submodules_.agc_manager->Initialize();
submodules_.agc_manager->SetupDigitalGainControl(