Ticket #5072: configureable_iso8859_15_fix.diff

File configureable_iso8859_15_fix.diff, 4.4 KB (added by Wolfgang <mythtv@…>, 12 years ago)
  • libs/libmythtv/eithelper.cpp

     
    2727static uint get_chan_id_from_db(uint sourceid,
    2828                                uint atscmajor, uint atscminor);
    2929static uint get_chan_id_from_db(uint sourceid,  uint serviceid,
    30                                 uint networkid, uint transportid);
     30                                uint networkid, uint transportid,
     31                                bool &forceisofix);
    3132static void init_fixup(QMap<uint64_t,uint> &fix);
    3233static int calc_eit_utc_offset(void);
    3334
     
    122123    fixup[atsc_key] = eitfixup;
    123124}
    124125
     126void EITHelper::SetFixup(uint transportid, uint networkid, uint serviceid, uint eitfixup)
     127{
     128    QMutexLocker locker(&eitList_lock);
     129    uint64_t dvb_key = ((uint64_t) transportid << 32) | ((uint64_t) networkid << 16) | (uint64_t) serviceid;
     130    fixup[dvb_key] |= eitfixup;
     131}
     132
    125133void EITHelper::SetLanguagePreferences(const QStringList &langPref)
    126134{
    127135    QMutexLocker locker(&eitList_lock);
     
    302310    fix |= fixup[(((uint64_t)eit->TSID()) << 32) |
    303311                 (eit->OriginalNetworkID() << 16)];
    304312    fix |= fixup[(eit->OriginalNetworkID() << 16) | eit->ServiceID()];
    305     fix |= fixup[(((uint64_t)eit->TSID()) << 32) |
    306                  (uint64_t)(eit->OriginalNetworkID() << 16) |
    307                  (uint64_t)eit->ServiceID()];
    308313    fix |= EITFixUp::kFixGenericDVB;
    309314
    310315    uint chanid = GetChanID(eit->ServiceID(), eit->OriginalNetworkID(),
    311316                            eit->TSID());
     317
     318    fix |= fixup[(((uint64_t)eit->TSID()) << 32) |
     319                 (uint64_t)(eit->OriginalNetworkID() << 16) |
     320                 (uint64_t)eit->ServiceID()];
     321
    312322    if (!chanid)
    313323        return;
    314324
     
    474484
    475485        uint chanid = GetChanID(serviceid, networkid, tsid);
    476486
     487        fix |= fixup[(((uint64_t)tsid << 32) |
     488                       ((uint64_t)networkid) << 16) |
     489                       ((uint64_t)serviceid))];
     490
    477491        if (!chanid)
    478492        {
    479493            VERBOSE(VB_EIT, LOC +
     
    599613    if (it != srv_to_chanid.end())
    600614        return max(*it, 0);
    601615
    602     uint chanid = get_chan_id_from_db(sourceid, serviceid, networkid, tsid);
     616    bool forceisofix = 0;
     617    uint chanid = get_chan_id_from_db(sourceid, serviceid, networkid, tsid, forceisofix);
    603618    if (chanid)
     619    {
     620        if(forceisofix)
     621            SetFixup(tsid, networkid, serviceid, EITFixUp::kEFixForceISO8859_15);
     622
    604623        srv_to_chanid[key] = chanid;
     624    }
    605625
    606626    return chanid;
    607627}
     
    611631{
    612632    MSqlQuery query(MSqlQuery::InitCon());
    613633    query.prepare(
    614             "SELECT chanid, useonairguide "
     634            "SELECT chanid, useonairguide, forceiso8859_15 "
    615635            "FROM channel "
    616636            "WHERE atsc_major_chan = :MAJORCHAN AND "
    617637            "      atsc_minor_chan = :MINORCHAN AND "
     
    633653
    634654// Figure out the chanid for this channel
    635655static uint get_chan_id_from_db(uint sourceid, uint serviceid,
    636                                 uint networkid, uint transportid)
     656                                uint networkid, uint transportid,bool &forceisofix)
    637657{
    638658    MSqlQuery query(MSqlQuery::InitCon());
    639659
    640660    // DVB Link to chanid
    641661    QString qstr =
    642         "SELECT chanid, useonairguide "
     662        "SELECT chanid, useonairguide, forceiso8859_15 "
    643663        "FROM channel, dtv_multiplex "
    644664        "WHERE serviceid        = :SERVICEID   AND "
    645665        "      networkid        = :NETWORKID   AND "
     
    661681        MythContext::DBError("Looking up chanID", query);
    662682    else if (query.next())
    663683    {
     684        forceisofix=query.value(2).toBool();
    664685        // Check to see if we are interseted in this channel
    665686        bool useOnAirGuide = query.value(1).toBool();
    666687        return (useOnAirGuide) ? query.value(0).toUInt() : 0;
  • libs/libmythtv/eithelper.h

     
    6262
    6363    void SetGPSOffset(uint _gps_offset) { gps_offset = 0 - _gps_offset; }
    6464    void SetFixup(uint atsc_major, uint atsc_minor, uint eitfixup);
     65    void SetFixup(uint transportid, uint networkid, uint serviceid, uint eitfixup);
    6566    void SetLanguagePreferences(const QStringList &langPref);
    6667    void SetSourceID(uint _sourceid);
    6768