From 0a3f7e7ca23078eab860032350d61ceb2a8ab50c Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 15 Feb 2004 14:31:53 +0100 Subject: [PATCH] Limited automatic retuning to devices that actually provide the transponder --- HISTORY | 2 ++ menu.c | 14 ++++++++------ menu.h | 4 ++-- vdr.c | 8 +++++--- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/HISTORY b/HISTORY index dc639d7f..746e3608 100644 --- a/HISTORY +++ b/HISTORY @@ -2669,3 +2669,5 @@ Video Disk Recorder Revision History happen on my system, this has not been explicitly tested. - Adapted the 'sky' plugin to use the actual channel IDs, and to fetch EPG data from www.bleb.org. +- Limited automatic retuning to devices that actually provide the transponder + (necessary for the 'sky' plugin). diff --git a/menu.c b/menu.c index 2ffa6d9f..790bb179 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.285 2004/02/13 13:23:07 kls Exp $ + * $Id: menu.c 1.286 2004/02/15 14:29:53 kls Exp $ */ #include "menu.h" @@ -3241,7 +3241,7 @@ void cRecordControls::Stop(cDevice *Device) { for (int i = 0; i < MAXRECORDCONTROLS; i++) { if (RecordControls[i]) { - if (RecordControls[i]->Uses(Device)) { + if (RecordControls[i]->Device() == Device) { isyslog("stopping recording on DVB device %d due to higher priority", Device->CardIndex() + 1); RecordControls[i]->Stop(true); } @@ -3320,10 +3320,12 @@ void cRecordControls::ChannelDataModified(cChannel *Channel) for (int i = 0; i < MAXRECORDCONTROLS; i++) { if (RecordControls[i]) { if (RecordControls[i]->Timer() && RecordControls[i]->Timer()->Channel() == Channel) { - isyslog("stopping recording due to modification of channel %d", Channel->Number()); - RecordControls[i]->Stop(true); - // This will restart the recording, maybe even from a different - // device in case conditional access has changed. + if (RecordControls[i]->Device()->ProvidesTransponder(Channel)) { // avoids retune on devices that don't really access the transponder + isyslog("stopping recording due to modification of channel %d", Channel->Number()); + RecordControls[i]->Stop(true); + // This will restart the recording, maybe even from a different + // device in case conditional access has changed. + } } } } diff --git a/menu.h b/menu.h index 041d6f7c..6fe95408 100644 --- a/menu.h +++ b/menu.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.h 1.59 2004/01/04 11:01:13 kls Exp $ + * $Id: menu.h 1.60 2004/02/15 14:11:28 kls Exp $ */ #ifndef __MENU_H @@ -123,7 +123,7 @@ public: cRecordControl(cDevice *Device, cTimer *Timer = NULL, bool Pause = false); virtual ~cRecordControl(); bool Process(time_t t); - bool Uses(cDevice *Device) { return Device == device; } + cDevice *Device(void) { return device; } void Stop(bool KeepInstant = false); bool IsInstant(void) { return instantId; } const char *InstantId(void) { return instantId; } diff --git a/vdr.c b/vdr.c index 20315507..4782df9b 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/vdr * - * $Id: vdr.c 1.176 2004/02/13 13:13:13 kls Exp $ + * $Id: vdr.c 1.177 2004/02/15 14:29:30 kls Exp $ */ #include @@ -526,8 +526,10 @@ int main(int argc, char *argv[]) cRecordControls::ChannelDataModified(Channel); if (Channel->Number() == cDevice::CurrentChannel()) { if (!cDevice::PrimaryDevice()->Replaying() || cTransferControl::ReceiverDevice()) { - isyslog("retuning due to modification of channel %d", Channel->Number()); - Channels.SwitchTo(Channel->Number()); + if (cDevice::ActualDevice()->ProvidesTransponder(Channel)) { // avoids retune on devices that don't really access the transponder + isyslog("retuning due to modification of channel %d", Channel->Number()); + Channels.SwitchTo(Channel->Number()); + } } } }