| 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 12b4c949046f08ddcc3f974d26024bea7e516b54..22f18eef38834beae85b8e41c41a9797c6e53bfa 100644
|
| --- a/webrtc/modules/audio_processing/audio_processing_impl.cc
|
| +++ b/webrtc/modules/audio_processing/audio_processing_impl.cc
|
| @@ -23,12 +23,12 @@
|
| #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"
|
| +#include "webrtc/modules/audio_processing/biquad_high_pass_filter.h"
|
| #include "webrtc/modules/audio_processing/common.h"
|
| #include "webrtc/modules/audio_processing/echo_cancellation_impl.h"
|
| #include "webrtc/modules/audio_processing/echo_control_mobile_impl.h"
|
| #include "webrtc/modules/audio_processing/gain_control_for_experimental_agc.h"
|
| #include "webrtc/modules/audio_processing/gain_control_impl.h"
|
| -#include "webrtc/modules/audio_processing/high_pass_filter_impl.h"
|
| #if WEBRTC_INTELLIGIBILITY_ENHANCER
|
| #include "webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h"
|
| #endif
|
| @@ -218,7 +218,6 @@ struct AudioProcessingImpl::ApmPublicSubmodules {
|
| std::unique_ptr<EchoCancellationImpl> echo_cancellation;
|
| std::unique_ptr<EchoControlMobileImpl> echo_control_mobile;
|
| std::unique_ptr<GainControlImpl> gain_control;
|
| - std::unique_ptr<HighPassFilterImpl> high_pass_filter;
|
| std::unique_ptr<LevelEstimatorImpl> level_estimator;
|
| std::unique_ptr<NoiseSuppressionImpl> noise_suppression;
|
| std::unique_ptr<VoiceDetectionImpl> voice_detection;
|
| @@ -238,6 +237,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<BiquadHighPassFilter> high_pass_filter;
|
| std::unique_ptr<LevelController> level_controller;
|
| };
|
|
|
| @@ -266,7 +266,8 @@ AudioProcessingImpl::AudioProcessingImpl(const webrtc::Config& config)
|
|
|
| AudioProcessingImpl::AudioProcessingImpl(const webrtc::Config& config,
|
| NonlinearBeamformer* beamformer)
|
| - : public_submodules_(new ApmPublicSubmodules()),
|
| + : high_pass_filter_impl_(new HighPassFilterImpl(this)),
|
| + public_submodules_(new ApmPublicSubmodules()),
|
| private_submodules_(new ApmPrivateSubmodules(beamformer)),
|
| constants_(config.Get<ExperimentalAgc>().startup_min_volume,
|
| #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
|
| @@ -293,8 +294,6 @@ AudioProcessingImpl::AudioProcessingImpl(const webrtc::Config& config,
|
| new EchoControlMobileImpl(&crit_render_, &crit_capture_));
|
| public_submodules_->gain_control.reset(
|
| new GainControlImpl(&crit_capture_, &crit_capture_));
|
| - public_submodules_->high_pass_filter.reset(
|
| - new HighPassFilterImpl(&crit_capture_));
|
| public_submodules_->level_estimator.reset(
|
| new LevelEstimatorImpl(&crit_capture_));
|
| public_submodules_->noise_suppression.reset(
|
| @@ -462,8 +461,7 @@ int AudioProcessingImpl::InitializeLocked() {
|
| #if WEBRTC_INTELLIGIBILITY_ENHANCER
|
| InitializeIntelligibility();
|
| #endif
|
| - public_submodules_->high_pass_filter->Initialize(num_proc_channels(),
|
| - proc_sample_rate_hz());
|
| + InitializeHighPassFilter();
|
| public_submodules_->noise_suppression->Initialize(num_proc_channels(),
|
| proc_sample_rate_hz());
|
| public_submodules_->voice_detection->Initialize(proc_split_sample_rate_hz());
|
| @@ -585,6 +583,11 @@ void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
| << capture_nonlocked_.level_controller_enabled;
|
|
|
| private_submodules_->level_controller->ApplyConfig(config_.level_controller);
|
| +
|
| + InitializeHighPassFilter();
|
| +
|
| + LOG(LS_INFO) << "Highpass filter activated: "
|
| + << config_.high_pass_filter.enabled;
|
| }
|
|
|
| void AudioProcessingImpl::SetExtraOptions(const webrtc::Config& config) {
|
| @@ -1033,7 +1036,9 @@ int AudioProcessingImpl::ProcessCaptureStreamLocked() {
|
| capture_buffer->set_num_channels(1);
|
| }
|
|
|
| - public_submodules_->high_pass_filter->ProcessCaptureAudio(capture_buffer);
|
| + if (private_submodules_->high_pass_filter) {
|
| + private_submodules_->high_pass_filter->Process(capture_buffer);
|
| + }
|
| RETURN_ON_ERR(
|
| public_submodules_->gain_control->AnalyzeCaptureAudio(capture_buffer));
|
| public_submodules_->noise_suppression->AnalyzeCaptureAudio(capture_buffer);
|
| @@ -1433,7 +1438,7 @@ GainControl* AudioProcessingImpl::gain_control() const {
|
| }
|
|
|
| HighPassFilter* AudioProcessingImpl::high_pass_filter() const {
|
| - return public_submodules_->high_pass_filter.get();
|
| + return high_pass_filter_impl_.get();
|
| }
|
|
|
| LevelEstimator* AudioProcessingImpl::level_estimator() const {
|
| @@ -1450,7 +1455,7 @@ VoiceDetection* AudioProcessingImpl::voice_detection() const {
|
|
|
| bool AudioProcessingImpl::UpdateActiveSubmoduleStates() {
|
| return submodule_states_.Update(
|
| - public_submodules_->high_pass_filter->is_enabled(),
|
| + config_.high_pass_filter.enabled,
|
| public_submodules_->echo_cancellation->is_enabled(),
|
| public_submodules_->echo_control_mobile->is_enabled(),
|
| public_submodules_->noise_suppression->is_enabled(),
|
| @@ -1498,6 +1503,15 @@ void AudioProcessingImpl::InitializeIntelligibility() {
|
| #endif
|
| }
|
|
|
| +void AudioProcessingImpl::InitializeHighPassFilter() {
|
| + if (config_.high_pass_filter.enabled) {
|
| + private_submodules_->high_pass_filter.reset(
|
| + new BiquadHighPassFilter(num_proc_channels(), proc_sample_rate_hz()));
|
| + } else {
|
| + private_submodules_->high_pass_filter.reset();
|
| + }
|
| +}
|
| +
|
| void AudioProcessingImpl::InitializeLevelController() {
|
| private_submodules_->level_controller->Initialize(proc_sample_rate_hz());
|
| }
|
| @@ -1677,7 +1691,7 @@ int AudioProcessingImpl::WriteConfigMessage(bool forced) {
|
| public_submodules_->gain_control->is_limiter_enabled());
|
| config.set_noise_robust_agc_enabled(constants_.use_experimental_agc);
|
|
|
| - config.set_hpf_enabled(public_submodules_->high_pass_filter->is_enabled());
|
| + config.set_hpf_enabled(config_.high_pass_filter.enabled);
|
|
|
| config.set_ns_enabled(public_submodules_->noise_suppression->is_enabled());
|
| config.set_ns_level(
|
|
|