mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2024-09-27 15:56:48 -04:00
Visual processor basic framework
This commit is contained in:
parent
a8e24d5537
commit
090062191c
@ -21,6 +21,12 @@
|
|||||||
|
|
||||||
IMPLEMENT_APP(CubicSDR)
|
IMPLEMENT_APP(CubicSDR)
|
||||||
|
|
||||||
|
CubicSDR::CubicSDR() : appframe(NULL), m_glContext(NULL), frequency(0), offset(0), ppm(0), snap(1), sampleRate(DEFAULT_SAMPLE_RATE), directSamplingMode(0),
|
||||||
|
sdrThread(NULL), sdrPostThread(NULL), threadCmdQueueSDR(NULL), iqPostDataQueue(NULL), iqVisualQueue(NULL), audioVisualQueue(NULL), t_SDR(NULL), t_PostSDR(NULL) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool CubicSDR::OnInit() {
|
bool CubicSDR::OnInit() {
|
||||||
#ifdef _OSX_APP_
|
#ifdef _OSX_APP_
|
||||||
CFBundleRef mainBundle = CFBundleGetMainBundle();
|
CFBundleRef mainBundle = CFBundleGetMainBundle();
|
||||||
|
@ -23,10 +23,7 @@
|
|||||||
|
|
||||||
class CubicSDR: public wxApp {
|
class CubicSDR: public wxApp {
|
||||||
public:
|
public:
|
||||||
CubicSDR() :
|
CubicSDR();
|
||||||
appframe(NULL), m_glContext(NULL), frequency(0), sdrThread(NULL), sdrPostThread(NULL), threadCmdQueueSDR(NULL), iqVisualQueue(NULL), iqPostDataQueue(NULL), audioVisualQueue(NULL), t_SDR(NULL), t_PostSDR(NULL), sampleRate(DEFAULT_SAMPLE_RATE), offset(0), snap(1), directSamplingMode(0), ppm(0) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
PrimaryGLContext &GetContext(wxGLCanvas *canvas);
|
PrimaryGLContext &GetContext(wxGLCanvas *canvas);
|
||||||
|
|
||||||
|
@ -8,34 +8,51 @@ typedef ThreadQueue<ReferenceCounter *> VisualDataQueue;
|
|||||||
class VisualProcessor {
|
class VisualProcessor {
|
||||||
public:
|
public:
|
||||||
void setInput(VisualDataQueue *vis_in) {
|
void setInput(VisualDataQueue *vis_in) {
|
||||||
// set input queue
|
busy_update.lock();
|
||||||
|
input = vis_in;
|
||||||
|
busy_update.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void attachOutput(VisualDataQueue *vis_out) {
|
void attachOutput(VisualDataQueue *vis_out) {
|
||||||
// attach an output queue
|
// attach an output queue
|
||||||
|
busy_update.lock();
|
||||||
|
outputs.push_back(vis_out);
|
||||||
|
busy_update.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeOutput(VisualDataQueue *vis_out) {
|
void removeOutput(VisualDataQueue *vis_out) {
|
||||||
// remove an output queue
|
// remove an output queue
|
||||||
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
void pushInput(ReferenceCounter *input) {
|
void run() {
|
||||||
// push input data
|
busy_update.lock();
|
||||||
|
process();
|
||||||
|
busy_update.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void process() {
|
virtual void process() {
|
||||||
// process input to output
|
// process inputs to output
|
||||||
// distribute(output);
|
// distribute(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void distribute(ReferenceCounter *output) {
|
void distribute(ReferenceCounter *output) {
|
||||||
// distribute outputs
|
// distribute outputs
|
||||||
|
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;
|
VisualDataQueue * input;
|
||||||
std::vector<VisualDataQueue *> outputs;
|
std::vector<VisualDataQueue *> outputs;
|
||||||
|
|
||||||
std::mutex busy_update;
|
std::mutex busy_update;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user