1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-18 22:31:48 -05:00

SDRdaemonFEC support: debug (2). Fixed output meta data cature

This commit is contained in:
f4exb 2016-06-21 08:30:32 +02:00
parent 46e85fa643
commit 96bec6cac3
2 changed files with 22 additions and 15 deletions

View File

@ -39,6 +39,7 @@ SDRdaemonFECBuffer::SDRdaemonFECBuffer(uint32_t throttlems) :
m_bufferLenSec(0.0f)
{
m_currentMeta.init();
m_outputMeta.init();
m_framesNbBytes = nbDecoderSlots * sizeof(BufferFrame) * m_iqSampleSize;
m_wrDeltaEstimate = m_framesNbBytes / 2;
}
@ -82,6 +83,13 @@ void SDRdaemonFECBuffer::initDecodeSlot(int slotIndex)
{
int pseudoWriteIndex = slotIndex * sizeof(BufferFrame);
m_wrDeltaEstimate = pseudoWriteIndex - m_readIndex;
if (m_decoderSlots[slotIndex].m_blockZero.m_metaData.m_nbFECBlocks < 0) { // meta data invalid
m_outputMeta = m_currentMeta; // use current meta
} else {
m_outputMeta = m_decoderSlots[slotIndex].m_blockZero.m_metaData;
}
// collect stats before voiding the slot
m_curNbBlocks = m_decoderSlots[slotIndex].m_blockCount;
m_curNbRecovery = m_decoderSlots[slotIndex].m_recoveryCount;
@ -205,6 +213,10 @@ void SDRdaemonFECBuffer::writeData(char *array, uint32_t length)
{
int nbOriginalBlocks = m_decoderSlots[decoderIndex].m_blockCount - m_decoderSlots[decoderIndex].m_recoveryCount;
qDebug() << "SDRdaemonFECBuffer::writeData:"
<< " nbOriginalBlocks: " << nbOriginalBlocks
<< " m_recoveryCount: " << m_decoderSlots[decoderIndex].m_recoveryCount;
for (int ir = 0; ir < m_decoderSlots[decoderIndex].m_recoveryCount; ir++) // recover lost blocks
{
int blockIndex = m_decoderSlots[decoderIndex].m_cm256DescriptorBlocks[nbOriginalBlocks+ir].Index;
@ -225,6 +237,8 @@ void SDRdaemonFECBuffer::writeData(char *array, uint32_t length)
}
}
//printMeta("SDRdaemonFECBuffer::writeData", &m_decoderSlots[decoderIndex].m_blockZero.m_metaData);
if (m_decoderSlots[decoderIndex].m_blockZero.m_metaData.m_nbFECBlocks >= 0) // meta data valid
{
if (!(m_decoderSlots[decoderIndex].m_blockZero.m_metaData == m_currentMeta))

View File

@ -67,7 +67,7 @@ SDRdaemonFECUDPHandler::~SDRdaemonFECUDPHandler()
void SDRdaemonFECUDPHandler::start()
{
qDebug("SDRdaemonUDPHandler::start");
qDebug("SDRdaemonFECUDPHandler::start");
if (!m_dataSocket)
{
@ -78,13 +78,13 @@ void SDRdaemonFECUDPHandler::start()
{
if (m_dataSocket->bind(m_dataAddress, m_dataPort))
{
qDebug("SDRdaemonUDPHandler::start: bind data socket to %s:%d", m_dataAddress.toString().toStdString().c_str(), m_dataPort);
qDebug("SDRdaemonFECUDPHandler::start: bind data socket to %s:%d", m_dataAddress.toString().toStdString().c_str(), m_dataPort);
connect(m_dataSocket, SIGNAL(readyRead()), this, SLOT(dataReadyRead()), Qt::QueuedConnection); // , Qt::QueuedConnection
m_dataConnected = true;
}
else
{
qWarning("SDRdaemonUDPHandler::start: cannot bind data port %d", m_dataPort);
qWarning("SDRdaemonFECUDPHandler::start: cannot bind data port %d", m_dataPort);
m_dataConnected = false;
}
}
@ -97,7 +97,7 @@ void SDRdaemonFECUDPHandler::start()
void SDRdaemonFECUDPHandler::stop()
{
qDebug("SDRdaemonUDPHandler::stop");
qDebug("SDRdaemonFECUDPHandler::stop");
if (m_dataConnected) {
disconnect(m_dataSocket, SIGNAL(readyRead()), this, SLOT(dataReadyRead()));
@ -113,12 +113,12 @@ void SDRdaemonFECUDPHandler::stop()
void SDRdaemonFECUDPHandler::configureUDPLink(const QString& address, quint16 port)
{
qDebug("SDRdaemonUDPHandler::configureUDPLink: %s:%d", address.toStdString().c_str(), port);
qDebug("SDRdaemonFECUDPHandler::configureUDPLink: %s:%d", address.toStdString().c_str(), port);
bool addressOK = m_dataAddress.setAddress(address);
if (!addressOK)
{
qWarning("SDRdaemonUDPHandler::configureUDPLink: invalid address %s. Set to localhost.", address.toStdString().c_str());
qWarning("SDRdaemonFECUDPHandler::configureUDPLink: invalid address %s. Set to localhost.", address.toStdString().c_str());
m_dataAddress = QHostAddress::LocalHost;
}
@ -134,9 +134,6 @@ void SDRdaemonFECUDPHandler::dataReadyRead()
qint64 pendingDataSize = m_dataSocket->pendingDatagramSize();
m_udpReadBytes = m_dataSocket->readDatagram(m_udpBuf, pendingDataSize, &m_remoteAddress, 0);
qDebug() << "SDRdaemonUDPHandler::dataReadyRead:"
<< " m_udpReadBytes: " << m_udpReadBytes;
if (m_udpReadBytes == SDRdaemonFECBuffer::m_udpPayloadSize) {
processData();
}
@ -152,10 +149,6 @@ void SDRdaemonFECUDPHandler::processData()
m_tv_sec = metaData.m_tv_sec;
m_tv_usec = metaData.m_tv_usec;
qDebug() << "SDRdaemonUDPHandler::processData:"
<< " m_samplerate: " << metaData.m_sampleRate
<< " m_centerFrequency: " << metaData.m_centerFrequency;
if (m_centerFrequency != metaData.m_centerFrequency)
{
m_centerFrequency = metaData.m_centerFrequency;
@ -183,7 +176,7 @@ void SDRdaemonFECUDPHandler::processData()
void SDRdaemonFECUDPHandler::connectTimer(const QTimer* timer)
{
qDebug() << "SDRdaemonUDPHandler::connectTimer";
qDebug() << "SDRdaemonFECUDPHandler::connectTimer";
#ifdef USE_INTERNAL_TIMER
#warning "Uses internal timer"
m_timer = new QTimer();
@ -226,7 +219,7 @@ void SDRdaemonFECUDPHandler::tick()
m_tv_usec,
m_sdrDaemonBuffer.getBufferLengthInSecs(),
m_sdrDaemonBuffer.getBufferGauge(),
m_sdrDaemonBuffer.getCurNbBlocks() == SDRdaemonFECBuffer::m_nbOriginalBlocks,
SDRdaemonFECBuffer::m_nbOriginalBlocks,
m_sdrDaemonBuffer.getCurNbBlocks(),
m_sdrDaemonBuffer.getCurNbRecovery(),
m_sdrDaemonBuffer.getAvgNbBlocks(),