Ticket #13292: 20190828_master_LiveTVCodecChecks.patch

File 20190828_master_LiveTVCodecChecks.patch, 3.3 KB (added by Mike Bibbings, 20 months ago)
  • mythtv/libs/libmythtv/avformatdecoder.cpp

    diff --git a/mythtv/libs/libmythtv/avformatdecoder.cpp b/mythtv/libs/libmythtv/avformatdecoder.cpp
    index 11d03d9232..4240b798cb 100644
    a b int AvFormatDecoder::OpenFile(RingBuffer *rbuffer, bool novideo, 
    10841084
    10851085    if (m_livetv)
    10861086    {
     1087        QString livetvcodecchecks = gCoreContext->GetSetting("LiveTVCodecChecks", "Yes").toLower();
     1088
    10871089        // We try to open the file for up to 1.5 second using only buffer in memory
    10881090        MythTimer timer; timer.start();
    10891091
    int AvFormatDecoder::OpenFile(RingBuffer *rbuffer, bool novideo, 
    11221124            }
    11231125
    11241126            found = true;
     1127
     1128            // see if we need to check all streams
     1129            // sometimes we need to skip e.g. UK Freeview DVB-T/T2
     1130            // see mythtv trac ticket #13292
    11251131
    1126             for (uint i = 0; i < m_ic->nb_streams; i++)
     1132            if (livetvcodecchecks != "no")
    11271133            {
    1128                 if (!has_codec_parameters(m_ic->streams[i]))
     1134                for (uint i = 0; i < m_ic->nb_streams; i++)
    11291135                {
    1130                     avformat_close_input(&m_ic);
    1131                     found = false;
    1132                     LOG(VB_PLAYBACK, LOG_DEBUG, LOC +
    1133                         QString("Invalid streams found in ram data after %1ms, retrying in 50ms")
    1134                         .arg(timer.elapsed()));
    1135                     usleep(50 * 1000);  // wait 50ms
    1136                     break;
     1136                    if (!has_codec_parameters(m_ic->streams[i]))
     1137                    {
     1138                        avformat_close_input(&m_ic);
     1139                        found = false;
     1140                        LOG(VB_PLAYBACK, LOG_DEBUG, LOC +
     1141                                QString("Invalid streams found in ram data after %1ms, retrying in 50ms")
     1142                                .arg(timer.elapsed()));
     1143                        usleep(50 * 1000); // wait 50ms
     1144                        break;
     1145                    }
    11371146                }
    11381147            }
    11391148        }
  • mythtv/programs/mythtv-setup/backendsettings.cpp

    diff --git a/mythtv/programs/mythtv-setup/backendsettings.cpp b/mythtv/programs/mythtv-setup/backendsettings.cpp
    index 36e0eb369a..17e259853e 100644
    a b static GlobalComboBoxSetting *FreqTable() 
    250250    return gc;
    251251};
    252252
     253static GlobalComboBoxSetting *LiveTVCodecChecks()
     254{
     255    GlobalComboBoxSetting *gc = new GlobalComboBoxSetting("LiveTVCodecChecks");
     256    gc->setLabel(QObject::tr("Live TV Codec Checks"));
     257    gc->addSelection("Yes");
     258    gc->addSelection("No");
     259    gc->setHelpText(QObject::tr("Usually set to Yes."
     260                    "Sometimes DVB-T/T2 transmissions have additional codec types "
     261                    "which can cause codec detection to fail "
     262                    " For example UK Freeview (DVBT/T2), change to No."));
     263    return gc;
     264};
    253265static GlobalCheckBoxSetting *SaveTranscoding()
    254266{
    255267    GlobalCheckBoxSetting *gc = new GlobalCheckBoxSetting("SaveTranscoding");
    BackendSettings::BackendSettings() 
    916928    locale->addChild(TVFormat());
    917929    locale->addChild(VbiFormat());
    918930    locale->addChild(FreqTable());
     931    locale->addChild(LiveTVCodecChecks());
    919932    addChild(locale);
    920933
    921934    GroupSetting* group2 = new GroupSetting();