Index: webrtc/modules/audio_processing/noise_suppression_impl.cc |
diff --git a/webrtc/modules/audio_processing/noise_suppression_impl.cc b/webrtc/modules/audio_processing/noise_suppression_impl.cc |
index d4f8bbb60c234360df42c54dc188a058c2227fb9..ee0deecbdf72c39ae72882402189f5068c9da20e 100644 |
--- a/webrtc/modules/audio_processing/noise_suppression_impl.cc |
+++ b/webrtc/modules/audio_processing/noise_suppression_impl.cc |
@@ -54,21 +54,26 @@ NoiseSuppressionImpl::~NoiseSuppressionImpl() {} |
void NoiseSuppressionImpl::Initialize(int channels, int sample_rate_hz) { |
RTC_DCHECK_LE(0, channels); |
- std::vector<rtc::scoped_ptr<Suppressor>> new_suppressors(channels); |
- for (int i = 0; i < channels; i++) { |
- new_suppressors[i].reset(new Suppressor(sample_rate_hz)); |
- } |
rtc::CritScope cs(crit_); |
+ channels_ = channels; |
+ sample_rate_hz_ = sample_rate_hz; |
+ std::vector<rtc::scoped_ptr<Suppressor>> new_suppressors; |
+ if (enabled_) { |
+ new_suppressors.resize(channels); |
+ for (int i = 0; i < channels; i++) { |
+ new_suppressors[i].reset(new Suppressor(sample_rate_hz)); |
+ } |
+ } |
suppressors_.swap(new_suppressors); |
set_level(level_); |
} |
-int NoiseSuppressionImpl::AnalyzeCaptureAudio(AudioBuffer* audio) { |
+void NoiseSuppressionImpl::AnalyzeCaptureAudio(AudioBuffer* audio) { |
RTC_DCHECK(audio); |
#if defined(WEBRTC_NS_FLOAT) |
rtc::CritScope cs(crit_); |
if (!enabled_) { |
- return AudioProcessing::kNoError; |
+ return; |
} |
RTC_DCHECK_GE(160u, audio->num_frames_per_band()); |
@@ -79,14 +84,13 @@ int NoiseSuppressionImpl::AnalyzeCaptureAudio(AudioBuffer* audio) { |
audio->split_bands_const_f(i)[kBand0To8kHz]); |
} |
#endif |
- return AudioProcessing::kNoError; |
} |
-int NoiseSuppressionImpl::ProcessCaptureAudio(AudioBuffer* audio) { |
+void NoiseSuppressionImpl::ProcessCaptureAudio(AudioBuffer* audio) { |
RTC_DCHECK(audio); |
rtc::CritScope cs(crit_); |
if (!enabled_) { |
- return AudioProcessing::kNoError; |
+ return; |
} |
RTC_DCHECK_GE(160u, audio->num_frames_per_band()); |
@@ -105,12 +109,14 @@ int NoiseSuppressionImpl::ProcessCaptureAudio(AudioBuffer* audio) { |
audio->split_bands(i)); |
#endif |
} |
- return AudioProcessing::kNoError; |
} |
int NoiseSuppressionImpl::Enable(bool enable) { |
rtc::CritScope cs(crit_); |
- enabled_ = enable; |
+ if (enabled_ != enable) { |
+ enabled_ = enable; |
+ Initialize(channels_, sample_rate_hz_); |
+ } |
return AudioProcessing::kNoError; |
} |
@@ -120,7 +126,6 @@ bool NoiseSuppressionImpl::is_enabled() const { |
} |
int NoiseSuppressionImpl::set_level(Level level) { |
- rtc::CritScope cs(crit_); |
int policy = 1; |
switch (level) { |
case NoiseSuppression::kLow: |
@@ -138,6 +143,7 @@ int NoiseSuppressionImpl::set_level(Level level) { |
default: |
RTC_NOTREACHED(); |
} |
+ rtc::CritScope cs(crit_); |
level_ = level; |
for (auto& suppressor : suppressors_) { |
int error = NS_SET_POLICY(suppressor->state(), policy); |