Ticket #3952: linkage_backend.diff

File linkage_backend.diff, 3.9 KB (added by Wolfgang <mythtv@…>, 13 years ago)

backend patch for the linkage support

  • libs/libmythtv/eithelper.cpp

     
    387387            }
    388388        }
    389389
     390        desc_list_t linkages =
     391             MPEGDescriptor::FindAll(list, DescriptorID::linkage);
     392        StoreLinkageList(chanid,linkages,fix);
     393 
    390394        QDateTime starttime = MythUTCToLocal(eit->StartTimeUTC(i));
    391395        EITFixUp::TimeFix(starttime);
    392396        QDateTime endtime   = starttime.addSecs(eit->DurationInSeconds(i));
     
    513517    eitcache->WriteToDB();
    514518}
    515519
     520void EITHelper::StoreLinkageList(uint portal_chanid, desc_list_t linkages, uint fix)
     521{
     522    unsigned char enc_1[3]  = { 0x10, 0x00, 0x01 };
     523    unsigned char enc_15[3] = { 0x10, 0x00, 0x0f };
     524    unsigned char enc_premiere[1] = { 0x5 };
     525    int enc_len = 0;
     526    const unsigned char *enc = NULL;
     527
     528    // Is this BellExpressVU EIT (Canada) ?
     529    // Use an encoding override of ISO 8859-1 (Latin1)
     530    if (fix & EITFixUp::kEFixForceISO8859_1)
     531    {
     532        enc = enc_1;
     533        enc_len = sizeof(enc_1);
     534    }
     535
     536    // Is this broken DVB provider in Western Europe?
     537    // Use an encoding override of ISO 8859-15 (Latin6)
     538    if (fix & EITFixUp::kEFixForceISO8859_15)
     539    {
     540        enc = enc_15;
     541        enc_len = sizeof(enc_15);
     542    }
     543
     544    // The german provider Premiere needs extra handling
     545    if (fix & EITFixUp::kFixPremiere)
     546    {
     547        enc = enc_premiere;
     548        enc_len = sizeof(enc_premiere);
     549    }
     550
     551    if (linkages.size() > 0)
     552    {
     553        MSqlQuery query(MSqlQuery::InitCon());
     554        QString qstr = "DELETE FROM linkage where portal_chanid = :CHANID";
     555        query.prepare(qstr);
     556        query.bindValue(":CHANID", portal_chanid);
     557        if (!query.exec() || !query.isActive())
     558            MythContext::DBError("DELETE LINKAGELIST", query);
     559
     560        for (uint j=0;j<linkages.size();j++)
     561        {
     562            LinkageDescriptor linkage(linkages[j]);
     563            uint networkid         = linkage.OriginalNetworkID();
     564            uint tsid              = linkage.TSID();
     565            uint serviceid         = linkage.ServiceID();
     566            uint linkagetype       = linkage.LinkageType();
     567            QString subevent       = dvb_decode_text(linkage.PrivateData_N8(),linkage.PrivateDataLength_N8(),enc,enc_len);
     568
     569            uint chanid = GetChanID(serviceid,networkid,tsid);
     570
     571            // insert links into db
     572            QString qstr =
     573            "INSERT INTO linkage "
     574            "VALUES (:PORTAL, "
     575            "        :SERVICEID, "
     576            "        :CHANID, "
     577            "        :SUBEVENT) ";
     578
     579            query.prepare(qstr);
     580            query.bindValue(":PORTAL",     portal_chanid);
     581            query.bindValue(":SERVICEID",  serviceid);
     582            query.bindValue(":CHANID",     chanid);
     583            query.bindValue(":SUBEVENT",   subevent.utf8());
     584
     585            if (!query.exec() || !query.isActive())
     586                MythContext::DBError("INSERT LINKAGELIST", query);
     587        }
     588    }
     589}
     590
    516591//////////////////////////////////////////////////////////////////////
    517592// private methods and functions below this line                    //
    518593//////////////////////////////////////////////////////////////////////
  • libs/libmythtv/eithelper.h

     
    1313// MythTV includes
    1414#include "mythdeque.h"
    1515
     16typedef vector<const unsigned char*> desc_list_t;
     17
    1618class MSqlQuery;
    1719
    1820class ATSCEvent
     
    8284    // EIT cache handling
    8385    void PruneEITCache(uint timestamp);
    8486    void WriteEITCache(void);
     87    void StoreLinkageList(uint portal_chanid, desc_list_t linkages, uint fix);
    8588
    8689  private:
    8790    uint GetChanID(uint atsc_major, uint atsc_minor);