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@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr