From 8d4d7f2b626226a543e09651772d43e7313ebbf5 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 9 Mar 2003 14:10:12 +0100 Subject: [PATCH] Trying harder to find a primary device --- HISTORY | 5 +++++ device.c | 21 +++++++++++++-------- vdr.c | 12 +++++++++++- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/HISTORY b/HISTORY index f5d7d095..f345f65f 100644 --- a/HISTORY +++ b/HISTORY @@ -1975,3 +1975,8 @@ Video Disk Recorder Revision History - Removed signal handling and usleep(5000) from cDvbOsd::Cmd() (apparently this is no longer necessary with DVB driver 1.0.0pre2 or later). +- If the primary device (as defined in setup.conf) doesn't have an MPEG decoder + (and thus can't be used as a primary device) VDR now scans all devices at + startup and uses the first one (if any) that actually has an MPEG decoder. + That way this will also work automatically if the primary device is implemented + by a plugin. diff --git a/device.c b/device.c index 15628cd3..0f99e13b 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.36 2003/01/03 15:41:14 kls Exp $ + * $Id: device.c 1.37 2003/03/09 14:05:23 kls Exp $ */ #include "device.h" @@ -106,14 +106,19 @@ bool cDevice::SetPrimaryDevice(int n) { n--; if (0 <= n && n < numDevices && device[n]) { - isyslog("setting primary device to %d", n + 1); - if (primaryDevice) - primaryDevice->MakePrimaryDevice(false); - primaryDevice = device[n]; - primaryDevice->MakePrimaryDevice(true); - return true; + if (device[n]->HasDecoder()) { + isyslog("setting primary device to %d", n + 1); + if (primaryDevice) + primaryDevice->MakePrimaryDevice(false); + primaryDevice = device[n]; + primaryDevice->MakePrimaryDevice(true); + return true; + } + else + esyslog("ERROR: device number %d has no MPEG decoder", n + 1); } - esyslog("invalid primary device number: %d", n + 1); + else + esyslog("ERROR: invalid primary device number: %d", n + 1); return false; } diff --git a/vdr.c b/vdr.c index 3e6a9ed3..50b1a290 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.145 2003/02/16 10:34:24 kls Exp $ + * $Id: vdr.c 1.146 2003/03/09 14:07:46 kls Exp $ */ #include @@ -364,6 +364,16 @@ int main(int argc, char *argv[]) // Primary device: cDevice::SetPrimaryDevice(Setup.PrimaryDVB); + if (!cDevice::PrimaryDevice()) { + for (int i = 0; i < cDevice::NumDevices(); i++) { + cDevice *d = cDevice::GetDevice(i); + if (d && d->HasDecoder()) { + isyslog("trying device number %d instead", i + 1); + if (cDevice::SetPrimaryDevice(i + 1)) + Setup.PrimaryDVB = i + 1; + } + } + } if (!cDevice::PrimaryDevice()) { const char *msg = "no primary device found - giving up!"; fprintf(stderr, "vdr: %s\n", msg);