diff options
author | etobi <git@e-tobi.net> | 2010-02-13 00:28:21 +0100 |
---|---|---|
committer | etobi <git@e-tobi.net> | 2010-03-06 12:06:30 +0100 |
commit | 178be33fc9d09033b0e10bebd2f7234cff555c02 (patch) | |
tree | 2d2ebcb9862f7fcdb9ef5a55d0de2b70d531c813 /device.c | |
parent | 7e060559397bb5a7e8d31e32dd49a4ec0d0cba2c (diff) | |
download | vdr-patches-patches/ttxtsubs-vdr-1.7.12.tar.gz vdr-patches-patches/ttxtsubs-vdr-1.7.12.tar.bz2 |
Ttxtsubs plugin hookpatches/ttxtsubs-vdr-1.7.12
Diffstat (limited to 'device.c')
-rw-r--r-- | device.c | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -18,6 +18,7 @@ #include "receiver.h" #include "status.h" #include "transfer.h" +#include "vdrttxtsubshooks.h" // --- cLiveSubtitle --------------------------------------------------------- @@ -1190,6 +1191,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: @@ -1349,6 +1357,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); @@ -1394,6 +1403,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()) { |