diff --git a/sdrbase/CMakeLists.txt b/sdrbase/CMakeLists.txt
index c18993c1e..f82565a6a 100644
--- a/sdrbase/CMakeLists.txt
+++ b/sdrbase/CMakeLists.txt
@@ -97,6 +97,7 @@ set(sdrbase_SOURCES
dsp/phaselockcomplex.cpp
dsp/projector.cpp
dsp/samplesinkfifo.cpp
+ dsp/samplesinkvector.cpp
dsp/samplesourcefifo.cpp
dsp/samplesinkfifodoublebuffered.cpp
dsp/basebandsamplesink.cpp
@@ -233,6 +234,7 @@ set(sdrbase_HEADERS
dsp/projector.h
dsp/recursivefilters.h
dsp/samplesinkfifo.h
+ dsp/samplesinkvector.h
dsp/samplesourcefifo.h
dsp/samplesinkfifodoublebuffered.h
dsp/samplesinkfifodecimator.h
diff --git a/sdrbase/dsp/samplesinkvector.cpp b/sdrbase/dsp/samplesinkvector.cpp
new file mode 100644
index 000000000..68808d921
--- /dev/null
+++ b/sdrbase/dsp/samplesinkvector.cpp
@@ -0,0 +1,47 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2019 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#include "samplesinkvector.h"
+
+SampleSinkVector::SampleSinkVector(QObject* parent) :
+ QObject(parent),
+ m_dataSize(0)
+{}
+
+SampleSinkVector::~SampleSinkVector()
+{}
+
+void SampleSinkVector::write(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end)
+{
+ if (end - begin > m_sampleVector.size()) {
+ m_sampleVector.resize(end - begin);
+ }
+
+ std::copy(begin, end, m_sampleVector.begin());
+ m_dataSize = end - begin;
+ // m_begin = begin;
+ // m_end = end;
+ emit dataReady();
+}
+
+void SampleSinkVector::read(SampleVector::const_iterator& begin, SampleVector::const_iterator& end)
+{
+ begin = m_sampleVector.begin();
+ end = m_sampleVector.begin() + m_dataSize;
+ // begin = m_begin;
+ // end = m_end;
+}
\ No newline at end of file
diff --git a/sdrbase/dsp/samplesinkvector.h b/sdrbase/dsp/samplesinkvector.h
new file mode 100644
index 000000000..8eb008e52
--- /dev/null
+++ b/sdrbase/dsp/samplesinkvector.h
@@ -0,0 +1,48 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2019 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef SDRBASE_DSP_SAMPLESINKVECTOR_H_
+#define SDRBASE_DSP_SAMPLESINKVECTOR_H_
+
+#include
+
+#include "dsp/dsptypes.h"
+#include "export.h"
+
+class SDRBASE_API SampleSinkVector : public QObject {
+ Q_OBJECT
+
+public:
+ SampleSinkVector(QObject* parent = nullptr);
+ ~SampleSinkVector();
+
+ void write(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end);
+ void read(SampleVector::const_iterator& begin, SampleVector::const_iterator& end);
+
+signals:
+ void dataReady();
+
+private:
+ SampleVector m_sampleVector;
+ int m_dataSize;
+ int m_sampleVectorSize;
+ SampleVector::const_iterator m_begin;
+ SampleVector::const_iterator m_end;
+};
+
+
+#endif // SDRBASE_DSP_SAMPLESINKVECTOR_H_
diff --git a/sdrbase/dsp/threadedbasebandsamplesink.cpp b/sdrbase/dsp/threadedbasebandsamplesink.cpp
index cce47ec6a..809e6815b 100644
--- a/sdrbase/dsp/threadedbasebandsamplesink.cpp
+++ b/sdrbase/dsp/threadedbasebandsamplesink.cpp
@@ -8,7 +8,8 @@
ThreadedBasebandSampleSinkFifo::ThreadedBasebandSampleSinkFifo(BasebandSampleSink *sampleSink, std::size_t size) :
m_sampleSink(sampleSink)
{
- connect(&m_sampleFifo, SIGNAL(dataReady()), this, SLOT(handleFifoData()));
+ //connect(&m_sampleFifo, SIGNAL(dataReady()), this, SLOT(handleFifoData()));
+ connect(&m_sampleVector, SIGNAL(dataReady()), this, SLOT(handleVectorData()));
m_sampleFifo.setSize(size);
}
@@ -19,7 +20,20 @@ ThreadedBasebandSampleSinkFifo::~ThreadedBasebandSampleSinkFifo()
void ThreadedBasebandSampleSinkFifo::writeToFifo(SampleVector::const_iterator& begin, SampleVector::const_iterator& end)
{
- m_sampleFifo.write(begin, end);
+ //m_sampleFifo.write(begin, end);
+ m_sampleVector.write(begin, end);
+}
+
+void ThreadedBasebandSampleSinkFifo::handleVectorData()
+{
+ SampleVector::const_iterator vbegin;
+ SampleVector::const_iterator vend;
+
+ if (m_sampleSink)
+ {
+ m_sampleVector.read(vbegin, vend);
+ m_sampleSink->feed(vbegin, vend, false);
+ }
}
void ThreadedBasebandSampleSinkFifo::handleFifoData() // FIXME: Fixed? Move it to the new threadable sink class
diff --git a/sdrbase/dsp/threadedbasebandsamplesink.h b/sdrbase/dsp/threadedbasebandsamplesink.h
index d398a0da0..6c4acf814 100644
--- a/sdrbase/dsp/threadedbasebandsamplesink.h
+++ b/sdrbase/dsp/threadedbasebandsamplesink.h
@@ -23,6 +23,7 @@
#include
#include "samplesinkfifo.h"
+#include "samplesinkvector.h"
#include "util/messagequeue.h"
#include "export.h"
@@ -43,9 +44,11 @@ public:
BasebandSampleSink* m_sampleSink;
SampleSinkFifo m_sampleFifo;
+ SampleSinkVector m_sampleVector;
public slots:
void handleFifoData();
+ void handleVectorData();
};
/**