Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Unified Diff: webrtc/modules/audio_processing/audio_processing_impl.cc

Issue 2848593002: AGC2 as a new APM sub-module operating with hard-coded gain. (Closed)
Patch Set: unneeded DCHECK removed Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());
}
« no previous file with comments | « webrtc/modules/audio_processing/audio_processing_impl.h ('k') | webrtc/modules/audio_processing/include/audio_processing.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698