1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-03 06:24:48 -04:00

Tx support: single channel: make FIFO read and writes truly independent (unoptimized)

This commit is contained in:
f4exb
2018-01-02 01:33:09 +01:00
parent b731ff851a
commit 420ef78ad5
4 changed files with 42 additions and 8 deletions
+29 -3
View File
@@ -20,7 +20,8 @@
BasebandSampleSource::BasebandSampleSource() :
m_guiMessageQueue(0),
m_sampleFifo(48000) // arbitrary, will be adjusted to match device sink FIFO size
m_sampleFifo(48000), // arbitrary, will be adjusted to match device sink FIFO size
m_deviceSampleFifo(0)
{
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
connect(&m_sampleFifo, SIGNAL(dataWrite(int)), this, SLOT(handleWriteToFifo(int)));
@@ -44,16 +45,41 @@ void BasebandSampleSource::handleInputMessages()
}
void BasebandSampleSource::handleWriteToFifo(int nbSamples)
{
handleWriteToFifo(&m_sampleFifo, nbSamples);
}
void BasebandSampleSource::handleWriteToDeviceFifo(int nbSamples)
{
handleWriteToFifo(m_deviceSampleFifo, nbSamples);
}
void BasebandSampleSource::handleWriteToFifo(SampleSourceFifo *sampleFifo, int nbSamples)
{
SampleVector::iterator writeAt;
m_sampleFifo.getWriteIterator(writeAt);
sampleFifo->getWriteIterator(writeAt);
pullAudio(nbSamples); // Pre-fetch input audio samples this is mandatory to keep things running smoothly
for (int i = 0; i < nbSamples; i++)
{
pull((*writeAt));
m_sampleFifo.bumpIndex(writeAt);
sampleFifo->bumpIndex(writeAt);
}
}
void BasebandSampleSource::setDeviceSampleSourceFifo(SampleSourceFifo *deviceSampleFifo)
{
if (m_deviceSampleFifo != deviceSampleFifo)
{
if (m_deviceSampleFifo) {
disconnect(m_deviceSampleFifo, SIGNAL(dataWrite(int)), this, SLOT(handleWriteToDeviceFifo(int)));
}
if (deviceSampleFifo) {
connect(deviceSampleFifo, SIGNAL(dataWrite(int)), this, SLOT(handleWriteToDeviceFifo(int)));
}
m_deviceSampleFifo = deviceSampleFifo;
}
}