CubicSDR/src/process/VisualProcessor.h

59 lines
1.4 KiB
C
Raw Normal View History

#pragma once
#include "CubicSDRDefs.h"
#include "ThreadQueue.h"
typedef ThreadQueue<ReferenceCounter *> VisualDataQueue;
class VisualProcessor {
public:
void setInput(VisualDataQueue *vis_in) {
2015-07-27 21:45:24 -04:00
busy_update.lock();
input = vis_in;
busy_update.unlock();
}
void attachOutput(VisualDataQueue *vis_out) {
// attach an output queue
2015-07-27 21:45:24 -04:00
busy_update.lock();
outputs.push_back(vis_out);
busy_update.unlock();
}
void removeOutput(VisualDataQueue *vis_out) {
// remove an output queue
2015-07-27 21:45:24 -04:00
busy_update.lock();
std::vector<VisualDataQueue *>::iterator i = std::find(outputs.begin(), outputs.end(), vis_out);
if (i != outputs.end()) {
outputs.erase(i);
}
busy_update.unlock();
}
2015-07-27 21:45:24 -04:00
void run() {
busy_update.lock();
process();
busy_update.unlock();
}
virtual void process() {
2015-07-27 21:45:24 -04:00
// process inputs to output
// distribute(output);
}
protected:
void distribute(ReferenceCounter *output) {
// distribute outputs
2015-07-27 21:45:24 -04:00
output->setRefCount(outputs.size());
std::vector<VisualDataQueue *>::iterator outputs_i;
for (outputs_i = outputs.begin(); outputs_i != outputs.begin(); outputs_i++) {
(*outputs_i)->push(output);
}
}
VisualDataQueue * input;
std::vector<VisualDataQueue *> outputs;
std::mutex busy_update;
};