From 4c22be880cff9ac90a338dbdac8870d0bafd08a5 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 28 Jan 2018 03:06:30 +0100 Subject: [PATCH] UDP source: optimization for FM modes --- plugins/channelrx/udpsrc/udpsrc.cpp | 6 ++---- plugins/channelrx/udpsrc/udpsrc.h | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/plugins/channelrx/udpsrc/udpsrc.cpp b/plugins/channelrx/udpsrc/udpsrc.cpp index b4b41473e..f89f60da3 100644 --- a/plugins/channelrx/udpsrc/udpsrc.cpp +++ b/plugins/channelrx/udpsrc/udpsrc.cpp @@ -207,15 +207,13 @@ void UDPSrc::feed(const SampleVector::const_iterator& begin, const SampleVector: else if (m_settings.m_sampleFormat == UDPSrcSettings::FormatNFM) { Real discri = m_squelchOpen ? m_phaseDiscri.phaseDiscriminator(ci) * m_settings.m_gain : 0; - FixReal demod = (FixReal) (SDR_RX_SCALEF * discri); - udpWrite(demod, demod); + udpWriteNorm(discri, discri); m_outMovingAverage.feed(discri*discri); } else if (m_settings.m_sampleFormat == UDPSrcSettings::FormatNFMMono) { Real discri = m_squelchOpen ? m_phaseDiscri.phaseDiscriminator(ci) * m_settings.m_gain : 0; - FixReal demod = (FixReal) (SDR_RX_SCALEF * discri); - udpWriteMono(demod); + udpWriteNormMono(discri); m_outMovingAverage.feed(discri*discri); } else if (m_settings.m_sampleFormat == UDPSrcSettings::FormatLSBMono) // Monaural LSB diff --git a/plugins/channelrx/udpsrc/udpsrc.h b/plugins/channelrx/udpsrc/udpsrc.h index 3dcc65b70..9e9864d4e 100644 --- a/plugins/channelrx/udpsrc/udpsrc.h +++ b/plugins/channelrx/udpsrc/udpsrc.h @@ -317,6 +317,24 @@ protected: } } + void udpWriteNorm(Real real, Real imag) + { + if (m_settings.m_sampleSize == UDPSrcSettings::Size16bits) { + m_udpBuffer16->write(Sample16(real*32768.0, imag*32768.0)); + } else if (m_settings.m_sampleSize == UDPSrcSettings::Size24bits) { + m_udpBuffer24->write(Sample24(real*8388608.0, imag*8388608.0)); + } + } + + void udpWriteNormMono(Real sample) + { + if (m_settings.m_sampleSize == UDPSrcSettings::Size16bits) { + m_udpBufferMono16->write(sample*32768.0); + } else if (m_settings.m_sampleSize == UDPSrcSettings::Size24bits) { + m_udpBufferMono24->write(sample*8388608.0); + } + } + }; #endif // INCLUDE_UDPSRC_H