From 62912232e2b38a1857c0ff279bd61579b1ab85ae Mon Sep 17 00:00:00 2001 From: etobi Date: Fri, 12 Feb 2010 22:06:19 +0100 Subject: Capture teletext subtitle pages from PMT --- remux.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'remux.c') diff --git a/remux.c b/remux.c index 33b744a..31367a1 100644 --- a/remux.c +++ b/remux.c @@ -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); -- cgit v1.2.3