#include "selector.h" #include "dsp/block_helpers.h" #include #include namespace satdump { namespace ndsp { template SelectorBlock::SelectorBlock() : Block("selector_" + getShortTypeName() + getShortTypeName(), {{"in1", getTypeSampleType()}}, {{"out1", getTypeSampleType()}}) { } template SelectorBlock::~SelectorBlock() { } template bool SelectorBlock::work() { std::scoped_lock l(in_mtx); for (int i = 0; i < inputs.size(); i++) { DSPBuffer iblk; if (!inputs[i].fifo->try_dequeue(iblk)) continue; if (iblk.isTerminator()) { if (iblk.terminatorShouldPropagate()) outputs[0].fifo->wait_enqueue(outputs[0].fifo->newBufferTerminator()); inputs[i].fifo->free(iblk); return true; } if (i == active_id) { DSPBuffer oblk = outputs[0].fifo->newBufferSamples(iblk.max_size, sizeof(T)); memcpy(oblk.getSamples(), iblk.getSamples(), iblk.size * sizeof(T)); oblk.size = iblk.size; outputs[0].fifo->wait_enqueue(oblk); } inputs[i].fifo->free(iblk); } return false; } template class SelectorBlock; template class SelectorBlock; template class SelectorBlock; template class SelectorBlock; template class SelectorBlock; } // namespace ndsp } // namespace satdump