diff --git a/plugins/channelrx/demodatv/atvdemod.cpp b/plugins/channelrx/demodatv/atvdemod.cpp index f1c20cdf5..0c2d364d6 100644 --- a/plugins/channelrx/demodatv/atvdemod.cpp +++ b/plugins/channelrx/demodatv/atvdemod.cpp @@ -62,7 +62,7 @@ ATVDemod::ATVDemod(BasebandSampleSink* objScopeSink) : setObjectName("ATVDemod"); //*************** ATV PARAMETERS *************** - m_intNumberSamplePerLine=0; + //m_intNumberSamplePerLine=0; m_intSynchroPoints=0; m_intNumberOfLines=0; m_interleaved = true; @@ -159,7 +159,7 @@ void ATVDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto bool blnComputeImage=false; - int intSynchroTimeSamples= (3*m_intNumberSamplePerLine)/4; + int intSynchroTimeSamples= (3 * m_objRunningPrivate.m_intNumberSamplePerLine) / 4; float fltSynchroTrameLevel = 0.5f*((float)intSynchroTimeSamples) * m_objRunning.m_fltVoltLevelSynchroBlack; //********** Let's rock and roll buddy ! ********** @@ -524,6 +524,8 @@ void ATVDemod::applySettings() return; } + bool forwardSampleRateChange = false; + if((m_objRFConfig.m_intFrequencyOffset != m_objRFRunning.m_intFrequencyOffset) || (m_objRFConfig.m_enmModulation != m_objRFRunning.m_enmModulation) || (m_objConfig.m_intSampleRate != m_objRunning.m_intSampleRate)) @@ -570,19 +572,19 @@ void ATVDemod::applySettings() applyStandard(); - m_intNumberSamplePerLine = (int) (m_objConfig.m_fltLineDuration * m_objConfig.m_intSampleRate); + m_objConfigPrivate.m_intNumberSamplePerLine = (int) (m_objConfig.m_fltLineDuration * m_objConfig.m_intSampleRate); m_intNumberSamplePerTop = (int) (m_objConfig.m_fltTopDuration * m_objConfig.m_intSampleRate); m_objRegisteredATVScreen->setRenderImmediate(!(m_objConfig.m_fltFramePerS > 25.0f)); m_objRegisteredATVScreen->resizeATVScreen( - m_intNumberSamplePerLine - m_intNumberSamplePerLineSignals, + m_objConfigPrivate.m_intNumberSamplePerLine - m_intNumberSamplePerLineSignals, m_intNumberOfLines - m_intNumberOfBlackLines); qDebug() << "ATVDemod::applySettings:" << " m_fltLineDuration: " << m_objConfig.m_fltLineDuration << " m_fltFramePerS: " << m_objConfig.m_fltFramePerS << " m_intNumberOfLines: " << m_intNumberOfLines - << " m_intNumberSamplePerLine: " << m_intNumberSamplePerLine + << " m_intNumberSamplePerLine: " << m_objConfigPrivate.m_intNumberSamplePerLine << " m_intNumberOfBlackLines: " << m_intNumberOfBlackLines; m_intImageIndex = 0; @@ -590,21 +592,14 @@ void ATVDemod::applySettings() m_intRowIndex=0; m_objSettingsMutex.unlock(); - - int sampleRate = m_objRFConfig.m_blndecimatorEnable ? m_objConfigPrivate.m_intTVSampleRate : m_objConfig.m_intSampleRate; - MsgReportEffectiveSampleRate *report; - report = MsgReportEffectiveSampleRate::create(sampleRate, m_intNumberSamplePerLine); - getOutputMessageQueue()->push(report); } if ((m_objConfigPrivate.m_intTVSampleRate != m_objRunningPrivate.m_intTVSampleRate) + || (m_objConfigPrivate.m_intNumberSamplePerLine != m_objRunningPrivate.m_intNumberSamplePerLine) || (m_objConfig.m_intSampleRate != m_objRunning.m_intSampleRate) || (m_objRFConfig.m_blndecimatorEnable != m_objRFRunning.m_blndecimatorEnable)) { - int sampleRate = m_objRFConfig.m_blndecimatorEnable ? m_objConfigPrivate.m_intTVSampleRate : m_objConfig.m_intSampleRate; - MsgReportEffectiveSampleRate *report; - report = MsgReportEffectiveSampleRate::create(sampleRate, m_intNumberSamplePerLine); - getOutputMessageQueue()->push(report); + forwardSampleRateChange = true; } if ((m_objConfigPrivate.m_intTVSampleRate != m_objRunningPrivate.m_intTVSampleRate) @@ -636,6 +631,14 @@ void ATVDemod::applySettings() m_objRunning = m_objConfig; m_objRFRunning = m_objRFConfig; m_objRunningPrivate = m_objConfigPrivate; + + if (forwardSampleRateChange) + { + int sampleRate = m_objRFRunning.m_blndecimatorEnable ? m_objRunningPrivate.m_intTVSampleRate : m_objRunning.m_intSampleRate; + MsgReportEffectiveSampleRate *report; + report = MsgReportEffectiveSampleRate::create(sampleRate, m_objRunningPrivate.m_intNumberSamplePerLine); + getOutputMessageQueue()->push(report); + } } void ATVDemod::applyStandard() diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index 6acc4e5f2..a8c3dd65e 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -187,9 +187,11 @@ private: struct ATVConfigPrivate { int m_intTVSampleRate; + int m_intNumberSamplePerLine; ATVConfigPrivate() : - m_intTVSampleRate(0) + m_intTVSampleRate(0), + m_intNumberSamplePerLine(0) {} }; @@ -345,7 +347,7 @@ private: //*************** ATV PARAMETERS *************** ATVScreen * m_objRegisteredATVScreen; - int m_intNumberSamplePerLine; + //int m_intNumberSamplePerLine; int m_intNumberSamplePerTop; int m_intNumberOfLines; int m_intNumberOfSyncLines; //!< this is the number of non displayable lines at the start of a frame. First displayable row comes next. @@ -446,7 +448,7 @@ private: if (m_blnSynchroDetected) { - if (m_intSampleIndex >= (3*m_intNumberSamplePerLine)/2) // first after leap + if (m_intSampleIndex >= (3 * m_objRunningPrivate.m_intNumberSamplePerLine)/2) // first after leap { //qDebug("VSync: %d %d %d", m_intColIndex, m_intSampleIndex, m_intLineIndex); m_intAvgColIndex = m_intColIndex; @@ -464,7 +466,7 @@ private: m_intSampleIndex++; } - if (m_intColIndex < m_intNumberSamplePerLine + m_intNumberSamplePerTop - 1) + if (m_intColIndex < m_objRunningPrivate.m_intNumberSamplePerLine + m_intNumberSamplePerTop - 1) { m_intColIndex++; } @@ -473,7 +475,7 @@ private: if (m_objRunning.m_blnHSync && (m_intLineIndex == 0)) { //qDebug("HCorr: %d", m_intAvgColIndex); - m_intColIndex = m_intNumberSamplePerTop + (m_intNumberSamplePerLine - m_intAvgColIndex)/2; // amortizing factor 1/2 + m_intColIndex = m_intNumberSamplePerTop + (m_objRunningPrivate.m_intNumberSamplePerLine - m_intAvgColIndex)/2; // amortizing factor 1/2 } else { @@ -506,7 +508,7 @@ private: inline void processClassic(float& fltVal, int& intVal) { - int intSynchroTimeSamples= (3*m_intNumberSamplePerLine)/4; + int intSynchroTimeSamples= (3 * m_objRunningPrivate.m_intNumberSamplePerLine)/4; float fltSynchroTrameLevel = 0.5f*((float)intSynchroTimeSamples) * m_objRunning.m_fltVoltLevelSynchroBlack; // Horizontal Synchro detection @@ -530,7 +532,7 @@ private: if (m_blnSynchroDetected) { - m_intAvgColIndex = m_intSampleIndex - m_intColIndex - (m_intColIndex < m_intNumberSamplePerLine/2 ? 150 : 0); + m_intAvgColIndex = m_intSampleIndex - m_intColIndex - (m_intColIndex < m_objRunningPrivate.m_intNumberSamplePerLine/2 ? 150 : 0); //qDebug("HSync: %d %d %d", m_intSampleIndex, m_intColIndex, m_intAvgColIndex); m_intSampleIndex = 0; } @@ -539,12 +541,12 @@ private: m_intSampleIndex++; } - if (!m_objRunning.m_blnHSync && (m_intColIndex >= m_intNumberSamplePerLine)) // H Sync not active + if (!m_objRunning.m_blnHSync && (m_intColIndex >= m_objRunningPrivate.m_intNumberSamplePerLine)) // H Sync not active { m_intColIndex = 0; blnNewLine = true; } - else if (m_intColIndex >= m_intNumberSamplePerLine + m_intNumberSamplePerTop) // No valid H sync + else if (m_intColIndex >= m_objRunningPrivate.m_intNumberSamplePerLine + m_intNumberSamplePerTop) // No valid H sync { if (m_objRunning.m_blnHSync && (m_intLineIndex == 0)) { diff --git a/plugins/channelrx/demodatv/atvdemodgui.cpp b/plugins/channelrx/demodatv/atvdemodgui.cpp index 09e830aac..63cd34d85 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.cpp +++ b/plugins/channelrx/demodatv/atvdemodgui.cpp @@ -211,6 +211,7 @@ bool ATVDemodGUI::handleMessage(const Message& objMessage) int nbPointsPerLine = ((ATVDemod::MsgReportEffectiveSampleRate&)objMessage).getNbPointsPerLine(); ui->channelSampleRateText->setText(tr("%1k").arg(sampleRate/1000.0f, 0, 'f', 0)); ui->nbPointsPerLineText->setText(tr("%1p").arg(nbPointsPerLine)); + m_objScopeVis->setSampleRate(sampleRate); setRFFiltersSlidersRange(sampleRate); lineTimeUpdate(); topTimeUpdate();