diff --git a/packages/3rdparty/multimedia/vdr/meta b/packages/3rdparty/multimedia/vdr/meta index 07087f2aa0..3aa2b315ae 100644 --- a/packages/3rdparty/multimedia/vdr/meta +++ b/packages/3rdparty/multimedia/vdr/meta @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="vdr" -PKG_VERSION="1.7.23" +PKG_VERSION="1.7.22" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/3rdparty/multimedia/vdr/patches/vdr-1.7.23-disable_ca_updates.patch b/packages/3rdparty/multimedia/vdr/patches/vdr-1.7.22-disable_ca_updates.patch similarity index 100% rename from packages/3rdparty/multimedia/vdr/patches/vdr-1.7.23-disable_ca_updates.patch rename to packages/3rdparty/multimedia/vdr/patches/vdr-1.7.22-disable_ca_updates.patch diff --git a/packages/3rdparty/multimedia/vdr/patches/vdr-1.7.23-disable_eitscan.patch b/packages/3rdparty/multimedia/vdr/patches/vdr-1.7.22-disable_eitscan.patch similarity index 100% rename from packages/3rdparty/multimedia/vdr/patches/vdr-1.7.23-disable_eitscan.patch rename to packages/3rdparty/multimedia/vdr/patches/vdr-1.7.22-disable_eitscan.patch diff --git a/packages/3rdparty/multimedia/vdr/patches/vdr-1.7.23-dynamite-subdevice.patch b/packages/3rdparty/multimedia/vdr/patches/vdr-1.7.22-dynamite-subdevice.patch similarity index 85% rename from packages/3rdparty/multimedia/vdr/patches/vdr-1.7.23-dynamite-subdevice.patch rename to packages/3rdparty/multimedia/vdr/patches/vdr-1.7.22-dynamite-subdevice.patch index 0564891454..b2c83c95dc 100644 --- a/packages/3rdparty/multimedia/vdr/patches/vdr-1.7.23-dynamite-subdevice.patch +++ b/packages/3rdparty/multimedia/vdr/patches/vdr-1.7.22-dynamite-subdevice.patch @@ -1,7 +1,8 @@ -diff -Naur vdr-1.7.23/ci.h vdr-1.7.23.patch/ci.h ---- vdr-1.7.23/ci.h 2011-12-04 14:38:17.000000000 +0100 -+++ vdr-1.7.23.patch/ci.h 2012-01-15 20:43:01.098635790 +0100 -@@ -115,6 +115,8 @@ +diff --git a/ci.h b/ci.h +index 71bbdf9..70303d1 100644 +--- a/ci.h ++++ b/ci.h +@@ -115,6 +115,8 @@ public: ///< The derived class must call Cancel(3) in its destructor. virtual bool Ready(void); ///< Returns 'true' if all present CAMs in this adapter are ready. @@ -10,10 +11,11 @@ diff -Naur vdr-1.7.23/ci.h vdr-1.7.23.patch/ci.h }; class cTPDU; -diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c ---- vdr-1.7.23/device.c 2011-10-16 16:36:43.000000000 +0200 -+++ vdr-1.7.23.patch/device.c 2012-01-15 20:43:01.099635807 +0100 -@@ -72,12 +72,22 @@ +diff --git a/device.c b/device.c +index 0bab66c..60382dd 100644 +--- a/device.c ++++ b/device.c +@@ -72,12 +72,22 @@ cDevice *cDevice::device[MAXDEVICES] = { NULL }; cDevice *cDevice::primaryDevice = NULL; cDevice *cDevice::avoidDevice = NULL; cList cDevice::deviceHooks; @@ -41,7 +43,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c SetDescription("receiver on device %d", CardIndex() + 1); -@@ -110,10 +120,14 @@ +@@ -110,10 +120,14 @@ cDevice::cDevice(void) for (int i = 0; i < MAXRECEIVERS; i++) receiver[i] = NULL; @@ -59,7 +61,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c } cDevice::~cDevice() -@@ -122,6 +136,29 @@ +@@ -122,6 +136,29 @@ cDevice::~cDevice() DetachAllReceivers(); delete liveSubtitle; delete dvbSubtitleConverter; @@ -89,7 +91,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c } bool cDevice::WaitForAllDevicesReady(int Timeout) -@@ -160,6 +197,8 @@ +@@ -160,6 +197,8 @@ int cDevice::NextCardIndex(int n) int cDevice::DeviceNumber(void) const { @@ -98,7 +100,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c for (int i = 0; i < numDevices; i++) { if (device[i] == this) return i; -@@ -330,6 +369,8 @@ +@@ -330,6 +369,8 @@ bool cDevice::HasCi(void) void cDevice::SetCamSlot(cCamSlot *CamSlot) { @@ -107,7 +109,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c camSlot = CamSlot; } -@@ -533,6 +574,10 @@ +@@ -533,6 +574,10 @@ bool cDevice::SetPid(cPidHandle *Handle, int Type, bool On) void cDevice::StartSectionHandler(void) { @@ -118,7 +120,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c if (!sectionHandler) { sectionHandler = new cSectionHandler(this); AttachFilter(eitFilter = new cEitFilter); -@@ -544,6 +589,10 @@ +@@ -544,6 +589,10 @@ void cDevice::StartSectionHandler(void) void cDevice::StopSectionHandler(void) { @@ -129,7 +131,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c if (sectionHandler) { delete nitFilter; delete sdtFilter; -@@ -570,12 +619,17 @@ +@@ -570,12 +619,17 @@ void cDevice::CloseFilter(int Handle) void cDevice::AttachFilter(cFilter *Filter) { @@ -147,7 +149,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c if (sectionHandler) sectionHandler->Detach(Filter); } -@@ -737,6 +791,7 @@ +@@ -737,6 +791,7 @@ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView) sectionHandler->SetStatus(false); sectionHandler->SetChannel(NULL); } @@ -155,7 +157,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c // Tell the camSlot about the channel switch and add all PIDs of this // channel to it, for possible later decryption: if (camSlot) -@@ -783,19 +838,27 @@ +@@ -783,19 +838,27 @@ void cDevice::ForceTransferMode(void) { if (!cTransferControl::ReceiverDevice()) { cChannel *Channel = Channels.GetByNumber(CurrentChannel()); @@ -184,7 +186,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c if (Seconds >= 0) occupiedTimeout = time(NULL) + min(Seconds, MAXOCCUPIEDTIMEOUT); } -@@ -1167,7 +1230,10 @@ +@@ -1167,7 +1230,10 @@ bool cDevice::Transferring(void) const bool cDevice::AttachPlayer(cPlayer *Player) { @@ -195,7 +197,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c if (player) Detach(player); DELETENULL(liveSubtitle); -@@ -1186,6 +1252,8 @@ +@@ -1186,6 +1252,8 @@ bool cDevice::AttachPlayer(cPlayer *Player) void cDevice::Detach(cPlayer *Player) { @@ -204,7 +206,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c if (Player && player == Player) { cPlayer *p = player; player = NULL; // avoids recursive calls to Detach() -@@ -1205,6 +1273,8 @@ +@@ -1205,6 +1273,8 @@ void cDevice::Detach(cPlayer *Player) void cDevice::StopReplay(void) { @@ -213,7 +215,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c if (player) { Detach(player); if (IsPrimaryDevice()) -@@ -1487,6 +1557,8 @@ +@@ -1487,6 +1557,8 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly) int cDevice::Priority(void) const { @@ -222,7 +224,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c int priority = IsPrimaryDevice() ? Setup.PrimaryLimit - 1 : DEFAULTPRIORITY; cMutexLock MutexLock(&mutexReceiver); for (int i = 0; i < MAXRECEIVERS; i++) { -@@ -1503,6 +1575,8 @@ +@@ -1503,6 +1575,8 @@ bool cDevice::Ready(void) bool cDevice::Receiving(bool CheckAny) const { @@ -231,7 +233,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c cMutexLock MutexLock(&mutexReceiver); for (int i = 0; i < MAXRECEIVERS; i++) { if (receiver[i] && (CheckAny || receiver[i]->priority >= 0)) // cReceiver with priority < 0 doesn't count -@@ -1583,10 +1657,13 @@ +@@ -1583,10 +1657,13 @@ bool cDevice::GetTSPacket(uchar *&Data) bool cDevice::AttachReceiver(cReceiver *Receiver) { @@ -245,7 +247,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c // activate the following line if you need it - actually the driver should be fixed! //#define WAIT_FOR_TUNER_LOCK #ifdef WAIT_FOR_TUNER_LOCK -@@ -1625,6 +1702,8 @@ +@@ -1625,6 +1702,8 @@ bool cDevice::AttachReceiver(cReceiver *Receiver) void cDevice::Detach(cReceiver *Receiver) { @@ -254,7 +256,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c if (!Receiver || Receiver->device != this) return; bool receiversLeft = false; -@@ -1650,6 +1729,8 @@ +@@ -1650,6 +1729,8 @@ void cDevice::Detach(cReceiver *Receiver) void cDevice::DetachAll(int Pid) { @@ -263,7 +265,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c if (Pid) { cMutexLock MutexLock(&mutexReceiver); for (int i = 0; i < MAXRECEIVERS; i++) { -@@ -1662,6 +1743,8 @@ +@@ -1662,6 +1743,8 @@ void cDevice::DetachAll(int Pid) void cDevice::DetachAllReceivers(void) { @@ -272,7 +274,7 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c cMutexLock MutexLock(&mutexReceiver); for (int i = 0; i < MAXRECEIVERS; i++) Detach(receiver[i]); -@@ -1733,3 +1816,25 @@ +@@ -1733,3 +1816,25 @@ uchar *cTSBuffer::Get(void) } return NULL; } @@ -298,10 +300,11 @@ diff -Naur vdr-1.7.23/device.c vdr-1.7.23.patch/device.c +{ + DynamicDeviceProbes.Del(this, false); +} -diff -Naur vdr-1.7.23/device.h vdr-1.7.23.patch/device.h ---- vdr-1.7.23/device.h 2011-12-04 14:38:17.000000000 +0100 -+++ vdr-1.7.23.patch/device.h 2012-01-15 20:43:01.100635824 +0100 -@@ -164,7 +164,6 @@ +diff --git a/device.h b/device.h +index e2ff812..1db0d9d 100644 +--- a/device.h ++++ b/device.h +@@ -164,7 +164,6 @@ private: static int nextCardIndex; int cardIndex; protected: @@ -309,7 +312,7 @@ diff -Naur vdr-1.7.23/device.h vdr-1.7.23.patch/device.h virtual ~cDevice(); virtual bool Ready(void); ///< Returns true if this device is ready. Devices with conditional -@@ -191,9 +190,6 @@ +@@ -191,9 +190,6 @@ protected: ///< A derived class must call the MakePrimaryDevice() function of its ///< base class. public: @@ -319,7 +322,7 @@ diff -Naur vdr-1.7.23/device.h vdr-1.7.23.patch/device.h int DeviceNumber(void) const; ///< Returns the number of this device (0 ... numDevices). virtual bool HasDecoder(void) const; -@@ -397,9 +393,6 @@ +@@ -397,9 +393,6 @@ public: ///< Returns true if this device has a Common Interface. void SetCamSlot(cCamSlot *CamSlot); ///< Sets the given CamSlot to be used with this device. @@ -329,7 +332,7 @@ diff -Naur vdr-1.7.23/device.h vdr-1.7.23.patch/device.h // Image Grab facilities -@@ -555,9 +548,6 @@ +@@ -555,9 +548,6 @@ private: cTsToPes tsToPesSubtitle; bool isPlayingVideo; protected: @@ -339,7 +342,7 @@ diff -Naur vdr-1.7.23/device.h vdr-1.7.23.patch/device.h virtual bool CanReplay(void) const; ///< Returns true if this device can currently start a replay session. virtual bool SetPlayMode(ePlayMode PlayMode); -@@ -743,6 +733,38 @@ +@@ -743,6 +733,38 @@ public: ///< Detaches all receivers from this device for this pid. virtual void DetachAllReceivers(void); ///< Detaches all receivers from this device. @@ -378,7 +381,7 @@ diff -Naur vdr-1.7.23/device.h vdr-1.7.23.patch/device.h }; /// Derived cDevice classes that can receive channels will have to provide -@@ -766,4 +788,47 @@ +@@ -766,4 +788,47 @@ public: uchar *Get(void); }; @@ -426,9 +429,10 @@ diff -Naur vdr-1.7.23/device.h vdr-1.7.23.patch/device.h +extern cList DynamicDeviceProbes; + #endif //__DEVICE_H -diff -Naur vdr-1.7.23/dvbci.c vdr-1.7.23.patch/dvbci.c ---- vdr-1.7.23/dvbci.c 2007-01-04 13:49:10.000000000 +0100 -+++ vdr-1.7.23.patch/dvbci.c 2012-01-15 20:43:01.101635842 +0100 +diff --git a/dvbci.c b/dvbci.c +index 5289bbd..fea3a83 100644 +--- a/dvbci.c ++++ b/dvbci.c @@ -10,15 +10,18 @@ #include "dvbci.h" #include @@ -450,7 +454,7 @@ diff -Naur vdr-1.7.23/dvbci.c vdr-1.7.23.patch/dvbci.c ca_caps_t Caps; if (ioctl(fd, CA_GET_CAP, &Caps) == 0) { if ((Caps.slot_type & CA_CI_LINK) != 0) { -@@ -41,10 +44,44 @@ +@@ -41,10 +44,44 @@ cDvbCiAdapter::cDvbCiAdapter(cDevice *Device, int Fd) cDvbCiAdapter::~cDvbCiAdapter() { Cancel(3); @@ -495,7 +499,7 @@ diff -Naur vdr-1.7.23/dvbci.c vdr-1.7.23.patch/dvbci.c if (Buffer && MaxLength > 0) { struct pollfd pfd[1]; pfd[0].fd = fd; -@@ -61,6 +98,8 @@ +@@ -61,6 +98,8 @@ int cDvbCiAdapter::Read(uint8_t *Buffer, int MaxLength) void cDvbCiAdapter::Write(const uint8_t *Buffer, int Length) { @@ -504,7 +508,7 @@ diff -Naur vdr-1.7.23/dvbci.c vdr-1.7.23.patch/dvbci.c if (Buffer && Length > 0) { if (safe_write(fd, Buffer, Length) != Length) esyslog("ERROR: can't write to CI adapter on device %d: %m", device->DeviceNumber()); -@@ -69,6 +108,8 @@ +@@ -69,6 +108,8 @@ void cDvbCiAdapter::Write(const uint8_t *Buffer, int Length) bool cDvbCiAdapter::Reset(int Slot) { @@ -513,7 +517,7 @@ diff -Naur vdr-1.7.23/dvbci.c vdr-1.7.23.patch/dvbci.c if (ioctl(fd, CA_RESET, 1 << Slot) != -1) return true; else -@@ -78,6 +119,8 @@ +@@ -78,6 +119,8 @@ bool cDvbCiAdapter::Reset(int Slot) eModuleStatus cDvbCiAdapter::ModuleStatus(int Slot) { @@ -522,7 +526,7 @@ diff -Naur vdr-1.7.23/dvbci.c vdr-1.7.23.patch/dvbci.c ca_slot_info_t sinfo; sinfo.num = Slot; if (ioctl(fd, CA_GET_SLOT_INFO, &sinfo) != -1) { -@@ -99,10 +142,10 @@ +@@ -99,10 +142,10 @@ bool cDvbCiAdapter::Assign(cDevice *Device, bool Query) return true; } @@ -535,10 +539,11 @@ diff -Naur vdr-1.7.23/dvbci.c vdr-1.7.23.patch/dvbci.c + return new cDvbCiAdapter(Device, Fd, Adapter, Frontend); return NULL; } -diff -Naur vdr-1.7.23/dvbci.h vdr-1.7.23.patch/dvbci.h ---- vdr-1.7.23/dvbci.h 2006-11-26 12:19:42.000000000 +0100 -+++ vdr-1.7.23.patch/dvbci.h 2012-01-15 20:43:01.101635842 +0100 -@@ -16,16 +16,24 @@ +diff --git a/dvbci.h b/dvbci.h +index adbe40d..6d117b2 100644 +--- a/dvbci.h ++++ b/dvbci.h +@@ -16,16 +16,24 @@ class cDvbCiAdapter : public cCiAdapter { private: cDevice *device; int fd; @@ -565,12 +570,13 @@ diff -Naur vdr-1.7.23/dvbci.h vdr-1.7.23.patch/dvbci.h }; #endif //__DVBCI_H -diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c ---- vdr-1.7.23/dvbdevice.c 2012-01-15 15:31:47.000000000 +0100 -+++ vdr-1.7.23.patch/dvbdevice.c 2012-01-15 20:43:56.452618963 +0100 -@@ -305,12 +305,16 @@ +diff --git a/dvbdevice.c b/dvbdevice.c +index 163fce3..fd3f212 100644 +--- a/dvbdevice.c ++++ b/dvbdevice.c +@@ -280,12 +280,16 @@ private: + bool bondedMaster; bool bondedMasterFailed; - bool SetFrontendType(const cChannel *Channel); cString GetBondingParams(const cChannel *Channel = NULL) const; - void ClearEventQueue(void) const; - bool GetFrontendStatus(fe_status_t &Status) const; @@ -585,9 +591,9 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c + bool OpenFrontend(void); + bool CloseFrontend(void); public: - cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend); + cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int Frontend, fe_delivery_system FrontendType); virtual ~cDvbTuner(); -@@ -323,8 +327,11 @@ +@@ -298,8 +302,11 @@ public: bool IsTunedTo(const cChannel *Channel) const; void SetChannel(const cChannel *Channel); bool Locked(int TimeoutMs = 0); @@ -601,15 +607,15 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c }; cMutex cDvbTuner::bondMutex; -@@ -346,6 +353,7 @@ +@@ -321,6 +328,7 @@ cDvbTuner::cDvbTuner(const cDvbDevice *Device, int Fd_Frontend, int Adapter, int bondedTuner = NULL; bondedMaster = false; bondedMasterFailed = false; + isIdle = false; + if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) + ResetToneAndVoltage(); // must explicitly turn on LNB power SetDescription("tuner on frontend %d/%d", adapter, frontend); - Start(); - } -@@ -363,6 +371,8 @@ +@@ -340,6 +348,8 @@ cDvbTuner::~cDvbTuner() ExecuteDiseqc(lastDiseqc, &Frequency); } */ @@ -618,7 +624,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c } bool cDvbTuner::Bond(cDvbTuner *Tuner) -@@ -516,8 +526,10 @@ +@@ -497,8 +507,10 @@ bool cDvbTuner::Locked(int TimeoutMs) return tunerStatus >= tsLocked; } @@ -630,7 +636,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c cPoller Poller(fd_frontend); if (Poller.Poll(TUNER_POLL_TIMEOUT)) { dvb_frontend_event Event; -@@ -526,7 +538,7 @@ +@@ -507,7 +519,7 @@ void cDvbTuner::ClearEventQueue(void) const } } @@ -639,7 +645,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c { ClearEventQueue(); while (1) { -@@ -541,7 +553,7 @@ +@@ -522,7 +534,7 @@ bool cDvbTuner::GetFrontendStatus(fe_status_t &Status) const //#define DEBUG_SIGNALSTRENGTH //#define DEBUG_SIGNALQUALITY @@ -648,7 +654,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c { ClearEventQueue(); uint16_t Signal; -@@ -568,7 +580,7 @@ +@@ -549,7 +561,7 @@ int cDvbTuner::GetSignalStrength(void) const #define LOCK_THRESHOLD 5 // indicates that all 5 FE_HAS_* flags are set @@ -657,7 +663,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c { fe_status_t Status; if (GetFrontendStatus(Status)) { -@@ -708,6 +720,8 @@ +@@ -664,6 +676,8 @@ void cDvbTuner::ResetToneAndVoltage(void) bool cDvbTuner::SetFrontend(void) { @@ -666,7 +672,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c #define MAXFRONTENDCMDS 16 #define SETCMD(c, d) { Frontend[CmdSeq.num].cmd = (c);\ Frontend[CmdSeq.num].u.data = (d);\ -@@ -853,9 +867,11 @@ +@@ -809,9 +823,11 @@ void cDvbTuner::Action(void) bool LostLock = false; fe_status_t Status = (fe_status_t)0; while (Running()) { @@ -681,7 +687,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c cMutexLock MutexLock(&mutex); switch (tunerStatus) { case tsIdle: -@@ -911,6 +927,42 @@ +@@ -867,6 +883,42 @@ void cDvbTuner::Action(void) } } @@ -724,7 +730,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c // --- cDvbSourceParam ------------------------------------------------------- class cDvbSourceParam : public cSourceParam { -@@ -996,7 +1048,8 @@ +@@ -948,7 +1000,8 @@ const char *DeliverySystems[] = { NULL }; @@ -734,7 +740,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c { adapter = Adapter; frontend = Frontend; -@@ -1015,7 +1068,7 @@ +@@ -967,7 +1020,7 @@ cDvbDevice::cDvbDevice(int Adapter, int Frontend) fd_ca = DvbOpen(DEV_DVB_CA, adapter, frontend, O_RDWR); if (fd_ca >= 0) @@ -743,7 +749,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c // The DVR device (will be opened and closed as needed): -@@ -1208,7 +1261,11 @@ +@@ -1123,7 +1176,11 @@ bool cDvbDevice::BondDevices(const char *Bondings) if (d >= 0) { int ErrorDevice = 0; if (cDevice *Device1 = cDevice::GetDevice(i)) { @@ -754,8 +760,8 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c + Device2 = Device2->SubDevice(); if (cDvbDevice *DvbDevice1 = dynamic_cast(Device1)) { if (cDvbDevice *DvbDevice2 = dynamic_cast(Device2)) { - if (!DvbDevice1->Bond(DvbDevice2)) -@@ -1242,7 +1299,10 @@ + if (!DvbDevice2->Bond(DvbDevice1)) +@@ -1157,7 +1214,10 @@ bool cDvbDevice::BondDevices(const char *Bondings) void cDvbDevice::UnBondDevices(void) { for (int i = 0; i < cDevice::NumDevices(); i++) { @@ -767,7 +773,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c d->UnBond(); } } -@@ -1296,6 +1356,26 @@ +@@ -1211,6 +1271,26 @@ bool cDvbDevice::BondingOk(const cChannel *Channel, bool ConsiderOccupied) const return true; } @@ -794,7 +800,7 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c bool cDvbDevice::HasCi(void) { return ciAdapter; -@@ -1464,7 +1544,7 @@ +@@ -1370,7 +1450,7 @@ bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *Ne bool cDvbDevice::ProvidesEIT(void) const { @@ -803,10 +809,11 @@ diff -Naur vdr-1.7.23/dvbdevice.c vdr-1.7.23.patch/dvbdevice.c } int cDvbDevice::NumProvidedSystems(void) const -diff -Naur vdr-1.7.23/dvbdevice.h vdr-1.7.23.patch/dvbdevice.h ---- vdr-1.7.23/dvbdevice.h 2012-01-13 12:32:45.000000000 +0100 -+++ vdr-1.7.23.patch/dvbdevice.h 2012-01-15 20:45:09.239911783 +0100 -@@ -106,7 +106,7 @@ +diff --git a/dvbdevice.h b/dvbdevice.h +index 2072ab2..d9f6e8d 100644 +--- a/dvbdevice.h ++++ b/dvbdevice.h +@@ -102,7 +102,7 @@ class cDvbTuner; /// The cDvbDevice implements a DVB device which can be accessed through the Linux DVB driver API. class cDvbDevice : public cDevice { @@ -815,15 +822,13 @@ diff -Naur vdr-1.7.23/dvbdevice.h vdr-1.7.23.patch/dvbdevice.h static cString DvbName(const char *Name, int Adapter, int Frontend); static int DvbOpen(const char *Name, int Adapter, int Frontend, int Mode, bool ReportError = false); private: -@@ -132,11 +132,13 @@ +@@ -126,9 +126,11 @@ private: + cDvbDevice *bondedDevice; mutable bool needsDetachBondedReceivers; - bool QueryDeliverySystems(int fd_frontend); public: - cDvbDevice(int Adapter, int Frontend); + cDvbDevice(int Adapter, int Frontend, cDevice *ParentDevice = NULL); virtual ~cDvbDevice(); - int Adapter(void) const { return adapter; } - int Frontend(void) const { return frontend; } virtual bool Ready(void); + virtual bool SetIdleDevice(bool Idle, bool TestOnly); +