From 3522feb355f1d0f27a4d3f3222bf32f4aec5e43d Mon Sep 17 00:00:00 2001 From: srcejon Date: Wed, 28 Feb 2024 09:57:52 +0000 Subject: [PATCH] Fix 32-bit float support for Spy Server. --- .../remotetcpinputtcphandler.cpp | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/plugins/samplesource/remotetcpinput/remotetcpinputtcphandler.cpp b/plugins/samplesource/remotetcpinput/remotetcpinputtcphandler.cpp index aae0f2106..906d62bdf 100644 --- a/plugins/samplesource/remotetcpinput/remotetcpinputtcphandler.cpp +++ b/plugins/samplesource/remotetcpinput/remotetcpinputtcphandler.cpp @@ -1096,10 +1096,32 @@ void RemoteTCPInputTCPHandler::convert(int nbSamples) m_converterBuffer = new int32_t[nbSamples*2]; } - if ((m_settings.m_sampleBits == 32) && (SDR_RX_SAMP_SZ == 24)) + if ((m_settings.m_sampleBits == 32) && (SDR_RX_SAMP_SZ == 24) && !m_spyServer) { m_sampleFifo->write(reinterpret_cast(m_tcpBuf), nbSamples*sizeof(Sample)); } + else if ((m_settings.m_sampleBits == 32) && (SDR_RX_SAMP_SZ == 24) && m_spyServer) + { + float *in = (float *)m_tcpBuf; + qint32 *out = (qint32 *)m_converterBuffer; + + for (int is = 0; is < nbSamples*2; is++) { + out[is] = (qint32)(in[is] * SDR_RX_SCALEF); + } + + m_sampleFifo->write(reinterpret_cast(out), nbSamples*sizeof(Sample)); + } + else if ((m_settings.m_sampleBits == 32) && (SDR_RX_SAMP_SZ == 16) && m_spyServer) + { + float *in = (float *)m_tcpBuf; + qint16 *out = (qint16 *)m_converterBuffer; + + for (int is = 0; is < nbSamples*2; is++) { + out[is] = (qint16)(in[is] * SDR_RX_SCALEF); + } + + m_sampleFifo->write(reinterpret_cast(out), nbSamples*sizeof(Sample)); + } else if ((m_settings.m_sampleBits == 8) && (SDR_RX_SAMP_SZ == 16)) { quint8 *in = (quint8 *)m_tcpBuf;