Ticket #1766: dvb-teletext.patch

File dvb-teletext.patch, 3.5 KB (added by jyrki.n@…, 15 years ago)
  • libs/libmythtv/avformatdecoder.cpp

     
    11191119
    11201120void AvFormatDecoder::ScanTeletextCaptions(int av_index)
    11211121{
    1122     tracks[kTrackTypeTeletextCaptions].clear();
    1123 
    1124     if (!ic->cur_pmt_sect)
     1122    if (!ic->cur_pmt_sect || tracks[kTrackTypeTeletextCaptions].size())
    11251123        return;
    11261124
    11271125    const PESPacket pes = PESPacket::ViewData(ic->cur_pmt_sect);
     
    11311129    uint i;
    11321130    for (i = 0; i < pmt.StreamCount(); i++)
    11331131    {
    1134         if (pmt.StreamType(i) == 6)
    1135             break;
    1136     }
     1132        if (pmt.StreamType(i) != 6)
     1133            continue;
    11371134
    1138     if (!pmt.StreamType(i) == 6)
    1139         return;
     1135        const desc_list_t desc_list = MPEGDescriptor::ParseOnlyInclude(
     1136            pmt.StreamInfo(i), pmt.StreamInfoLength(i),
     1137            DescriptorID::teletext);
    11401138
    1141     const desc_list_t desc_list = MPEGDescriptor::ParseOnlyInclude(
    1142         pmt.StreamInfo(i), pmt.StreamInfoLength(i),
    1143         DescriptorID::teletext);
    1144 
    1145     for (uint j = 0; j < desc_list.size(); j++)
    1146     {
    1147         const TeletextDescriptor td(desc_list[j]);
    1148         for (uint k = 0; k < td.StreamCount(); k++)
     1139        for (uint j = 0; j < desc_list.size(); j++)
    11491140        {
    1150             int lang = td.CanonicalLanguageKey(k);
    1151             int type = td.TeletextType(k);
    1152             int magazine = td.TeletextMagazineNum(k)?:8;
    1153             int pagenum = td.TeletextPageNum(k);
    1154             if (type == 2)
     1141            const TeletextDescriptor td(desc_list[j]);
     1142            for (uint k = 0; k < td.StreamCount(); k++)
    11551143            {
    1156                 StreamInfo si(av_index, lang, (magazine * 256 + pagenum), 0);
    1157                 tracks[kTrackTypeTeletextCaptions].push_back(si);
    1158                 VERBOSE(VB_PLAYBACK, LOC + QString(
    1159                             "Teletext caption #%1 "
    1160                             "is in the %2 language on page %3 %4.")
     1144                int lang = td.CanonicalLanguageKey(k);
     1145                int type = td.TeletextType(k);
     1146                int magazine = td.TeletextMagazineNum(k)?:8;
     1147                int pagenum = td.TeletextPageNum(k);
     1148                if (type == 2)
     1149                {
     1150                    StreamInfo si(av_index, lang, (magazine * 256 + pagenum), 0);
     1151                    tracks[kTrackTypeTeletextCaptions].push_back(si);
     1152                    VERBOSE(VB_PLAYBACK, LOC + QString(
     1153                        "Teletext caption #%1 "
     1154                        "is in the %2 language on page %3 %4.")
    11611155                        .arg(k)
    11621156                        .arg(iso639_key_toName(lang))
    11631157                        .arg(magazine).arg(pagenum));
    1164             }
     1158                }
     1159            }
    11651160        }
     1161
     1162        if (tracks[kTrackTypeTeletextCaptions].size())
     1163            break;
    11661164    }
    11671165}
    11681166
     
    11741172
    11751173    tracks[kTrackTypeAudio].clear();
    11761174    tracks[kTrackTypeSubtitle].clear();
     1175    tracks[kTrackTypeTeletextCaptions].clear();
    11771176    selectedVideoIndex = -1;
    11781177
    11791178    map<int,uint> lang_sub_cnt;
     
    19731972    {
    19741973        if (*buf == 0x10)
    19751974            buf++; // skip
    1976         if (*buf == 0xff)
    1977             buf += 3; // skip
    19781975
    19791976        if (*buf == 0x02)
    19801977        {
     
    19861983            buf += 3;
    19871984            ttd->Decode(buf+1, VBI_DVB_SUBTITLE);
    19881985        }
     1986        else if (*buf == 0xff)
     1987        {
     1988            buf += 3;
     1989        }
    19891990        else
    19901991        {
    19911992            VERBOSE(VB_VBI, QString("VBI: Unknown descriptor: %1").arg(*buf));