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()); |
} |