From 7ed982a07333cdfcb3721a9845e789c227b4d80b Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 18 Mar 2014 11:12:36 -0700 Subject: [PATCH] cleanup writing of silent frame to ring buffer --- libraries/audio/src/AudioRingBuffer.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/libraries/audio/src/AudioRingBuffer.cpp b/libraries/audio/src/AudioRingBuffer.cpp index ba21c6c9b9..9cef64e216 100644 --- a/libraries/audio/src/AudioRingBuffer.cpp +++ b/libraries/audio/src/AudioRingBuffer.cpp @@ -157,16 +157,18 @@ unsigned int AudioRingBuffer::samplesAvailable() const { } void AudioRingBuffer::addSilentFrame(int numSilentSamples) { - // setup the silent frame - int numSilentBytes = numSilentSamples * sizeof(int16_t); - char* silentFrame = new char[numSilentBytes]; - memset(silentFrame, 0, numSilentBytes); - - // write it - writeData(silentFrame, numSilentBytes); - - // delete the temporary silent frame - delete[] silentFrame; + // memset zeroes into the buffer, accomodate a wrap around the end + // push the _endOfLastWrite to the correct spot + if (_endOfLastWrite + numSilentSamples <= _buffer + _sampleCapacity) { + memset(_endOfLastWrite, 0, numSilentSamples * sizeof(int16_t)); + _endOfLastWrite += numSilentSamples; + } else { + int numSamplesToEnd = (_buffer + _sampleCapacity) - _endOfLastWrite; + memset(_endOfLastWrite, 0, numSilentSamples * sizeof(int16_t)); + memset(_buffer, 0, (numSilentSamples - numSamplesToEnd) * sizeof(int16_t)); + + _endOfLastWrite = _buffer + (numSilentSamples - numSamplesToEnd); + } } bool AudioRingBuffer::isNotStarvedOrHasMinimumSamples(unsigned int numRequiredSamples) const {