From dc561a07e7677f2922a38c8cdf7ea4158686197d Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Thu, 26 Nov 2009 01:36:36 +0100 Subject: [PATCH] Revert "Mixer, FifoBuffer, AudioDevice: removed memory allocation/free cycles" This reverts commit c517f1fa5a1ff2af04b4d23af748518f7f78a97c. The commit was not very helpful and introduced new xrun problems. Instead I'll be rewriting the part of LMMS where Mixer, Mixer's quality settings, Buffer FIFO and AudioDevice are sticked together. --- include/fifo_buffer.h | 12 +----------- src/core/audio/AudioDevice.cpp | 5 +++++ src/core/mixer.cpp | 6 +----- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/include/fifo_buffer.h b/include/fifo_buffer.h index 22dbcca80..4bf908611 100644 --- a/include/fifo_buffer.h +++ b/include/fifo_buffer.h @@ -41,10 +41,6 @@ public: m_size( _size ) { m_buffer = new T[_size]; - for( int i = 0; i < m_size; ++i ) - { - m_buffer[i] = NULL; - } m_readerSem.acquire( _size ); } @@ -54,15 +50,9 @@ public: m_readerSem.release( m_size ); } - T nextWriteBuffer() - { - m_writerSem.acquire(); - T buf = m_buffer[m_writerIndex]; - return buf; - } - void write( T _element ) { + m_writerSem.acquire(); m_buffer[m_writerIndex++] = _element; m_writerIndex %= m_size; m_readerSem.release(); diff --git a/src/core/audio/AudioDevice.cpp b/src/core/audio/AudioDevice.cpp index 18ad1a668..ba38a227f 100644 --- a/src/core/audio/AudioDevice.cpp +++ b/src/core/audio/AudioDevice.cpp @@ -104,6 +104,11 @@ fpp_t AudioDevice::getNextBuffer( sampleFrameA * _ab ) // release lock unlock(); + if( getMixer()->hasFifoWriter() ) + { + CPU::freeFrames( b ); + } + return frames; } diff --git a/src/core/mixer.cpp b/src/core/mixer.cpp index 310ec289a..b82d6886f 100644 --- a/src/core/mixer.cpp +++ b/src/core/mixer.cpp @@ -1151,12 +1151,8 @@ void mixer::fifoWriter::run() const fpp_t frames = m_mixer->framesPerPeriod(); while( m_writing ) { + sampleFrameA * buffer = CPU::allocFrames( frames ); const sampleFrameA * b = m_mixer->renderNextBuffer(); - sampleFrameA * buffer = m_fifo->nextWriteBuffer(); - if( buffer == NULL ) - { - buffer = CPU::allocFrames( frames ); - } CPU::memCpy( buffer, b, frames * sizeof( sampleFrameA ) ); m_fifo->write( buffer ); }