summaryrefslogtreecommitdiff
path: root/device.c
diff options
context:
space:
mode:
authoretobi <git@e-tobi.net>2010-02-13 00:28:21 +0100
committerThomas Günther <tom@toms-cafe.de>2010-06-07 22:14:20 +0200
commit4cf2bdca0d81dc419315657cea0087bd905e078f (patch)
treebb56c7c58cd288924d03bfd2265702dde30ff799 /device.c
parente4224634d1f8a3a07cf5f2c3f6e43333f0c376c7 (diff)
downloadvdr-patches-patches/ttxtsubs-vdr-1.7.15.tar.gz
vdr-patches-patches/ttxtsubs-vdr-1.7.15.tar.bz2
Ttxtsubs plugin hookpatches/ttxtsubs-vdr-1.7.15
Diffstat (limited to 'device.c')
-rw-r--r--device.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/device.c b/device.c
index 681049b..4dbd920 100644
--- a/device.c
+++ b/device.c
@@ -18,6 +18,7 @@
#include "receiver.h"
#include "status.h"
#include "transfer.h"
+#include "vdrttxtsubshooks.h"
// --- cLiveSubtitle ---------------------------------------------------------
@@ -1223,6 +1224,13 @@ int cDevice::PlayPesPacket(const uchar *Data, int Length, bool VideoOnly)
}
break;
case 0xBD: { // private stream 1
+ // EBU Teletext data, ETSI EN 300 472
+ // if PES data header length = 24 and data_identifier = 0x10..0x1F (EBU Data)
+ if (Data[8] == 0x24 && Data[45] >= 0x10 && Data[45] < 0x20) {
+ cVDRTtxtsubsHookListener::Hook()->PlayerTeletextData((uint8_t*)Data, Length);
+ break;
+ }
+
int PayloadOffset = Data[8] + 9;
// Compatibility mode for old subtitles plugin:
@@ -1382,6 +1390,7 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
tsToPesVideo.Reset();
tsToPesAudio.Reset();
tsToPesSubtitle.Reset();
+ tsToPesTeletext.Reset();
}
else if (Length < TS_SIZE) {
esyslog("ERROR: skipped %d bytes of TS fragment", Length);
@@ -1427,6 +1436,17 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
if (!VideoOnly || HasIBPTrickSpeed())
PlayTsSubtitle(Data, TS_SIZE);
}
+ else if (Pid == patPmtParser.Tpid()) {
+ if (!VideoOnly || HasIBPTrickSpeed()) {
+ int l;
+ tsToPesTeletext.PutTs(Data, Length);
+ if (const uchar *p = tsToPesTeletext.GetPes(l)) {
+ if ((l > 45) && (p[0] == 0x00) && (p[1] == 0x00) && (p[2] == 0x01) && (p[3] == 0xbd) && (p[8] == 0x24) && (p[45] >= 0x10) && (p[45] < 0x20))
+ cVDRTtxtsubsHookListener::Hook()->PlayerTeletextData((uchar *)p, l, false, patPmtParser.TeletextSubtitlePages(), patPmtParser.TotalTeletextSubtitlePages());
+ tsToPesTeletext.Reset();
+ }
+ }
+ }
}
}
else if (Pid == patPmtParser.Ppid()) {