From 7277757b7c49f9f1b2c646895f8f42ee1454ecae Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 25 Aug 2017 01:16:58 +0200 Subject: [PATCH] UDP sink plugin: block output at zero if read and write frame pointers are equal --- .../channeltx/udpsink/udpsinkudphandler.cpp | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/plugins/channeltx/udpsink/udpsinkudphandler.cpp b/plugins/channeltx/udpsink/udpsinkudphandler.cpp index 91b981a59..22cab9230 100644 --- a/plugins/channeltx/udpsink/udpsinkudphandler.cpp +++ b/plugins/channeltx/udpsink/udpsinkudphandler.cpp @@ -136,14 +136,29 @@ void UDPSinkUDPHandler::moveData(char *blk) void UDPSinkUDPHandler::readSample(FixReal &t) { - memcpy(&t, &m_udpBuf[m_readFrameIndex][m_readIndex], sizeof(FixReal)); - advanceReadPointer((int) sizeof(FixReal)); + if (m_readFrameIndex == m_writeIndex) // block until more writes + { + t = 0; + } + else + { + memcpy(&t, &m_udpBuf[m_readFrameIndex][m_readIndex], sizeof(FixReal)); + advanceReadPointer((int) sizeof(FixReal)); + } } void UDPSinkUDPHandler::readSample(Sample &s) { - memcpy(&s, &m_udpBuf[m_readFrameIndex][m_readIndex], sizeof(Sample)); - advanceReadPointer((int) sizeof(Sample)); + if (m_readFrameIndex == m_writeIndex) // block until more writes + { + s.m_real = 0; + s.m_imag = 0; + } + else + { + memcpy(&s, &m_udpBuf[m_readFrameIndex][m_readIndex], sizeof(Sample)); + advanceReadPointer((int) sizeof(Sample)); + } } void UDPSinkUDPHandler::advanceReadPointer(int nbBytes)