1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-15 21:01:45 -05:00

AM Demodulator: implemented shortened interleaved sync standard for image formatting

This commit is contained in:
f4exb 2017-04-02 23:20:25 +02:00
parent c2d9de1926
commit 7ad19f0140
6 changed files with 55 additions and 10 deletions

View File

@ -94,6 +94,7 @@ void ATVDemod::configure(
float fltTopDurationUs, float fltTopDurationUs,
float fltFramePerS, float fltFramePerS,
ATVStd enmATVStandard, ATVStd enmATVStandard,
int intNumberOfLines,
float fltRatioOfRowsToDisplay, float fltRatioOfRowsToDisplay,
float fltVoltLevelSynchroTop, float fltVoltLevelSynchroTop,
float fltVoltLevelSynchroBlack, float fltVoltLevelSynchroBlack,
@ -107,6 +108,7 @@ void ATVDemod::configure(
fltTopDurationUs, fltTopDurationUs,
fltFramePerS, fltFramePerS,
enmATVStandard, enmATVStandard,
intNumberOfLines,
fltRatioOfRowsToDisplay, fltRatioOfRowsToDisplay,
fltVoltLevelSynchroTop, fltVoltLevelSynchroTop,
fltVoltLevelSynchroBlack, fltVoltLevelSynchroBlack,
@ -695,10 +697,13 @@ void ATVDemod::applySettings()
|| (m_objConfig.m_intSampleRate != m_objRunning.m_intSampleRate) || (m_objConfig.m_intSampleRate != m_objRunning.m_intSampleRate)
|| (m_objConfig.m_fltTopDuration != m_objRunning.m_fltTopDuration) || (m_objConfig.m_fltTopDuration != m_objRunning.m_fltTopDuration)
|| (m_objConfig.m_fltRatioOfRowsToDisplay != m_objRunning.m_fltRatioOfRowsToDisplay) || (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_objSettingsMutex.lock();
m_intNumberOfLines = m_objConfig.m_intNumberOfLines;
applyStandard(); applyStandard();
m_intNumberSamplePerLine = (int) (m_objConfig.m_fltLineDuration * m_objConfig.m_intSampleRate); m_intNumberSamplePerLine = (int) (m_objConfig.m_fltLineDuration * m_objConfig.m_intSampleRate);
@ -772,21 +777,23 @@ void ATVDemod::applyStandard()
{ {
switch(m_objConfig.m_enmATVStandard) 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 case ATVStd405: // Follows loosely the 405 lines standard
m_intNumberOfLines = 405; // what is left in a ine for the image
// what is left in a 64 us line for the image
m_intNumberOfSyncLines = 24; // (15+7)*2 - 20 m_intNumberOfSyncLines = 24; // (15+7)*2 - 20
m_intNumberOfBlackLines = 28; // above + 4 m_intNumberOfBlackLines = 28; // above + 4
break; break;
case ATVStdPAL525: // Follows PAL-M standard case ATVStdPAL525: // Follows PAL-M standard
m_intNumberOfLines = 525;
// what is left in a 64/1.008 us line for the image // what is left in a 64/1.008 us line for the image
m_intNumberOfSyncLines = 40; // (15+15)*2 - 20 m_intNumberOfSyncLines = 40; // (15+15)*2 - 20
m_intNumberOfBlackLines = 44; // above + 4 m_intNumberOfBlackLines = 44; // above + 4
break; break;
case ATVStdPAL625: // Follows PAL-B/G/H standard case ATVStdPAL625: // Follows PAL-B/G/H standard
default: default:
m_intNumberOfLines = 625;
// what is left in a 64 us line for the image // what is left in a 64 us line for the image
m_intNumberOfSyncLines = 44; // (15+17)*2 - 20 m_intNumberOfSyncLines = 44; // (15+17)*2 - 20
m_intNumberOfBlackLines = 48; // above + 4 m_intNumberOfBlackLines = 48; // above + 4

View File

@ -49,7 +49,8 @@ public:
{ {
ATVStdPAL625, ATVStdPAL625,
ATVStdPAL525, ATVStdPAL525,
ATVStd405 ATVStd405,
ATVStdShortInterleaved
}; };
enum ATVModulation { enum ATVModulation {
@ -65,6 +66,7 @@ public:
{ {
int m_intSampleRate; int m_intSampleRate;
ATVStd m_enmATVStandard; ATVStd m_enmATVStandard;
int m_intNumberOfLines;
float m_fltLineDuration; float m_fltLineDuration;
float m_fltTopDuration; float m_fltTopDuration;
float m_fltFramePerS; float m_fltFramePerS;
@ -79,6 +81,7 @@ public:
ATVConfig() : ATVConfig() :
m_intSampleRate(0), m_intSampleRate(0),
m_enmATVStandard(ATVStdPAL625), m_enmATVStandard(ATVStdPAL625),
m_intNumberOfLines(625),
m_fltLineDuration(0.0f), m_fltLineDuration(0.0f),
m_fltTopDuration(0.0f), m_fltTopDuration(0.0f),
m_fltFramePerS(0.0f), m_fltFramePerS(0.0f),
@ -149,6 +152,7 @@ public:
float fltTopDurationUs, float fltTopDurationUs,
float fltFramePerS, float fltFramePerS,
ATVStd enmATVStandard, ATVStd enmATVStandard,
int intNumberOfLines,
float fltRatioOfRowsToDisplay, float fltRatioOfRowsToDisplay,
float fltVoltLevelSynchroTop, float fltVoltLevelSynchroTop,
float fltVoltLevelSynchroBlack, float fltVoltLevelSynchroBlack,
@ -197,6 +201,7 @@ private:
float fltTopDurationUs, float fltTopDurationUs,
float fltFramePerS, float fltFramePerS,
ATVStd enmATVStandard, ATVStd enmATVStandard,
int intNumberOfLines,
float fltRatioOfRowsToDisplay, float fltRatioOfRowsToDisplay,
float fltVoltLevelSynchroTop, float fltVoltLevelSynchroTop,
float fltVoltLevelSynchroBlack, float fltVoltLevelSynchroBlack,
@ -210,6 +215,7 @@ private:
fltTopDurationUs, fltTopDurationUs,
fltFramePerS, fltFramePerS,
enmATVStandard, enmATVStandard,
intNumberOfLines,
fltRatioOfRowsToDisplay, fltRatioOfRowsToDisplay,
fltVoltLevelSynchroTop, fltVoltLevelSynchroTop,
fltVoltLevelSynchroBlack, fltVoltLevelSynchroBlack,
@ -227,6 +233,7 @@ private:
float fltTopDurationUs, float fltTopDurationUs,
float fltFramePerS, float fltFramePerS,
ATVStd enmATVStandard, ATVStd enmATVStandard,
int intNumberOfLines,
float flatRatioOfRowsToDisplay, float flatRatioOfRowsToDisplay,
float fltVoltLevelSynchroTop, float fltVoltLevelSynchroTop,
float fltVoltLevelSynchroBlack, float fltVoltLevelSynchroBlack,
@ -240,6 +247,7 @@ private:
m_objMsgConfig.m_fltVoltLevelSynchroTop = fltVoltLevelSynchroTop; m_objMsgConfig.m_fltVoltLevelSynchroTop = fltVoltLevelSynchroTop;
m_objMsgConfig.m_fltFramePerS = fltFramePerS; m_objMsgConfig.m_fltFramePerS = fltFramePerS;
m_objMsgConfig.m_enmATVStandard = enmATVStandard; m_objMsgConfig.m_enmATVStandard = enmATVStandard;
m_objMsgConfig.m_intNumberOfLines = intNumberOfLines;
m_objMsgConfig.m_fltLineDuration = fltLineDurationUs; m_objMsgConfig.m_fltLineDuration = fltLineDurationUs;
m_objMsgConfig.m_fltTopDuration = fltTopDurationUs; m_objMsgConfig.m_fltTopDuration = fltTopDurationUs;
m_objMsgConfig.m_fltRatioOfRowsToDisplay = flatRatioOfRowsToDisplay; m_objMsgConfig.m_fltRatioOfRowsToDisplay = flatRatioOfRowsToDisplay;

View File

@ -372,6 +372,7 @@ void ATVDemodGUI::applySettings()
getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex()) * (4.7f / 64.0f) + ui->topTime->value() * m_fltTopTimeMultiplier, getNominalLineTime(ui->nbLines->currentIndex(), ui->fps->currentIndex()) * (4.7f / 64.0f) + ui->topTime->value() * m_fltTopTimeMultiplier,
getFps(ui->fps->currentIndex()), getFps(ui->fps->currentIndex()),
(ATVDemod::ATVStd) ui->standard->currentIndex(), (ATVDemod::ATVStd) ui->standard->currentIndex(),
getNumberOfLines(ui->nbLines->currentIndex()),
(ui->halfImage->checkState() == Qt::Checked) ? 0.5f : 1.0f, (ui->halfImage->checkState() == Qt::Checked) ? 0.5f : 1.0f,
ui->synchLevel->value() / 1000.0f, ui->synchLevel->value() / 1000.0f,
ui->blackLevel->value() / 1000.0f, ui->blackLevel->value() / 1000.0f,
@ -723,3 +724,20 @@ float ATVDemodGUI::getNominalLineTime(int nbLinesIndex, int fpsIndex)
break; break;
} }
} }
int ATVDemodGUI::getNumberOfLines(int nbLinesIndex)
{
switch(nbLinesIndex)
{
case 1:
return 525;
break;
case 2:
return 405;
break;
case 0:
default:
return 625;
break;
}
}

View File

@ -120,6 +120,7 @@ private:
void topTimeUpdate(); void topTimeUpdate();
static float getFps(int fpsIndex); static float getFps(int fpsIndex);
static float getNominalLineTime(int nbLinesIndex, int fpsIndex); static float getNominalLineTime(int nbLinesIndex, int fpsIndex);
static int getNumberOfLines(int nbLinesIndex);
void leaveEvent(QEvent*); void leaveEvent(QEvent*);
void enterEvent(QEvent*); void enterEvent(QEvent*);

View File

@ -498,22 +498,28 @@
<layout class="QHBoxLayout" name="buttonsLayout"> <layout class="QHBoxLayout" name="buttonsLayout">
<item> <item>
<widget class="QComboBox" name="nbLines"> <widget class="QComboBox" name="nbLines">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip"> <property name="toolTip">
<string>Nominal number of lines per frame</string> <string>Nominal number of lines per frame</string>
</property> </property>
<item> <item>
<property name="text"> <property name="text">
<string>625 L</string> <string>625</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>525 L</string> <string>525</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>405 L</string> <string>405</string>
</property> </property>
</item> </item>
</widget> </widget>
@ -565,6 +571,11 @@
<string>405L</string> <string>405L</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>SHi</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item> <item>

View File

@ -26,7 +26,7 @@
const PluginDescriptor ATVDemodPlugin::m_ptrPluginDescriptor = const PluginDescriptor ATVDemodPlugin::m_ptrPluginDescriptor =
{ {
QString("ATV Demodulator"), QString("ATV Demodulator"),
QString("3.3.2"), QString("3.3.3"),
QString("(c) F4HKW for F4EXB / SDRAngel"), QString("(c) F4HKW for F4EXB / SDRAngel"),
QString("https://github.com/f4exb/sdrangel"), QString("https://github.com/f4exb/sdrangel"),
true, true,