diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.cpp index a4e721c96..43ec44c24 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.cpp @@ -25,9 +25,6 @@ -const int SDRdaemonSourceBuffer::m_sampleSize = 2; -const int SDRdaemonSourceBuffer::m_iqSampleSize = 2 * m_sampleSize; - SDRdaemonSourceBuffer::SDRdaemonSourceBuffer() : m_decoderIndexHead(nbDecoderSlots/2), m_frameHead(0), @@ -152,7 +149,7 @@ void SDRdaemonSourceBuffer::rwCorrectionEstimate(int slotIndex) dBytes = (nbDecoderSlots * sizeof(BufferFrame)) - normalizedReadIndex - rwDelta; } - m_balCorrection = (m_balCorrection / 4) + (dBytes / (int) (m_iqSampleSize * m_nbReads)); // correction is in number of samples. Alpha = 0.25 + m_balCorrection = (m_balCorrection / 4) + (dBytes / (int) (m_currentMeta.m_sampleBytes * 2 * m_nbReads)); // correction is in number of samples. Alpha = 0.25 if (m_balCorrection < -m_balCorrLimit) { m_balCorrection = -m_balCorrLimit; @@ -310,9 +307,9 @@ void SDRdaemonSourceBuffer::writeData(char *array) int sampleRate = metaData->m_sampleRate; if (sampleRate > 0) { - m_bufferLenSec = (float) m_framesNbBytes / (float) (sampleRate * m_iqSampleSize); + m_bufferLenSec = (float) m_framesNbBytes / (float) (sampleRate * m_currentMeta.m_sampleBytes * 2); m_balCorrLimit = sampleRate / 1000; // +/- 1 ms correction max per read - m_readNbBytes = (sampleRate * m_iqSampleSize) / 20; + m_readNbBytes = (sampleRate * m_currentMeta.m_sampleBytes * 2) / 20; } printMeta("SDRdaemonSourceBuffer::writeData: new meta", metaData); // print for change other than timestamp diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.h b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.h index 3cfbd2e76..9b3a671e4 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.h +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.h @@ -52,6 +52,8 @@ public: void init() { memset((char *) this, 0, sizeof(MetaDataFEC)); + m_sampleBits = 16; // assume 16 bits samples to start with + m_sampleBytes = 2; } }; @@ -158,8 +160,6 @@ public: static const int m_udpPayloadSize = SDRDAEMONSOURCE_UDPSIZE; static const int m_nbOriginalBlocks = SDRDAEMONSOURCE_NBORIGINALBLOCKS; - static const int m_sampleSize; - static const int m_iqSampleSize; private: static const int nbDecoderSlots = SDRDAEMONSOURCE_NBDECODERSLOTS; diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp index a272dcf3b..802d16368 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp @@ -57,6 +57,7 @@ SDRdaemonSourceGui::SDRdaemonSourceGui(DeviceUISet *deviceUISet, QWidget* parent m_nbOriginalBlocks(128), m_nbFECBlocks(0), m_sampleBits(16), + m_sampleBytes(2), m_samplesCount(0), m_tickCount(0), m_addressEdited(false), @@ -211,6 +212,7 @@ bool SDRdaemonSourceGui::handleMessage(const Message& message) m_avgNbRecovery = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getAvgNbRecovery(); m_nbOriginalBlocks = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getNbOriginalBlocksPerFrame(); m_sampleBits = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getSampleBits(); + m_sampleBytes = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getSampleBytes(); int nbFECBlocks = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getNbFECBlocksPerFrame(); diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.h b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.h index 89cb6dc0c..457705f5a 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.h +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.h @@ -86,6 +86,7 @@ private: int m_nbOriginalBlocks; int m_nbFECBlocks; int m_sampleBits; + int m_sampleBytes; int m_samplesCount; std::size_t m_tickCount; diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h index 86dd05c90..077a2b1ac 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h @@ -141,6 +141,7 @@ public: int getNbOriginalBlocksPerFrame() const { return m_nbOriginalBlocksPerFrame; } int getNbFECBlocksPerFrame() const { return m_nbFECBlocksPerFrame; } int getSampleBits() const { return m_sampleBits; } + int getSampleBytes() const { return m_sampleBytes; } static MsgReportSDRdaemonSourceStreamTiming* create(uint32_t tv_sec, uint32_t tv_usec, @@ -156,7 +157,8 @@ public: float avgNbRecovery, int nbOriginalBlocksPerFrame, int nbFECBlocksPerFrame, - int sampleBits) + int sampleBits, + int sampleBytes) { return new MsgReportSDRdaemonSourceStreamTiming(tv_sec, tv_usec, @@ -172,7 +174,8 @@ public: avgNbRecovery, nbOriginalBlocksPerFrame, nbFECBlocksPerFrame, - sampleBits); + sampleBits, + sampleBytes); } protected: @@ -191,6 +194,7 @@ public: int m_nbOriginalBlocksPerFrame; int m_nbFECBlocksPerFrame; int m_sampleBits; + int m_sampleBytes; MsgReportSDRdaemonSourceStreamTiming(uint32_t tv_sec, uint32_t tv_usec, @@ -206,7 +210,8 @@ public: float avgNbRecovery, int nbOriginalBlocksPerFrame, int nbFECBlocksPerFrame, - int sampleBits) : + int sampleBits, + int sampleBytes) : Message(), m_tv_sec(tv_sec), m_tv_usec(tv_usec), @@ -222,7 +227,8 @@ public: m_avgNbRecovery(avgNbRecovery), m_nbOriginalBlocksPerFrame(nbOriginalBlocksPerFrame), m_nbFECBlocksPerFrame(nbFECBlocksPerFrame), - m_sampleBits(sampleBits) + m_sampleBits(sampleBits), + m_sampleBytes(sampleBytes) { } }; diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp index d10b399d9..c92c7dd82 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp @@ -263,8 +263,8 @@ void SDRdaemonSourceUDPHandler::tick() m_readLengthSamples += m_sdrDaemonBuffer.getRWBalanceCorrection(); } - m_readLength = m_readLengthSamples * SDRdaemonSourceBuffer::m_iqSampleSize; const SDRdaemonSourceBuffer::MetaDataFEC& metaData = m_sdrDaemonBuffer.getCurrentMeta(); + m_readLength = m_readLengthSamples * metaData.m_sampleBytes * 2; if (SDR_RX_SAMP_SZ == metaData.m_sampleBits) // same sample size { @@ -332,6 +332,7 @@ void SDRdaemonSourceUDPHandler::tick() int nbOriginalBlocks = m_sdrDaemonBuffer.getCurrentMeta().m_nbOriginalBlocks; int nbFECblocks = m_sdrDaemonBuffer.getCurrentMeta().m_nbFECBlocks; int sampleBits = m_sdrDaemonBuffer.getCurrentMeta().m_sampleBits; + int sampleBytes = m_sdrDaemonBuffer.getCurrentMeta().m_sampleBytes; //framesDecodingStatus = (minNbOriginalBlocks == nbOriginalBlocks ? 2 : (minNbOriginalBlocks < nbOriginalBlocks - nbFECblocks ? 0 : 1)); if (minNbBlocks < nbOriginalBlocks) { @@ -357,7 +358,8 @@ void SDRdaemonSourceUDPHandler::tick() m_sdrDaemonBuffer.getAvgNbRecovery(), nbOriginalBlocks, nbFECblocks, - sampleBits); + sampleBits, + sampleBytes); m_outputMessageQueueToGUI->push(report); }