diff options
author | etobi <git@e-tobi.net> | 2010-02-12 22:06:19 +0100 |
---|---|---|
committer | etobi <git@e-tobi.net> | 2010-04-18 02:42:59 +0200 |
commit | 62912232e2b38a1857c0ff279bd61579b1ab85ae (patch) | |
tree | 7bacce184e6c35e365940f26c8505a789d9f74e3 /remux.c | |
parent | 1f4d9228ae8b7b615c347acc3f5903fb038eb380 (diff) | |
download | vdr-patches-62912232e2b38a1857c0ff279bd61579b1ab85ae.tar.gz vdr-patches-62912232e2b38a1857c0ff279bd61579b1ab85ae.tar.bz2 |
Capture teletext subtitle pages from PMT
Diffstat (limited to 'remux.c')
-rw-r--r-- | remux.c | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -431,6 +431,7 @@ void cPatPmtParser::Reset(void) pmtPid = -1; vpid = vtype = 0; ppid = 0; + tpid = 0; } void cPatPmtParser::ParsePat(const uchar *Data, int Length) @@ -516,6 +517,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) int NumSpids = 0; vpid = vtype = 0; ppid = 0; + tpid = 0; apids[0] = 0; dpids[0] = 0; spids[0] = 0; @@ -615,6 +617,28 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) spids[NumSpids]= 0; } break; + case SI::TeletextDescriptorTag: { + dbgpatpmt(" teletext"); + tpid = stream.getPid(); + SI::TeletextDescriptor *sd = (SI::TeletextDescriptor *)d; + SI::TeletextDescriptor::Teletext ttxt; + if (totalTtxtSubtitlePages < MAXTXTPAGES) { + for (SI::Loop::Iterator it; sd->teletextLoop.getNext(ttxt, it); ) { + bool isSubtitlePage = (ttxt.getTeletextType() == 0x02) || (ttxt.getTeletextType() == 0x05); + if (isSubtitlePage && ttxt.languageCode[0]) { + dbgpatpmt(" '%s:%x.%x'", ttxt.languageCode, ttxt.getTeletextMagazineNumber(), ttxt.getTeletextPageNumber()); + strn0cpy(teletextSubtitlePages[totalTtxtSubtitlePages].ttxtLanguage, I18nNormalizeLanguageCode(ttxt.languageCode), MAXLANGCODE1); + teletextSubtitlePages[totalTtxtSubtitlePages].ttxtPage = ttxt.getTeletextPageNumber(); + teletextSubtitlePages[totalTtxtSubtitlePages].ttxtMagazine = ttxt.getTeletextMagazineNumber(); + teletextSubtitlePages[totalTtxtSubtitlePages].ttxtType = ttxt.getTeletextType(); + totalTtxtSubtitlePages++; + if (totalTtxtSubtitlePages >= MAXTXTPAGES) + break; + } + } + } + } + break; case SI::ISO639LanguageDescriptorTag: { SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d; dbgpatpmt(" '%s'", ld->languageCode); |