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 805e05eeee8d71643ca5d72b10df251b39a11e66..e99720ddb45975a3fe0c806ea8febe825ad9bfb8 100644 |
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc |
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc |
@@ -150,14 +150,13 @@ struct AudioProcessingImpl::ApmPublicSubmodules { |
: echo_cancellation(nullptr), |
echo_control_mobile(nullptr), |
gain_control(nullptr), |
- level_estimator(nullptr), |
voice_detection(nullptr) {} |
// Accessed externally of APM without any lock acquired. |
EchoCancellationImpl* echo_cancellation; |
EchoControlMobileImpl* echo_control_mobile; |
GainControlImpl* gain_control; |
rtc::scoped_ptr<HighPassFilterImpl> high_pass_filter; |
- LevelEstimatorImpl* level_estimator; |
+ rtc::scoped_ptr<LevelEstimatorImpl> level_estimator; |
rtc::scoped_ptr<NoiseSuppressionImpl> noise_suppression; |
VoiceDetectionImpl* voice_detection; |
rtc::scoped_ptr<GainControlForNewAgc> gain_control_for_new_agc; |
@@ -243,8 +242,8 @@ AudioProcessingImpl::AudioProcessingImpl(const Config& config, |
new GainControlImpl(this, &crit_capture_, &crit_capture_); |
public_submodules_->high_pass_filter.reset( |
new HighPassFilterImpl(&crit_capture_)); |
- public_submodules_->level_estimator = |
- new LevelEstimatorImpl(this, &crit_capture_); |
+ public_submodules_->level_estimator.reset( |
+ new LevelEstimatorImpl(&crit_capture_)); |
public_submodules_->noise_suppression.reset( |
new NoiseSuppressionImpl(&crit_capture_)); |
public_submodules_->voice_detection = |
@@ -259,8 +258,6 @@ AudioProcessingImpl::AudioProcessingImpl(const Config& config, |
private_submodules_->component_list.push_back( |
public_submodules_->gain_control); |
private_submodules_->component_list.push_back( |
- public_submodules_->level_estimator); |
- private_submodules_->component_list.push_back( |
public_submodules_->voice_detection); |
} |
@@ -398,6 +395,7 @@ int AudioProcessingImpl::InitializeLocked() { |
InitializeIntelligibility(); |
InitializeHighPassFilter(); |
InitializeNoiseSuppression(); |
+ InitializeLevelEstimator(); |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
if (debug_dump_.debug_file->Open()) { |
@@ -804,7 +802,7 @@ int AudioProcessingImpl::ProcessStreamLocked() { |
} |
// The level estimator operates on the recombined data. |
- RETURN_ON_ERR(public_submodules_->level_estimator->ProcessStream(ca)); |
+ public_submodules_->level_estimator->ProcessStream(ca); |
capture_.was_stream_delay_set = false; |
return kNoError; |
@@ -1146,7 +1144,7 @@ HighPassFilter* AudioProcessingImpl::high_pass_filter() const { |
LevelEstimator* AudioProcessingImpl::level_estimator() const { |
// Adding a lock here has no effect as it allows any access to the submodule |
// from the returned pointer. |
- return public_submodules_->level_estimator; |
+ return public_submodules_->level_estimator.get(); |
} |
NoiseSuppression* AudioProcessingImpl::noise_suppression() const { |
@@ -1178,6 +1176,9 @@ bool AudioProcessingImpl::is_data_processed() const { |
if (public_submodules_->noise_suppression->is_enabled()) { |
enabled_count++; |
} |
+ if (public_submodules_->level_estimator->is_enabled()) { |
+ enabled_count++; |
+ } |
// Data is unchanged if no components are enabled, or if only |
// public_submodules_->level_estimator |
@@ -1302,6 +1303,10 @@ void AudioProcessingImpl::InitializeNoiseSuppression() { |
proc_sample_rate_hz()); |
} |
+void AudioProcessingImpl::InitializeLevelEstimator() { |
+ public_submodules_->level_estimator->Initialize(); |
+} |
+ |
void AudioProcessingImpl::MaybeUpdateHistograms() { |
static const int kMinDiffDelayMs = 60; |