Ticket #3952: linkage_backend.diff

File linkage_backend.diff, 3.9 KB (added by Wolfgang <mythtv@…>, 5 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);