mirror of
https://github.com/f4exb/sdrangel.git
synced 2026-06-02 14:04:46 -04:00
git clone git://git.osmocom.org/sdrangelove.git
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
#include "dsp/samplesink.h"
|
||||
|
||||
SampleSink::SampleSink()
|
||||
{
|
||||
}
|
||||
|
||||
SampleSink::~SampleSink()
|
||||
{
|
||||
}
|
||||
|
||||
#if 0
|
||||
#include "samplesink.h"
|
||||
|
||||
SampleSink::SampleSink() :
|
||||
m_sinkBuffer(),
|
||||
m_sinkBufferFill(0)
|
||||
{
|
||||
}
|
||||
|
||||
void SampleSink::feed(SampleVector::const_iterator begin, SampleVector::const_iterator end)
|
||||
{
|
||||
size_t wus = workUnitSize();
|
||||
|
||||
// make sure our buffer is big enough for at least one work unit
|
||||
if(m_sinkBuffer.size() < wus)
|
||||
m_sinkBuffer.resize(wus);
|
||||
|
||||
while(begin < end) {
|
||||
// if the buffer contains something, keep filling it until it contains one complete work unit
|
||||
if((m_sinkBufferFill > 0) && (m_sinkBufferFill < wus)) {
|
||||
// check number if missing samples, but don't copy more than we have
|
||||
size_t len = wus - m_sinkBufferFill;
|
||||
if(len > (size_t)(end - begin))
|
||||
len = end - begin;
|
||||
// copy
|
||||
std::copy(begin, begin + len, m_sinkBuffer.begin() + m_sinkBufferFill);
|
||||
// adjust pointers
|
||||
m_sinkBufferFill += len;
|
||||
begin += len;
|
||||
}
|
||||
|
||||
// if one complete work unit is in the buffer, feed it to the worker
|
||||
if(m_sinkBufferFill >= wus) {
|
||||
size_t done = 0;
|
||||
while(m_sinkBufferFill - done >= wus)
|
||||
done += work(m_sinkBuffer.begin() + done, m_sinkBuffer.begin() + done + wus);
|
||||
// now copy the remaining data to the front of the buffer (should be zero)
|
||||
if(m_sinkBufferFill - done > 0) {
|
||||
qDebug("error in SampleSink buffer management");
|
||||
std::copy(m_sinkBuffer.begin() + done, m_sinkBuffer.begin() + m_sinkBufferFill, m_sinkBuffer.begin());
|
||||
}
|
||||
m_sinkBufferFill -= done;
|
||||
}
|
||||
|
||||
// if no remainder from last run is buffered and we have at least one work unit left, feed the data to the worker
|
||||
if(m_sinkBufferFill == 0) {
|
||||
while((size_t)(end - begin) > wus)
|
||||
begin += work(begin, begin + wus);
|
||||
// copy any remaining data to the buffer
|
||||
std::copy(begin, end, m_sinkBuffer.begin());
|
||||
m_sinkBufferFill = end - begin;
|
||||
begin += m_sinkBufferFill;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user