From 95804345d5daf637dac31351f587205bf9e401f6 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 12 Jul 2016 08:52:38 +0200 Subject: [PATCH] SDRdaemonFEC support. auto R/W correction (1) --- plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.cpp | 8 ++++---- plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.h | 4 +++- .../samplesource/sdrdaemonfec/sdrdaemonfecudphandler.cpp | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.cpp b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.cpp index c0e62649e..5de6f4da4 100644 --- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.cpp +++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.cpp @@ -74,6 +74,9 @@ void SDRdaemonFECBuffer::initReadIndex() void SDRdaemonFECBuffer::checkSlotData(int slotIndex) { + int pseudoWriteIndex = slotIndex * sizeof(BufferFrame); + m_wrDeltaEstimate = pseudoWriteIndex - m_readIndex; + if (!m_decoderSlots[slotIndex].m_decoded) //if (m_decoderSlots[slotIndex].m_blockCount < m_nbOriginalBlocks) { @@ -91,7 +94,7 @@ void SDRdaemonFECBuffer::checkSlotData(int slotIndex) int sampleRate = metaData->m_sampleRate; if (sampleRate > 0) { - m_bufferLenSec = (float) m_framesNbBytes / (float) sampleRate; + m_bufferLenSec = (float) m_framesNbBytes / (float) (sampleRate * m_iqSampleSize); } printMeta("SDRdaemonFECBuffer::checkSlotData: new meta", metaData); // print for change other than timestamp @@ -103,9 +106,6 @@ void SDRdaemonFECBuffer::checkSlotData(int slotIndex) void SDRdaemonFECBuffer::initDecodeSlot(int slotIndex) { - int pseudoWriteIndex = slotIndex * sizeof(BufferFrame); - m_wrDeltaEstimate = pseudoWriteIndex - m_readIndex; - // collect stats before voiding the slot m_curNbBlocks = m_decoderSlots[slotIndex].m_blockCount; m_curNbRecovery = m_decoderSlots[slotIndex].m_recoveryCount; diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.h b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.h index 8e95886c4..3b5e1e1d1 100644 --- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.h +++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecbuffer.h @@ -98,8 +98,8 @@ public: float getAvgNbBlocks() const { return m_avgNbBlocks; } float getAvgNbRecovery() const { return m_avgNbRecovery; } - float getBufferLengthInSecs() const { return m_bufferLenSec; } + int32_t getRWBalanceCorrection(int throttlems) const { return m_balCorrection; } /** Get buffer gauge value in % of buffer size ([-50:50]) * [-50:0] : write leads or read lags @@ -168,11 +168,13 @@ private: uint32_t m_throttlemsNominal; //!< Initial throttle in ms uint8_t* m_readBuffer; //!< Read buffer to hold samples when looping back to beginning of raw buffer uint32_t m_readSize; //!< Read buffer size + int32_t m_balCorrection; //!< R/W balance correction in number of samples per nominal tick period float m_bufferLenSec; void initDecodeAllSlots(); void initReadIndex(); + void rwSkewEstimate(int slotIndex); void checkSlotData(int slotIndex); void initDecodeSlot(int slotIndex); diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecudphandler.cpp b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecudphandler.cpp index 5df487194..add2b0cbc 100644 --- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecudphandler.cpp +++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecudphandler.cpp @@ -49,7 +49,7 @@ SDRdaemonFECUDPHandler::SDRdaemonFECUDPHandler(SampleFifo *sampleFifo, MessageQu m_readLength(0), m_throttleToggle(false), m_rateDivider(1000/SDRDAEMONFEC_THROTTLE_MS), - m_autoCorrBuffer(false) + m_autoCorrBuffer(true) { m_udpBuf = new char[SDRdaemonFECBuffer::m_udpPayloadSize]; }