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..66edad374211b9aaaf533a2f37f76467d1de9ed0 100644 |
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc |
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc |
@@ -31,6 +31,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" |
#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 +133,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 +177,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 +200,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 +326,7 @@ int AudioProcessingImpl::InitializeLocked() { |
InitializeNoiseSuppression(); |
InitializeLevelEstimator(); |
InitializeVoiceDetection(); |
+ InitializeLevelController(); |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
if (debug_dump_.debug_file->is_open()) { |
@@ -408,6 +413,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 +771,10 @@ int AudioProcessingImpl::ProcessStreamLocked() { |
capture_.key_pressed); |
} |
+ if (capture_nonlocked_.level_controller_enabled) { |
+ private_submodules_->level_controller->Process(ca); |
aluebs-webrtc
2016/06/28 22:45:02
I am not sure how this component works (it is not
peah-webrtc
2016/06/29 06:22:09
The component indeed applies an additional gain.
aluebs-webrtc
2016/06/29 16:40:28
2) This CL concerns the IE, because it applies a g
peah-webrtc
2016/06/29 20:39:59
I definitely see that it affects the IE, but I thi
|
+ } |
+ |
// The level estimator operates on the recombined data. |
public_submodules_->level_estimator->ProcessStream(ca); |
@@ -1118,7 +1134,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 +1264,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()); |
} |