Index: webrtc/modules/audio_processing/audio_processing_impl.cc |
diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc |
index 756cc0cca572b8bb0df7a901f2a58bf8fbf57031..537decee6d690256d0a513bd47b20bcb5bc97c7f 100644 |
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc |
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc |
@@ -12,6 +12,7 @@ |
#include <math.h> |
#include <algorithm> |
+#include <string> |
#include "webrtc/base/checks.h" |
#include "webrtc/base/logging.h" |
@@ -23,6 +24,7 @@ |
#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" |
#include "webrtc/modules/audio_processing/aec/aec_core.h" |
#include "webrtc/modules/audio_processing/aec3/echo_canceller3.h" |
+#include "webrtc/modules/audio_processing/agc2/gain_controller2.h" |
#include "webrtc/modules/audio_processing/agc/agc_manager_direct.h" |
#include "webrtc/modules/audio_processing/audio_buffer.h" |
#include "webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h" |
@@ -171,6 +173,7 @@ bool AudioProcessingImpl::ApmSubmoduleStates::Update( |
bool intelligibility_enhancer_enabled, |
bool beamformer_enabled, |
bool adaptive_gain_controller_enabled, |
+ bool gain_controller2_enabled, |
bool level_controller_enabled, |
bool echo_canceller3_enabled, |
bool voice_activity_detector_enabled, |
@@ -189,6 +192,8 @@ bool AudioProcessingImpl::ApmSubmoduleStates::Update( |
changed |= (beamformer_enabled != beamformer_enabled_); |
changed |= |
(adaptive_gain_controller_enabled != adaptive_gain_controller_enabled_); |
+ changed |= |
+ (gain_controller2_enabled != gain_controller2_enabled_); |
changed |= (level_controller_enabled != level_controller_enabled_); |
changed |= (echo_canceller3_enabled != echo_canceller3_enabled_); |
changed |= (level_estimator_enabled != level_estimator_enabled_); |
@@ -204,6 +209,7 @@ bool AudioProcessingImpl::ApmSubmoduleStates::Update( |
intelligibility_enhancer_enabled_ = intelligibility_enhancer_enabled; |
beamformer_enabled_ = beamformer_enabled; |
adaptive_gain_controller_enabled_ = adaptive_gain_controller_enabled; |
+ gain_controller2_enabled_ = gain_controller2_enabled; |
level_controller_enabled_ = level_controller_enabled; |
echo_canceller3_enabled_ = echo_canceller3_enabled; |
level_estimator_enabled_ = level_estimator_enabled; |
@@ -275,6 +281,7 @@ struct AudioProcessingImpl::ApmPrivateSubmodules { |
// Accessed internally from capture or during initialization |
std::unique_ptr<NonlinearBeamformer> beamformer; |
std::unique_ptr<AgcManagerDirect> agc_manager; |
+ std::unique_ptr<GainController2> gain_controller2; |
std::unique_ptr<LowCutFilter> low_cut_filter; |
std::unique_ptr<LevelController> level_controller; |
std::unique_ptr<ResidualEchoDetector> residual_echo_detector; |
@@ -518,6 +525,7 @@ int AudioProcessingImpl::InitializeLocked() { |
InitializeLevelController(); |
InitializeResidualEchoDetector(); |
InitializeEchoCanceller3(); |
+ InitializeGainController2(); |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
if (debug_dump_.debug_file->is_open()) { |
@@ -666,6 +674,25 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) { |
LOG(LS_INFO) << "Echo canceller 3 activated: " |
<< capture_nonlocked_.echo_canceller3_enabled; |
} |
+ |
+ config_ok = GainController2::Validate(config_.gain_controller2); |
+ if (!config_ok) { |
+ LOG(LS_ERROR) << "AudioProcessing module config error" << std::endl |
+ << "gain_controller2: " |
+ << GainController2::ToString(config_.gain_controller2) |
+ << std::endl |
+ << "Reverting to default parameter set"; |
+ config_.gain_controller2 = AudioProcessing::Config::GainController2(); |
+ } |
+ |
+ if (config.gain_controller2.enabled != |
+ capture_nonlocked_.gain_controller2_enabled) { |
+ capture_nonlocked_.gain_controller2_enabled = |
+ config_.gain_controller2.enabled; |
+ InitializeGainController2(); |
+ LOG(LS_INFO) << "Gain controller 2 activated: " |
+ << capture_nonlocked_.gain_controller2_enabled; |
+ } |
} |
void AudioProcessingImpl::SetExtraOptions(const webrtc::Config& config) { |
@@ -683,7 +710,7 @@ void AudioProcessingImpl::SetExtraOptions(const webrtc::Config& config) { |
} |
#if WEBRTC_INTELLIGIBILITY_ENHANCER |
- if(capture_nonlocked_.intelligibility_enabled != |
+ if (capture_nonlocked_.intelligibility_enabled != |
config.Get<Intelligibility>().enabled) { |
capture_nonlocked_.intelligibility_enabled = |
config.Get<Intelligibility>().enabled; |
@@ -1288,6 +1315,10 @@ int AudioProcessingImpl::ProcessCaptureStreamLocked() { |
capture_.key_pressed); |
} |
+ if (capture_nonlocked_.gain_controller2_enabled) { |
+ private_submodules_->gain_controller2->Process(capture_buffer); |
+ } |
+ |
if (capture_nonlocked_.level_controller_enabled) { |
private_submodules_->level_controller->Process(capture_buffer); |
} |
@@ -1706,6 +1737,7 @@ bool AudioProcessingImpl::UpdateActiveSubmoduleStates() { |
capture_nonlocked_.intelligibility_enabled, |
capture_nonlocked_.beamformer_enabled, |
public_submodules_->gain_control->is_enabled(), |
+ capture_nonlocked_.gain_controller2_enabled, |
capture_nonlocked_.level_controller_enabled, |
capture_nonlocked_.echo_canceller3_enabled, |
public_submodules_->voice_detection->is_enabled(), |
@@ -1756,6 +1788,7 @@ void AudioProcessingImpl::InitializeLowCutFilter() { |
private_submodules_->low_cut_filter.reset(); |
} |
} |
+ |
void AudioProcessingImpl::InitializeEchoCanceller3() { |
if (capture_nonlocked_.echo_canceller3_enabled) { |
private_submodules_->echo_canceller3.reset( |
@@ -1765,6 +1798,15 @@ void AudioProcessingImpl::InitializeEchoCanceller3() { |
} |
} |
+void AudioProcessingImpl::InitializeGainController2() { |
+ if (capture_nonlocked_.gain_controller2_enabled) { |
+ private_submodules_->gain_controller2.reset( |
+ new GainController2(proc_sample_rate_hz())); |
+ } else { |
+ private_submodules_->gain_controller2.reset(); |
+ } |
+} |
+ |
void AudioProcessingImpl::InitializeLevelController() { |
private_submodules_->level_controller->Initialize(proc_sample_rate_hz()); |
} |