Ticket #1056: dishnet_eit_9143.patch

File dishnet_eit_9143.patch, 10.4 KB (added by greg, 14 years ago)

New dishnet eit patch against 9143

  • libs/libmythtv/mpeg/dvbtables.cpp

     
    159159    // Standard Future Event Information Tables for other transports
    160160    is_eit |= (TableID::SC_EITbego <= table_id &&
    161161               TableID::SC_EITendo >= table_id);
     162    // Dish Network Long Term Future Event Information for all transports
     163    is_eit |= (TableID::DN_EITbego <= table_id &&
     164               TableID::DN_EITendo >= table_id);
    162165
    163166    return is_eit;
    164167}
  • libs/libmythtv/mpeg/mpegtables.h

     
    183183    DVB_RST_PID   = 0x0013,
    184184    DVB_TOT_PID   = 0x0013,
    185185
     186                                // Dishnet longterm EIT is on pid 0x300
     187    DVB_DNLONG_EIT_PID = 0x0300,
     188
    186189    ATSC_PSIP_PID = 0x1ffb,
    187190};
    188191
     
    225228        DIT      = 0x7e, // always on pid 0x1e
    226229        SIT      = 0x7f, // always on pid 0x1f
    227230
     231                         // Dishnet Longterm EIT data
     232        DN_EITbego = 0x80, // always on pid 0x300
     233        DN_EITendo = 0xfe, // always on pid 0x300
     234
    228235        // ATSC
    229236        STUFFING = 0x80,
    230237        CAPTION  = 0x86,
  • libs/libmythtv/dvbsiparser.cpp

     
    9191    SIParser::deleteLater();
    9292}
    9393
     94#ifdef USING_DVB_EIT
     95void DVBSIParser::SetDishNetEIT(bool onoff)
     96{
     97    SIParser::SetDishNetEIT(onoff);
     98}
     99#endif
     100
    94101/** \fn DVBSIParser::SystemInfoThread(void*)
    95102 *  \brief Thunk that allows siparser_thread pthread to
    96103 *         call DVBSIParser::StartSectionReader().
  • libs/libmythtv/siparser.cpp

     
    7373
    7474    Reset();
    7575
     76    // Default to not watch for Dishnet longterm EIT events
     77    eit_dn_long = false;
     78
    7679    // Get a list of wanted languages and set up their priorities
    7780    // (Lowest number wins)
    7881    QStringList langPref = iso639_get_language_list();
     
    127130    QObject::deleteLater();
    128131}
    129132
     133#ifdef USING_DVB_EIT
     134void SIParser::SetDishNetEIT(bool onoff)
     135{
     136    eit_dn_long = onoff;
     137}
     138#endif
     139
    130140/* Resets all trackers, and closes all section filters */
    131141void SIParser::Reset()
    132142{
     
    10851095    Table[EVENTS]->DependencyMet(SERVICES);
    10861096    //Table[EVENTS]->AddPid(0x12,0x00,0x00,true); // see ticket #755
    10871097    Table[EVENTS]->AddPid(0x12,0x7F,0x80,0x12); // see ticket #755
     1098    // This should only be added based on the user enabling 7-9day dishnet
     1099    // EIT events
     1100
     1101    if (eit_dn_long)
     1102        Table[EVENTS]->AddPid(0x300,0x00,0x00,true);
     1103
    10881104#endif // USING_DVB_EIT
    10891105}
    10901106
     
    11501166        // Event to use temporarily to fill in data
    11511167        Event event;
    11521168        event.ServiceID   = eit->ServiceID();
     1169        event.TableID     = eit->TableID();
    11531170        event.TransportID = eit->TSID();
    11541171        event.NetworkID   = eit->OriginalNetworkID();
    11551172        event.EventID     = eit->EventID(i);
     1173
    11561174        event.StartTime   = MythUTCToLocal(eit->StartTimeUTC(i));
    11571175        event.EndTime     = event.StartTime.addSecs(eit->DurationInSeconds(i));
    11581176
     
    13491367        }
    13501368        break;
    13511369
     1370        case DescriptorID::dish_ename:
     1371        {
     1372            int ht = (event.TableID > 0x80) ? 2 : 1;
     1373            if (data[1] > 1)
     1374                event.Event_Name = atsc_huffman2_to_string(data+3, data[1]-1, ht);
     1375        }
     1376        break;
     1377
     1378        case DescriptorID::dish_edescription:
     1379        {
     1380            int ht = (event.TableID > 0x80) ? 2 : 1;
     1381            if (data[1] > 2)
     1382            {
     1383                if ((data[3] & 0xf8) == 0x80)
     1384                    event.Description = atsc_huffman2_to_string(data+4, data[1]-2, ht);
     1385                else
     1386                    event.Description = atsc_huffman2_to_string(data+3, data[1]-1, ht);
     1387            }
     1388        }
     1389        break;
     1390
    13521391        default:
    13531392            ProcessUnusedDescriptor(pid, data, descriptorLength + 2);
    13541393            break;
  • libs/libmythtv/eit.h

     
    3131    uint    SourcePID;
    3232    uint    TransportID;
    3333    uint    NetworkID;
     34    uint    TableID;
    3435    uint    ServiceID;    ///< NOT the Virtual Channel Number used by ATSC
    3536    uint    EventID;
    3637    bool    Stereo;
  • libs/libmythtv/videosource.cpp

     
    13531353private:
    13541354};
    13551355
     1356class DishNetEIT: public CheckBoxSetting, public CISetting
     1357{
     1358  public:
     1359    DishNetEIT(const CardInput& parent):
     1360        CISetting(parent, "dishnet_eit")
     1361    {
     1362        setLabel(QObject::tr("Gather DishNet LongTerm EIT Data"));
     1363        setValue(false);
     1364    };
     1365};
     1366
    13561367CardInput::CardInput(bool isDVBcard)
    13571368{
    13581369    addChild(id = new ID());
     
    13971408    group->addChild(startchan);
    13981409    group->addChild(new InputPreference(*this));
    13991410
     1411    addChild(group);
     1412
    14001413#ifdef USING_DVB
    14011414    if (isDVBcard)
    14021415    {
    1403         group->addChild(diseqcpos    = new DiSEqCPos(*this));
    1404         group->addChild(diseqcport   = new DiSEqCPort(*this));
    1405         group->addChild(lnblofswitch = new LNBLofSwitch(*this));
    1406         group->addChild(lnblofhi = new LNBLofHi(*this));
    1407         group->addChild(lnbloflo = new LNBLofLo(*this));
     1416        ConfigurationGroup *dvbgroup =
     1417          new VerticalConfigurationGroup(false, false, true, true);
     1418   
     1419        dvbgroup->addChild(diseqcpos    = new DiSEqCPos(*this));
     1420        dvbgroup->addChild(diseqcport   = new DiSEqCPort(*this));
     1421        dvbgroup->addChild(lnblofswitch = new LNBLofSwitch(*this));
     1422        dvbgroup->addChild(lnblofhi = new LNBLofHi(*this));
     1423        dvbgroup->addChild(lnbloflo = new LNBLofLo(*this));
     1424
    14081425        HorizontalConfigurationGroup *h1 =
    14091426            new HorizontalConfigurationGroup(false, false, true, true);
    14101427        h1->addChild(new FreeToAir(*this));
    14111428        h1->addChild(new RadioServices(*this));
    1412         group->addChild(h1);
     1429        dvbgroup->addChild(h1);
     1430
     1431        dvbgroup->addChild(new DishNetEIT(*this));
     1432        addChild(dvbgroup);
     1433
    14131434    }
    14141435#endif
    14151436
    1416     addChild(group);
    1417 
    14181437    childid = new ChildID(*this);
    14191438    addChild(childid);
    14201439
     
    14231442    connect(srcfetch, SIGNAL(pressed()), SLOT(sourceFetch()));
    14241443    connect(sourceid, SIGNAL(valueChanged(const QString&)),
    14251444            startchan,SLOT(  SetSourceID (const QString&)));
     1445   
    14261446}
    14271447
    14281448QString CardInput::getSourceName(void) const
  • libs/libmythtv/dbcheck.cpp

     
    1010#include "mythdbcon.h"
    1111
    1212/// This is the DB schema version expected by the running MythTV instance.
    13 const QString currentDatabaseVersion = "1127";
     13const QString currentDatabaseVersion = "1128";
    1414
    1515static bool UpdateDBVersionNumber(const QString &newnumber);
    1616static bool performActualUpdate(const QString updates[], QString version,
     
    20482048            return false;
    20492049    }
    20502050
     2051    if(dbver == "1128")
     2052    {
     2053       const QString updates[] = {
     2054"ALTER TABLE cardinput ADD COLUMN dishnet_eit TINYINT(1) NOT NULL DEFAULT 0;",
     2055""
     2056};
     2057        if (!performActualUpdate(updates, "1128", dbver))
     2058            return false;
     2059    }
     2060
    20512061//"ALTER TABLE capturecard DROP COLUMN dvb_recordts;" in 0.21
    20522062//"ALTER TABLE capturecard DROP COLUMN dvb_hw_decoder;" in 0.21
    20532063
  • libs/libmythtv/tv_rec.cpp

     
    10641064#endif // USING_V4L
    10651065}
    10661066
     1067#ifdef USING_DVB_EIT
     1068bool TVRec::WantDishNetEIT(int cardnum)
     1069{
     1070    MSqlQuery query(MSqlQuery::InitCon());
     1071    QString theQuery = QString("SELECT dishnet_eit FROM cardinput "
     1072                               "WHERE cardid = %1")
     1073                       .arg(cardnum);
     1074    query.exec(theQuery);
     1075
     1076    // If we can pull the value, return it whatever it might be
     1077    if (query.next())
     1078        return query.value(0).toBool();
     1079
     1080    // Default to false
     1081    return false;
     1082}
     1083#endif
     1084
    10671085void TVRec::CreateSIParser(int program_num)
    10681086{
    10691087    (void) program_num;
     
    10881106            (program_num >= 0) ? program_num : service_id);
    10891107
    10901108#ifdef USING_DVB_EIT
     1109        if (WantDishNetEIT(GetCaptureCardNum()))
     1110        {
     1111            VERBOSE(VB_EIT, "Enabling DishNet Long Term EIT Support");
     1112            dvbsiparser->SetDishNetEIT(true);
     1113        }
     1114
    10911115        if (scanner)
    10921116            scanner->StartPassiveScan(dvbc, dvbsiparser);
    10931117#endif // USING_DVB_EIT
  • libs/libmythtv/tv_rec.h

     
    257257    void TeardownSignalMonitor(void);
    258258    DTVSignalMonitor *GetDTVSignalMonitor(void);
    259259
     260#ifdef USING_DVB_EIT
     261    bool WantDishNetEIT(int cardnum);
     262#endif
     263
    260264    void CreateSIParser(int num);
    261265    void TeardownSIParser(void);
    262266
  • libs/libmythtv/dvbsiparser.h

     
    7676    void StartSectionReader();
    7777    void StopSectionReader();
    7878
     79#ifdef USING_DVB_EIT
     80    void SetDishNetEIT(bool onoff);
     81#endif
     82
    7983public slots:
    8084    void deleteLater(void);
    8185
  • libs/libmythtv/siparser.h

     
    121121    void ParseTable(uint8_t* buffer, int size, uint16_t pid);
    122122    void CheckTrackers(void);
    123123
     124#ifdef USING_DVB_EIT
     125    void SetDishNetEIT(bool onoff);
     126#endif
    124127  public slots:
    125128    virtual void deleteLater(void);
    126129
     
    239242#ifdef USING_DVB_EIT
    240243    /// EITFixUp instance
    241244    EITFixUp            eitfixup;
     245
     246    bool                eit_dn_long;
    242247#endif
    243248
    244249    // statistics