diff --git a/plugins/channeltx/modatv/atvmodgui.ui b/plugins/channeltx/modatv/atvmodgui.ui
index a39e13e2c..6744353ab 100644
--- a/plugins/channeltx/modatv/atvmodgui.ui
+++ b/plugins/channeltx/modatv/atvmodgui.ui
@@ -760,6 +760,11 @@
V Grad
+ -
+
+ Diagonal
+
+
-
Image
diff --git a/plugins/channeltx/modatv/atvmodsettings.h b/plugins/channeltx/modatv/atvmodsettings.h
index d7dc2ab08..a664d9edd 100644
--- a/plugins/channeltx/modatv/atvmodsettings.h
+++ b/plugins/channeltx/modatv/atvmodsettings.h
@@ -44,6 +44,7 @@ struct ATVModSettings
ATVModInputChessboard,
ATVModInputHGradient,
ATVModInputVGradient,
+ ATVModInputDiagonal,
ATVModInputImage,
ATVModInputVideo,
ATVModInputCamera
diff --git a/plugins/channeltx/modatv/atvmodsource.cpp b/plugins/channeltx/modatv/atvmodsource.cpp
index a8e004ac0..c956133cc 100644
--- a/plugins/channeltx/modatv/atvmodsource.cpp
+++ b/plugins/channeltx/modatv/atvmodsource.cpp
@@ -517,8 +517,8 @@ float ATVModSource::getRFBandwidthDivisor(ATVModSettings::ATVModulation modulati
void ATVModSource::applyStandard(const ATVModSettings& settings)
{
m_pointsPerSync = (uint32_t) ((4.7f / 64.0f) * m_pointsPerLine);
- m_pointsPerBP = (uint32_t) ((4.7f / 64.0f) * m_pointsPerLine);
- m_pointsPerFP = (uint32_t) ((2.6f / 64.0f) * m_pointsPerLine);
+ m_pointsPerBP = (uint32_t) ((5.8f / 64.0f) * m_pointsPerLine);
+ m_pointsPerFP = (uint32_t) ((1.5f / 64.0f) * m_pointsPerLine);
m_pointsPerFSync = (uint32_t) ((2.3f / 64.0f) * m_pointsPerLine);
m_pointsPerImgLine = m_pointsPerLine - m_pointsPerSync - m_pointsPerBP - m_pointsPerFP;
diff --git a/plugins/channeltx/modatv/atvmodsource.h b/plugins/channeltx/modatv/atvmodsource.h
index 909cd2512..27f732ae1 100644
--- a/plugins/channeltx/modatv/atvmodsource.h
+++ b/plugins/channeltx/modatv/atvmodsource.h
@@ -144,7 +144,7 @@ private:
int m_pointsPerBP; //!< number of line points for the back porch
int m_pointsPerImgLine; //!< number of line points for the image line
uint32_t m_pointsPerFP; //!< number of line points for the front porch
- int m_pointsPerFSync; //!< number of line points for the field first sync
+ int m_pointsPerFSync; //!< number of line points for the field first sync - a.k.a Equalizing pulse
uint32_t m_pointsPerHBar; //!< number of line points for a bar of the bar chart
uint32_t m_linesPerVBar; //!< number of lines for a bar of the bar chart
uint32_t m_pointsPerTU; //!< number of line points per time unit
@@ -276,6 +276,9 @@ private:
case ATVModSettings::ATVModInputVGradient:
sample = ((iLine -5) / (float) m_nbImageLines2) * m_spanLevel + m_blackLevel;
break;
+ case ATVModSettings::ATVModInputDiagonal:
+ sample = pointIndex < (iLine * m_pointsPerImgLine) / m_nbLines2 ? m_blackLevel : m_settings.m_uniformLevel + m_blackLevel;
+ break;
case ATVModSettings::ATVModInputImage:
if (!m_imageOK || (iLineImage < -oddity) || m_image.empty())
{