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

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

Issue 2090583002: New module for the adaptive level controlling functionality in the audio processing module (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Corrected an assignment error Created 4 years, 6 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 819a18b62d958f38e7b4a5f6b5f92687c8cf59bb..d01f0a71ba3fc8c942f65dee5cd8bbc843fabea4 100644
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc
@@ -22,6 +22,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/agc/agc_manager_direct.h"
+#include "webrtc/modules/audio_processing/level_controller/level_controller.h"
#include "webrtc/modules/audio_processing/audio_buffer.h"
#include "webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h"
#include "webrtc/modules/audio_processing/common.h"
@@ -31,6 +32,7 @@
#include "webrtc/modules/audio_processing/gain_control_impl.h"
#include "webrtc/modules/audio_processing/high_pass_filter_impl.h"
#include "webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h"
+#include "webrtc/modules/audio_processing/level_controller/level_controller.h"
aleloi 2016/06/28 09:35:51 level_controller.h is included twice.
peah-webrtc 2016/06/28 22:19:37 Nice find! Thanks!!! Done.
#include "webrtc/modules/audio_processing/level_estimator_impl.h"
#include "webrtc/modules/audio_processing/noise_suppression_impl.h"
#include "webrtc/modules/audio_processing/transient/transient_suppressor.h"
@@ -132,6 +134,7 @@ struct AudioProcessingImpl::ApmPrivateSubmodules {
// Accessed internally from capture or during initialization
std::unique_ptr<Beamformer<float>> beamformer;
std::unique_ptr<AgcManagerDirect> agc_manager;
+ std::unique_ptr<LevelController> level_controller;
};
AudioProcessing* AudioProcessing::Create() {
@@ -175,8 +178,8 @@ AudioProcessingImpl::AudioProcessingImpl(const Config& config,
config.Get<Beamforming>().array_geometry,
config.Get<Beamforming>().target_direction),
capture_nonlocked_(config.Get<Beamforming>().enabled,
- config.Get<Intelligibility>().enabled)
-{
+ config.Get<Intelligibility>().enabled,
+ config.Get<LevelControl>().enabled) {
{
rtc::CritScope cs_render(&crit_render_);
rtc::CritScope cs_capture(&crit_capture_);
@@ -198,6 +201,8 @@ AudioProcessingImpl::AudioProcessingImpl(const Config& config,
public_submodules_->gain_control_for_experimental_agc.reset(
new GainControlForExperimentalAgc(
public_submodules_->gain_control.get(), &crit_capture_));
+
+ private_submodules_->level_controller.reset(new LevelController());
}
SetExtraOptions(config);
@@ -322,6 +327,7 @@ int AudioProcessingImpl::InitializeLocked() {
InitializeNoiseSuppression();
InitializeLevelEstimator();
InitializeVoiceDetection();
+ InitializeLevelController();
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
if (debug_dump_.debug_file->is_open()) {
@@ -408,6 +414,13 @@ void AudioProcessingImpl::SetExtraOptions(const Config& config) {
InitializeTransient();
}
+ if (capture_nonlocked_.level_controller_enabled !=
+ config.Get<LevelControl>().enabled) {
+ capture_nonlocked_.level_controller_enabled =
+ config.Get<LevelControl>().enabled;
+ InitializeLevelController();
+ }
+
if(capture_nonlocked_.intelligibility_enabled !=
config.Get<Intelligibility>().enabled) {
capture_nonlocked_.intelligibility_enabled =
@@ -759,6 +772,10 @@ int AudioProcessingImpl::ProcessStreamLocked() {
capture_.key_pressed);
}
+ if (capture_nonlocked_.level_controller_enabled) {
+ private_submodules_->level_controller->Process(ca);
+ }
+
// The level estimator operates on the recombined data.
public_submodules_->level_estimator->ProcessStream(ca);
@@ -1118,7 +1135,8 @@ bool AudioProcessingImpl::output_copy_needed() const {
// Check if we've upmixed or downmixed the audio.
return ((formats_.api_format.output_stream().num_channels() !=
formats_.api_format.input_stream().num_channels()) ||
- is_fwd_processed() || capture_.transient_suppressor_enabled);
+ is_fwd_processed() || capture_.transient_suppressor_enabled ||
+ capture_nonlocked_.level_controller_enabled);
}
bool AudioProcessingImpl::fwd_synthesis_needed() const {
@@ -1247,6 +1265,10 @@ void AudioProcessingImpl::InitializeLevelEstimator() {
public_submodules_->level_estimator->Initialize();
}
+void AudioProcessingImpl::InitializeLevelController() {
+ private_submodules_->level_controller->Initialize(proc_sample_rate_hz());
+}
+
void AudioProcessingImpl::InitializeVoiceDetection() {
public_submodules_->voice_detection->Initialize(proc_split_sample_rate_hz());
}

Powered by Google App Engine
This is Rietveld 408576698