summaryrefslogtreecommitdiff
path: root/device.c
diff options
context:
space:
mode:
authoretobi <git@e-tobi.net>2010-02-13 00:28:21 +0100
committeretobi <git@e-tobi.net>2013-03-10 13:52:15 +0100
commit321f443bfd3273602e62ecc5f008a7f2a78bb17d (patch)
tree20f0bd5ebf4907291365fbf033b8171cfac13b5e /device.c
parent0460f10ead868f796e642adf6a3bdc1b6d8ca190 (diff)
downloadvdr-patches-patches/ttxtsubs-vdr-1.7.39.tar.gz
vdr-patches-patches/ttxtsubs-vdr-1.7.39.tar.bz2
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 ca897b0..f22c6eb 100644
--- a/device.c
+++ b/device.c
@@ -18,6 +18,7 @@
#include "receiver.h"
#include "status.h"
#include "transfer.h"
+#include "vdrttxtsubshooks.h"
// --- cLiveSubtitle ---------------------------------------------------------
@@ -1313,6 +1314,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:
@@ -1472,6 +1480,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);
@@ -1517,6 +1526,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()) {