mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-26 17:58:43 -05:00
SDRDaemonSink: 16/24 bit samples compatibility
This commit is contained in:
parent
404c73fb80
commit
6341bddef3
@ -141,20 +141,39 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk
|
|||||||
m_txBlockIndex = 1; // next Tx block with data
|
m_txBlockIndex = 1; // next Tx block with data
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: memcpy is valid for 4 bytes samples only (16 bits) else conversion must take place to take only LSB assuming Tx is 16 bit only
|
|
||||||
if (m_sampleIndex + inRemainingSamples < samplesPerBlock) // there is still room in the current super block
|
if (m_sampleIndex + inRemainingSamples < samplesPerBlock) // there is still room in the current super block
|
||||||
|
{
|
||||||
|
if (SDR_RX_SAMP_SZ == SDR_TX_SAMP_SZ) // can do direct copy if sizes are equal (to 16 bits)
|
||||||
{
|
{
|
||||||
memcpy((char *) &m_superBlock.protectedBlock.m_samples[m_sampleIndex],
|
memcpy((char *) &m_superBlock.protectedBlock.m_samples[m_sampleIndex],
|
||||||
(const char *) &(*it),
|
(const char *) &(*it),
|
||||||
inRemainingSamples * sizeof(Sample));
|
inRemainingSamples * sizeof(Sample));
|
||||||
|
}
|
||||||
|
else // Samples are limited to 16 bits by the modulators
|
||||||
|
{
|
||||||
|
for (int is = 0; is < inRemainingSamples; is++) {
|
||||||
|
m_superBlock.protectedBlock.m_samples[m_sampleIndex+is] = *(it+is);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_sampleIndex += inRemainingSamples;
|
m_sampleIndex += inRemainingSamples;
|
||||||
it = end; // all input samples are consumed
|
it = end; // all input samples are consumed
|
||||||
}
|
}
|
||||||
else // complete super block and initiate the next if not end of frame
|
else // complete super block and initiate the next if not end of frame
|
||||||
|
{
|
||||||
|
if (SDR_RX_SAMP_SZ == SDR_TX_SAMP_SZ) // can do direct copy if sizes are equal (to 16 bits)
|
||||||
{
|
{
|
||||||
memcpy((char *) &m_superBlock.protectedBlock.m_samples[m_sampleIndex],
|
memcpy((char *) &m_superBlock.protectedBlock.m_samples[m_sampleIndex],
|
||||||
(const char *) &(*it),
|
(const char *) &(*it),
|
||||||
(samplesPerBlock - m_sampleIndex) * sizeof(Sample));
|
(samplesPerBlock - m_sampleIndex) * sizeof(Sample));
|
||||||
|
}
|
||||||
|
else // Samples are limited to 16 bits by the modulators
|
||||||
|
{
|
||||||
|
for (int is = 0; is < samplesPerBlock - m_sampleIndex; is++) {
|
||||||
|
m_superBlock.protectedBlock.m_samples[m_sampleIndex+is] = *(it+is);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
it += samplesPerBlock - m_sampleIndex;
|
it += samplesPerBlock - m_sampleIndex;
|
||||||
m_sampleIndex = 0;
|
m_sampleIndex = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user