mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Attempting to stay on the current channel in case of an upcoming recording
This commit is contained in:
parent
1b1267674f
commit
edfe582941
3
HISTORY
3
HISTORY
@ -5657,3 +5657,6 @@ Video Disk Recorder Revision History
|
|||||||
to Ludwig Nussel for pointing this out).
|
to Ludwig Nussel for pointing this out).
|
||||||
- Revised the fix of calculating the scrollbar height in the skins. The scrollbar
|
- Revised the fix of calculating the scrollbar height in the skins. The scrollbar
|
||||||
handle now always has a height that is at least the width of the scrollbar.
|
handle now always has a height that is at least the width of the scrollbar.
|
||||||
|
- When switching the device that's used for live viewing away from the current
|
||||||
|
transponder in favor of an upcoming recording, an attempt is now made to stay
|
||||||
|
on the current channel by possibly going into 'Transfer Mode'.
|
||||||
|
7
device.c
7
device.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.c 1.154 2008/02/17 15:55:06 kls Exp $
|
* $Id: device.c 1.155 2008/02/23 13:09:01 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
@ -218,6 +218,7 @@ int cDevice::nextCardIndex = 0;
|
|||||||
int cDevice::currentChannel = 1;
|
int cDevice::currentChannel = 1;
|
||||||
cDevice *cDevice::device[MAXDEVICES] = { NULL };
|
cDevice *cDevice::device[MAXDEVICES] = { NULL };
|
||||||
cDevice *cDevice::primaryDevice = NULL;
|
cDevice *cDevice::primaryDevice = NULL;
|
||||||
|
cDevice *cDevice::avoidDevice = NULL;
|
||||||
|
|
||||||
cDevice::cDevice(void)
|
cDevice::cDevice(void)
|
||||||
{
|
{
|
||||||
@ -356,6 +357,8 @@ cDevice *cDevice::GetDevice(int Index)
|
|||||||
|
|
||||||
cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView)
|
cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView)
|
||||||
{
|
{
|
||||||
|
cDevice *AvoidDevice = avoidDevice;
|
||||||
|
avoidDevice = NULL;
|
||||||
// Collect the current priorities of all CAM slots that can decrypt the channel:
|
// Collect the current priorities of all CAM slots that can decrypt the channel:
|
||||||
int NumCamSlots = CamSlots.Count();
|
int NumCamSlots = CamSlots.Count();
|
||||||
int SlotPriority[NumCamSlots];
|
int SlotPriority[NumCamSlots];
|
||||||
@ -385,6 +388,8 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView
|
|||||||
if (NumUsableSlots && SlotPriority[j] > MAXPRIORITY)
|
if (NumUsableSlots && SlotPriority[j] > MAXPRIORITY)
|
||||||
continue; // there is no CAM available in this slot
|
continue; // there is no CAM available in this slot
|
||||||
for (int i = 0; i < numDevices; i++) {
|
for (int i = 0; i < numDevices; i++) {
|
||||||
|
if (device[i] == AvoidDevice)
|
||||||
|
continue; // this device shall be temporarily avoided
|
||||||
if (Channel->Ca() && Channel->Ca() <= CA_DVB_MAX && Channel->Ca() != device[i]->CardIndex() + 1)
|
if (Channel->Ca() && Channel->Ca() <= CA_DVB_MAX && Channel->Ca() != device[i]->CardIndex() + 1)
|
||||||
continue; // a specific card was requested, but not this one
|
continue; // a specific card was requested, but not this one
|
||||||
if (NumUsableSlots && !CamSlots.Get(j)->Assign(device[i], true))
|
if (NumUsableSlots && !CamSlots.Get(j)->Assign(device[i], true))
|
||||||
|
6
device.h
6
device.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.h 1.90 2008/02/16 13:50:11 kls Exp $
|
* $Id: device.h 1.91 2008/02/23 13:13:04 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DEVICE_H
|
#ifndef __DEVICE_H
|
||||||
@ -101,6 +101,7 @@ private:
|
|||||||
static int useDevice;
|
static int useDevice;
|
||||||
static cDevice *device[MAXDEVICES];
|
static cDevice *device[MAXDEVICES];
|
||||||
static cDevice *primaryDevice;
|
static cDevice *primaryDevice;
|
||||||
|
static cDevice *avoidDevice;
|
||||||
public:
|
public:
|
||||||
static int NumDevices(void) { return numDevices; }
|
static int NumDevices(void) { return numDevices; }
|
||||||
///< Returns the total number of devices.
|
///< Returns the total number of devices.
|
||||||
@ -145,6 +146,9 @@ public:
|
|||||||
///< this device/CAM combination will be skipped in the next call to
|
///< this device/CAM combination will be skipped in the next call to
|
||||||
///< GetDevice().
|
///< GetDevice().
|
||||||
///< See also ProvidesChannel().
|
///< See also ProvidesChannel().
|
||||||
|
static void SetAvoidDevice(cDevice *Device) { avoidDevice = Device; }
|
||||||
|
///< Sets the given Device to be temporarily avoided in the next call to
|
||||||
|
///< GetDevice(const cChannel, int, bool).
|
||||||
static void Shutdown(void);
|
static void Shutdown(void);
|
||||||
///< Closes down all devices.
|
///< Closes down all devices.
|
||||||
///< Must be called at the end of the program.
|
///< Must be called at the end of the program.
|
||||||
|
6
vdr.c
6
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.cadsoft.de/vdr
|
* The project's page is at http://www.cadsoft.de/vdr
|
||||||
*
|
*
|
||||||
* $Id: vdr.c 1.310 2008/02/10 14:23:31 kls Exp $
|
* $Id: vdr.c 1.311 2008/02/23 13:19:10 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -877,7 +877,9 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
if (cDevice::PrimaryDevice()->HasDecoder() && !cDevice::PrimaryDevice()->HasProgramme()) {
|
if (cDevice::PrimaryDevice()->HasDecoder() && !cDevice::PrimaryDevice()->HasProgramme()) {
|
||||||
// the previous SwitchChannel() has switched away the current live channel
|
// the previous SwitchChannel() has switched away the current live channel
|
||||||
Channels.SwitchTo(Timer->Channel()->Number()); // avoids toggling between old channel and black screen
|
cDevice::SetAvoidDevice(Device);
|
||||||
|
if (!Channels.SwitchTo(cDevice::CurrentChannel())) // try to switch to the original channel on a different device...
|
||||||
|
Channels.SwitchTo(Timer->Channel()->Number()); // ...or avoid toggling between old channel and black screen
|
||||||
Skins.Message(mtInfo, tr("Upcoming recording!"));
|
Skins.Message(mtInfo, tr("Upcoming recording!"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user