mirror of
https://github.com/LMMS/lmms.git
synced 2026-03-13 11:38:24 -04:00
FifoBuffer adjustments (#5803)
This commit is contained in:
committed by
GitHub
parent
1744fd7dc1
commit
e900576dbd
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* fifo_buffer.h - FIFO fixed-size buffer
|
||||
* FifoBuffer.h - FIFO fixed-size buffer
|
||||
*
|
||||
* Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
|
||||
*
|
||||
@@ -29,66 +29,63 @@
|
||||
|
||||
|
||||
template<typename T>
|
||||
class fifoBuffer
|
||||
class FifoBuffer
|
||||
{
|
||||
public:
|
||||
fifoBuffer( int _size ) :
|
||||
m_reader_sem( _size ),
|
||||
m_writer_sem( _size ),
|
||||
m_reader_index( 0 ),
|
||||
m_writer_index( 0 ),
|
||||
m_size( _size )
|
||||
FifoBuffer(int size) :
|
||||
m_readSem(size),
|
||||
m_writeSem(size),
|
||||
m_readIndex(0),
|
||||
m_writeIndex(0),
|
||||
m_size(size)
|
||||
{
|
||||
m_buffer = new T[_size];
|
||||
m_reader_sem.acquire( _size );
|
||||
m_buffer = new T[size];
|
||||
m_readSem.acquire(size);
|
||||
}
|
||||
|
||||
~fifoBuffer()
|
||||
~FifoBuffer()
|
||||
{
|
||||
delete[] m_buffer;
|
||||
m_reader_sem.release( m_size );
|
||||
m_readSem.release(m_size);
|
||||
}
|
||||
|
||||
void write( T _element )
|
||||
void write(T element)
|
||||
{
|
||||
m_writer_sem.acquire();
|
||||
m_buffer[m_writer_index++] = _element;
|
||||
m_writer_index %= m_size;
|
||||
m_reader_sem.release();
|
||||
m_writeSem.acquire();
|
||||
m_buffer[m_writeIndex++] = element;
|
||||
m_writeIndex %= m_size;
|
||||
m_readSem.release();
|
||||
}
|
||||
|
||||
T read()
|
||||
{
|
||||
m_reader_sem.acquire();
|
||||
T element = m_buffer[m_reader_index++];
|
||||
m_reader_index %= m_size;
|
||||
m_writer_sem.release();
|
||||
return( element );
|
||||
m_readSem.acquire();
|
||||
T element = m_buffer[m_readIndex++];
|
||||
m_readIndex %= m_size;
|
||||
m_writeSem.release();
|
||||
return element;
|
||||
}
|
||||
|
||||
void waitUntilRead()
|
||||
{
|
||||
m_writer_sem.acquire( m_size );
|
||||
m_writer_sem.release( m_size );
|
||||
m_writeSem.acquire(m_size);
|
||||
m_writeSem.release(m_size);
|
||||
}
|
||||
|
||||
bool available()
|
||||
{
|
||||
return( m_reader_sem.available() );
|
||||
return m_readSem.available();
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
QSemaphore m_reader_sem;
|
||||
QSemaphore m_writer_sem;
|
||||
int m_reader_index;
|
||||
int m_writer_index;
|
||||
QSemaphore m_readSem;
|
||||
QSemaphore m_writeSem;
|
||||
int m_readIndex;
|
||||
int m_writeIndex;
|
||||
int m_size;
|
||||
T * m_buffer;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -35,7 +35,7 @@
|
||||
#include "lmms_basics.h"
|
||||
#include "LocklessList.h"
|
||||
#include "Note.h"
|
||||
#include "fifo_buffer.h"
|
||||
#include "FifoBuffer.h"
|
||||
#include "MixerProfiler.h"
|
||||
|
||||
|
||||
@@ -328,19 +328,19 @@ signals:
|
||||
|
||||
|
||||
private:
|
||||
typedef fifoBuffer<surroundSampleFrame *> fifo;
|
||||
typedef FifoBuffer<surroundSampleFrame *> Fifo;
|
||||
|
||||
class fifoWriter : public QThread
|
||||
{
|
||||
public:
|
||||
fifoWriter(Mixer * mixer, fifo * _fifo);
|
||||
fifoWriter( Mixer * mixer, Fifo * fifo );
|
||||
|
||||
void finish();
|
||||
|
||||
|
||||
private:
|
||||
Mixer * m_mixer;
|
||||
fifo * m_fifo;
|
||||
Fifo * m_fifo;
|
||||
volatile bool m_writing;
|
||||
|
||||
void run() override;
|
||||
@@ -416,7 +416,7 @@ private:
|
||||
QString m_midiClientName;
|
||||
|
||||
// FIFO stuff
|
||||
fifo * m_fifo;
|
||||
Fifo * m_fifo;
|
||||
fifoWriter * m_fifoWriter;
|
||||
|
||||
MixerProfiler m_profiler;
|
||||
|
||||
@@ -338,7 +338,7 @@ public:
|
||||
|
||||
void exportProjectMidi(QString const & exportFileName) const;
|
||||
|
||||
inline void setLoadOnLauch(bool value) { m_loadOnLaunch = value; }
|
||||
inline void setLoadOnLaunch(bool value) { m_loadOnLaunch = value; }
|
||||
SaveOptions &getSaveOptions() {
|
||||
return m_saveOptions;
|
||||
}
|
||||
|
||||
@@ -131,7 +131,7 @@ Mixer::Mixer( bool renderOnly ) :
|
||||
}
|
||||
|
||||
// allocte the FIFO from the determined size
|
||||
m_fifo = new fifo( fifoSize );
|
||||
m_fifo = new Fifo( fifoSize );
|
||||
|
||||
// now that framesPerPeriod is fixed initialize global BufferManager
|
||||
BufferManager::init( m_framesPerPeriod );
|
||||
@@ -1222,9 +1222,9 @@ MidiClient * Mixer::tryMidiClients()
|
||||
|
||||
|
||||
|
||||
Mixer::fifoWriter::fifoWriter( Mixer* mixer, fifo * _fifo ) :
|
||||
Mixer::fifoWriter::fifoWriter( Mixer* mixer, Fifo * fifo ) :
|
||||
m_mixer( mixer ),
|
||||
m_fifo( _fifo ),
|
||||
m_fifo( fifo ),
|
||||
m_writing( true )
|
||||
{
|
||||
setObjectName("Mixer::fifoWriter");
|
||||
|
||||
@@ -1646,7 +1646,7 @@ void MainWindow::onImportProject()
|
||||
ImportFilter::import( ofd.selectedFiles()[0], song );
|
||||
}
|
||||
|
||||
song->setLoadOnLauch(false);
|
||||
song->setLoadOnLaunch(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user