Revert "Mixer, FifoBuffer, AudioDevice: removed memory allocation/free cycles"

This reverts commit c517f1fa5a.

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.
This commit is contained in:
Tobias Doerffel
2009-11-26 01:36:36 +01:00
parent c517f1fa5a
commit dc561a07e7
3 changed files with 7 additions and 16 deletions

View File

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

View File

@@ -104,6 +104,11 @@ fpp_t AudioDevice::getNextBuffer( sampleFrameA * _ab )
// release lock
unlock();
if( getMixer()->hasFifoWriter() )
{
CPU::freeFrames( b );
}
return frames;
}

View File

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