summaryrefslogtreecommitdiff
path: root/patches/patch-set.1.7.21/0005-Capture-teletext-subtitle-pages-from-PMT.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/patch-set.1.7.21/0005-Capture-teletext-subtitle-pages-from-PMT.patch')
-rw-r--r--patches/patch-set.1.7.21/0005-Capture-teletext-subtitle-pages-from-PMT.patch92
1 files changed, 92 insertions, 0 deletions
diff --git a/patches/patch-set.1.7.21/0005-Capture-teletext-subtitle-pages-from-PMT.patch b/patches/patch-set.1.7.21/0005-Capture-teletext-subtitle-pages-from-PMT.patch
new file mode 100644
index 0000000..1600431
--- /dev/null
+++ b/patches/patch-set.1.7.21/0005-Capture-teletext-subtitle-pages-from-PMT.patch
@@ -0,0 +1,92 @@
+From 9960c81bed0689a397f8a3b9e3de91a3f75e5237 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 | 24 ++++++++++++++++++++++++
+ remux.h | 5 +++++
+ 2 files changed, 29 insertions(+), 0 deletions(-)
+
+diff --git a/remux.c b/remux.c
+index adec265..4f9950f 100644
+--- a/remux.c
++++ b/remux.c
+@@ -439,6 +439,7 @@ void cPatPmtParser::Reset(void)
+ pmtPid = -1;
+ vpid = vtype = 0;
+ ppid = 0;
++ tpid = 0;
+ }
+
+ void cPatPmtParser::ParsePat(const uchar *Data, int Length)
+@@ -524,6 +525,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;
+@@ -628,6 +630,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);
+diff --git a/remux.h b/remux.h
+index 80d6afd..5f15dfe 100644
+--- a/remux.h
++++ b/remux.h
+@@ -220,6 +220,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];
+@@ -266,6 +267,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; }
+@@ -280,6 +284,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.7.6.3
+