From d56a349dc90a96c2a2418dc68b30173381ca0027 Mon Sep 17 00:00:00 2001 From: Christian Daniel Date: Wed, 7 Aug 2013 17:08:54 +0200 Subject: fix audio crash and looping --- sdrbase/audio/audiooutput.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sdrbase/audio/audiooutput.cpp b/sdrbase/audio/audiooutput.cpp index 247111b..2bd6b93 100644 --- a/sdrbase/audio/audiooutput.cpp +++ b/sdrbase/audio/audiooutput.cpp @@ -81,6 +81,7 @@ void AudioOutput::stop() QMutexLocker mutexLocker(&m_mutex); if(m_audioOutput != NULL) { + m_audioOutput->stop(); delete m_audioOutput; m_audioOutput = NULL; } @@ -119,7 +120,7 @@ qint64 AudioOutput::readData(char* data, qint64 maxLen) if(m_mixBuffer.size() != framesPerBuffer * 2) return 0; } - memset(m_mixBuffer.data(), 0x00, framesPerBuffer * sizeof(m_mixBuffer[0])); // start with silence + memset(&m_mixBuffer[0], 0x00, 2 * framesPerBuffer * sizeof(m_mixBuffer[0])); // start with silence // sum up a block from all fifos for(AudioFifos::iterator it = m_audioFifos.begin(); it != m_audioFifos.end(); ++it) { @@ -141,12 +142,20 @@ qint64 AudioOutput::readData(char* data, qint64 maxLen) std::vector::const_iterator src = m_mixBuffer.begin(); qint16* dst = (qint16*)data; for(int i = 0; i < framesPerBuffer; ++i) { + // left channel qint32 s = *src++; if(s < -32768) s = -32768; else if(s > 32767) s = 32767; *dst++ = s; + // right channel + s = *src++; + if(s < -32768) + s = -32768; + else if(s > 32767) + s = 32767; + *dst++ = s; } return maxLen; -- cgit v1.2.3