1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-03 06:24:48 -04:00

Remote output/source: implemented choice of sample size in transmission. Fixes in the size conversion routines

This commit is contained in:
f4exb
2021-12-19 11:30:48 +01:00
parent 6cc1616cb8
commit 9278b12e25
21 changed files with 207 additions and 34 deletions
+12 -10
View File
@@ -31,7 +31,6 @@ UDPSinkFEC::UDPSinkFEC() :
m_sampleRate(48000),
m_nbSamples(0),
m_nbBlocksFEC(0),
//m_nbTxBytes(SDR_RX_SAMP_SZ <= 16 ? 2 : 4),
m_nbTxBytes(2),
m_txDelayRatio(0.0),
m_dataFrame(nullptr),
@@ -58,6 +57,15 @@ UDPSinkFEC::~UDPSinkFEC()
delete m_senderThread;
}
void UDPSinkFEC::init()
{
m_dataFrame = nullptr;
m_txBlockIndex = 0;
m_txBlocksIndex = 0;
m_frameCount = 0;
m_sampleIndex = 0;
}
void UDPSinkFEC::startSender()
{
qDebug("UDPSinkFEC::startSender");
@@ -92,7 +100,7 @@ void UDPSinkFEC::setRemoteAddress(const QString& address, uint16_t port)
m_remoteOutputSender->setDestination(m_remoteAddress, m_remotePort);
}
void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunkSize)
void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunkSize, bool isTx)
{
const SampleVector::iterator end = begin + sampleChunkSize;
@@ -156,19 +164,13 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk
int samplesPerBlock = RemoteNbBytesPerBlock / (m_nbTxBytes * 2); // two I or Q samples
if (m_sampleIndex + inRemainingSamples < samplesPerBlock) // there is still room in the current super block
{
convertSampleToData(begin + inSamplesIndex, inRemainingSamples);
// memcpy((void *) &m_superBlock.m_protectedBlock.buf[m_sampleIndex*sizeof(Sample)],
// (const void *) &(*(begin+inSamplesIndex)),
// inRemainingSamples * sizeof(Sample));
convertSampleToData(begin + inSamplesIndex, inRemainingSamples, isTx);
m_sampleIndex += inRemainingSamples;
it = end; // all input samples are consumed
}
else // complete super block and initiate the next if not end of frame
{
convertSampleToData(begin + inSamplesIndex, samplesPerBlock - m_sampleIndex);
// memcpy((void *) &m_superBlock.m_protectedBlock.buf[m_sampleIndex*sizeof(Sample)],
// (const void *) &(*(begin+inSamplesIndex)),
// (samplesPerBlock - m_sampleIndex) * sizeof(Sample));
convertSampleToData(begin + inSamplesIndex, samplesPerBlock - m_sampleIndex, isTx);
it += samplesPerBlock - m_sampleIndex;
m_sampleIndex = 0;