From f9107b78b25c0b54f770e107f6406b15c4e5e2eb Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 30 Apr 2019 08:43:55 +0200 Subject: [PATCH] Remote input: limit m_readLengthSamples range --- .../remoteinput/remoteinputbuffer.cpp | 2 +- .../remoteinput/remoteinputudphandler.cpp | 15 ++++++++++----- .../remoteinput/remoteinputudphandler.h | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/plugins/samplesource/remoteinput/remoteinputbuffer.cpp b/plugins/samplesource/remoteinput/remoteinputbuffer.cpp index 4358914e4..fb9a15a77 100644 --- a/plugins/samplesource/remoteinput/remoteinputbuffer.cpp +++ b/plugins/samplesource/remoteinput/remoteinputbuffer.cpp @@ -318,7 +318,7 @@ void RemoteInputBuffer::writeData(char *array) if (sampleRate != 0) { m_bufferLenSec = (float) m_framesNbBytes / (float) (sampleRate * metaData->m_sampleBytes * 2); - m_balCorrLimit = sampleRate / 100; // +/- 10 ms correction max per read + m_balCorrLimit = sampleRate / 400; // +/- 5% correction max per read m_readNbBytes = (sampleRate * metaData->m_sampleBytes * 2) / 20; } diff --git a/plugins/samplesource/remoteinput/remoteinputudphandler.cpp b/plugins/samplesource/remoteinput/remoteinputudphandler.cpp index 3cf477f27..3221e2f7d 100644 --- a/plugins/samplesource/remoteinput/remoteinputudphandler.cpp +++ b/plugins/samplesource/remoteinput/remoteinputudphandler.cpp @@ -256,8 +256,13 @@ void RemoteInputUDPHandler::tick() m_throttleToggle = !m_throttleToggle; } - if (m_autoCorrBuffer) { + if (m_autoCorrBuffer) + { m_readLengthSamples += m_remoteInputBuffer.getRWBalanceCorrection(); + // Eliminate negative or excessively high values + m_readLengthSamples = m_readLengthSamples < 0 ? + 0 : m_readLengthSamples > (int) m_remoteInputBuffer.getCurrentMeta().m_sampleRate/5 ? + m_remoteInputBuffer.getCurrentMeta().m_sampleRate/5 : m_readLengthSamples; } const RemoteMetaDataFEC& metaData = m_remoteInputBuffer.getCurrentMeta(); @@ -265,7 +270,7 @@ void RemoteInputUDPHandler::tick() if ((metaData.m_sampleBits == 16) && (SDR_RX_SAMP_SZ == 24)) // 16 -> 24 bits { - if (m_readLengthSamples > m_converterBufferNbSamples) + if (m_readLengthSamples > (int) m_converterBufferNbSamples) { if (m_converterBuffer) { delete[] m_converterBuffer; } m_converterBuffer = new int32_t[m_readLengthSamples*2]; @@ -273,7 +278,7 @@ void RemoteInputUDPHandler::tick() uint8_t *buf = m_remoteInputBuffer.readData(m_readLength); - for (unsigned int is = 0; is < m_readLengthSamples; is++) + for (int is = 0; is < m_readLengthSamples; is++) { m_converterBuffer[2*is] = ((int16_t*)buf)[2*is]; // I m_converterBuffer[2*is]<<=8; @@ -285,7 +290,7 @@ void RemoteInputUDPHandler::tick() } else if ((metaData.m_sampleBits == 24) && (SDR_RX_SAMP_SZ == 16)) // 24 -> 16 bits { - if (m_readLengthSamples > m_converterBufferNbSamples) + if (m_readLengthSamples > (int) m_converterBufferNbSamples) { if (m_converterBuffer) { delete[] m_converterBuffer; } m_converterBuffer = new int32_t[m_readLengthSamples]; @@ -293,7 +298,7 @@ void RemoteInputUDPHandler::tick() uint8_t *buf = m_remoteInputBuffer.readData(m_readLength); - for (unsigned int is = 0; is < m_readLengthSamples; is++) + for (int is = 0; is < m_readLengthSamples; is++) { m_converterBuffer[is] = ((int32_t *)buf)[2*is+1]>>8; // Q -> MSB m_converterBuffer[is] <<=16; diff --git a/plugins/samplesource/remoteinput/remoteinputudphandler.h b/plugins/samplesource/remoteinput/remoteinputudphandler.h index 2d8ac155d..7d0167368 100644 --- a/plugins/samplesource/remoteinput/remoteinputudphandler.h +++ b/plugins/samplesource/remoteinput/remoteinputudphandler.h @@ -80,7 +80,7 @@ private: QElapsedTimer m_elapsedTimer; int m_throttlems; - uint32_t m_readLengthSamples; + int32_t m_readLengthSamples; uint32_t m_readLength; int32_t *m_converterBuffer; uint32_t m_converterBufferNbSamples;