#!/bin/sh /usr/share/dpatch/dpatch-run ## stuttering patch ## ## downloaded from http://vdrportal.de/board/thread.php?postid=289928#post289928 ## original filename vdr-1.3.22-stuttering.diff ## ## Thomas Günther : ## - Added STUTTERINGVERSION to solve compile error in femon-0.9.0 ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: This patch is needed for the analogtv plugin. @DPATCH@ Only in vdr-1.3.22.orig: channels.c.orig diff -ru vdr-1.3.22.orig/channels.h vdr-1.3.22/channels.h --- vdr-1.3.22.orig/channels.h 2005-03-31 21:54:42.000000000 +0200 +++ vdr-1.3.22/channels.h 2005-03-31 21:38:38.000000000 +0200 @@ -15,6 +15,8 @@ #include "thread.h" #include "tools.h" +#define STUTTERINGVERSION 1 + #define ISTRANSPONDER(f1, f2) (abs((f1) - (f2)) < 4) //XXX #define CHANNELMOD_NONE 0x00 @@ -151,6 +153,7 @@ const int *Apids(void) const { return apids; } const int *Dpids(void) const { return dpids; } const int *Spids(void) const { return spids; } + const int *Caids(void) const { return caids; } int Apid(int i) const { return (0 <= i && i < MAXAPIDS) ? apids[i] : 0; } int Dpid(int i) const { return (0 <= i && i < MAXDPIDS) ? dpids[i] : 0; } int Spid(int i) const { return (0 <= i && i < MAXSPIDS) ? spids[i] : 0; } Only in vdr-1.3.22.orig: channels.h.orig Only in vdr-1.3.22.orig: config.c.orig Only in vdr-1.3.22.orig: config.h.orig diff -ru vdr-1.3.22.orig/device.c vdr-1.3.22/device.c --- vdr-1.3.22.orig/device.c 2005-03-31 21:54:42.000000000 +0200 +++ vdr-1.3.22/device.c 2005-03-31 21:38:38.000000000 +0200 @@ -716,7 +716,7 @@ cStatus::MsgChannelSwitch(this, 0); // only report status if we are actually going to switch the channel if (CaDevice->SetChannel(Channel, false) == scrOk) // calling SetChannel() directly, not SwitchChannel()! - cControl::Launch(new cTransferControl(CaDevice, Channel->Vpid(), Channel->Apids(), Channel->Dpids(), Channel->Spids())); + cControl::Launch(new cTransferControl(CaDevice, Channel->Vpid(), Channel->Apids(), Channel->Dpids(), Channel->Spids(), Channel->Caids())); else Result = scrNoTransfer; } Only in vdr-1.3.22.orig: device.c.orig Only in vdr-1.3.22.orig: device.h.orig diff -ru vdr-1.3.22.orig/dvbdevice.c vdr-1.3.22/dvbdevice.c --- vdr-1.3.22.orig/dvbdevice.c 2005-03-31 21:54:42.000000000 +0200 +++ vdr-1.3.22/dvbdevice.c 2005-03-31 21:38:38.000000000 +0200 @@ -866,7 +866,7 @@ CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true)); } else if (StartTransferMode) - cControl::Launch(new cTransferControl(this, Channel->Vpid(), Channel->Apids(), Channel->Dpids(), Channel->Spids())); + cControl::Launch(new cTransferControl(this, Channel->Vpid(), Channel->Apids(), Channel->Dpids(), Channel->Spids(), Channel->Caids() )); return true; } Only in vdr-1.3.22.orig: dvbdevice.c.orig Only in vdr-1.3.22.orig: i18n.c.orig Only in vdr-1.3.22.orig: menu.c.orig Only in vdr-1.3.22.orig: menuitems.c.orig Only in vdr-1.3.22.orig: tools.c.orig diff -ru vdr-1.3.22.orig/transfer.c vdr-1.3.22/transfer.c --- vdr-1.3.22.orig/transfer.c 2005-03-31 21:54:42.000000000 +0200 +++ vdr-1.3.22/transfer.c 2005-03-31 21:59:32.000000000 +0200 @@ -14,13 +14,15 @@ // --- cTransfer ------------------------------------------------------------- -cTransfer::cTransfer(int VPid, const int *APids, const int *DPids, const int *SPids) +cTransfer::cTransfer(int VPid, const int *APids, const int *DPids, const int *SPids, const int *Caids) :cReceiver(0, -1, VPid, APids, Setup.UseDolbyDigital ? DPids : NULL, SPids) ,cThread("transfer") { ringBuffer = new cRingBufferLinear(TRANSFERBUFSIZE, TS_SIZE * 2, true, "Transfer"); remux = new cRemux(VPid, APids, Setup.UseDolbyDigital ? DPids : NULL, SPids); - needsBufferReserve = Setup.UseDolbyDigital && VPid != 0 && DPids && DPids[0] != 0; + // analogue TV with caid = 0xA0 needs bufferReserve of 1024 kilobyte to run + analogtv_channel = Caids[0] == 0x00A0; + needsBufferReserve = ( Setup.UseDolbyDigital && VPid != 0 && DPids && DPids[0] != 0 ) || analogtv_channel ; active = false; } @@ -69,6 +71,8 @@ #ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3 bool GotBufferReserve = false; int RequiredBufferReserve = KILOBYTE(DvbCardWith4MBofSDRAM ? 288 : 576); + if ( analogtv_channel == true ) + RequiredBufferReserve = KILOBYTE(1024); #endif active = true; while (active) { @@ -152,8 +156,8 @@ cDevice *cTransferControl::receiverDevice = NULL; -cTransferControl::cTransferControl(cDevice *ReceiverDevice, int VPid, const int *APids, const int *DPids, const int *SPids) -:cControl(transfer = new cTransfer(VPid, APids, DPids, SPids), true) +cTransferControl::cTransferControl(cDevice *ReceiverDevice, int VPid, const int *APids, const int *DPids, const int *SPids, const int *Caids) +:cControl(transfer = new cTransfer(VPid, APids, DPids, SPids, Caids), true) { ReceiverDevice->AttachReceiver(transfer); receiverDevice = ReceiverDevice; diff -ru vdr-1.3.22.orig/transfer.h vdr-1.3.22/transfer.h --- vdr-1.3.22.orig/transfer.h 2005-03-31 21:54:42.000000000 +0200 +++ vdr-1.3.22/transfer.h 2005-03-31 21:42:04.000000000 +0200 @@ -20,6 +20,7 @@ private: cRingBufferLinear *ringBuffer; cRemux *remux; + bool analogtv_channel; bool needsBufferReserve; bool active; protected: @@ -27,7 +28,7 @@ virtual void Receive(uchar *Data, int Length); virtual void Action(void); public: - cTransfer(int VPid, const int *APids, const int *DPids, const int *SPids); + cTransfer(int VPid, const int *APids, const int *DPids, const int *SPids, const int *Caids); virtual ~cTransfer(); }; @@ -36,7 +37,7 @@ cTransfer *transfer; static cDevice *receiverDevice; public: - cTransferControl(cDevice *ReceiverDevice, int VPid, const int *APids, const int *DPids, const int *SPids); + cTransferControl(cDevice *ReceiverDevice, int VPid, const int *APids, const int *DPids, const int *SPids, const int *Caids); ~cTransferControl(); virtual void Hide(void) {} static cDevice *ReceiverDevice(void) { return receiverDevice; } Only in vdr-1.3.22.orig: vdr.c.orig