From 6ae02bee9c1e52059e002e49bb5b6fd76f69c575 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Wed, 12 Aug 2015 18:07:06 -0400 Subject: [PATCH] Frame timer too jittery for anything but OSX, back to throttling which looks nicer.. --- src/AppFrame.cpp | 27 +++++++++++++-------------- src/AppFrame.h | 2 +- src/CubicSDRDefs.h | 2 +- src/sdr/SDRPostThread.cpp | 5 +++++ src/visual/MeterCanvas.cpp | 3 ++- src/visual/ModeSelectorCanvas.cpp | 3 ++- src/visual/ScopeCanvas.cpp | 3 ++- src/visual/SpectrumCanvas.cpp | 3 ++- src/visual/TuningCanvas.cpp | 2 ++ src/visual/WaterfallCanvas.cpp | 3 ++- 10 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp index bf29cb6..e0745ec 100644 --- a/src/AppFrame.cpp +++ b/src/AppFrame.cpp @@ -35,7 +35,7 @@ EVT_CLOSE(AppFrame::OnClose) EVT_MENU(wxID_ANY, AppFrame::OnMenu) EVT_COMMAND(wxID_ANY, wxEVT_THREAD, AppFrame::OnThread) EVT_IDLE(AppFrame::OnIdle) -EVT_TIMER(FRAME_TIMER_ID, AppFrame::OnTimer) +//EVT_TIMER(FRAME_TIMER_ID, AppFrame::OnTimer) wxEND_EVENT_TABLE() AppFrame::AppFrame() : @@ -407,11 +407,11 @@ void AppFrame::initDeviceParams(std::string deviceId) { // frame rate = 1000 / 30 = 33ms // windows needs a bit more time or it lags? -#ifdef _WIN32 - frame_timer.Start(25); -#else - frame_timer.Start(33); -#endif +//#ifdef _WIN32 +// frame_timer.Start(25); +//#else +// frame_timer.Start(15); +//#endif } } @@ -608,10 +608,10 @@ void AppFrame::OnThread(wxCommandEvent& event) { } void AppFrame::OnIdle(wxIdleEvent& event) { - event.Skip(); -} - -void AppFrame::OnTimer(wxTimerEvent& event) { +// event.Skip(); +//} +// +//void AppFrame::OnTimer(wxTimerEvent& event) { DemodulatorInstance *demod = wxGetApp().getDemodMgr().getLastActiveDemodulator(); @@ -768,9 +768,8 @@ void AppFrame::OnTimer(wxTimerEvent& event) { while (!wproc->isInputEmpty()) { wproc->run(); } - - scopeCanvas->Refresh(); + /* scopeCanvas->Refresh(); waterfallCanvas->Refresh(); spectrumCanvas->Refresh(); @@ -792,9 +791,9 @@ void AppFrame::OnTimer(wxTimerEvent& event) { } if (spectrumAvgMeter->getMouseTracker()->mouseInView()) { spectrumAvgMeter->Refresh(); - } + } */ - event.Skip(); + event.RequestMore(); } void AppFrame::saveSession(std::string fileName) { diff --git a/src/AppFrame.h b/src/AppFrame.h index 7194068..fd9eac6 100644 --- a/src/AppFrame.h +++ b/src/AppFrame.h @@ -69,7 +69,7 @@ private: void OnClose(wxCloseEvent& event); void OnNewWindow(wxCommandEvent& event); void OnIdle(wxIdleEvent& event); - void OnTimer(wxTimerEvent& event); +// void OnTimer(wxTimerEvent& event); ScopeCanvas *scopeCanvas; SpectrumCanvas *spectrumCanvas; diff --git a/src/CubicSDRDefs.h b/src/CubicSDRDefs.h index fb96a68..b2c326a 100644 --- a/src/CubicSDRDefs.h +++ b/src/CubicSDRDefs.h @@ -33,4 +33,4 @@ const char filePathSeparator = #define DEFAULT_DEMOD_TYPE 1 #define DEFAULT_DEMOD_BW 200000 -#define DEFAULT_WATERFALL_LPS 24 \ No newline at end of file +#define DEFAULT_WATERFALL_LPS 30 \ No newline at end of file diff --git a/src/sdr/SDRPostThread.cpp b/src/sdr/SDRPostThread.cpp index 4efc143..5658615 100644 --- a/src/sdr/SDRPostThread.cpp +++ b/src/sdr/SDRPostThread.cpp @@ -91,6 +91,7 @@ void SDRPostThread::run() { iqDataInQueue->pop(data_in); // std::lock_guard < std::mutex > lock(data_in->m_mutex); + int num_vis_samples = this->num_vis_samples; if (data_in && data_in->data.size()) { int dataSize = data_in->data.size()/2; @@ -120,6 +121,10 @@ void SDRPostThread::run() { visualDataOut->busy_rw.lock(); visualDataOut->setRefCount(1); + if (num_vis_samples > data_in->data.size()) { + num_vis_samples = data_in->data.size(); + } + if (visualDataOut->data.size() < num_vis_samples) { if (visualDataOut->data.capacity() < num_vis_samples) { visualDataOut->data.reserve(num_vis_samples); diff --git a/src/visual/MeterCanvas.cpp b/src/visual/MeterCanvas.cpp index 423fc20..07e7984 100644 --- a/src/visual/MeterCanvas.cpp +++ b/src/visual/MeterCanvas.cpp @@ -79,7 +79,8 @@ void MeterCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { } void MeterCanvas::OnIdle(wxIdleEvent &event) { - event.Skip(); + Refresh(); + event.RequestMore(); } void MeterCanvas::OnMouseMoved(wxMouseEvent& event) { diff --git a/src/visual/ModeSelectorCanvas.cpp b/src/visual/ModeSelectorCanvas.cpp index 98172b5..5058291 100644 --- a/src/visual/ModeSelectorCanvas.cpp +++ b/src/visual/ModeSelectorCanvas.cpp @@ -72,7 +72,8 @@ void ModeSelectorCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { } void ModeSelectorCanvas::OnIdle(wxIdleEvent &event) { - event.Skip(); + Refresh(); + event.RequestMore(); } void ModeSelectorCanvas::OnMouseMoved(wxMouseEvent& event) { diff --git a/src/visual/ScopeCanvas.cpp b/src/visual/ScopeCanvas.cpp index 1063c16..a4cd4be 100644 --- a/src/visual/ScopeCanvas.cpp +++ b/src/visual/ScopeCanvas.cpp @@ -87,7 +87,8 @@ void ScopeCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { } void ScopeCanvas::OnIdle(wxIdleEvent &event) { - event.Skip(); + Refresh(); + event.RequestMore(); } ScopeRenderDataQueue *ScopeCanvas::getInputQueue() { diff --git a/src/visual/SpectrumCanvas.cpp b/src/visual/SpectrumCanvas.cpp index f07ae9c..f21a6a8 100644 --- a/src/visual/SpectrumCanvas.cpp +++ b/src/visual/SpectrumCanvas.cpp @@ -85,7 +85,8 @@ void SpectrumCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { void SpectrumCanvas::OnIdle(wxIdleEvent &event) { - event.Skip(); + Refresh(); + event.RequestMore(); } diff --git a/src/visual/TuningCanvas.cpp b/src/visual/TuningCanvas.cpp index cb618f6..23f15a4 100644 --- a/src/visual/TuningCanvas.cpp +++ b/src/visual/TuningCanvas.cpp @@ -252,6 +252,8 @@ void TuningCanvas::OnIdle(wxIdleEvent &event) { dragging = false; } } + Refresh(); + event.RequestMore(); } void TuningCanvas::OnMouseMoved(wxMouseEvent& event) { diff --git a/src/visual/WaterfallCanvas.cpp b/src/visual/WaterfallCanvas.cpp index 51d1723..892b17f 100644 --- a/src/visual/WaterfallCanvas.cpp +++ b/src/visual/WaterfallCanvas.cpp @@ -347,7 +347,8 @@ void WaterfallCanvas::OnKeyDown(wxKeyEvent& event) { } } void WaterfallCanvas::OnIdle(wxIdleEvent &event) { - event.Skip(); + Refresh(); + event.RequestMore(); } void WaterfallCanvas::OnMouseMoved(wxMouseEvent& event) {