Ticket #1766: dvb-teletext.patch
File dvb-teletext.patch, 3.5 KB (added by , 18 years ago) |
---|
-
libs/libmythtv/avformatdecoder.cpp
1119 1119 1120 1120 void AvFormatDecoder::ScanTeletextCaptions(int av_index) 1121 1121 { 1122 tracks[kTrackTypeTeletextCaptions].clear(); 1123 1124 if (!ic->cur_pmt_sect) 1122 if (!ic->cur_pmt_sect || tracks[kTrackTypeTeletextCaptions].size()) 1125 1123 return; 1126 1124 1127 1125 const PESPacket pes = PESPacket::ViewData(ic->cur_pmt_sect); … … 1131 1129 uint i; 1132 1130 for (i = 0; i < pmt.StreamCount(); i++) 1133 1131 { 1134 if (pmt.StreamType(i) == 6) 1135 break; 1136 } 1132 if (pmt.StreamType(i) != 6) 1133 continue; 1137 1134 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); 1140 1138 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++) 1149 1140 { 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++) 1155 1143 { 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.") 1161 1155 .arg(k) 1162 1156 .arg(iso639_key_toName(lang)) 1163 1157 .arg(magazine).arg(pagenum)); 1164 } 1158 } 1159 } 1165 1160 } 1161 1162 if (tracks[kTrackTypeTeletextCaptions].size()) 1163 break; 1166 1164 } 1167 1165 } 1168 1166 … … 1174 1172 1175 1173 tracks[kTrackTypeAudio].clear(); 1176 1174 tracks[kTrackTypeSubtitle].clear(); 1175 tracks[kTrackTypeTeletextCaptions].clear(); 1177 1176 selectedVideoIndex = -1; 1178 1177 1179 1178 map<int,uint> lang_sub_cnt; … … 1973 1972 { 1974 1973 if (*buf == 0x10) 1975 1974 buf++; // skip 1976 if (*buf == 0xff)1977 buf += 3; // skip1978 1975 1979 1976 if (*buf == 0x02) 1980 1977 { … … 1986 1983 buf += 3; 1987 1984 ttd->Decode(buf+1, VBI_DVB_SUBTITLE); 1988 1985 } 1986 else if (*buf == 0xff) 1987 { 1988 buf += 3; 1989 } 1989 1990 else 1990 1991 { 1991 1992 VERBOSE(VB_VBI, QString("VBI: Unknown descriptor: %1").arg(*buf));