From fd70dc30eb86a075bd24f110771ab3f6c3f25eae Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 29 Mar 2017 17:17:11 +0200 Subject: [PATCH] ATV Demod: horizontal sync code refactoring (1) --- plugins/channelrx/demodatv/atvdemod.cpp | 125 +++++++++++++++++------- 1 file changed, 89 insertions(+), 36 deletions(-) diff --git a/plugins/channelrx/demodatv/atvdemod.cpp b/plugins/channelrx/demodatv/atvdemod.cpp index 21c1f0821..f1b926428 100644 --- a/plugins/channelrx/demodatv/atvdemod.cpp +++ b/plugins/channelrx/demodatv/atvdemod.cpp @@ -436,7 +436,7 @@ void ATVDemod::demod(Complex& c) //********** Filling pixels ********** - bool blnComputeImage = (m_objRunning.m_fltRatioOfRowsToDisplay != 0.5f); + bool blnComputeImage = (m_objRunning.m_fltRatioOfRowsToDisplay != 0.5f); // TODO: review this if (!blnComputeImage) { @@ -445,33 +445,48 @@ void ATVDemod::demod(Complex& c) if (blnComputeImage) { - m_objRegisteredATVScreen->setDataColor(m_intColIndex - m_intNumberSaplesPerHSync + m_intNumberSamplePerTop, intVal, intVal, intVal); // TODO: the subtraction should be made with back porch number of samples + m_objRegisteredATVScreen->setDataColor(m_intColIndex - m_intNumberSaplesPerHSync + m_intNumberSamplePerTop, intVal, intVal, intVal); } m_intColIndex++; ////////////////////// - m_blnSynchroDetected=false; +// m_blnSynchroDetected=false; +// +// if (m_intColIndex >= intSynchroTimeSamples) +// { +// //Floor Detection 0 +// if (fltVal < m_objRunning.m_fltVoltLevelSynchroTop) +// { +// m_intSynchroPoints++; +// } +// else if (fltVal > m_objRunning.m_fltVoltLevelSynchroBlack) +// { +// m_intSynchroPoints = 0; +// } +// +// if (m_intSynchroPoints > m_intNumberSamplePerTop) +// { +// m_blnSynchroDetected = true; +// m_intSynchroPoints = 0; +// } +// } - if (m_intColIndex >= intSynchroTimeSamples) + // Horizontal Synchro detection + + // Floor Detection 0 + if (fltVal < m_objRunning.m_fltVoltLevelSynchroTop) { - //Floor Detection 0 - if (fltVal < m_objRunning.m_fltVoltLevelSynchroTop) - { - m_intSynchroPoints++; - } - else if (fltVal > m_objRunning.m_fltVoltLevelSynchroBlack) - { - m_intSynchroPoints = 0; - } - - if (m_intSynchroPoints > m_intNumberSamplePerTop) - { - m_blnSynchroDetected = true; - m_intSynchroPoints = 0; - } + m_intSynchroPoints++; } + // Black detection 0.3 + else if (fltVal > m_objRunning.m_fltVoltLevelSynchroBlack) + { + m_intSynchroPoints = 0; + } + + m_blnSynchroDetected = (m_intSynchroPoints == m_intNumberSamplePerTop); //********** Rendering if necessary ********** @@ -494,24 +509,32 @@ void ATVDemod::demod(Complex& c) } } - //Horizontal Synchro - if ((m_blnSynchroDetected) - || (m_intColIndex >= m_intNumberSamplePerLine + m_intNumberSamplePerTop) - || (!m_objRunning.m_blnHSync && (m_intColIndex >= m_intNumberSamplePerLine))) - { - if (m_blnSynchroDetected - && (m_intRowIndex > m_intNumberOfSyncLines) - && (m_intColIndex > m_intNumberSamplePerLine - m_intNumberSamplePerTop) - && (m_intColIndex < m_intNumberSamplePerLine + m_intNumberSamplePerTop)) - { - m_intAvgColIndex = m_objAvgColIndex.run(m_intColIndex); - m_intColIndex = m_intColIndex - m_intAvgColIndex; - } - else - { - m_intColIndex = 0; - } + //Horizontal Synchro processing + bool blnNewLine = false; + + if (!m_objRunning.m_blnHSync && (m_intColIndex >= m_intNumberSamplePerLine)) // H Sync not active + { + m_intColIndex = 0; + blnNewLine = true; + } + 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_intAvgColIndex = m_objAvgColIndex.run(m_intColIndex); + m_intColIndex = m_intColIndex - m_intAvgColIndex; + blnNewLine = true; + } + else if (m_intColIndex >= m_intNumberSamplePerLine + 2) // No valid H sync + { + m_intColIndex = 0; + blnNewLine = true; + } + + if (blnNewLine) + { m_fltAmpLineAverage=0.0f; //New line + Interleaving @@ -524,6 +547,36 @@ void ATVDemod::demod(Complex& c) } } +// //Horizontal Synchro +// if ((m_blnSynchroDetected) +// || (m_intColIndex >= m_intNumberSamplePerLine + 2) +// || (!m_objRunning.m_blnHSync && (m_intColIndex >= m_intNumberSamplePerLine))) +// { +// if (m_blnSynchroDetected +// && (m_intRowIndex > m_intNumberOfSyncLines) +// && (m_intColIndex > m_intNumberSamplePerLine - m_intNumberSamplePerTop) +// && (m_intColIndex < m_intNumberSamplePerLine + m_intNumberSamplePerTop)) +// { +// m_intAvgColIndex = m_objAvgColIndex.run(m_intColIndex); +// m_intColIndex = m_intColIndex - m_intAvgColIndex; +// } +// else +// { +// m_intColIndex = 0; +// } +// +// m_fltAmpLineAverage=0.0f; +// +// //New line + Interleaving +// m_intRowIndex ++; +// m_intRowIndex ++; +// +// if(m_intRowIndexselectRow(m_intRowIndex - m_intNumberOfSyncLines); +// } +// } + ////////////////////// if(m_intRowIndex>=m_intRowsLimit)