Fix NoiseSuppression initialization behavior. This was changed when removing the ProcessingComponent inheritance in https://codereview.webrtc.org/1507683006/.

BUG=webrtc:5298

Review URL: https://codereview.webrtc.org/1523323002

Cr-Commit-Position: refs/heads/master@{#11043}
This commit is contained in:
solenberg
2015-12-16 01:18:15 -08:00
committed by Commit bot
parent 45fd9fe92c
commit 29e2f9385b
2 changed files with 22 additions and 14 deletions

View File

@ -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);

View File

@ -27,8 +27,8 @@ class NoiseSuppressionImpl : public NoiseSuppression {
// TODO(peah): Fold into ctor, once public API is removed.
void Initialize(int channels, int sample_rate_hz);
int AnalyzeCaptureAudio(AudioBuffer* audio);
int ProcessCaptureAudio(AudioBuffer* audio);
void AnalyzeCaptureAudio(AudioBuffer* audio);
void ProcessCaptureAudio(AudioBuffer* audio);
// NoiseSuppression implementation.
int Enable(bool enable) override;
@ -42,6 +42,8 @@ class NoiseSuppressionImpl : public NoiseSuppression {
rtc::CriticalSection* const crit_;
bool enabled_ GUARDED_BY(crit_) = false;
Level level_ GUARDED_BY(crit_) = kModerate;
int channels_ GUARDED_BY(crit_) = 0;
int sample_rate_hz_ GUARDED_BY(crit_) = 0;
std::vector<rtc::scoped_ptr<Suppressor>> suppressors_ GUARDED_BY(crit_);
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(NoiseSuppressionImpl);
};