#include "repeat.h" #include "dsp/block_helpers.h" #include namespace satdump { namespace ndsp { template RepeatBlock::RepeatBlock() : Block("repeat_" + getShortTypeName() + getShortTypeName(), {{"in", getTypeSampleType()}}, {{"out", getTypeSampleType()}}) { } template RepeatBlock::~RepeatBlock() { } template bool RepeatBlock::work() { DSPBuffer iblk = inputs[0].fifo->wait_dequeue(); if (iblk.isTerminator()) { if (iblk.terminatorShouldPropagate()) outputs[0].fifo->wait_enqueue(outputs[0].fifo->newBufferTerminator()); inputs[0].fifo->free(iblk); return true; } const int intpo = interpolation; DSPBuffer oblk = outputs[0].fifo->newBufferSamples(intpo * iblk.size, sizeof(T)); T *ibuf = iblk.getSamples(); T *obuf = oblk.getSamples(); for (int i = 0; i < iblk.size; i++) for (int ii = 0; ii < intpo; ii++) obuf[i * intpo + ii] = ibuf[i]; oblk.size = iblk.size * intpo; outputs[0].fifo->wait_enqueue(oblk); inputs[0].fifo->free(iblk); return false; } template class RepeatBlock; template class RepeatBlock; template class RepeatBlock; } // namespace ndsp } // namespace satdump