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

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

Issue 2415403002: Introduced the new parameter setting scheme for activating the high-pass filter in APM (Closed)
Patch Set: New approach for introducing the new parameter setting scheme Created 4 years, 2 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 93e43f7add126592ddf940480d53292b5280ce45..18546b2560e4231754acaaf6faba5999163b6b6e 100644
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc
@@ -23,6 +23,7 @@
#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"
@@ -218,7 +219,7 @@ 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<HighPassFilterImpl> high_pass_filter_impl;
the sun 2016/10/26 09:06:43 Since the HPFImpl is now just redirecting calls on
peah-webrtc 2016/10/28 05:50:28 Great suggestion! I added it to the APM class. I d
std::unique_ptr<LevelEstimatorImpl> level_estimator;
std::unique_ptr<NoiseSuppressionImpl> noise_suppression;
std::unique_ptr<VoiceDetectionImpl> voice_detection;
@@ -238,6 +239,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;
};
@@ -293,8 +295,8 @@ 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_->high_pass_filter_impl.reset(
+ new HighPassFilterImpl(this));
public_submodules_->level_estimator.reset(
new LevelEstimatorImpl(&crit_capture_));
public_submodules_->noise_suppression.reset(
@@ -462,8 +464,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 +586,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: "
the sun 2016/10/26 09:06:43 Move log line into InitializeHighPassFilter?
peah-webrtc 2016/10/28 05:50:28 That would make sense, but currently InitializeHig
+ << config_.high_pass_filter.enabled;
}
void AudioProcessingImpl::SetExtraOptions(const webrtc::Config& config) {
@@ -949,7 +955,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);
@@ -1355,7 +1363,7 @@ GainControl* AudioProcessingImpl::gain_control() const {
}
HighPassFilter* AudioProcessingImpl::high_pass_filter() const {
- return public_submodules_->high_pass_filter.get();
+ return public_submodules_->high_pass_filter_impl.get();
}
LevelEstimator* AudioProcessingImpl::level_estimator() const {
@@ -1370,9 +1378,18 @@ VoiceDetection* AudioProcessingImpl::voice_detection() const {
return public_submodules_->voice_detection.get();
}
+void AudioProcessingImpl::EnableHighPassFilter(bool enable) {
+ config_.high_pass_filter.enabled = enable;
the sun 2016/10/26 09:06:43 Thread checks?
peah-webrtc 2016/10/28 05:50:28 I see now that there is a lock missing here. I fix
+ ApplyConfig(config_);
+}
+
+bool AudioProcessingImpl::IsHighPassFilterEnabled() {
+ return config_.high_pass_filter.enabled;
+}
+
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(),
@@ -1420,6 +1437,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());
}
@@ -1599,7 +1625,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(

Powered by Google App Engine
This is Rietveld 408576698