[vdr] How to properly attach stream to live view?
Udo Richter
udo_richter at gmx.de
Sat Jun 7 17:19:05 CEST 2008
Klaus Schmidinger wrote:
>> - Find a way to mark a receiver as being 'extremely unimportant', and
>> don't count them as NeedsDetachReceiver or as Receiving() in that case,
>> maybe by using -1 as priority.
>
> Using a negative priority would be the right way:
>
> cReceiver(tChannelID ChannelID, int Priority, int Pid, const int *Pids1 = NULL, const int *Pids2 = NULL, const int *Pids3 = NULL);
> ///< ...
> ///< Priority may be any value in the range -99..99. Negative values indicate
> ///< that this cReceiver may be detached at any time (without blocking the
> ///< cDevice it is attached to).
>
> Why does the osdteletext plugin use a non-negative priority at all?
Good question. Though, this alone doesn't fix it.
This is VDR without osdteletext, switching to a different transponder:
GetDevice: Device 0 Impact 020c4c6e Detach:0
GetDevice: Device 1 Impact 060c4c60 Detach:0
Device 0 is the FF card, device 1 is the budget card. The FF card gets a
boost by the first rule:
imp |= LiveView ? !device[i]->IsPrimaryDevice() || ndr : 0;
The FF card is the primary device, and it has nothing to detach, so this
is imp |= true ? !true || false : 0 returning false, giving the FF card
a priority boost.
The same with osdteletext (priority patched to -1) running:
GetDevice: Device 0 Impact 060c4c7e Detach:1
GetDevice: Device 1 Impact 060c4c60 Detach:0
What happened? The ndr clause canceled the FF boost. The actual path in
cDvbDevice::ProvidesChannel is ProvidesTransponder(Channel) -> Priority
>= 0 && Receiving(true) -> !dvbTuner->IsTunedTo(Channel), leading to
NeedsDetachReceivers=true.
Priority>=0 is the new live channel priority, not the -1 of osdteletext.
Receiving(true) does count -1 receivers, as opposed to Receiving(false).
The next counting rule is the 5'th last low priority rule to prefer
channels without receivers.
Cheers,
Udo
More information about the vdr
mailing list