Klaus Schmidinger wrote:
Jörn Reder wrote:
... I'm having problems with VDR's decision of recording devices. The 1.4 change log states that budget cards are preferred, unfortunately my budget card has the CI. So when a recording starts and no pay TV channel is actually tuned, the CI device is blocked and I can't switch to a pay TV channel anymore (whithout stopping the recording).
Is it possible to tell VDR to prefer my FF card for recordings instead of my CI budget device?
Please try the attached patch. With this change "avoiding full featured or primary cards" gets less priority than "using the device with the lowest priority or the lowest number of CA methods".
Klaus
--- device.c 2006/07/29 10:03:56 1.134 +++ device.c 2006/08/06 09:37:21 @@ -295,10 +295,10 @@ imp <<= 1; imp |= !device[i]->Receiving(true) || ndr; // use receiving devices if we don't need to detach existing receivers imp <<= 1; imp |= device[i]->Receiving(); // avoid devices that are receiving imp <<= 1; imp |= device[i] == ActualDevice(); // avoid the actual device (in case of Transfer Mode)
Note that the above ActualDevice() returns primary device when transfer mode is not active, so I guess if the user is for example watching a recording, this will cause VDR to prefer budget card anyway.
Maybe replace it with cTransferControl::ReceiverDevice(), which returns NULL when transfer mode is not active?
imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device
imp <<= 1; imp |= device[i]->HasDecoder(); // avoid full featured cards imp <<= 8; imp |= min(max(device[i]->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) imp <<= 8; imp |= min(max(device[i]->ProvidesCa(Channel), 0), 0xFF); // use the device that provides the lowest number of conditional access methods
imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device
imp <<= 1; imp |= device[i]->HasDecoder(); // avoid full featured cards if (imp < Impact) { // This device has less impact than any previous one, so we take it. Impact = imp;