summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2005-11-05 15:48:05 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2005-11-05 15:48:05 +0100
commit27ab07e80d2855b63e2d1df700bc307699fed6fb (patch)
tree0991809bc9a79ff235d93eeee1b593afbf0e4b4d
parent596e965a5334fec97b4ee4fd19223b6acfacf680 (diff)
downloadvdr-27ab07e80d2855b63e2d1df700bc307699fed6fb.tar.gz
vdr-27ab07e80d2855b63e2d1df700bc307699fed6fb.tar.bz2
The EPG scan no longer disturbs players that have also set live PIDs
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY2
-rw-r--r--device.c7
-rw-r--r--device.h5
-rw-r--r--eitscan.c15
5 files changed, 22 insertions, 9 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index a280fdc5..25276027 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -203,6 +203,8 @@ Stefan Huelswitt <huels@iname.com>
for pointing out that recordings with empty episode names were not listed correctly
in the LSTR command
for fixing a memory leak in the SVDRP command LSTE
+ for reporting a problem with the EPG scan disturbing players that have also set
+ live PIDs
Ulrich Röder <roeder@efr-net.de>
for pointing out that there are channels that have a symbol rate higher than 27500
diff --git a/HISTORY b/HISTORY
index a91667ad..68cdd5c5 100644
--- a/HISTORY
+++ b/HISTORY
@@ -3934,3 +3934,5 @@ Video Disk Recorder Revision History
been removed. If a plugin has used that macro, it should either define
a buffer size of its own, or use cReadLine when reading files.
- Fixed a race condition in the SPU decoder (thanks to Marco Schlüßler).
+- The EPG scan no longer disturbs players that have also set live PIDs
+ (reported by Stefan Huelswitt).
diff --git a/device.c b/device.c
index dcd05a31..0da5a492 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.110 2005/09/17 14:29:44 kls Exp $
+ * $Id: device.c 1.111 2005/11/05 15:23:58 kls Exp $
*/
#include "device.h"
@@ -514,6 +514,11 @@ bool cDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *Needs
return false;
}
+bool cDevice::MaySwitchTransponder(void)
+{
+ return !Receiving(true) && !(pidHandles[ptAudio].pid || pidHandles[ptVideo].pid || pidHandles[ptDolby].pid);
+}
+
bool cDevice::SwitchChannel(const cChannel *Channel, bool LiveView)
{
if (LiveView)
diff --git a/device.h b/device.h
index d13b896c..43d386bf 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.65 2005/09/17 14:29:28 kls Exp $
+ * $Id: device.h 1.66 2005/11/05 15:25:41 kls Exp $
*/
#ifndef __DEVICE_H
@@ -215,6 +215,9 @@ public:
///< function itself actually returns true.
///< The default implementation always returns false, so a derived cDevice
///< class that can provide channels must implement this function.
+ virtual bool MaySwitchTransponder(void);
+ ///< Returns true if it is ok to switch the transponder on this device,
+ ///< without disturbing any other activities.
bool SwitchChannel(const cChannel *Channel, bool LiveView);
///< Switches the device to the given Channel, initiating transfer mode
///< if necessary.
diff --git a/eitscan.c b/eitscan.c
index 10739c31..7a89141b 100644
--- a/eitscan.c
+++ b/eitscan.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: eitscan.c 1.28 2005/08/26 15:37:06 kls Exp $
+ * $Id: eitscan.c 1.29 2005/11/05 15:24:36 kls Exp $
*/
#include "eitscan.h"
@@ -150,13 +150,14 @@ void cEITScanner::Process(void)
if (!Channel->Ca() || Channel->Ca() == Device->DeviceNumber() + 1 || Channel->Ca() >= 0x0100) {
if (Device->ProvidesTransponder(Channel)) {
if (!Device->Receiving()) {
- bool IsPrimaryDeviceReplaying = Device == cDevice::PrimaryDevice() && Device->Replaying() && cTransferControl::ReceiverDevice() != cDevice::PrimaryDevice();
- if (Device != cDevice::ActualDevice() || (Device->ProvidesTransponderExclusively(Channel) && (IsPrimaryDeviceReplaying || now - lastActivity > Setup.EPGScanTimeout * 3600))) {
- if (!IsPrimaryDeviceReplaying && Device == cDevice::ActualDevice() && !currentChannel) {
- if (cTransferControl::ReceiverDevice())
+ bool MaySwitchTransponder = Device->MaySwitchTransponder();
+ if (MaySwitchTransponder || Device->ProvidesTransponderExclusively(Channel) && now - lastActivity > Setup.EPGScanTimeout * 3600) {
+ if (!MaySwitchTransponder) {
+ if (Device == cDevice::ActualDevice() && !currentChannel) {
cDevice::PrimaryDevice()->StopReplay(); // stop transfer mode
- currentChannel = Device->CurrentChannel();
- Skins.Message(mtInfo, tr("Starting EPG scan"));
+ currentChannel = Device->CurrentChannel();
+ Skins.Message(mtInfo, tr("Starting EPG scan"));
+ }
}
currentDevice = Device;//XXX see also dvbdevice.c!!!
//dsyslog("EIT scan: device %d source %-8s tp %5d", Device->DeviceNumber() + 1, *cSource::ToString(Channel->Source()), Channel->Transponder());