Skip to content

Commit

Permalink
Signal strength of scanned transports
Browse files Browse the repository at this point in the history
Show the signal strength of the scanned transports in the transport list.
The transport list is shown if the "-v chanscan" option is given when running mythtv-setup.
The signal strengths are useful to determine which transport to choose when identical
transports can be received from different transmitters on different frequencies.

Refs #13472

(cherry picked from commit 3112994)
Signed-off-by: Klaas de Waal <kdewaal@mythtv.org>
  • Loading branch information
kmdewaal committed Mar 28, 2020
1 parent 2ef589a commit d052cbc
Show file tree
Hide file tree
Showing 9 changed files with 28 additions and 20 deletions.
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/channelscan/channelimporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1447,6 +1447,7 @@ QString ChannelImporter::FormatTransport(
QString msg;
QTextStream ssMsg(&msg);
ssMsg << transport.toString();
ssMsg << QString(" ss:%1").arg(transport.m_signalStrength);
return msg;
}

Expand Down
36 changes: 19 additions & 17 deletions mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,8 @@ ChannelScanSM::ChannelScanSM(ScanMonitor *_scan_monitor,
QString("Setting NIT-ID to %1").arg(nitid));

m_bouquetId = query.value(1).toUInt();
m_regionId = query.value(2).toUInt();
m_regionId = query.value(2).toUInt();
m_nitId = nitid > 0 ? nitid : 0;
}

LOG(VB_CHANSCAN, LOG_INFO, LOC +
Expand Down Expand Up @@ -352,15 +353,17 @@ bool ChannelScanSM::ScanExistingTransports(uint sourceid, bool follow_nit)
return false;
}


return m_scanning;
}

void ChannelScanSM::LogLines(const QString& string)
{
QStringList lines = string.split('\n');
for (int i = 0; i < lines.size(); ++i)
LOG(VB_CHANSCAN, LOG_DEBUG, lines[i]);
if (VERBOSE_LEVEL_CHECK(VB_CHANSCAN, LOG_DEBUG))
{
QStringList lines = string.split('\n');
for (int i = 0; i < lines.size(); ++i)
LOG(VB_CHANSCAN, LOG_DEBUG, lines[i]);
}
}

void ChannelScanSM::HandlePAT(const ProgramAssociationTable *pat)
Expand Down Expand Up @@ -932,7 +935,6 @@ bool ChannelScanSM::UpdateChannelInfo(bool wait_until_complete)
{
uint tsid = dtv_sm->GetTransportID();
LOG(VB_CHANSCAN, LOG_INFO, LOC +
QString("transport_tune_complete: wait_until_complete %1").arg(wait_until_complete) +
QString("\n\t\t\tsd->HasCachedAnyNIT(): %1").arg(sd->HasCachedAnyNIT()) +
QString("\n\t\t\tsd->HasCachedAnySDTs(): %1").arg(sd->HasCachedAnySDTs()) +
QString("\n\t\t\tsd->HasCachedAnyBATs(): %1").arg(sd->HasCachedAnyBATs()) +
Expand Down Expand Up @@ -1026,6 +1028,7 @@ bool ChannelScanSM::UpdateChannelInfo(bool wait_until_complete)
{
TransportScanItem &item = *m_current;
item.m_tuning.m_frequency = item.freq_offset(m_current.offset());
item.m_signalStrength = m_signalMonitor->GetSignalStrength();

if (m_scanDTVTunerType == DTVTunerType::kTunerTypeDVBT2)
{
Expand All @@ -1036,8 +1039,9 @@ bool ChannelScanSM::UpdateChannelInfo(bool wait_until_complete)
}

LOG(VB_CHANSCAN, LOG_INFO, LOC +
QString("Adding %1 offset %2 to m_channelList.")
.arg((*m_current).m_tuning.toString()).arg(m_current.offset()));
QString("Adding %1 offset %2 ss %3 to m_channelList.")
.arg(item.m_tuning.toString()).arg(m_current.offset())
.arg(item.m_signalStrength));

LOG(VB_CHANSCAN, LOG_DEBUG, LOC +
QString("%1(%2) m_inputName: %3 ").arg(__FUNCTION__).arg(__LINE__).arg(m_inputName) +
Expand Down Expand Up @@ -1135,9 +1139,9 @@ static void update_info(ChannelInsertInfo &info,

info.m_chanNum.clear();

info.m_serviceId = vct->ProgramNumber(i);
info.m_atscMajorChannel = vct->MajorChannel(i);
info.m_atscMinorChannel = vct->MinorChannel(i);
info.m_serviceId = vct->ProgramNumber(i);
info.m_atscMajorChannel = vct->MajorChannel(i);
info.m_atscMinorChannel = vct->MinorChannel(i);

info.m_useOnAirGuide = !vct->IsHidden(i) || !vct->IsHiddenInGuide(i);

Expand Down Expand Up @@ -1742,6 +1746,7 @@ ScanDTVTransportList ChannelScanSM::GetChannelList(bool addFullTS) const

ScanDTVTransport item((*it.first).m_tuning, tuner_type, cardid);
item.m_iptvTuning = (*(it.first)).m_iptvTuning;
item.m_signalStrength = (*(it.first)).m_signalStrength;

QMap<uint,ChannelInsertInfo>::iterator dbchan_it;
for (dbchan_it = pnum_to_dbchan.begin();
Expand Down Expand Up @@ -1814,7 +1819,6 @@ ScanDTVTransportList ChannelScanSM::GetChannelList(bool addFullTS) const
return list;
}


DTVSignalMonitor* ChannelScanSM::GetDTVSignalMonitor(void)
{
return dynamic_cast<DTVSignalMonitor*>(m_signalMonitor);
Expand Down Expand Up @@ -1945,7 +1949,6 @@ bool ChannelScanSM::HasTimedOut(void)
}
#endif // USING_DVB


// have the tables have timed out?
if (m_timer.hasExpired(m_channelTimeout))
{
Expand Down Expand Up @@ -2052,8 +2055,7 @@ void ChannelScanSM::HandleActiveScan(void)
{
QString name = QString("TransportID %1").arg(it.key() & 0xffff);
TransportScanItem item(m_sourceID, name, *it, m_signalTimeout);
LOG(VB_CHANSCAN, LOG_INFO, LOC + "Adding " + name + " - " +
item.m_tuning.toString());
LOG(VB_CHANSCAN, LOG_INFO, LOC + "Adding " + name + ' ' + item.m_tuning.toString());
m_scanTransports.push_back(item);
m_tsScanned.insert(it.key());
}
Expand Down Expand Up @@ -2364,8 +2366,8 @@ bool ChannelScanSM::ScanIPTVChannels(uint sourceid,
bool ChannelScanSM::ScanTransportsStartingOn(
int sourceid, const QMap<QString,QString> &startChan)
{
if (startChan.find("std") == startChan.end() ||
startChan.find("type") == startChan.end())
if (startChan.find("std") == startChan.end() ||
startChan.find("type") == startChan.end())
{
return false;
}
Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/channelscan/channelscan_sm.h
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ class ChannelScanSM : public MPEGStreamListener,
uint m_frequency {0};
uint m_bouquetId {0};
uint m_regionId {0};
uint m_nitId {0};

// Optional info
DTVTunerType m_scanDTVTunerType {DTVTunerType::kTunerTypeUnknown};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,5 +87,6 @@ ScanNetwork::ScanNetwork()

setLabel(QObject::tr("Country"));
addSelection(QObject::tr("Germany"), "de", country == "de");
addSelection(QObject::tr("Netherlands"), "nl", country == "nl");
addSelection(QObject::tr("United Kingdom"), "gb", country == "gb");
}
4 changes: 2 additions & 2 deletions mythtv/libs/libmythtv/dtvmultiplex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ QString DTVMultiplex::toString() const
.arg(m_bandwidth.toString()).arg(m_transMode.toString())
.arg(m_guardInterval.toString()).arg(m_hierarchy.toString())
.arg(m_polarity.toString());
ret += QString(" fec: %1 msys: %2 rolloff: %3")
.arg(m_fec.toString()).arg(m_modSys.toString()).arg(m_rolloff.toString());
ret += QString(" fec:%1 msys:%2 rolloff:%3")
.arg(m_fec.toString(),-4).arg(m_modSys.toString(),-6).arg(m_rolloff.toString());

return ret;
}
Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/dtvmultiplex.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ class MTV_PUBLIC ScanDTVTransport : public DTVMultiplex
DTVTunerType m_tuner_type {DTVTunerType::kTunerTypeUnknown};
uint m_cardid {0};
ChannelInsertInfoList m_channels;
int m_signalStrength {0};
};
using ScanDTVTransportList = vector<ScanDTVTransport>;

Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/frequencytables.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ class TransportScanItem
bool m_scanning {false}; ///< Probably Unnecessary
int m_freqOffsets[3] {0,0,0}; ///< Frequency offsets
unsigned m_timeoutTune {1000}; ///< Timeout to tune to a frequency
int m_signalStrength {0};

DTVMultiplex m_tuning; ///< Tuning info
IPTVTuningData m_iptvTuning; ///< IPTV Tuning info
Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/recorders/signalmonitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class SignalMonitor : protected MThread
/// \brief Returns milliseconds between signal monitoring events.
int GetUpdateRate() const { return m_update_rate; }
virtual QStringList GetStatusList(void) const;
int GetSignalStrength(void) { return m_signalStrength.GetNormalizedValue(0,100); }

/// \brief Returns true iff scriptStatus.IsGood() and signalLock.IsGood()
/// return true
Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythtv/ringbuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ void RingBuffer::UpdatePlaySpeed(float play_speed)
}

/** \fn RingBuffer::SetBufferSizeFactors(bool, bool)
* \brief Tells RingBuffer that the raw bitrate may be innacurate and the
* \brief Tells RingBuffer that the raw bitrate may be inaccurate and the
* underlying container is matroska, both of which may require a larger
* buffer size.
*/
Expand Down

0 comments on commit d052cbc

Please sign in to comment.