From 4283159e6afa0d1860179d69d53bb10f101ca94d Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 31 May 2021 19:35:14 +0200 Subject: [PATCH] GLScope redesign: ScopeVis: processTraces by start iterator and length. TraceBackBuffer: m_endPoint is now private --- sdrbase/dsp/scopevis.cpp | 22 ++++++++++++---------- sdrbase/dsp/scopevis.h | 20 +++++++++++++++----- sdrbase/util/doublebuffer.h | 1 + 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/sdrbase/dsp/scopevis.cpp b/sdrbase/dsp/scopevis.cpp index 3d09ebba9..fd0ae788d 100644 --- a/sdrbase/dsp/scopevis.cpp +++ b/sdrbase/dsp/scopevis.cpp @@ -301,13 +301,13 @@ void ScopeVis::processMemoryTrace() traceMemoryIndex += GLScopeSettings::m_nbTraceMemories; } - SampleVector::const_iterator mend = m_traceDiscreteMemory.at(traceMemoryIndex).m_endPoint; + SampleVector::const_iterator mend = m_traceDiscreteMemory.at(traceMemoryIndex).getEndPoint(); SampleVector::const_iterator mbegin = mend - m_traceSize; SampleVector::const_iterator mbegin_tb = mbegin - m_maxTraceDelay; m_nbSamples = m_traceSize + m_maxTraceDelay; - processTraces(mbegin_tb, mbegin, true); // traceback - processTraces(mbegin, mend, false); + processTraces(mbegin_tb, m_maxTraceDelay, true); // traceback + processTraces(mbegin, m_traceSize, false); } } @@ -408,7 +408,8 @@ void ScopeVis::processTrace(const std::vector& vbe { int remainder; int count = end - begin; // number of samples in traceback buffer past the current point - SampleVector::iterator mend = m_traceDiscreteMemory.current().current(); + SampleVector::iterator mend; + m_traceDiscreteMemory.current().current(mend); SampleVector::iterator mbegin = mend - count; if (m_traceStart) // start of trace processing @@ -424,27 +425,27 @@ void ScopeVis::processTrace(const std::vector& vbe // process until begin point if (m_maxTraceDelay > 0) { // trace back - processTraces(mbegin - m_preTriggerDelay - m_maxTraceDelay, mbegin - m_preTriggerDelay, true); + processTraces(mbegin - m_preTriggerDelay - m_maxTraceDelay, m_maxTraceDelay, true); } if (m_preTriggerDelay > 0) { // pre-trigger - processTraces(mbegin - m_preTriggerDelay, mbegin); + processTraces(mbegin - m_preTriggerDelay, m_preTriggerDelay); } // process the rest of the trace - remainder = processTraces(mbegin, mend); + remainder = processTraces(mbegin, count); m_traceStart = false; } else // process the current trace { - remainder = processTraces(mbegin, mend); + remainder = processTraces(mbegin, count); } if (remainder >= 0) // finished { mbegin = mend - remainder; - m_traceDiscreteMemory.current().m_endPoint = mbegin; + m_traceDiscreteMemory.current().setEndPoint(mbegin); m_traceDiscreteMemory.store(m_preTriggerDelay+remainder); // next memory trace. m_triggerState = TriggerUntriggered; m_triggerWaitForReset = m_triggerOneShot; @@ -506,9 +507,10 @@ bool ScopeVis::nextTrigger() } } -int ScopeVis::processTraces(const SampleVector::const_iterator& cbegin, const SampleVector::const_iterator& end, bool traceBack) +int ScopeVis::processTraces(const SampleVector::const_iterator& cbegin, int ilength, bool traceBack) { SampleVector::const_iterator begin(cbegin); + SampleVector::const_iterator end(cbegin + ilength); uint32_t shift = (m_timeOfsProMill / 1000.0) * m_traceSize; uint32_t length = m_traceSize / m_timeBase; diff --git a/sdrbase/dsp/scopevis.h b/sdrbase/dsp/scopevis.h index 37c14706a..1fc5a7fe0 100644 --- a/sdrbase/dsp/scopevis.h +++ b/sdrbase/dsp/scopevis.h @@ -529,7 +529,6 @@ private: struct TraceBackBuffer { TraceBuffer m_traceBuffer; - SampleVector::iterator m_endPoint; TraceBackBuffer() { m_endPoint = m_traceBuffer.getCurrent(); @@ -551,8 +550,8 @@ private: return m_traceBuffer.absoluteFill(); } - SampleVector::iterator current() { - return m_traceBuffer.getCurrent(); + void current(SampleVector::iterator& it) { + m_traceBuffer.getCurrent(it); } QByteArray serialize() const @@ -592,6 +591,17 @@ private: return false; } } + + void setEndPoint(const SampleVector::iterator& endPoint) { + m_endPoint = endPoint; + } + + SampleVector::iterator getEndPoint() { + return m_endPoint; + } + + private: + SampleVector::iterator m_endPoint; }; struct TraceBackDiscreteMemory @@ -632,7 +642,7 @@ private: uint32_t nextMemIndex = m_currentMemIndex < (m_memSize-1) ? m_currentMemIndex+1 : 0; m_traceBackBuffers[nextMemIndex].reset(); m_traceBackBuffers[nextMemIndex].write( - m_traceBackBuffers[m_currentMemIndex].m_endPoint - samplesToReport, + m_traceBackBuffers[m_currentMemIndex].getEndPoint() - samplesToReport, samplesToReport ); m_currentMemIndex = nextMemIndex; @@ -1078,7 +1088,7 @@ private: * - if finished it returns the number of unprocessed samples left in the buffer * - if not finished it returns -1 */ - int processTraces(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool traceBack = false); + int processTraces(const SampleVector::const_iterator& begin, int length, bool traceBack = false); /** * Get maximum trace delay diff --git a/sdrbase/util/doublebuffer.h b/sdrbase/util/doublebuffer.h index e3e023e46..fbe9560bd 100644 --- a/sdrbase/util/doublebuffer.h +++ b/sdrbase/util/doublebuffer.h @@ -84,6 +84,7 @@ public: } typename std::vector::iterator getCurrent() { return m_data.begin() + m_currentPosition + m_size; } + void getCurrent(typename std::vector::iterator& it) { it = m_data.begin() + m_currentPosition + m_size; } typename std::vector::const_iterator begin() const { return m_data.begin(); } typename std::vector::iterator begin() { return m_data.begin(); } unsigned int absoluteFill() const { return m_currentPosition; }