From 090062191cfb10cd61d56647e4918c51bea0907a Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Mon, 27 Jul 2015 21:45:24 -0400 Subject: [PATCH] Visual processor basic framework --- src/CubicSDR.cpp | 6 ++++++ src/CubicSDR.h | 5 +---- src/process/VisualProcessor.h | 27 ++++++++++++++++++++++----- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/CubicSDR.cpp b/src/CubicSDR.cpp index 2c8c2cb..e6742e5 100644 --- a/src/CubicSDR.cpp +++ b/src/CubicSDR.cpp @@ -21,6 +21,12 @@ 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() { #ifdef _OSX_APP_ CFBundleRef mainBundle = CFBundleGetMainBundle(); diff --git a/src/CubicSDR.h b/src/CubicSDR.h index 174318d..685f6d8 100644 --- a/src/CubicSDR.h +++ b/src/CubicSDR.h @@ -23,10 +23,7 @@ class CubicSDR: public wxApp { public: - 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) { - - } + CubicSDR(); PrimaryGLContext &GetContext(wxGLCanvas *canvas); diff --git a/src/process/VisualProcessor.h b/src/process/VisualProcessor.h index 1cc23bd..620cdfa 100644 --- a/src/process/VisualProcessor.h +++ b/src/process/VisualProcessor.h @@ -8,34 +8,51 @@ typedef ThreadQueue VisualDataQueue; class VisualProcessor { public: void setInput(VisualDataQueue *vis_in) { - // set input queue + busy_update.lock(); + input = vis_in; + busy_update.unlock(); } void attachOutput(VisualDataQueue *vis_out) { // attach an output queue + busy_update.lock(); + outputs.push_back(vis_out); + busy_update.unlock(); } void removeOutput(VisualDataQueue *vis_out) { // remove an output queue + busy_update.lock(); + std::vector::iterator i = std::find(outputs.begin(), outputs.end(), vis_out); + if (i != outputs.end()) { + outputs.erase(i); + } + busy_update.unlock(); } - void pushInput(ReferenceCounter *input) { - // push input data + void run() { + busy_update.lock(); + process(); + busy_update.unlock(); } virtual void process() { - // process input to output + // process inputs to output // distribute(output); } protected: void distribute(ReferenceCounter *output) { // distribute outputs + output->setRefCount(outputs.size()); + std::vector::iterator outputs_i; + for (outputs_i = outputs.begin(); outputs_i != outputs.begin(); outputs_i++) { + (*outputs_i)->push(output); + } } VisualDataQueue * input; std::vector outputs; - std::mutex busy_update; };