From 7ad19f01401f155bd4fea56076c0331162ed69fb Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 2 Apr 2017 23:20:25 +0200 Subject: [PATCH] AM Demodulator: implemented shortened interleaved sync standard for image formatting --- plugins/channelrx/demodatv/atvdemod.cpp | 17 ++++++++++++----- plugins/channelrx/demodatv/atvdemod.h | 10 +++++++++- plugins/channelrx/demodatv/atvdemodgui.cpp | 18 ++++++++++++++++++ plugins/channelrx/demodatv/atvdemodgui.h | 1 + plugins/channelrx/demodatv/atvdemodgui.ui | 17 ++++++++++++++--- plugins/channelrx/demodatv/atvdemodplugin.cpp | 2 +- 6 files changed, 55 insertions(+), 10 deletions(-) diff --git a/plugins/channelrx/demodatv/atvdemod.cpp b/plugins/channelrx/demodatv/atvdemod.cpp index 2b6c275cd..831aec2a4 100644 --- a/plugins/channelrx/demodatv/atvdemod.cpp +++ b/plugins/channelrx/demodatv/atvdemod.cpp @@ -94,6 +94,7 @@ void ATVDemod::configure( float fltTopDurationUs, float fltFramePerS, ATVStd enmATVStandard, + int intNumberOfLines, float fltRatioOfRowsToDisplay, float fltVoltLevelSynchroTop, float fltVoltLevelSynchroBlack, @@ -107,6 +108,7 @@ void ATVDemod::configure( fltTopDurationUs, fltFramePerS, enmATVStandard, + intNumberOfLines, fltRatioOfRowsToDisplay, fltVoltLevelSynchroTop, fltVoltLevelSynchroBlack, @@ -695,10 +697,13 @@ void ATVDemod::applySettings() || (m_objConfig.m_intSampleRate != m_objRunning.m_intSampleRate) || (m_objConfig.m_fltTopDuration != m_objRunning.m_fltTopDuration) || (m_objConfig.m_fltRatioOfRowsToDisplay != m_objRunning.m_fltRatioOfRowsToDisplay) - || (m_objConfig.m_enmATVStandard != m_objRunning.m_enmATVStandard)) + || (m_objConfig.m_enmATVStandard != m_objRunning.m_enmATVStandard) + || (m_objConfig.m_intNumberOfLines != m_objRunning.m_intNumberOfLines)) { m_objSettingsMutex.lock(); + m_intNumberOfLines = m_objConfig.m_intNumberOfLines; + applyStandard(); m_intNumberSamplePerLine = (int) (m_objConfig.m_fltLineDuration * m_objConfig.m_intSampleRate); @@ -772,21 +777,23 @@ void ATVDemod::applyStandard() { switch(m_objConfig.m_enmATVStandard) { + case ATVStdShortInterleaved: // Follows loosely the 405 lines standard + // what is left in a line for the image + m_intNumberOfSyncLines = 4; + m_intNumberOfBlackLines = 4; + break; case ATVStd405: // Follows loosely the 405 lines standard - m_intNumberOfLines = 405; - // what is left in a 64 us line for the image + // what is left in a ine for the image m_intNumberOfSyncLines = 24; // (15+7)*2 - 20 m_intNumberOfBlackLines = 28; // above + 4 break; case ATVStdPAL525: // Follows PAL-M standard - m_intNumberOfLines = 525; // what is left in a 64/1.008 us line for the image m_intNumberOfSyncLines = 40; // (15+15)*2 - 20 m_intNumberOfBlackLines = 44; // above + 4 break; case ATVStdPAL625: // Follows PAL-B/G/H standard default: - m_intNumberOfLines = 625; // what is left in a 64 us line for the image m_intNumberOfSyncLines = 44; // (15+17)*2 - 20 m_intNumberOfBlackLines = 48; // above + 4 diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index 7c81bef65..ed833eced 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -49,7 +49,8 @@ public: { ATVStdPAL625, ATVStdPAL525, - ATVStd405 + ATVStd405, + ATVStdShortInterleaved }; enum ATVModulation { @@ -65,6 +66,7 @@ public: { int m_intSampleRate; ATVStd m_enmATVStandard; + int m_intNumberOfLines; float m_fltLineDuration; float m_fltTopDuration; float m_fltFramePerS; @@ -79,6 +81,7 @@ public: ATVConfig() : m_intSampleRate(0), m_enmATVStandard(ATVStdPAL625), + m_intNumberOfLines(625), m_fltLineDuration(0.0f), m_fltTopDuration(0.0f), m_fltFramePerS(0.0f), @@ -149,6 +152,7 @@ public: float fltTopDurationUs, float fltFramePerS, ATVStd enmATVStandard, + int intNumberOfLines, float fltRatioOfRowsToDisplay, float fltVoltLevelSynchroTop, float fltVoltLevelSynchroBlack, @@ -197,6 +201,7 @@ private: float fltTopDurationUs, float fltFramePerS, ATVStd enmATVStandard, + int intNumberOfLines, float fltRatioOfRowsToDisplay, float fltVoltLevelSynchroTop, float fltVoltLevelSynchroBlack, @@ -210,6 +215,7 @@ private: fltTopDurationUs, fltFramePerS, enmATVStandard, + intNumberOfLines, fltRatioOfRowsToDisplay, fltVoltLevelSynchroTop, fltVoltLevelSynchroBlack, @@ -227,6 +233,7 @@ private: float fltTopDurationUs, float fltFramePerS, ATVStd enmATVStandard, + int intNumberOfLines, float flatRatioOfRowsToDisplay, float fltVoltLevelSynchroTop, float fltVoltLevelSynchroBlack, @@ -240,6 +247,7 @@ private: m_objMsgConfig.m_fltVoltLevelSynchroTop = fltVoltLevelSynchroTop; m_objMsgConfig.m_fltFramePerS = fltFramePerS; m_objMsgConfig.m_enmATVStandard = enmATVStandard; + m_objMsgConfig.m_intNumberOfLines = intNumberOfLines; m_objMsgConfig.m_fltLineDuration = fltLineDurationUs; m_objMsgConfig.m_fltTopDuration = fltTopDurationUs; m_objMsgConfig.m_fltRatioOfRowsToDisplay = flatRatioOfRowsToDisplay; diff --git a/plugins/channelrx/demodatv/atvdemodgui.cpp b/plugins/channelrx/demodatv/atvdemodgui.cpp index cd8e545d6..648a4f439 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.cpp +++ b/plugins/channelrx/demodatv/atvdemodgui.cpp @@ -372,6 +372,7 @@ void ATVDemodGUI::applySettings() getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex()) * (4.7f / 64.0f) + ui->topTime->value() * m_fltTopTimeMultiplier, getFps(ui->fps->currentIndex()), (ATVDemod::ATVStd) ui->standard->currentIndex(), + getNumberOfLines(ui->nbLines->currentIndex()), (ui->halfImage->checkState() == Qt::Checked) ? 0.5f : 1.0f, ui->synchLevel->value() / 1000.0f, ui->blackLevel->value() / 1000.0f, @@ -723,3 +724,20 @@ float ATVDemodGUI::getNominalLineTime(int nbLinesIndex, int fpsIndex) break; } } + +int ATVDemodGUI::getNumberOfLines(int nbLinesIndex) +{ + switch(nbLinesIndex) + { + case 1: + return 525; + break; + case 2: + return 405; + break; + case 0: + default: + return 625; + break; + } +} diff --git a/plugins/channelrx/demodatv/atvdemodgui.h b/plugins/channelrx/demodatv/atvdemodgui.h index a322bc8b9..b5088b1e4 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.h +++ b/plugins/channelrx/demodatv/atvdemodgui.h @@ -120,6 +120,7 @@ private: void topTimeUpdate(); static float getFps(int fpsIndex); static float getNominalLineTime(int nbLinesIndex, int fpsIndex); + static int getNumberOfLines(int nbLinesIndex); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodatv/atvdemodgui.ui b/plugins/channelrx/demodatv/atvdemodgui.ui index 7f5ef5a77..e51a68f35 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.ui +++ b/plugins/channelrx/demodatv/atvdemodgui.ui @@ -498,22 +498,28 @@ + + + 50 + 16777215 + + Nominal number of lines per frame - 625 L + 625 - 525 L + 525 - 405 L + 405 @@ -565,6 +571,11 @@ 405L + + + SHi + + diff --git a/plugins/channelrx/demodatv/atvdemodplugin.cpp b/plugins/channelrx/demodatv/atvdemodplugin.cpp index ab015d0c1..85da7ba0f 100644 --- a/plugins/channelrx/demodatv/atvdemodplugin.cpp +++ b/plugins/channelrx/demodatv/atvdemodplugin.cpp @@ -26,7 +26,7 @@ const PluginDescriptor ATVDemodPlugin::m_ptrPluginDescriptor = { QString("ATV Demodulator"), - QString("3.3.2"), + QString("3.3.3"), QString("(c) F4HKW for F4EXB / SDRAngel"), QString("https://github.com/f4exb/sdrangel"), true,