diff options
Diffstat (limited to 'patches/patch-set/0005-Capture-teletext-subtitle-pages-from-PMT.patch')
-rw-r--r-- | patches/patch-set/0005-Capture-teletext-subtitle-pages-from-PMT.patch | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/patches/patch-set/0005-Capture-teletext-subtitle-pages-from-PMT.patch b/patches/patch-set/0005-Capture-teletext-subtitle-pages-from-PMT.patch new file mode 100644 index 0000000..91b57c3 --- /dev/null +++ b/patches/patch-set/0005-Capture-teletext-subtitle-pages-from-PMT.patch @@ -0,0 +1,104 @@ +From cd69cfb12c691834710beb346527920b8802552e Mon Sep 17 00:00:00 2001 +From: etobi <git@e-tobi.net> +Date: Fri, 12 Feb 2010 22:06:19 +0100 +Subject: [PATCH 5/6] Capture teletext subtitle pages from PMT + +--- + remux.c | 26 ++++++++++++++++++++++++++ + remux.h | 6 ++++++ + 2 files changed, 32 insertions(+), 0 deletions(-) + +diff --git a/remux.c b/remux.c +index 869b6e4..24fcbd3 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) +@@ -514,8 +515,10 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) + int NumApids = 0; + int NumDpids = 0; + int NumSpids = 0; ++ int NumTPages = 0; + vpid = vtype = 0; + ppid = 0; ++ tpid = 0; + apids[0] = 0; + dpids[0] = 0; + spids[0] = 0; +@@ -614,6 +617,29 @@ 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 (NumTPages < 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[NumTPages].ttxtLanguage, I18nNormalizeLanguageCode(ttxt.languageCode), MAXLANGCODE1); ++ teletextSubtitlePages[NumTPages].ttxtPage = ttxt.getTeletextPageNumber(); ++ teletextSubtitlePages[NumTPages].ttxtMagazine = ttxt.getTeletextMagazineNumber(); ++ teletextSubtitlePages[NumTPages].ttxtType = ttxt.getTeletextType(); ++ NumTPages++; ++ if (NumTPages >= MAXTXTPAGES) ++ break; ++ } ++ } ++ teletextSubtitlePages[NumTPages].ttxtType = 0; // indicates end of list ++ } ++ } ++ break; + case SI::ISO639LanguageDescriptorTag: { + SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d; + dbgpatpmt(" '%s'", ld->languageCode); +diff --git a/remux.h b/remux.h +index cef50d7..43809fc 100644 +--- a/remux.h ++++ b/remux.h +@@ -216,6 +216,7 @@ private: + int vpid; + int ppid; + int vtype; ++ int tpid; + int apids[MAXAPIDS + 1]; // list is zero-terminated + int atypes[MAXAPIDS + 1]; // list is zero-terminated + char alangs[MAXAPIDS][MAXLANGCODE2]; +@@ -228,6 +229,7 @@ private: + uint16_t compositionPageIds[MAXSPIDS]; + uint16_t ancillaryPageIds[MAXSPIDS]; + bool updatePrimaryDevice; ++ tTeletextSubtitlePage teletextSubtitlePages[MAXTXTPAGES + 1]; // list is zero-terminated + protected: + int SectionLength(const uchar *Data, int Length) { return (Length >= 3) ? ((int(Data[1]) & 0x0F) << 8)| Data[2] : 0; } + public: +@@ -260,6 +262,9 @@ public: + int Vtype(void) const { return vtype; } + ///< Returns the video stream type as defined by the current PMT, or 0 if no video + ///< stream type has been detected, yet. ++ int Tpid(void) { return tpid; } ++ ///< Returns the teletext pid as defined by the current PMT, or 0 if no teletext ++ ///< pid has been detected, yet. + const int *Apids(void) const { return apids; } + const int *Dpids(void) const { return dpids; } + const int *Spids(void) const { return spids; } +@@ -274,6 +279,7 @@ public: + uchar SubtitlingType(int i) const { return (0 <= i && i < MAXSPIDS) ? subtitlingTypes[i] : uchar(0); } + uint16_t CompositionPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? compositionPageIds[i] : uint16_t(0); } + uint16_t AncillaryPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? ancillaryPageIds[i] : uint16_t(0); } ++ const tTeletextSubtitlePage* TeletextSubtitlePages() const { return teletextSubtitlePages; } + }; + + // TS to PES converter: +-- +1.6.5 + |