1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-09-26 23:06:34 -04:00

ATV Demod: sample rate reporting consistency fixes

This commit is contained in:
f4exb 2017-04-07 01:35:08 +02:00
parent d301bd9ebd
commit b486f63cb5
3 changed files with 29 additions and 23 deletions

View File

@ -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()

View File

@ -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))
{

View File

@ -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();