1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-23 00:18:37 -05:00

Implement own FIFO in BasebandSampleSource. SampleSourceFIFO: remove useless chunk size completely and set initial fill to only half the FIFO size

This commit is contained in:
f4exb 2016-12-23 14:29:42 +01:00
parent ce77f95a2c
commit e05822ba02
6 changed files with 10 additions and 7 deletions

View File

@ -86,7 +86,7 @@ void FileSinkThread::setSamplerate(int samplerate)
// resize sample FIFO // resize sample FIFO
if (m_sampleFifo) { if (m_sampleFifo) {
m_sampleFifo->resize(samplerate, samplerate/4); // 1s buffer with 250ms write chunk size m_sampleFifo->resize(samplerate); // 1s buffer
} }
m_samplerate = samplerate; m_samplerate = samplerate;

View File

@ -18,7 +18,8 @@
#include "dsp/basebandsamplesource.h" #include "dsp/basebandsamplesource.h"
#include "util/message.h" #include "util/message.h"
BasebandSampleSource::BasebandSampleSource() BasebandSampleSource::BasebandSampleSource() :
m_sampleFifo(48000) // arbitrary, will be adjusted to match device sink FIFO size
{ {
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
} }

View File

@ -57,6 +57,7 @@ public:
protected: protected:
MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication
MessageQueue m_outputMessageQueue; //!< Queue for asynchronous outbound communication MessageQueue m_outputMessageQueue; //!< Queue for asynchronous outbound communication
SampleSourceFifo m_sampleFifo; //!< Internal FIFO for multi-channel processing
protected slots: protected slots:
void handleInputMessages(); void handleInputMessages();

View File

@ -380,12 +380,14 @@ DSPDeviceSinkEngine::State DSPDeviceSinkEngine::gotoRunning()
for(BasebandSampleSources::const_iterator it = m_basebandSampleSources.begin(); it != m_basebandSampleSources.end(); it++) for(BasebandSampleSources::const_iterator it = m_basebandSampleSources.begin(); it != m_basebandSampleSources.end(); it++)
{ {
qDebug() << "DSPDeviceSinkEngine::gotoRunning: starting " << (*it)->objectName().toStdString().c_str(); qDebug() << "DSPDeviceSinkEngine::gotoRunning: starting " << (*it)->objectName().toStdString().c_str();
// TODO: equalize channel source FIFO size with device sink FIFO size
(*it)->start(); (*it)->start();
} }
for (ThreadedBasebandSampleSources::const_iterator it = m_threadedBasebandSampleSources.begin(); it != m_threadedBasebandSampleSources.end(); ++it) for (ThreadedBasebandSampleSources::const_iterator it = m_threadedBasebandSampleSources.begin(); it != m_threadedBasebandSampleSources.end(); ++it)
{ {
qDebug() << "DSPDeviceSinkEngine::gotoRunning: starting ThreadedSampleSource(" << (*it)->getSampleSourceObjectName().toStdString().c_str() << ")"; qDebug() << "DSPDeviceSinkEngine::gotoRunning: starting ThreadedSampleSource(" << (*it)->getSampleSourceObjectName().toStdString().c_str() << ")";
// TODO: equalize channel source FIFO size with device sink FIFO size
(*it)->start(); (*it)->start();
} }

View File

@ -29,10 +29,9 @@ SampleSourceFifo::SampleSourceFifo(uint32_t size) :
SampleSourceFifo::~SampleSourceFifo() SampleSourceFifo::~SampleSourceFifo()
{} {}
void SampleSourceFifo::resize(uint32_t size, uint32_t samplesChunkSize) void SampleSourceFifo::resize(uint32_t size)
{ {
qDebug("SampleSourceFifo::resize: %d, %d", size, samplesChunkSize); qDebug("SampleSourceFifo::resize: %d", size);
assert(samplesChunkSize <= size/4);
m_size = size; m_size = size;
m_data.resize(2*m_size); m_data.resize(2*m_size);
@ -60,7 +59,7 @@ void SampleSourceFifo::readAdvance(SampleVector::iterator& readUntil, unsigned i
if (m_init) if (m_init)
{ {
emit dataWrite(m_size); emit dataWrite(m_size/2);
m_init = false; m_init = false;
} }
else if (i_delta > 0) else if (i_delta > 0)

View File

@ -31,7 +31,7 @@ public:
SampleSourceFifo(uint32_t size); SampleSourceFifo(uint32_t size);
~SampleSourceFifo(); ~SampleSourceFifo();
void resize(uint32_t size, uint32_t samplesChunkSize); void resize(uint32_t size);
void init(); void init();
/** advance read pointer for the given length and activate R/W signals */ /** advance read pointer for the given length and activate R/W signals */
void readAdvance(SampleVector::iterator& readUntil, unsigned int nbSamples); void readAdvance(SampleVector::iterator& readUntil, unsigned int nbSamples);