From 7751b6abb0b90a3d0961856e76c67b85aab66cf5 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 13 Jan 2007 12:14:51 +0100 Subject: [PATCH] Added cDevice::HasCi() so that devices with Common Interface can be avoided when tuning to an FTA channel --- CONTRIBUTORS | 4 ++++ HISTORY | 6 ++++++ config.h | 10 +++++----- device.c | 8 +++++++- device.h | 4 +++- dvbdevice.c | 7 ++++++- dvbdevice.h | 7 ++++++- 7 files changed, 37 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 79c6e18b..45f543a5 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2050,3 +2050,7 @@ J Peter Pinnau for reporting that 'uint32_t' requires uncluding stdint.h in font.h on some systems + +Petri Helin + for suggesting to avoid budget DVB cards with Common Interface when tuning to an + FTA channel diff --git a/HISTORY b/HISTORY index 4649a223..f3484d4c 100644 --- a/HISTORY +++ b/HISTORY @@ -5081,3 +5081,9 @@ Video Disk Recorder Revision History without valid CA ids VDR can't decide which CAM slot to use. However, since VDR now automatically determines which CAM can decrypt which channel, setting fixed channel/device relations should no longer be necessary. + +2007-01-13: Version 1.5.1 + +- Added cDevice::HasCi() so that devices with Common Interface can be avoided + when tuning to an FTA channel, thus preserving the CAM resources even on budget + DVB cards (suggested by Petri Helin). diff --git a/config.h b/config.h index e795ad77..00fd784c 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.283 2007/01/07 14:09:31 kls Exp $ + * $Id: config.h 1.284 2007/01/13 11:42:43 kls Exp $ */ #ifndef __CONFIG_H @@ -21,13 +21,13 @@ // VDR's own version number: -#define VDRVERSION "1.5.0" -#define VDRVERSNUM 10500 // Version * 10000 + Major * 100 + Minor +#define VDRVERSION "1.5.1" +#define VDRVERSNUM 10501 // Version * 10000 + Major * 100 + Minor // The plugin API's version number: -#define APIVERSION "1.5.0" -#define APIVERSNUM 10500 // Version * 10000 + Major * 100 + Minor +#define APIVERSION "1.5.1" +#define APIVERSNUM 10501 // Version * 10000 + Major * 100 + Minor // When loading plugins, VDR searches them by their APIVERSION, which // may be smaller than VDRVERSION in case there have been no changes to diff --git a/device.c b/device.c index a9ff0afb..dc9af593 100644 --- a/device.c +++ b/device.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.c 1.138 2007/01/07 14:41:07 kls Exp $ + * $Id: device.c 1.139 2007/01/13 12:05:00 kls Exp $ */ #include "device.h" @@ -334,6 +334,7 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView imp <<= 8; imp |= min(max((NumUsableSlots ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) imp <<= 1; imp |= ndr; // avoid devices if we need to detach existing receivers imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device + imp <<= 1; imp |= NumUsableSlots ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels imp <<= 1; imp |= device[i]->HasDecoder(); // avoid full featured cards imp <<= 1; imp |= NumUsableSlots ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel if (imp < Impact) { @@ -367,6 +368,11 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView return d; } +bool cDevice::HasCi(void) +{ + return false; +} + void cDevice::SetCamSlot(cCamSlot *CamSlot) { camSlot = CamSlot; diff --git a/device.h b/device.h index 63af410b..60dc73e1 100644 --- a/device.h +++ b/device.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.h 1.80 2007/01/07 14:38:00 kls Exp $ + * $Id: device.h 1.81 2007/01/13 11:33:57 kls Exp $ */ #ifndef __DEVICE_H @@ -314,6 +314,8 @@ private: time_t startScrambleDetection; cCamSlot *camSlot; public: + virtual bool HasCi(void); + ///< Returns true if this device has a Common Interface. void SetCamSlot(cCamSlot *CamSlot); ///< Sets the given CamSlot to be used with this device. cCamSlot *CamSlot(void) const { return camSlot; } diff --git a/dvbdevice.c b/dvbdevice.c index 70f7781a..7271b4f0 100644 --- a/dvbdevice.c +++ b/dvbdevice.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.c 1.161 2007/01/07 14:09:51 kls Exp $ + * $Id: dvbdevice.c 1.162 2007/01/13 11:37:00 kls Exp $ */ #include "dvbdevice.h" @@ -509,6 +509,11 @@ cSpuDecoder *cDvbDevice::GetSpuDecoder(void) return spuDecoder; } +bool cDvbDevice::HasCi(void) +{ + return ciAdapter; +} + uchar *cDvbDevice::GrabImage(int &Size, bool Jpeg, int Quality, int SizeX, int SizeY) { if (devVideoIndex < 0) diff --git a/dvbdevice.h b/dvbdevice.h index c7280e9f..b479dd10 100644 --- a/dvbdevice.h +++ b/dvbdevice.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.h 1.42 2007/01/07 14:39:52 kls Exp $ + * $Id: dvbdevice.h 1.43 2007/01/13 11:35:07 kls Exp $ */ #ifndef __DVBDEVICE_H @@ -84,6 +84,11 @@ protected: protected: virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask); +// Common Interface facilities: + +public: + virtual bool HasCi(void); + // Image Grab facilities private: