mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05:00
SDRdaemonFEC support: debug (8). fixed CM256 descriptors addressing of recovery blocks. Debug message when frames are incomplete.
This commit is contained in:
parent
dddf872d56
commit
c7751062c3
@ -80,6 +80,16 @@ void SDRdaemonFECBuffer::initReadIndex()
|
||||
m_wrDeltaEstimate = m_framesNbBytes / 2;
|
||||
}
|
||||
|
||||
void SDRdaemonFECBuffer::checkSlotData(int slotIndex)
|
||||
{
|
||||
if (!m_decoderSlots[slotIndex].m_decoded)
|
||||
{
|
||||
qDebug() << "SDRdaemonFECBuffer::checkSlotData: incomplete frame:"
|
||||
<< " m_blockCount: " << m_decoderSlots[slotIndex].m_blockCount
|
||||
<< " m_recoveryCount: " << m_decoderSlots[slotIndex].m_recoveryCount;
|
||||
}
|
||||
}
|
||||
|
||||
void SDRdaemonFECBuffer::initDecodeSlot(int slotIndex)
|
||||
{
|
||||
int pseudoWriteIndex = slotIndex * sizeof(BufferFrame);
|
||||
@ -138,6 +148,7 @@ void SDRdaemonFECBuffer::writeData(char *array, uint32_t length)
|
||||
//qDebug() << "SDRdaemonFECBuffer::writeData: new frame head (1): " << frameIndex << ":" << frameDelta << ":" << decoderIndex;
|
||||
m_decoderIndexHead = decoderIndex; // new decoder slot head
|
||||
m_frameHead = frameIndex;
|
||||
checkSlotData(decoderIndex);
|
||||
dataAvailable = true;
|
||||
initDecodeSlot(decoderIndex); // collect stats and re-initialize current slot
|
||||
}
|
||||
@ -157,6 +168,7 @@ void SDRdaemonFECBuffer::writeData(char *array, uint32_t length)
|
||||
//qDebug() << "SDRdaemonFECBuffer::writeData: new frame head (2): " << frameIndex << ":" << frameDelta << ":" << decoderIndex;
|
||||
m_decoderIndexHead = decoderIndex; // new decoder slot head
|
||||
m_frameHead = frameIndex;
|
||||
checkSlotData(decoderIndex);
|
||||
dataAvailable = true;
|
||||
initDecodeSlot(decoderIndex); // collect stats and re-initialize current slot
|
||||
}
|
||||
@ -174,6 +186,7 @@ void SDRdaemonFECBuffer::writeData(char *array, uint32_t length)
|
||||
// decoderIndex should now be correctly set
|
||||
|
||||
int blockHead = m_decoderSlots[decoderIndex].m_blockCount;
|
||||
int recoveryHead = m_decoderSlots[decoderIndex].m_recoveryCount;
|
||||
|
||||
if (blockHead < m_nbOriginalBlocks) // not enough blocks to decode -> store data
|
||||
{
|
||||
@ -191,7 +204,8 @@ void SDRdaemonFECBuffer::writeData(char *array, uint32_t length)
|
||||
}
|
||||
else // redundancy block
|
||||
{
|
||||
m_decoderSlots[decoderIndex].m_recoveryBlocks[m_decoderSlots[decoderIndex].m_recoveryCount] = superBlock->protectedBlock;
|
||||
m_decoderSlots[decoderIndex].m_recoveryBlocks[recoveryHead] = superBlock->protectedBlock;
|
||||
m_decoderSlots[decoderIndex].m_cm256DescriptorBlocks[blockHead].Block = (void *) &m_decoderSlots[decoderIndex].m_recoveryBlocks[recoveryHead];
|
||||
m_decoderSlots[decoderIndex].m_recoveryCount++;
|
||||
}
|
||||
|
||||
@ -235,8 +249,10 @@ void SDRdaemonFECBuffer::writeData(char *array, uint32_t length)
|
||||
if (blockIndex == 0)
|
||||
{
|
||||
ProtectedBlockZero *recoveredBlockZero = (ProtectedBlockZero *) &m_decoderSlots[decoderIndex].m_recoveryBlocks[ir];
|
||||
m_decoderSlots[decoderIndex].m_blockZero.m_metaData = recoveredBlockZero->m_metaData;
|
||||
m_decoderSlots[decoderIndex].m_metaRetrieved = true;
|
||||
printMeta("SDRdaemonFECBuffer::writeData: recovered meta", &recoveredBlockZero->m_metaData);
|
||||
// FEC does not work
|
||||
// m_decoderSlots[decoderIndex].m_blockZero.m_metaData = recoveredBlockZero->m_metaData;
|
||||
// m_decoderSlots[decoderIndex].m_metaRetrieved = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -179,6 +179,7 @@ private:
|
||||
void initDecoderSlotsAddresses();
|
||||
void initDecodeAllSlots();
|
||||
void initReadIndex();
|
||||
void checkSlotData(int slotIndex);
|
||||
void initDecodeSlot(int slotIndex);
|
||||
|
||||
static void printMeta(const QString& header, MetaDataFEC *metaData);
|
||||
|
Loading…
Reference in New Issue
Block a user