From 7c8cb7a85ad528a05efc76f1dad85978fb0b018d Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 20 Dec 2021 22:30:43 +0100 Subject: [PATCH] Remote: more fixes in conversion routines --- doc/img/RemoteSink.png | Bin 19345 -> 19460 bytes doc/img/RemoteSink.xcf | Bin 60881 -> 61283 bytes plugins/channelrx/remotesink/readme.md | 15 +------ .../channelrx/remotesink/remotesinksink.cpp | 2 +- plugins/channelrx/remotesink/remotesinksink.h | 30 +++++++------ plugins/samplesink/remoteoutput/udpsinkfec.h | 30 +++++++------ .../remoteinput/remoteinputudphandler.cpp | 28 ++++++------ sdrbase/channel/remotedatareadqueue.h | 40 ++++++++++-------- 8 files changed, 74 insertions(+), 71 deletions(-) diff --git a/doc/img/RemoteSink.png b/doc/img/RemoteSink.png index 4b3ce531ac6a9ca1dfc7e7c1610bee0ebb5e2c09..20e8c5d7d82bf60dfe8d470c1d40c5e25c4a9094 100644 GIT binary patch literal 19460 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 xU`UVI_pY^CeBr0O`h|%M`>hqKDxTrzlUVi+~ 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 literal 60881 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 diff --git a/plugins/channelrx/remotesink/readme.md b/plugins/channelrx/remotesink/readme.md index 6fcd797a7..aa7509aa7 100644 --- a/plugins/channelrx/remotesink/readme.md +++ b/plugins/channelrx/remotesink/readme.md @@ -56,17 +56,6 @@ When the return key is hit within the address (1) or port (2) the changes are ef This sets the number of FEC blocks per frame. A frame consists of 128 data blocks (1 meta data block followed by 127 I/Q data blocks) and a variable number of FEC blocks used to protect the UDP transmission with a Cauchy MDS block erasure correction. The two numbers next are the total number of blocks and the number of FEC blocks separated by a slash (/). -

10: Delay between UDP blocks transmission

+

10: Transmission sample size

-This sets the minimum delay between transmission of an UDP block (send datagram) and the next. This allows throttling of the UDP transmission that is otherwise uncontrolled and causes network congestion. - -The value is a percentage of the nominal time it takes to process a block of samples corresponding to one UDP block (512 bytes). This is calculated as follows: - - - Sample rate on the network: _SR_ - - Delay percentage: _d_ - - Number of FEC blocks: _F_ - - There are 127 blocks of I/Q data per frame (1 meta block for 128 blocks) and each I/Q data block of 512 bytes (128 samples) has a 8 bytes header (2 samples) thus there are 126 samples remaining effectively. This gives the constant 127*126 = 16002 samples per frame in the formula - -Formula: ((127 ✕ 126 ✕ _d_) / _SR_) / (128 + _F_) - -The percentage appears first at the right of the dial button and then the actual delay value in microseconds. \ No newline at end of file +Number of bytes per I or Q sample in transmission. diff --git a/plugins/channelrx/remotesink/remotesinksink.cpp b/plugins/channelrx/remotesink/remotesinksink.cpp index fd512049a..f13b9bf13 100644 --- a/plugins/channelrx/remotesink/remotesinksink.cpp +++ b/plugins/channelrx/remotesink/remotesinksink.cpp @@ -144,7 +144,7 @@ void RemoteSinkSink::feed(const SampleVector::const_iterator& begin, const Sampl } // block zero // handle different sample sizes... - int samplesPerBlock = RemoteNbBytesPerBlock / (SDR_RX_SAMP_SZ <= 16 ? 4 : 8); // two I or Q samples + int samplesPerBlock = RemoteNbBytesPerBlock / (2 * m_nbTxBytes); // two I or Q samples if (m_sampleIndex + inRemainingSamples < samplesPerBlock) // there is still room in the current super block { convertSampleToData(begin + inSamplesIndex, inRemainingSamples, false); diff --git a/plugins/channelrx/remotesink/remotesinksink.h b/plugins/channelrx/remotesink/remotesinksink.h index 7db48a3d5..cfe391f12 100644 --- a/plugins/channelrx/remotesink/remotesinksink.h +++ b/plugins/channelrx/remotesink/remotesinksink.h @@ -96,12 +96,12 @@ private: *((int16_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (begin+i)->m_imag; } } - else if (m_nbTxBytes == 1) // 16 -> 8 + else if (m_nbTxBytes == 1) // 16 or 24 -> 8 { for (int i = 0; i < nbSamples; i++) { - m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2] = (uint8_t) ((begin+i)->m_real / 256); - m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes] = (uint8_t) ((begin+i)->m_imag / 256); + *((int8_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (int8_t) ((begin+i)->m_real / (1<<8)); + *((int8_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (int8_t) ((begin+i)->m_imag / (1<<8)); } } } @@ -111,26 +111,32 @@ private: { for (int i = 0; i < nbSamples; i++) { - *((int32_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (begin+i)->m_real << 8; - *((int32_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (begin+i)->m_imag << 8; + *((int32_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (begin+i)->m_real * (1<<8); + *((int32_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (begin+i)->m_imag * (1<<8); } } else if (m_nbTxBytes == 2) // 24 -> 16 { for (int i = 0; i < nbSamples; i++) { - *((int16_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (begin+i)->m_real >> 8; - *((int16_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (begin+i)->m_imag >> 8; + *((int16_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (begin+i)->m_real / (1<<8); + *((int16_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (begin+i)->m_imag / (1<<8); } } - else if (m_nbTxBytes == 1) // 16 or 24 -> 8 + else if ((m_nbTxBytes == 1) && (sizeof(Sample) == 4)) // 16 -> 8 { for (int i = 0; i < nbSamples; i++) { - m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2] = - (uint8_t) (((begin+i)->m_real / (1<m_imag / (1<m_real / (1<<8)); + *((int8_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (int8_t) ((begin+i)->m_imag / (1<<8)); + } + } + else if ((m_nbTxBytes == 1) && (sizeof(Sample) == 8)) // 24 -> 8 + { + for (int i = 0; i < nbSamples; i++) + { + *((int8_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (int8_t) ((begin+i)->m_real / (1<<16)); + *((int8_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (int8_t) ((begin+i)->m_imag / (1<<16)); } } } diff --git a/plugins/samplesink/remoteoutput/udpsinkfec.h b/plugins/samplesink/remoteoutput/udpsinkfec.h index c1b0084a0..06da1c87d 100644 --- a/plugins/samplesink/remoteoutput/udpsinkfec.h +++ b/plugins/samplesink/remoteoutput/udpsinkfec.h @@ -128,12 +128,12 @@ private: *((int16_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (begin+i)->m_imag; } } - else if (m_nbTxBytes == 1) // 16 -> 8 + else if (m_nbTxBytes == 1) // 16 or 24 -> 8 { for (int i = 0; i < nbSamples; i++) { - m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2] = (uint8_t) ((begin+i)->m_real / 256); - m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes] = (uint8_t) ((begin+i)->m_imag / 256); + *((int8_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (int8_t) ((begin+i)->m_real / (1<<8)); + *((int8_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (int8_t) ((begin+i)->m_imag / (1<<8)); } } } @@ -143,26 +143,32 @@ private: { for (int i = 0; i < nbSamples; i++) { - *((int32_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (begin+i)->m_real << 8; - *((int32_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (begin+i)->m_imag << 8; + *((int32_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (begin+i)->m_real * (1<<8); + *((int32_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (begin+i)->m_imag * (1<<8); } } else if (m_nbTxBytes == 2) // 24 -> 16 { for (int i = 0; i < nbSamples; i++) { - *((int16_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (begin+i)->m_real >> 8; - *((int16_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (begin+i)->m_imag >> 8; + *((int16_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (begin+i)->m_real / (1<<8); + *((int16_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (begin+i)->m_imag / (1<<8); } } - else if (m_nbTxBytes == 1) // 16 or 24 -> 8 + else if ((m_nbTxBytes == 1) && (sizeof(Sample) == 4)) // 16 -> 8 { for (int i = 0; i < nbSamples; i++) { - m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2] = - (uint8_t) (((begin+i)->m_real / (1<m_imag / (1<m_real / (1<<8)); + *((int8_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (int8_t) ((begin+i)->m_imag / (1<<8)); + } + } + else if ((m_nbTxBytes == 1) && (sizeof(Sample) == 4)) // 24 -> 8 + { + for (int i = 0; i < nbSamples; i++) + { + *((int8_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2]) = (int8_t) ((begin+i)->m_real / (1<<16)); + *((int8_t*) &m_superBlock.m_protectedBlock.buf[(m_sampleIndex+ i)*m_nbTxBytes*2 + m_nbTxBytes]) = (int8_t) ((begin+i)->m_imag / (1<<16)); } } } diff --git a/plugins/samplesource/remoteinput/remoteinputudphandler.cpp b/plugins/samplesource/remoteinput/remoteinputudphandler.cpp index cd1f9c300..1bdd14f77 100644 --- a/plugins/samplesource/remoteinput/remoteinputudphandler.cpp +++ b/plugins/samplesource/remoteinput/remoteinputudphandler.cpp @@ -340,13 +340,13 @@ void RemoteInputUDPHandler::tick() m_converterBuffer = new int32_t[m_readLengthSamples]; } - uint8_t *buf = m_remoteInputBuffer.readData(m_readLength); + int8_t *buf = (int8_t*) m_remoteInputBuffer.readData(m_readLength); for (int is = 0; is < m_readLengthSamples; is++) { - m_converterBuffer[is] = buf[2*is+1] << 8; // Q -> MSB + m_converterBuffer[is] = buf[2*is+1] * (1<<8); // Q -> MSB m_converterBuffer[is] <<= 16; - m_converterBuffer[is] += buf[2*is] << 8; // I -> LSB + m_converterBuffer[is] += buf[2*is] * (1<<8); // I -> LSB } } else if ((metaData.m_sampleBits == 8) && (SDR_RX_SAMP_SZ == 24)) // 8 -> 24 @@ -357,14 +357,12 @@ void RemoteInputUDPHandler::tick() m_converterBuffer = new int32_t[m_readLengthSamples*2]; } - uint8_t *buf = m_remoteInputBuffer.readData(m_readLength); + int8_t *buf = (int8_t*) m_remoteInputBuffer.readData(m_readLength); for (int is = 0; is < m_readLengthSamples; is++) { - m_converterBuffer[2*is] = buf[2*is]; // I - m_converterBuffer[2*is] <<= 16; - m_converterBuffer[2*is+1] = buf[2*is+1]; // Q - m_converterBuffer[2*is+1] <<= 16; + m_converterBuffer[2*is] = buf[2*is] * (1<<16); // I + m_converterBuffer[2*is+1] = buf[2*is+1] * (1<<16); // Q } m_sampleFifo->write(reinterpret_cast(m_converterBuffer), m_readLengthSamples*sizeof(Sample)); @@ -377,14 +375,12 @@ void RemoteInputUDPHandler::tick() m_converterBuffer = new int32_t[m_readLengthSamples*2]; } - uint8_t *buf = m_remoteInputBuffer.readData(m_readLength); + int16_t *buf = (int16_t*) m_remoteInputBuffer.readData(m_readLength); for (int is = 0; is < m_readLengthSamples; is++) { - m_converterBuffer[2*is] = ((int16_t*)buf)[2*is]; // I - m_converterBuffer[2*is] <<= 8; - m_converterBuffer[2*is+1] = ((int16_t*)buf)[2*is+1]; // Q - m_converterBuffer[2*is+1] <<= 8; + m_converterBuffer[2*is] = buf[2*is] * (1<<8); // I + m_converterBuffer[2*is+1] = buf[2*is+1] * (1<<8); // Q } m_sampleFifo->write(reinterpret_cast(m_converterBuffer), m_readLengthSamples*sizeof(Sample)); @@ -397,13 +393,13 @@ void RemoteInputUDPHandler::tick() m_converterBuffer = new int32_t[m_readLengthSamples]; } - uint8_t *buf = m_remoteInputBuffer.readData(m_readLength); + int32_t *buf = (int32_t*) m_remoteInputBuffer.readData(m_readLength); for (int is = 0; is < m_readLengthSamples; is++) { - m_converterBuffer[is] = ((int32_t *)buf)[2*is+1]>>8; // Q -> MSB + m_converterBuffer[is] = buf[2*is+1] / (1<<8); // Q -> MSB m_converterBuffer[is] <<= 16; - m_converterBuffer[is] += ((int32_t *)buf)[2*is]>>8; // I -> LSB + m_converterBuffer[is] += buf[2*is] / (1<<8); // I -> LSB } m_sampleFifo->write(reinterpret_cast(m_converterBuffer), m_readLengthSamples*sizeof(Sample)); diff --git a/sdrbase/channel/remotedatareadqueue.h b/sdrbase/channel/remotedatareadqueue.h index 6ad014c3c..c748fe2f9 100644 --- a/sdrbase/channel/remotedatareadqueue.h +++ b/sdrbase/channel/remotedatareadqueue.h @@ -70,24 +70,23 @@ private: { if (sampleSize == 2) // 8 -> 16 bits { - int8_t iu = m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize]; - int8_t qu = m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize+1]; - iconv = iu * (1 << 8); - qconv = qu * (1 << 8); + int8_t *buf = (int8_t*) m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf; + iconv = buf[sampleIndex*sampleSize] * (1<<8); + qconv = buf[sampleIndex*sampleSize+1] * (1<<8); s.setReal(iconv); s.setImag(qconv); } else if (sampleSize == 4) // just convert types (always 16 bits wide) { - iconv = ((int16_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize]))[0]; - qconv = ((int16_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize+2]))[0]; + iconv = *((int16_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize])); + qconv = *((int16_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize+2])); s.setReal(iconv); s.setImag(qconv); } else if (sampleSize == 8) // just convert types (always 16 bits wide) { - iconv = ((int32_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize]))[0]; - qconv = ((int32_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize+4]))[0]; + iconv = *((int32_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize])); + qconv = *((int32_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize+4])); s.setReal(iconv); s.setImag(qconv); } @@ -98,26 +97,33 @@ private: } else { - if (sampleSize == 2) // 8 -> 16 or 24 bits + if ((sampleSize == 2) && (sizeof(Sample) == 2)) // 8 -> 16 bits { - int8_t iu = m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize]; - int8_t qu = m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize+1]; - iconv = iu * (1 << sizeof(Sample)*2); - qconv = qu * (1 << sizeof(Sample)*2); + int8_t *buf = (int8_t*) m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf; + iconv = buf[sampleIndex*sampleSize] * (1<<8); + qconv = buf[sampleIndex*sampleSize+1] * (1<<8); + s.setReal(iconv); + s.setImag(qconv); + } + else if ((sampleSize == 2) && (sizeof(Sample) == 4)) // 8 -> 24 bits + { + int8_t *buf = (int8_t*) m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf; + iconv = buf[sampleIndex*sampleSize] * (1<<16); + qconv = buf[sampleIndex*sampleSize+1] * (1<<16); s.setReal(iconv); s.setImag(qconv); } else if (sampleSize == 4) // 16 -> 24 bits { - iconv = ((int16_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize]))[0] << 8; - qconv = ((int16_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize+2]))[0] << 8; + iconv = *((int16_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize])) * (1<<8); + qconv = *((int16_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize+2])) * (1<<8); s.setReal(iconv); s.setImag(qconv); } else if (sampleSize == 8) // 24 -> 16 bits { - iconv = ((int32_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize]))[0] >> 8; - qconv = ((int32_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize+4]))[0] >> 8; + iconv = *((int32_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize])) / (1<<8); + qconv = *((int32_t*) &(m_dataFrame->m_superBlocks[blockIndex].m_protectedBlock.buf[sampleIndex*sampleSize+4])) / (1<<8); s.setReal(iconv); s.setImag(qconv); }