mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-10-03 02:06:37 -04:00
ATV Demod: vertical sync and interleaving redesign based only on vertical synchronization pulses
This commit is contained in:
parent
f78c466a92
commit
e0f74c1b50
@ -450,7 +450,6 @@ void ATVDemod::demod(Complex& c)
|
|||||||
blnNewLine = true;
|
blnNewLine = true;
|
||||||
}
|
}
|
||||||
else if (m_blnSynchroDetected // Valid H sync detected
|
else if (m_blnSynchroDetected // Valid H sync detected
|
||||||
//&& (m_intRowIndex > m_intNumberOfSyncLines) // FIXME: remove ?
|
|
||||||
&& (m_intColIndex > m_intNumberSamplePerLine - m_intNumberSamplePerTop)
|
&& (m_intColIndex > m_intNumberSamplePerLine - m_intNumberSamplePerTop)
|
||||||
&& (m_intColIndex < m_intNumberSamplePerLine + m_intNumberSamplePerTop))
|
&& (m_intColIndex < m_intNumberSamplePerLine + m_intNumberSamplePerTop))
|
||||||
{
|
{
|
||||||
@ -469,10 +468,9 @@ void ATVDemod::demod(Complex& c)
|
|||||||
m_fltAmpLineAverage=0.0f;
|
m_fltAmpLineAverage=0.0f;
|
||||||
|
|
||||||
//New line + Interleaving
|
//New line + Interleaving
|
||||||
m_intRowIndex ++;
|
m_intRowIndex += 2;
|
||||||
m_intRowIndex ++;
|
|
||||||
|
|
||||||
if(m_intRowIndex<m_intNumberOfLines)
|
if (m_intRowIndex < m_intNumberOfLines)
|
||||||
{
|
{
|
||||||
m_objRegisteredATVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines);
|
m_objRegisteredATVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines);
|
||||||
}
|
}
|
||||||
@ -480,67 +478,24 @@ void ATVDemod::demod(Complex& c)
|
|||||||
m_intLineIndex++;
|
m_intLineIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//********** Filling pixels **********
|
// Filling pixels
|
||||||
|
|
||||||
m_objRegisteredATVScreen->setDataColor(m_intColIndex - m_intNumberSaplesPerHSync + m_intNumberSamplePerTop, intVal, intVal, intVal);
|
m_objRegisteredATVScreen->setDataColor(m_intColIndex - m_intNumberSaplesPerHSync + m_intNumberSamplePerTop, intVal, intVal, intVal);
|
||||||
|
|
||||||
m_intColIndex++;
|
m_intColIndex++;
|
||||||
|
|
||||||
//********** Rendering if necessary **********
|
// Vertical sync and image rendering
|
||||||
|
|
||||||
// End of frame processing
|
if (m_objRunning.m_blnVSync) // VSync activated
|
||||||
|
|
||||||
if (m_intRowIndex >= m_intRowsLimit)
|
|
||||||
{
|
{
|
||||||
m_blnVerticalSynchroDetected=false;
|
if (m_intColIndex >= intSynchroTimeSamples)
|
||||||
|
|
||||||
m_fltAmpLineAverage=0.0f;
|
|
||||||
|
|
||||||
//Interleave Odd/Even images
|
|
||||||
m_intRowIndex=m_intImageIndex%2;
|
|
||||||
|
|
||||||
//Rendering when odd image processed
|
|
||||||
if(m_intImageIndex%2==1)
|
|
||||||
{
|
{
|
||||||
//interleave
|
if (m_fltAmpLineAverage <= fltSynchroTrameLevel)
|
||||||
// m_objRegisteredATVScreen->renderImage(0);
|
|
||||||
|
|
||||||
// if (m_objRFRunning.m_enmModulation == ATV_AM)
|
|
||||||
// {
|
|
||||||
// m_fltAmpMin=m_fltEffMin;
|
|
||||||
// m_fltAmpMax=m_fltEffMax;
|
|
||||||
// m_fltAmpDelta=m_fltEffMax-m_fltEffMin;
|
|
||||||
//
|
|
||||||
// if(m_fltAmpDelta<=0.0)
|
|
||||||
// {
|
|
||||||
// m_fltAmpDelta=1.0f;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// //Reset extrema
|
|
||||||
// m_fltEffMin=2000000.0f;
|
|
||||||
// m_fltEffMax=-2000000.0f;
|
|
||||||
// }
|
|
||||||
|
|
||||||
m_intRowsLimit = m_intNumberOfLines - 1; // odd image
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
m_intRowsLimit = m_intNumberOfLines % 2 == 1 ? m_intNumberOfLines : m_intNumberOfLines-2; // even image
|
m_fltAmpLineAverage = 0.0f;
|
||||||
}
|
|
||||||
|
|
||||||
//qDebug("1: %d: %d: %d", m_intLineIndex, m_intImageIndex%2, m_intNumberOfLines);
|
if (!m_blnVerticalSynchroDetected) // not yet
|
||||||
m_intImageIndex ++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Vertical Synchro : 3/4 a line necessary
|
|
||||||
if (!m_blnVerticalSynchroDetected
|
|
||||||
&& m_objRunning.m_blnVSync
|
|
||||||
&& (m_intColIndex >= intSynchroTimeSamples)
|
|
||||||
&& (m_fltAmpLineAverage<=fltSynchroTrameLevel))
|
|
||||||
{
|
{
|
||||||
m_blnVerticalSynchroDetected = true;
|
m_blnVerticalSynchroDetected = true; // prevent repetition
|
||||||
|
|
||||||
// qDebug("%d: %d: %d", m_intLineIndex, m_intImageIndex, m_intNumberOfLines);
|
|
||||||
|
|
||||||
if (m_intLineIndex % 2 == 0) // even => odd image
|
if (m_intLineIndex % 2 == 0) // even => odd image
|
||||||
{
|
{
|
||||||
@ -548,9 +503,9 @@ void ATVDemod::demod(Complex& c)
|
|||||||
|
|
||||||
if (m_objRFRunning.m_enmModulation == ATV_AM)
|
if (m_objRFRunning.m_enmModulation == ATV_AM)
|
||||||
{
|
{
|
||||||
m_fltAmpMin=m_fltEffMin;
|
m_fltAmpMin = m_fltEffMin;
|
||||||
m_fltAmpMax=m_fltEffMax;
|
m_fltAmpMax = m_fltEffMax;
|
||||||
m_fltAmpDelta=m_fltEffMax-m_fltEffMin;
|
m_fltAmpDelta = m_fltEffMax-m_fltEffMin;
|
||||||
|
|
||||||
if(m_fltAmpDelta<=0.0)
|
if(m_fltAmpDelta<=0.0)
|
||||||
{
|
{
|
||||||
@ -558,14 +513,63 @@ void ATVDemod::demod(Complex& c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Reset extrema
|
//Reset extrema
|
||||||
m_fltEffMin=2000000.0f;
|
m_fltEffMin = 2000000.0f;
|
||||||
m_fltEffMax=-2000000.0f;
|
m_fltEffMax = -2000000.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_intRowIndex = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_intRowIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_intRowIndex=m_intImageIndex%2;
|
|
||||||
m_objRegisteredATVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines);
|
m_objRegisteredATVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines);
|
||||||
m_intLineIndex = 0;
|
m_intLineIndex = 0;
|
||||||
|
m_intImageIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_blnVerticalSynchroDetected = false; // reset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // no VSync => arbitrary
|
||||||
|
{
|
||||||
|
if (m_intLineIndex >= m_intNumberOfLines/2)
|
||||||
|
{
|
||||||
|
if (m_intImageIndex % 2 == 1) // odd image
|
||||||
|
{
|
||||||
|
m_objRegisteredATVScreen->renderImage(0);
|
||||||
|
|
||||||
|
if (m_objRFRunning.m_enmModulation == ATV_AM)
|
||||||
|
{
|
||||||
|
m_fltAmpMin = m_fltEffMin;
|
||||||
|
m_fltAmpMax = m_fltEffMax;
|
||||||
|
m_fltAmpDelta = m_fltEffMax-m_fltEffMin;
|
||||||
|
|
||||||
|
if(m_fltAmpDelta<=0.0)
|
||||||
|
{
|
||||||
|
m_fltAmpDelta=1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Reset extrema
|
||||||
|
m_fltEffMin = 2000000.0f;
|
||||||
|
m_fltEffMax = -2000000.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_intRowIndex = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_intRowIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_objRegisteredATVScreen->selectRow(m_intRowIndex - m_intNumberOfSyncLines);
|
||||||
|
m_intLineIndex = 0;
|
||||||
|
m_intImageIndex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user