Re: VDR prefers my CI DVB device for recordings and blocks it unnecessarily

Message ID 44F05C31.7010303@cadsoft.de
State New
Headers

Commit Message

Klaus Schmidinger Aug. 26, 2006, 2:35 p.m. UTC
  Anssi Hannula wrote:
> ...
> Attached is a patch which has this approach.
> 
> So after *this* patch the above quoted scenario would continue like this
> instead:
> - recording is made via budget card (same behaviour as VDR 1.4.1) if
> AvoidPrimaryDevice is set
> - recording is made via FF card (leaving budget free) if
> AvoidPrimaryDevice is not set.
> 
> Also if AvoidPrimaryDevice is set, budget with CAM would be preferred
> over non-CAM FF for recording FTA channels in the original situation.

As I said I don't like introducing additional setup options for this.
We already have the infamous "Primary limit", which was introduced at a time
where the FF cards were unable to receive and record at the same time
(this option will be removed in version 1.5, BTW).

I'll probably take another look at your first patch - maybe I missed
something when I asked whether it would also avoid a non-primary device
if the transfer mode is coming from there.

At any rate, this certainly requires more testing, so I'll do as suggested
by Udo Richter and revoke this change altogether and release version 1.4.2
tomorrow.

Just so that people can check this out, I have attached this
final modification.

Klaus
  

Patch

--- device.c	2006/08/12 11:33:34	1.135
+++ device.c	2006/08/26 14:11:03	1.136
@@ -292,7 +292,7 @@ 
          // to their individual severity, where the one listed first will make the most
          // difference, because it results in the most significant bit of the result.
          uint imp = 0;
-         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() || 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] == cTransferControl::ReceiverDevice();        // avoid the Transfer Mode receiver device
          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)