satdump/src-core/dsp/io/file_source.cpp
2025-03-09 10:16:40 +01:00

45 lines
No EOL
1.2 KiB
C++

#include "file_source.h"
namespace satdump
{
namespace ndsp
{
FileSourceBlock::FileSourceBlock()
: Block("file_source_cc", {}, {{"out", DSP_SAMPLE_TYPE_COMPLEX}})
{
outputs[0].fifo = std::make_shared<moodycamel::BlockingReaderWriterCircularBuffer<DSPBuffer>>(16);
}
FileSourceBlock::~FileSourceBlock()
{
}
bool FileSourceBlock::work()
{
if (!baseband_reader.is_eof())
{
auto oblk = DSPBuffer::newBufferSamples<complex_t>(d_buffer_size);
complex_t *obuf = oblk.getSamples<complex_t>();
int read = baseband_reader.read_samples(obuf, d_buffer_size);
if (d_iq_swap)
for (int i = 0; i < read; i++)
obuf[i] = complex_t(obuf[i].imag, obuf[i].real);
oblk.size = read;
outputs[0].fifo->wait_enqueue(oblk);
d_progress = baseband_reader.progress;
}
else
{
d_eof = true;
outputs[0].fifo->wait_enqueue(DSPBuffer::newBufferTerminator());
return true;
}
return false;
}
}
}