From 44dbfe9f384c3519e9c7ce29ae7eb790b544ea5d Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 24 May 2003 15:34:30 +0200 Subject: [PATCH] Fixed channel switching in case the current channel becomes unavailable --- CONTRIBUTORS | 6 ++++++ HISTORY | 5 +++++ vdr.c | 11 +++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index f88a3d85..3a62501a 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -485,6 +485,8 @@ Reinhard Walter Buchner Lauri Tischler for helping to test and debug the new channel source and DiSEqC handling for reporting a faulty parameter initialization in menu.c + for reporting a problem in case the original current channel becomes + unavailable due to a recording on a different transponder Andy Carter for helping to test new DVB-T handling @@ -682,3 +684,7 @@ Niko Tarnanen and Rolf Ahrenberg Ralf Klueber for reporting a bug in cutting a recording if there is only a single editing mark + +Hermann Gausterer + for suggesting to switch to the recording channel in case the current channel + becomes unavailable diff --git a/HISTORY b/HISTORY index 3166113e..3f41ffc2 100644 --- a/HISTORY +++ b/HISTORY @@ -2190,3 +2190,8 @@ Video Disk Recorder Revision History Wiesweg). - Fixed channel switching in the EPG scanner on single device systems. - Completed the Swedish OSD texts (thanks to Tomas Prybil). +- Now switching to the channel used by the most recently started timer in case + the original current channel becomes unavailable due to a recording on a + different transponder. If this fails, a channel up/down switch is attempted as + a fallback solution (thanks to Lauri Tischler for reporting this one, and to + Hermann Gausterer for suggesting to switch to the recording channel). diff --git a/vdr.c b/vdr.c index b2052551..8bb907cf 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/people/kls/vdr * - * $Id: vdr.c 1.158 2003/05/24 13:35:13 kls Exp $ + * $Id: vdr.c 1.159 2003/05/24 15:17:38 kls Exp $ */ #include @@ -453,6 +453,7 @@ int main(int argc, char *argv[]) cOsdObject *Menu = NULL; cOsdObject *Temp = NULL; int LastChannel = -1; + int LastTimerChannel = -1; int PreviousChannel = cDevice::CurrentChannel(); time_t LastActivity = 0; int MaxLatencyTime = 0; @@ -471,8 +472,12 @@ int main(int argc, char *argv[]) if (!EITScanner.Active() && cDevice::PrimaryDevice()->HasDecoder() && !cDevice::PrimaryDevice()->HasProgramme()) { static time_t lastTime = 0; if (time(NULL) - lastTime > MINCHANNELWAIT) { - if (!Channels.SwitchTo(cDevice::CurrentChannel())) + if (!Channels.SwitchTo(cDevice::CurrentChannel()) // try to switch to the original channel... + && !(LastTimerChannel > 0 && Channels.SwitchTo(LastTimerChannel)) // ...or the one used by the last timer... + && !cDevice::SwitchChannel(1) // ...or the next higher available one... + && !cDevice::SwitchChannel(-1)) // ...or the next lower available one lastTime = time(NULL); // don't do this too often + LastTimerChannel = -1; } } // Restart the Watchdog timer: @@ -499,6 +504,8 @@ int main(int argc, char *argv[]) if (Timer) { if (!cRecordControls::Start(Timer)) Timer->SetPending(true); + else + LastTimerChannel = Timer->Channel()->Number(); } } // CAM control: