Ticket #13014: 20190325-modsys-all-v2.patch

File 20190325-modsys-all-v2.patch, 11.1 KB (added by Klaas de Waal, 17 months ago)

Save delivery system in dtv_multiplex/del_sys for all delivery/modulation systems.

  • mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp

    diff --git a/mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp b/mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp
    index 797efb8944..ce9b628454 100644
    a b void ChannelScanSM::LogLines(const QString& string) const 
    347347{
    348348    QStringList lines = string.split('\n');
    349349    for (int i = 0; i < lines.size(); ++i)
    350         LOG(VB_CHANSCAN, LOG_INFO, lines[i]);
     350        LOG(VB_CHANSCAN, LOG_DEBUG, lines[i]);
    351351}
    352352
    353353void ChannelScanSM::HandlePAT(const ProgramAssociationTable *pat)
    void ChannelScanSM::UpdateScanTransports(const NetworkInformationTable *nit) 
    695695            uint64_t frequency = 0;
    696696            const MPEGDescriptor desc(list[j]);
    697697            uint tag = desc.DescriptorTag();
     698            uint length = desc.DescriptorLength();
     699            QString tagString = desc.DescriptorTagString();
     700
    698701            DTVTunerType tt(DTVTunerType::kTunerTypeUnknown);
    699702
     703            LOG(VB_CHANSCAN, LOG_DEBUG, LOC + QString("ts-loop j:%1 tag:%2 %3 length:%4")
     704                .arg(j).arg(tag).arg(tagString).arg(length));
     705
    700706            switch (tag)
    701707            {
    702708                case DescriptorID::terrestrial_delivery_system:
    bool ChannelScanSM::UpdateChannelInfo(bool wait_until_complete) 
    920926        }
    921927    }
    922928
    923     // append transports from the NIT to the scan list
     929    // Append transports from the NIT to the scan list
    924930    if (transport_tune_complete && m_extendScanList &&
    925931        !m_currentInfo->m_nits.empty())
    926932    {
    927         // append delivery system descriptos to scan list
     933        // Update transport with delivery system descriptors from the NIT
    928934        nit_vec_t::const_iterator it = m_currentInfo->m_nits.begin();
    929935        while (it != m_currentInfo->m_nits.end())
    930936        {
    bool ChannelScanSM::UpdateChannelInfo(bool wait_until_complete) 
    953959            TransportScanItem &item = *m_current;
    954960            item.m_tuning.m_frequency = item.freq_offset(m_current.offset());
    955961
    956             if (m_scanDTVTunerType == DTVTunerType::kTunerTypeDVBT)
    957             {
    958                 item.m_tuning.m_mod_sys = DTVModulationSystem::kModulationSystem_DVBT;
    959             }
     962            item.m_tuning.m_mod_sys.Parse(m_inputName);
     963            LOG(VB_CHANSCAN, LOG_DEBUG, LOC +
     964                QString("%1(%2) m_inputName: %3 ").arg(__FUNCTION__).arg(__LINE__).arg(m_inputName) +
     965                QString("m_mod_sys:%1 %2").arg(item.m_tuning.m_mod_sys).arg(item.m_tuning.m_mod_sys.toString()));
     966
    960967            if (m_scanDTVTunerType == DTVTunerType::kTunerTypeDVBT2)
    961968            {
    962969                if (m_dvbt2Tried)
    bool ChannelScanSM::ScanTransports( 
    19181925    const QString &table_start,
    19191926    const QString &table_end)
    19201927{
     1928    LOG(VB_CHANSCAN, LOG_DEBUG, LOC +
     1929        QString("%1: ").arg(__FUNCTION__) +
     1930        QString("SourceID:%1 ").arg(SourceID) +
     1931        QString("std:%1 ").arg(std) +
     1932        QString("modulation:%1 ").arg(modulation) +
     1933        QString("country:%1 ").arg(country) +
     1934        QString("table_start:%1 ").arg(table_start) +
     1935        QString("table_end:%1 ").arg(table_end));
     1936
    19211937    QString name("");
    19221938    if (m_scanning)
    19231939        return false;
  • mythtv/libs/libmythtv/dtvmultiplex.cpp

    diff --git a/mythtv/libs/libmythtv/dtvmultiplex.cpp b/mythtv/libs/libmythtv/dtvmultiplex.cpp
    index 5b1e83258f..26f2310000 100644
    a b bool DTVMultiplex::ParseDVB_S_and_C( 
    218218    return ok;
    219219}
    220220
     221bool DTVMultiplex::ParseDVB_S(
     222    const QString &_frequency,   const QString &_inversion,
     223    const QString &_symbol_rate, const QString &_fec_inner,
     224    const QString &_modulation,  const QString &_polarity)
     225{
     226    bool ok = ParseDVB_S_and_C(_frequency, _inversion, _symbol_rate,
     227                               _fec_inner, _modulation, _polarity);
     228    return ok;
     229}
     230
     231bool DTVMultiplex::ParseDVB_C(
     232    const QString &_frequency,   const QString &_inversion,
     233    const QString &_symbol_rate, const QString &_fec_inner,
     234    const QString &_modulation,  const QString &_polarity,
     235    const QString &_mod_sys)
     236{
     237    bool ok = ParseDVB_S_and_C(_frequency, _inversion, _symbol_rate,
     238                               _fec_inner, _modulation, _polarity);
     239
     240    m_mod_sys.Parse(_mod_sys);
     241    if (DTVModulationSystem::kModulationSystem_UNDEFINED == m_mod_sys)
     242        m_mod_sys = DTVModulationSystem::kModulationSystem_DVBC_ANNEX_A;
     243
     244    LOG(VB_GENERAL, LOG_DEBUG, LOC +
     245        QString("%1 ").arg(__FUNCTION__) +
     246        QString("_mod_sys:%1 ok:%2 ").arg(_mod_sys).arg(ok) +
     247        QString("m_mod_sys:%1 %2 ").arg(m_mod_sys).arg(m_mod_sys.toString()));
     248
     249    if ((DTVModulationSystem::kModulationSystem_DVBC_ANNEX_A != m_mod_sys) &&
     250        (DTVModulationSystem::kModulationSystem_DVBC_ANNEX_B != m_mod_sys) &&
     251        (DTVModulationSystem::kModulationSystem_DVBC_ANNEX_C != m_mod_sys))
     252    {
     253        LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-C modulation system " +
     254            QString("parameter '%1', aborting.").arg(_mod_sys));
     255        return false;
     256    }
     257
     258    return ok;
     259}
     260
    221261bool DTVMultiplex::ParseDVB_S2(
    222262    const QString &_frequency,   const QString &_inversion,
    223263    const QString &_symbol_rate, const QString &_fec_inner,
    bool DTVMultiplex::ParseDVB_S2( 
    229269
    230270    if (!m_mod_sys.Parse(_mod_sys))
    231271    {
    232         LOG(VB_GENERAL, LOG_ERR, LOC + "Invalid S2 modulation system " +
     272        LOG(VB_GENERAL, LOG_ERR, LOC + "Invalid DVB-S2 modulation system " +
    233273                QString("parameter '%1', aborting.").arg(_mod_sys));
    234274        return false;
    235275    }
    bool DTVMultiplex::ParseDVB_S2( 
    245285    if ((DTVModulationSystem::kModulationSystem_DVBS  != m_mod_sys) &&
    246286        (DTVModulationSystem::kModulationSystem_DVBS2 != m_mod_sys))
    247287    {
    248         LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported S2 modulation system " +
     288        LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-S2 modulation system " +
    249289            QString("parameter '%1', aborting.").arg(_mod_sys));
    250290        return false;
    251291    }
    bool DTVMultiplex::ParseDVB_T2( 
    268308                         _trans_mode, _guard_interval, _hierarchy);
    269309
    270310    QString l_mod_sys = _mod_sys;
     311
     312    // Accept "0" for "DVB-T" and "1" for "DVB-T2"
    271313    if (_mod_sys == "1")
    272314    {
    273315        LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T2 modulation system " +
    274316                QString("parameter '%1', using DVB-T2.").arg(_mod_sys));
    275         l_mod_sys = "DVB-T2";
     317        m_mod_sys = DTVModulationSystem::kModulationSystem_DVBT2;
     318        l_mod_sys = m_mod_sys.toString();
    276319    }
    277320    else if (_mod_sys == "0")
    278321    {
    279322        LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T modulation system " +
    280323                QString("parameter '%1', using DVB-T.").arg(_mod_sys));
    281         l_mod_sys = "DVB-T";
     324        m_mod_sys = DTVModulationSystem::kModulationSystem_DVBT;
     325        l_mod_sys = m_mod_sys.toString();
    282326    }
     327
    283328    if (!m_mod_sys.Parse(l_mod_sys))
    284329    {
    285330        LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T/T2 modulation system " +
    bool DTVMultiplex::ParseTuningParams( 
    313358    if (DTVTunerType::kTunerTypeDVBT == type)
    314359    {
    315360        return ParseDVB_T(
    316             _frequency,       _inversion,       _bandwidth,    _hp_code_rate,
    317             _lp_code_rate,    _ofdm_modulation, _trans_mode,   _guard_interval,
    318             _hierarchy);
     361            _frequency,       _inversion,       _bandwidth,
     362            _hp_code_rate,    _lp_code_rate,    _ofdm_modulation,
     363            _trans_mode,      _guard_interval,  _hierarchy);
    319364    }
    320365
    321     if ((DTVTunerType::kTunerTypeDVBS1 == type) ||
    322         (DTVTunerType::kTunerTypeDVBC  == type))
     366    if (DTVTunerType::kTunerTypeDVBC  == type)
     367    {
     368        return ParseDVB_C(
     369            _frequency,       _inversion,       _symbolrate,
     370            _fec,             _modulation,      _polarity,
     371            _mod_sys);
     372    }
     373
     374    if (DTVTunerType::kTunerTypeDVBS1 == type)
    323375    {
    324         return ParseDVB_S_and_C(
    325             _frequency,       _inversion,     _symbolrate,
    326             _fec,             _modulation,    _polarity);
     376        return ParseDVB_S(
     377            _frequency,       _inversion,       _symbolrate,
     378            _fec,             _modulation,      _polarity);
    327379    }
    328380
    329381    if (DTVTunerType::kTunerTypeDVBS2 == type)
    330382    {
    331383        return ParseDVB_S2(
    332             _frequency,       _inversion,     _symbolrate,
    333             _fec,             _modulation,    _polarity,
     384            _frequency,       _inversion,       _symbolrate,
     385            _fec,             _modulation,      _polarity,
    334386            _mod_sys,         _rolloff);
    335387    }
    336388
    337389    if (DTVTunerType::kTunerTypeDVBT2 == type)
    338390    {
    339391        return ParseDVB_T2(
    340             _frequency,       _inversion,       _bandwidth,    _hp_code_rate,
    341             _lp_code_rate,    _ofdm_modulation, _trans_mode,   _guard_interval,
    342             _hierarchy, _mod_sys);
     392            _frequency,       _inversion,       _bandwidth,
     393            _hp_code_rate,    _lp_code_rate,    _ofdm_modulation,
     394            _trans_mode,      _guard_interval,  _hierarchy,
     395            _mod_sys);
    343396    }
    344397
    345398    if (DTVTunerType::kTunerTypeATSC == type)
  • mythtv/libs/libmythtv/dtvmultiplex.h

    diff --git a/mythtv/libs/libmythtv/dtvmultiplex.h b/mythtv/libs/libmythtv/dtvmultiplex.h
    index 176ad90df3..39ec86ede9 100644
    a b class MTV_PUBLIC DTVMultiplex 
    5454        const QString &symbol_rate,  const QString &fec_inner,
    5555        const QString &modulation,   const QString &polarity);
    5656
     57    bool ParseDVB_S(
     58        const QString &frequency,    const QString &inversion,
     59        const QString &symbol_rate,  const QString &fec_inner,
     60        const QString &modulation,   const QString &polarity);
     61
     62    bool ParseDVB_C(
     63        const QString &frequency,    const QString &inversion,
     64        const QString &symbol_rate,  const QString &fec_inner,
     65        const QString &modulation,   const QString &polarity,
     66        const QString &mod_sys);
     67
    5768    bool ParseDVB_S2(
    5869        const QString &frequency,    const QString &inversion,
    5970        const QString &symbol_rate,  const QString &fec_inner,
    class MTV_PUBLIC DTVMultiplex 
    8495    uint64_t         m_symbolrate {0};
    8596    DTVInversion     m_inversion;
    8697    DTVBandwidth     m_bandwidth;
    87     DTVCodeRate      m_hp_code_rate;  ///< High Priority FEC rate
    88     DTVCodeRate      m_lp_code_rate;  ///< Low Priority FEC rate
     98    DTVCodeRate      m_hp_code_rate;    ///< High Priority FEC rate
     99    DTVCodeRate      m_lp_code_rate;    ///< Low Priority FEC rate
    89100    DTVModulation    m_modulation;
    90101    DTVTransmitMode  m_trans_mode;
    91102    DTVGuardInterval m_guard_interval;
    92103    DTVHierarchy     m_hierarchy;
    93104    DTVPolarity      m_polarity;
    94     DTVCodeRate      m_fec; ///< Inner Forward Error Correction rate
    95     DTVModulationSystem m_mod_sys; ///< modulation system (only DVB-S or DVB-S2 atm)
     105    DTVCodeRate      m_fec;             ///< Inner Forward Error Correction rate
     106    DTVModulationSystem m_mod_sys;      ///< Modulation system
    96107    DTVRollOff       m_rolloff;
    97108
    98109    // Optional additional info