From 8f3bbf3cfafa8101d0b615275535f33d62ad1ff8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C3=ABl=20Carr=C3=A9?= <rafael.carre@savoirfairelinux.com> Date: Wed, 21 Sep 2011 17:33:22 -0400 Subject: [PATCH] Fix crash with noise suppressor --- .../audio/audiortp/AudioRtpRecordHandler.cpp | 19 ++++++++++--------- daemon/src/dbus/configurationmanager.cpp | 2 +- daemon/src/managerimpl.cpp | 4 ++-- daemon/src/managerimpl.h | 2 +- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/daemon/src/audio/audiortp/AudioRtpRecordHandler.cpp b/daemon/src/audio/audiortp/AudioRtpRecordHandler.cpp index 08cd50a8ca..8e783314b7 100644 --- a/daemon/src/audio/audiortp/AudioRtpRecordHandler.cpp +++ b/daemon/src/audio/audiortp/AudioRtpRecordHandler.cpp @@ -103,7 +103,7 @@ void AudioRtpRecordHandler::initNoiseSuppress() delete _audioRtpRecord._noiseSuppress; - _audioRtpRecord._noiseSuppress = new NoiseSuppress (getCodecFrameSize(), getCodecSampleRate()); + _audioRtpRecord._noiseSuppress = new NoiseSuppress(getCodecFrameSize(), getCodecSampleRate()); _audioRtpRecord.audioProcessMutex.leave(); } @@ -146,14 +146,9 @@ int AudioRtpRecordHandler::processDataEncode (void) fadeIn (micData, samples, &_audioRtpRecord._micAmplFactor); - if(Manager::instance().getEchoCancelState() == "enabled") + if(Manager::instance().getEchoCancelState()) echoCanceller.getData(micData); - _audioRtpRecord.audioProcessMutex.enter(); - if (Manager::instance().audioPreference.getNoiseReduce()) - _audioRtpRecord._noiseSuppress->process(micData, samples); - _audioRtpRecord.audioProcessMutex.leave(); - #ifdef DUMP_PROCESS_DATA_ENCODE teststream.write(reinterpret_cast<char *>(micData), bytesToGet); #endif @@ -164,8 +159,14 @@ int AudioRtpRecordHandler::processDataEncode (void) _audioRtpRecord._converter->resample (micData, micDataConverted, codecSampleRate, mainBufferSampleRate, samplesToGet); } + if (Manager::instance().audioPreference.getNoiseReduce()) { + _audioRtpRecord.audioProcessMutex.enter(); + _audioRtpRecord._noiseSuppress->process(micData, getCodecFrameSize()); + _audioRtpRecord.audioProcessMutex.leave(); + } + _audioRtpRecord.audioCodecMutex.enter(); - int compSize = _audioRtpRecord._audioCodec->encode (micDataEncoded, out, DEC_BUFFER_SIZE); + int compSize = _audioRtpRecord._audioCodec->encode (micDataEncoded, out, getCodecFrameSize()); _audioRtpRecord.audioCodecMutex.leave(); return compSize; @@ -205,7 +206,7 @@ void AudioRtpRecordHandler::processDataDecode (unsigned char *spkrData, unsigned out = spkrDataConverted; } - if(Manager::instance().getEchoCancelState() == "enabled") + if(Manager::instance().getEchoCancelState()) echoCanceller.putData(out, outSamples); Manager::instance().getMainBuffer()->putData (out, outSamples * sizeof (SFLDataFormat), id_); } diff --git a/daemon/src/dbus/configurationmanager.cpp b/daemon/src/dbus/configurationmanager.cpp index 25c7a683e2..0d926bf9ec 100644 --- a/daemon/src/dbus/configurationmanager.cpp +++ b/daemon/src/dbus/configurationmanager.cpp @@ -288,7 +288,7 @@ void ConfigurationManager::setNoiseSuppressState (const std::string& state) std::string ConfigurationManager::getEchoCancelState(void) { - return Manager::instance().getEchoCancelState(); + return Manager::instance().getEchoCancelState() ? "enabled" : "disabled"; } void ConfigurationManager::setEchoCancelState(const std::string& state) diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp index 222da33d09..c918912d44 100644 --- a/daemon/src/managerimpl.cpp +++ b/daemon/src/managerimpl.cpp @@ -2246,9 +2246,9 @@ void ManagerImpl::setNoiseSuppressState (const std::string &state) audioPreference.setNoiseReduce (state == "enabled"); } -std::string ManagerImpl::getEchoCancelState() const +bool ManagerImpl::getEchoCancelState() const { - return audioPreference.getEchoCancel() ? "enabled" : "disabled"; + return audioPreference.getEchoCancel(); } void ManagerImpl::setEchoCancelState(const std::string &state) diff --git a/daemon/src/managerimpl.h b/daemon/src/managerimpl.h index 024ec8992d..44a046d83f 100644 --- a/daemon/src/managerimpl.h +++ b/daemon/src/managerimpl.h @@ -567,7 +567,7 @@ class ManagerImpl * Get the echo canceller engin state from * the current audio layer */ - std::string getEchoCancelState(void) const; + bool getEchoCancelState(void) const; /** * Set the echo canceller engin state -- GitLab