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