Skip to content

Commit

Permalink
FifoBuffer adjustments (#5803)
Browse files Browse the repository at this point in the history
  • Loading branch information
M374LX authored Jan 23, 2021
1 parent 1744fd7 commit e900576
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 42 deletions.
61 changes: 29 additions & 32 deletions include/fifo_buffer.h → include/FifoBuffer.h
Original file line number Diff line number Diff line change
@@ -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>
*
Expand Down Expand Up @@ -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
10 changes: 5 additions & 5 deletions include/Mixer.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
#include "lmms_basics.h"
#include "LocklessList.h"
#include "Note.h"
#include "fifo_buffer.h"
#include "FifoBuffer.h"
#include "MixerProfiler.h"


Expand Down Expand Up @@ -328,19 +328,19 @@ class LMMS_EXPORT Mixer : public QObject


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;
Expand Down Expand Up @@ -416,7 +416,7 @@ class LMMS_EXPORT Mixer : public QObject
QString m_midiClientName;

// FIFO stuff
fifo * m_fifo;
Fifo * m_fifo;
fifoWriter * m_fifoWriter;

MixerProfiler m_profiler;
Expand Down
2 changes: 1 addition & 1 deletion include/Song.h
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ class LMMS_EXPORT Song : public TrackContainer

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;
}
Expand Down
6 changes: 3 additions & 3 deletions src/core/Mixer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
Expand Down Expand Up @@ -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");
Expand Down
2 changes: 1 addition & 1 deletion src/gui/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1646,7 +1646,7 @@ void MainWindow::onImportProject()
ImportFilter::import( ofd.selectedFiles()[0], song );
}

song->setLoadOnLauch(false);
song->setLoadOnLaunch(false);
}
}

Expand Down

0 comments on commit e900576

Please sign in to comment.