On Mon, 6 Dec 2010, Mario Schulz wrote:

Am 05.12.2010 23:33, schrieb Klaus Schmidinger:
What would that be necessary for?

I'd like to prevent EIT scans on IPTV devices.

In its default behaviour VDR will add transponders and channels to the
channels.conf, as a result these will be searched and probably result in
a match and a timer entry, even for uninteresting or undecodable channels.

The following patch might expose the necessary API for plugins to create white and/or blacklists for EIT scanning on certain devices/channels.

BR,
--
rofa

diff -Nru vdr-1.7.16-vanilla/device.c vdr-1.7.16-eitscan/device.c
--- vdr-1.7.16-vanilla/device.c 2010-09-19 19:42:08.000000000 +0300
+++ vdr-1.7.16-eitscan/device.c 2010-12-06 17:36:33.000000000 +0200
@@ -56,6 +56,11 @@
   return true;
 }

+bool cDeviceHook::DeviceProvidesEITScan(const cDevice *Device, const cChannel 
*Channel) const
+{
+  return true;
+}
+
 // --- cDevice ---------------------------------------------------------------

 // The default priority for non-primary devices:
@@ -594,6 +599,17 @@
   return true;
 }

+bool cDevice::DeviceHooksProvidesEITScan(const cChannel *Channel) const
+{
+  cDeviceHook *Hook = deviceHooks.First();
+  while (Hook) {
+        if (!Hook->DeviceProvidesEITScan(this, Channel))
+           return false;
+        Hook = deviceHooks.Next(Hook);
+        }
+  return true;
+}
+
 bool cDevice::ProvidesTransponder(const cChannel *Channel) const
 {
   return false;
diff -Nru vdr-1.7.16-vanilla/device.h vdr-1.7.16-eitscan/device.h
--- vdr-1.7.16-vanilla/device.h 2010-09-19 19:42:08.000000000 +0300
+++ vdr-1.7.16-eitscan/device.h 2010-12-06 17:41:18.000000000 +0200
@@ -96,6 +96,8 @@
           ///< program ends.
   virtual bool DeviceProvidesTransponder(const cDevice *Device, const cChannel 
*Channel) const;
           ///< Returns true if the given Device can provide the given 
Channel's transponder.
+  virtual bool DeviceProvidesEITScan(const cDevice *Device, const cChannel 
*Channel) const;
+          ///< Returns true if the given Device can scan EIT on the given 
Channel's transponder.
   };

 /// The cDevice class is the base from which actual devices can be derived.
@@ -204,6 +206,8 @@
   static cList<cDeviceHook> deviceHooks;
 protected:
   bool DeviceHooksProvidesTransponder(const cChannel *Channel) const;
+public:
+  bool DeviceHooksProvidesEITScan(const cChannel *Channel) const;

 // SPU facilities

diff -Nru vdr-1.7.16-vanilla/eitscan.c vdr-1.7.16-eitscan/eitscan.c
--- vdr-1.7.16-vanilla/eitscan.c        2010-09-19 19:42:08.000000000 +0300
+++ vdr-1.7.16-eitscan/eitscan.c        2010-12-06 17:38:40.000000000 +0200
@@ -146,7 +146,7 @@
                if (Device) {
                   for (cScanData *ScanData = scanList->First(); ScanData; 
ScanData = scanList->Next(ScanData)) {
                       const cChannel *Channel = ScanData->GetChannel();
-                      if (Channel) {
+                      if (Channel && 
Device->DeviceHooksProvidesEITScan(Channel)) {
                          if (!Channel->Ca() || Channel->Ca() == 
Device->DeviceNumber() + 1 || Channel->Ca() >= CA_ENCRYPTED_MIN) {
                             if (Device->ProvidesTransponder(Channel)) {
                                if (!Device->Receiving()) {



_______________________________________________
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

Reply via email to