- break;
- case DTS_DESCRIPTOR:
- isaudio = 1;
- audio.type = audioStream::atDTS;
- break;
- case 0x2B: // TS_PSI_DT_MPEG2_AAC
- isaudio = 1;
- audio.type = audioStream::atAAC; // MPEG2-AAC
- break;
- case 0x1C: // TS_PSI_DT_MPEG4_Audio
- case AAC_DESCRIPTOR:
- isaudio = 1;
- audio.type = audioStream::atAACHE; // MPEG4-AAC
- break;
- case AC3_DESCRIPTOR:
- isaudio = 1;
- audio.type = audioStream::atAC3;
- break;
- case REGISTRATION_DESCRIPTOR: /* some services don't have a separate AC3 descriptor */
- {
- /* libdvbsi++ doesn't yet support this descriptor type, so work around. */
- if ((*desc)->getLength() < 4)
+ case TELETEXT_DESCRIPTOR:
+ if ( program.textPid == -1 || (*es)->getPid() == cached_tpid )
+ {
+ subtitleStream s;
+ s.subtitling_type = 0x01; // EBU TELETEXT SUBTITLES
+ s.pid = program.textPid = (*es)->getPid();
+ TeletextDescriptor *d = (TeletextDescriptor*)(*desc);
+ isteletext = 1;
+ const VbiTeletextList *list = d->getVbiTeletexts();
+ for (VbiTeletextConstIterator it(list->begin()); it != list->end(); ++it)
+ {
+ switch((*it)->getTeletextType())
+ {
+ case 0x02: // Teletext subtitle page
+ case 0x05: // Teletext subtitle page for hearing impaired pepople
+ s.language_code = (*it)->getIso639LanguageCode();
+ s.teletext_page_number = (*it)->getTeletextPageNumber();
+ s.teletext_magazine_number = (*it)->getTeletextMagazineNumber();
+// eDebug("add teletext subtitle %s PID %04x, page number %d, magazine number %d",
+// s.language_code.c_str(), s.pid, s.teletext_page_number, s.teletext_magazine_number);
+ program.subtitleStreams.push_back(s);
+ issubtitle=1;
+ default:
+ break;
+ }
+ }
+ }