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:
@@ -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();
|
||||
|
||||
@@ -104,6 +104,11 @@ fpp_t AudioDevice::getNextBuffer( sampleFrameA * _ab )
|
||||
// release lock
|
||||
unlock();
|
||||
|
||||
if( getMixer()->hasFifoWriter() )
|
||||
{
|
||||
CPU::freeFrames( b );
|
||||
}
|
||||
|
||||
return frames;
|
||||
}
|
||||
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user