Skip to content

Commit

Permalink
The delivery system is now stored in dtv_multiplex/mod_sys for all de…
Browse files Browse the repository at this point in the history
…livery systems.

There is also some code cleanup, additional debug messages and minor cosmetic changes.
This commits the changes in attachment 20190325-modsys-all-v2.patch of ticket #13014.

Refs #13014
  • Loading branch information
kmdewaal committed Mar 26, 2019
1 parent 93b6c5a commit 9593dc9
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 28 deletions.
30 changes: 23 additions & 7 deletions mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp
Expand Up @@ -347,7 +347,7 @@ void ChannelScanSM::LogLines(const QString& string) const
{
QStringList lines = string.split('\n');
for (int i = 0; i < lines.size(); ++i)
LOG(VB_CHANSCAN, LOG_INFO, lines[i]);
LOG(VB_CHANSCAN, LOG_DEBUG, lines[i]);
}

void ChannelScanSM::HandlePAT(const ProgramAssociationTable *pat)
Expand Down Expand Up @@ -695,8 +695,14 @@ void ChannelScanSM::UpdateScanTransports(const NetworkInformationTable *nit)
uint64_t frequency = 0;
const MPEGDescriptor desc(list[j]);
uint tag = desc.DescriptorTag();
uint length = desc.DescriptorLength();
QString tagString = desc.DescriptorTagString();

DTVTunerType tt(DTVTunerType::kTunerTypeUnknown);

LOG(VB_CHANSCAN, LOG_DEBUG, LOC + QString("ts-loop j:%1 tag:%2 %3 length:%4")
.arg(j).arg(tag).arg(tagString).arg(length));

switch (tag)
{
case DescriptorID::terrestrial_delivery_system:
Expand Down Expand Up @@ -920,11 +926,11 @@ bool ChannelScanSM::UpdateChannelInfo(bool wait_until_complete)
}
}

// append transports from the NIT to the scan list
// Append transports from the NIT to the scan list
if (transport_tune_complete && m_extendScanList &&
!m_currentInfo->m_nits.empty())
{
// append delivery system descriptos to scan list
// Update transport with delivery system descriptors from the NIT
nit_vec_t::const_iterator it = m_currentInfo->m_nits.begin();
while (it != m_currentInfo->m_nits.end())
{
Expand Down Expand Up @@ -953,10 +959,11 @@ bool ChannelScanSM::UpdateChannelInfo(bool wait_until_complete)
TransportScanItem &item = *m_current;
item.m_tuning.m_frequency = item.freq_offset(m_current.offset());

if (m_scanDTVTunerType == DTVTunerType::kTunerTypeDVBT)
{
item.m_tuning.m_mod_sys = DTVModulationSystem::kModulationSystem_DVBT;
}
item.m_tuning.m_mod_sys.Parse(m_inputName);
LOG(VB_CHANSCAN, LOG_DEBUG, LOC +
QString("%1(%2) m_inputName: %3 ").arg(__FUNCTION__).arg(__LINE__).arg(m_inputName) +
QString("m_mod_sys:%1 %2").arg(item.m_tuning.m_mod_sys).arg(item.m_tuning.m_mod_sys.toString()));

if (m_scanDTVTunerType == DTVTunerType::kTunerTypeDVBT2)
{
if (m_dvbt2Tried)
Expand Down Expand Up @@ -1918,6 +1925,15 @@ bool ChannelScanSM::ScanTransports(
const QString &table_start,
const QString &table_end)
{
LOG(VB_CHANSCAN, LOG_DEBUG, LOC +
QString("%1: ").arg(__FUNCTION__) +
QString("SourceID:%1 ").arg(SourceID) +
QString("std:%1 ").arg(std) +
QString("modulation:%1 ").arg(modulation) +
QString("country:%1 ").arg(country) +
QString("table_start:%1 ").arg(table_start) +
QString("table_end:%1 ").arg(table_end));

QString name("");
if (m_scanning)
return false;
Expand Down
87 changes: 70 additions & 17 deletions mythtv/libs/libmythtv/dtvmultiplex.cpp
Expand Up @@ -218,6 +218,46 @@ bool DTVMultiplex::ParseDVB_S_and_C(
return ok;
}

bool DTVMultiplex::ParseDVB_S(
const QString &_frequency, const QString &_inversion,
const QString &_symbol_rate, const QString &_fec_inner,
const QString &_modulation, const QString &_polarity)
{
bool ok = ParseDVB_S_and_C(_frequency, _inversion, _symbol_rate,
_fec_inner, _modulation, _polarity);
return ok;
}

bool DTVMultiplex::ParseDVB_C(
const QString &_frequency, const QString &_inversion,
const QString &_symbol_rate, const QString &_fec_inner,
const QString &_modulation, const QString &_polarity,
const QString &_mod_sys)
{
bool ok = ParseDVB_S_and_C(_frequency, _inversion, _symbol_rate,
_fec_inner, _modulation, _polarity);

m_mod_sys.Parse(_mod_sys);
if (DTVModulationSystem::kModulationSystem_UNDEFINED == m_mod_sys)
m_mod_sys = DTVModulationSystem::kModulationSystem_DVBC_ANNEX_A;

LOG(VB_GENERAL, LOG_DEBUG, LOC +
QString("%1 ").arg(__FUNCTION__) +
QString("_mod_sys:%1 ok:%2 ").arg(_mod_sys).arg(ok) +
QString("m_mod_sys:%1 %2 ").arg(m_mod_sys).arg(m_mod_sys.toString()));

if ((DTVModulationSystem::kModulationSystem_DVBC_ANNEX_A != m_mod_sys) &&
(DTVModulationSystem::kModulationSystem_DVBC_ANNEX_B != m_mod_sys) &&
(DTVModulationSystem::kModulationSystem_DVBC_ANNEX_C != m_mod_sys))
{
LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-C modulation system " +
QString("parameter '%1', aborting.").arg(_mod_sys));
return false;
}

return ok;
}

bool DTVMultiplex::ParseDVB_S2(
const QString &_frequency, const QString &_inversion,
const QString &_symbol_rate, const QString &_fec_inner,
Expand All @@ -229,7 +269,7 @@ bool DTVMultiplex::ParseDVB_S2(

if (!m_mod_sys.Parse(_mod_sys))
{
LOG(VB_GENERAL, LOG_ERR, LOC + "Invalid S2 modulation system " +
LOG(VB_GENERAL, LOG_ERR, LOC + "Invalid DVB-S2 modulation system " +
QString("parameter '%1', aborting.").arg(_mod_sys));
return false;
}
Expand All @@ -245,7 +285,7 @@ bool DTVMultiplex::ParseDVB_S2(
if ((DTVModulationSystem::kModulationSystem_DVBS != m_mod_sys) &&
(DTVModulationSystem::kModulationSystem_DVBS2 != m_mod_sys))
{
LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported S2 modulation system " +
LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-S2 modulation system " +
QString("parameter '%1', aborting.").arg(_mod_sys));
return false;
}
Expand All @@ -268,18 +308,23 @@ bool DTVMultiplex::ParseDVB_T2(
_trans_mode, _guard_interval, _hierarchy);

QString l_mod_sys = _mod_sys;

// Accept "0" for "DVB-T" and "1" for "DVB-T2"
if (_mod_sys == "1")
{
LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T2 modulation system " +
QString("parameter '%1', using DVB-T2.").arg(_mod_sys));
l_mod_sys = "DVB-T2";
m_mod_sys = DTVModulationSystem::kModulationSystem_DVBT2;
l_mod_sys = m_mod_sys.toString();
}
else if (_mod_sys == "0")
{
LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T modulation system " +
QString("parameter '%1', using DVB-T.").arg(_mod_sys));
l_mod_sys = "DVB-T";
m_mod_sys = DTVModulationSystem::kModulationSystem_DVBT;
l_mod_sys = m_mod_sys.toString();
}

if (!m_mod_sys.Parse(l_mod_sys))
{
LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T/T2 modulation system " +
Expand Down Expand Up @@ -313,33 +358,41 @@ bool DTVMultiplex::ParseTuningParams(
if (DTVTunerType::kTunerTypeDVBT == type)
{
return ParseDVB_T(
_frequency, _inversion, _bandwidth, _hp_code_rate,
_lp_code_rate, _ofdm_modulation, _trans_mode, _guard_interval,
_hierarchy);
_frequency, _inversion, _bandwidth,
_hp_code_rate, _lp_code_rate, _ofdm_modulation,
_trans_mode, _guard_interval, _hierarchy);
}

if ((DTVTunerType::kTunerTypeDVBS1 == type) ||
(DTVTunerType::kTunerTypeDVBC == type))
if (DTVTunerType::kTunerTypeDVBC == type)
{
return ParseDVB_C(
_frequency, _inversion, _symbolrate,
_fec, _modulation, _polarity,
_mod_sys);
}

if (DTVTunerType::kTunerTypeDVBS1 == type)
{
return ParseDVB_S_and_C(
_frequency, _inversion, _symbolrate,
_fec, _modulation, _polarity);
return ParseDVB_S(
_frequency, _inversion, _symbolrate,
_fec, _modulation, _polarity);
}

if (DTVTunerType::kTunerTypeDVBS2 == type)
{
return ParseDVB_S2(
_frequency, _inversion, _symbolrate,
_fec, _modulation, _polarity,
_frequency, _inversion, _symbolrate,
_fec, _modulation, _polarity,
_mod_sys, _rolloff);
}

if (DTVTunerType::kTunerTypeDVBT2 == type)
{
return ParseDVB_T2(
_frequency, _inversion, _bandwidth, _hp_code_rate,
_lp_code_rate, _ofdm_modulation, _trans_mode, _guard_interval,
_hierarchy, _mod_sys);
_frequency, _inversion, _bandwidth,
_hp_code_rate, _lp_code_rate, _ofdm_modulation,
_trans_mode, _guard_interval, _hierarchy,
_mod_sys);
}

if (DTVTunerType::kTunerTypeATSC == type)
Expand Down
19 changes: 15 additions & 4 deletions mythtv/libs/libmythtv/dtvmultiplex.h
Expand Up @@ -54,6 +54,17 @@ class MTV_PUBLIC DTVMultiplex
const QString &symbol_rate, const QString &fec_inner,
const QString &modulation, const QString &polarity);

bool ParseDVB_S(
const QString &frequency, const QString &inversion,
const QString &symbol_rate, const QString &fec_inner,
const QString &modulation, const QString &polarity);

bool ParseDVB_C(
const QString &frequency, const QString &inversion,
const QString &symbol_rate, const QString &fec_inner,
const QString &modulation, const QString &polarity,
const QString &mod_sys);

bool ParseDVB_S2(
const QString &frequency, const QString &inversion,
const QString &symbol_rate, const QString &fec_inner,
Expand Down Expand Up @@ -84,15 +95,15 @@ class MTV_PUBLIC DTVMultiplex
uint64_t m_symbolrate {0};
DTVInversion m_inversion;
DTVBandwidth m_bandwidth;
DTVCodeRate m_hp_code_rate; ///< High Priority FEC rate
DTVCodeRate m_lp_code_rate; ///< Low Priority FEC rate
DTVCodeRate m_hp_code_rate; ///< High Priority FEC rate
DTVCodeRate m_lp_code_rate; ///< Low Priority FEC rate
DTVModulation m_modulation;
DTVTransmitMode m_trans_mode;
DTVGuardInterval m_guard_interval;
DTVHierarchy m_hierarchy;
DTVPolarity m_polarity;
DTVCodeRate m_fec; ///< Inner Forward Error Correction rate
DTVModulationSystem m_mod_sys; ///< modulation system (only DVB-S or DVB-S2 atm)
DTVCodeRate m_fec; ///< Inner Forward Error Correction rate
DTVModulationSystem m_mod_sys; ///< Modulation system
DTVRollOff m_rolloff;

// Optional additional info
Expand Down

0 comments on commit 9593dc9

Please sign in to comment.