diff options
Diffstat (limited to 'VDR-1.3.5.patch')
-rw-r--r-- | VDR-1.3.5.patch | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/VDR-1.3.5.patch b/VDR-1.3.5.patch new file mode 100644 index 0000000..8a1a32c --- /dev/null +++ b/VDR-1.3.5.patch @@ -0,0 +1,251 @@ +diff -upr ./DIST/Makefile ./Makefile +--- ./DIST/Makefile 2004-01-18 15:16:53.000000000 +0100 ++++ ./Makefile 2004-03-01 05:19:59.000000000 +0100 +@@ -37,7 +37,8 @@ OBJS = audio.o channels.o ci.o config.o + dvbplayer.o dvbspu.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o\ + lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o rcu.o\ + receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o sources.o\ +- spu.o status.o svdrp.o thread.o timers.o tools.o transfer.o vdr.o videodir.o ++ spu.o status.o svdrp.o thread.o timers.o tools.o transfer.o vdr.o videodir.o\ ++ vdrttxtsubshooks.o + + FIXFONT_ISO8859_1 = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1 + OSDFONT_ISO8859_1 = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1 +diff -upr ./DIST/dvbplayer.c ./dvbplayer.c +--- ./DIST/dvbplayer.c 2003-10-18 13:31:54.000000000 +0200 ++++ ./dvbplayer.c 2004-03-01 05:18:15.000000000 +0100 +@@ -14,6 +14,7 @@ + #include "ringbuffer.h" + #include "thread.h" + #include "tools.h" ++#include "vdrttxtsubshooks.h" + + // --- cBackTrace ---------------------------------------------------------- + +@@ -323,6 +324,12 @@ void cDvbPlayer::StripAudioPackets(uchar + int l = b[i + 4] * 256 + b[i + 5] + 6; + switch (c) { + case 0xBD: // dolby ++#ifdef VDRTTXTSUBSHOOKS ++ if (b[i + 8] == 0x24 && b[i + 45] >= 0x10 && b[i + 45] < 0x20) { ++ break; // run these through the ring buffer to get somewhat correct ++ // timing for the subtitles ++ } else ++#endif + if (Except) + PlayAudio(&b[i], l); + // continue with deleting the data - otherwise it disturbs DVB replay +@@ -349,6 +356,40 @@ void cDvbPlayer::StripAudioPackets(uchar + } + } + ++#ifdef VDRTTXTSUBSHOOKS ++static void StripTtxtPackets(uchar *b, int Length) ++{ ++ for (int i = 0; i < Length - 6; i++) { ++ if (b[i] == 0x00 && b[i + 1] == 0x00 && b[i + 2] == 0x01) { ++ uchar c = b[i + 3]; ++ int l = b[i + 4] * 256 + b[i + 5] + 6; ++ switch (c) { ++ case 0xBD: // dolby ++ { ++ if (b[i + 8] == 0x24 && b[i + 45] >= 0x10 && b[i + 45] < 0x20) { ++ // EBU Teletext data, ETSI EN 300 472 ++ cVDRTtxtsubsHookListener::Hook()->PlayerTeletextData(&b[i], l); ++ } ++ // continue with deleting the data - otherwise it disturbs DVB replay ++ int n = l; ++ for (int j = i; j < Length && n--; j++) ++ b[j] = 0x00; ++ break; ++ } ++ default: ++ break; ++ } ++ if (l) ++ i += l - 1; // the loop increments, too! ++ } ++ /*XXX ++ else ++ esyslog("ERROR: broken packet header"); ++ XXX*/ ++ } ++} ++#endif ++ + bool cDvbPlayer::NextFile(uchar FileNumber, int FileOffset) + { + if (FileNumber > 0) +@@ -522,6 +563,11 @@ void cDvbPlayer::Action(void) + StripAudioPackets(p, pc, AudioTrack); + } + } ++#ifdef VDRTTXTSUBSHOOKS ++ // pick out the teletext packets here ++ if(p) ++ StripTtxtPackets((uchar *) p, pc); ++#endif + if (p) { + int w = PlayVideo(p, pc); + if (w > 0) { +diff -upr ./DIST/menu.c ./menu.c +--- ./DIST/menu.c 2004-02-29 15:11:16.000000000 +0100 ++++ ./menu.c 2004-03-01 05:18:15.000000000 +0100 +@@ -3104,8 +3104,18 @@ cRecordControl::cRecordControl(cDevice * + isyslog("record %s", fileName); + if (MakeDirs(fileName, true)) { + const cChannel *ch = timer->Channel(); ++#ifdef VDRTTXTSUBSHOOKS ++ cTtxtSubsRecorderBase *subsRecorder = cVDRTtxtsubsHookListener::Hook() ++ ->NewTtxtSubsRecorder(device, ch); ++ recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2(), subsRecorder); ++#else + recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2()); ++#endif + if (device->AttachReceiver(recorder)) { ++#ifdef VDRTTXTSUBSHOOKS ++ if(subsRecorder) ++ subsRecorder->DeviceAttach(); ++#endif + Recording.WriteSummary(); + cStatus::MsgRecording(device, Recording.Name()); + if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo() +diff -upr ./DIST/menu.h ./menu.h +--- ./DIST/menu.h 2004-02-15 15:11:28.000000000 +0100 ++++ ./menu.h 2004-03-01 05:18:15.000000000 +0100 +@@ -15,6 +15,7 @@ + #include "epg.h" + #include "osd.h" + #include "dvbplayer.h" ++#include "vdrttxtsubshooks.h" + #include "recorder.h" + #include "recording.h" + +diff -upr ./DIST/osd.c ./osd.c +--- ./DIST/osd.c 2003-06-04 18:13:00.000000000 +0200 ++++ ./osd.c 2004-03-01 05:18:15.000000000 +0100 +@@ -12,6 +12,7 @@ + #include "device.h" + #include "i18n.h" + #include "status.h" ++#include "vdrttxtsubshooks.h" + + // --- cOsd ------------------------------------------------------------------ + +@@ -62,6 +63,10 @@ void cOsd::SetColor(eDvbColor colorFg, e + + cOsdBase *cOsd::OpenRaw(int x, int y) + { ++#ifdef VDRTTXTSUBSHOOKS ++ // OSD_HOOK_2 - Information to Checkpatch.sh ++ cVDRTtxtsubsHookListener::Hook()->HideOSD(); ++#endif + #ifdef DEBUG_OSD + return NULL; + #else +@@ -138,6 +143,9 @@ void cOsd::Close(void) + delete osd; + osd = NULL; + #endif ++#ifdef VDRTTXTSUBSHOOKS ++ cVDRTtxtsubsHookListener::Hook()->ShowOSD(); ++#endif + } + + void cOsd::Clear(void) +diff -upr ./DIST/recorder.c ./recorder.c +--- ./DIST/recorder.c 2003-10-18 13:35:02.000000000 +0200 ++++ ./recorder.c 2004-03-01 05:18:15.000000000 +0100 +@@ -10,6 +10,8 @@ + #include <stdarg.h> + #include <stdio.h> + #include <unistd.h> ++#include <stdint.h> ++#include "vdrttxtsubshooks.h" + #include "recorder.h" + + // The size of the array used to buffer video data: +@@ -23,7 +25,11 @@ + #define MINFREEDISKSPACE (512) // MB + #define DISKCHECKINTERVAL 100 // seconds + ++#ifdef VDRTTXTSUBSHOOKS ++cRecorder::cRecorder(const char *FileName, int Ca, int Priority, int VPid, int APid1, int APid2, int DPid1, int DPid2, cTtxtSubsRecorderBase *tsr) ++#else + cRecorder::cRecorder(const char *FileName, int Ca, int Priority, int VPid, int APid1, int APid2, int DPid1, int DPid2) ++#endif + :cReceiver(Ca, Priority, 5, VPid, APid1, APid2, DPid1, DPid2) + ,cThread("recording") + { +@@ -35,6 +41,9 @@ cRecorder::cRecorder(const char *FileNam + fileSize = 0; + active = false; + lastDiskSpaceCheck = time(NULL); ++#ifdef VDRTTXTSUBSHOOKS ++ ttxtSubsRecorder = tsr; ++#endif + + // Make sure the disk is up and running: + +@@ -56,6 +65,10 @@ cRecorder::cRecorder(const char *FileNam + cRecorder::~cRecorder() + { + Detach(); ++#ifdef VDRTTXTSUBSHOOKS ++ if(ttxtSubsRecorder) ++ delete ttxtSubsRecorder; ++#endif + delete index; + delete fileName; + delete remux; +@@ -128,6 +141,19 @@ void cRecorder::Action(void) + break; + } + fileSize += Result; ++#ifdef VDRTTXTSUBSHOOKS ++ // not sure if the pictureType test is needed, but it seems we can get ++ // incomplete pes packets from remux if we are not getting pictures? ++ if (ttxtSubsRecorder && pictureType != NO_PICTURE) { ++ uint8_t *subsp; ++ size_t len; ++ if(ttxtSubsRecorder->GetPacket(&subsp, &len)) { ++ safe_write(recordFile, subsp, len); ++ fileSize += len; ++ // fprintf(stderr, "cRecorder::Action: Wrote ttxtsubs data len %d\n", len); // XXX ++ } ++ } ++#endif + } + else + break; +diff -upr ./DIST/recorder.h ./recorder.h +--- ./DIST/recorder.h 2002-06-08 11:35:03.000000000 +0200 ++++ ./recorder.h 2004-03-01 05:18:15.000000000 +0100 +@@ -15,6 +15,7 @@ + #include "remux.h" + #include "ringbuffer.h" + #include "thread.h" ++#include "vdrttxtsubshooks.h" + + class cRecorder : public cReceiver, cThread { + private: +@@ -29,12 +30,19 @@ private: + time_t lastDiskSpaceCheck; + bool RunningLowOnDiskSpace(void); + bool NextFile(void); ++#ifdef VDRTTXTSUBSHOOKS ++ cTtxtSubsRecorderBase *ttxtSubsRecorder; ++#endif + protected: + virtual void Activate(bool On); + virtual void Receive(uchar *Data, int Length); + virtual void Action(void); + public: ++#ifdef VDRTTXTSUBSHOOKS ++ cRecorder(const char *FileName, int Ca, int Priority, int VPid, int APid1, int APid2, int DPid1, int DPid2, cTtxtSubsRecorderBase *tsr); ++#else + cRecorder(const char *FileName, int Ca, int Priority, int VPid, int APid1, int APid2, int DPid1, int DPid2); ++#endif + // Creates a new recorder that requires conditional access Ca, has + // the given Priority and will record the given PIDs into the file FileName. + virtual ~cRecorder(); |