diff --git a/plugins/channelrx/demodatv/atvdemod.cpp b/plugins/channelrx/demodatv/atvdemod.cpp index 67a92b204..bed0da4be 100644 --- a/plugins/channelrx/demodatv/atvdemod.cpp +++ b/plugins/channelrx/demodatv/atvdemod.cpp @@ -462,9 +462,39 @@ void ATVDemod::demod(Complex& c) } else if (m_intColIndex >= m_intNumberSamplePerLine + m_intNumberSamplePerTop) // No valid H sync { - //qDebug("HLine: %d", m_intColIndex); - m_intColIndex = 0; - blnNewLine = true; + if (m_objRunning.m_enmATVStandard == ATVStdHLeap) // new image in hSync leap mode + { + 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_intColIndex = m_intNumberSamplePerTop; // catch up with passed samples from the line length point + m_intRowIndex = 0; + m_objRegisteredATVScreen->selectRow(m_intRowIndex); + m_intLineIndex = 0; + m_intImageIndex++; + blnNewLine = false; // done already + } + else + { + //qDebug("HLine: %d", m_intColIndex); + m_intColIndex = 0; + blnNewLine = true; + } } if (blnNewLine) @@ -489,7 +519,7 @@ void ATVDemod::demod(Complex& c) // Vertical sync and image rendering - if (m_objRunning.m_blnVSync) // VSync activated + if ((m_objRunning.m_blnVSync) && (m_objRunning.m_enmATVStandard != ATVStdHLeap)) // VSync activated { if (m_intColIndex >= intSynchroTimeSamples) { @@ -781,6 +811,12 @@ void ATVDemod::applyStandard() { switch(m_objConfig.m_enmATVStandard) { + case ATVStdHLeap: + // what is left in a line for the image + m_intNumberOfSyncLines = 0; + m_intNumberOfBlackLines = 0; + m_interleaved = false; + break; case ATVStdShort: // what is left in a line for the image m_intNumberOfSyncLines = 4; diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index ca5f51093..65488e0c8 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -51,7 +51,8 @@ public: ATVStdPAL525, ATVStd405, ATVStdShortInterleaved, - ATVStdShort + ATVStdShort, + ATVStdHLeap }; enum ATVModulation { diff --git a/plugins/channelrx/demodatv/atvdemodgui.cpp b/plugins/channelrx/demodatv/atvdemodgui.cpp index 080648dbe..bce633d4e 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.cpp +++ b/plugins/channelrx/demodatv/atvdemodgui.cpp @@ -736,6 +736,12 @@ float ATVDemodGUI::getNominalLineTime(int nbLinesIndex, int fpsIndex) case 6: return 1.0f / (90 * fps); break; + case 7: + return 1.0f / (60 * fps); + break; + case 8: + return 1.0f / (32 * fps); + break; case 0: default: return 1.0f / (625 * fps); @@ -765,6 +771,12 @@ int ATVDemodGUI::getNumberOfLines(int nbLinesIndex) case 6: return 90; break; + case 7: + return 60; + break; + case 8: + return 32; + break; case 0: default: return 625; diff --git a/plugins/channelrx/demodatv/atvdemodgui.ui b/plugins/channelrx/demodatv/atvdemodgui.ui index 318171a7c..1475a3166 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.ui +++ b/plugins/channelrx/demodatv/atvdemodgui.ui @@ -542,6 +542,16 @@ 90 + + + 60 + + + + + 32 + + @@ -598,7 +608,7 @@ - 405L + PAL405 @@ -611,6 +621,11 @@ SHni + + + HLeap + +