[vdr] How to properly attach stream to live view?

Klaus Schmidinger Klaus.Schmidinger at cadsoft.de
Sat Jun 7 12:51:29 CEST 2008

On 06/07/08 12:43, Udo Richter wrote:
> Hi list,
> Is there a proper way to attach another stream receiver to the currently 
> receiving channel, and - more important - disconnect it properly on 
> channel change?
> The problem arises from difficulties with the osdteletext plugin. (see 
> http://www.vdr-portal.de/board/thread.php?threadid=70372 )
> The problem of the current implementation is that on channel change the 
> teletext receiving stream is disconnected on 
> cStatus::ChannelSwitch(dev,0), which is _after_ GetDevice picked the 
> device for the next channel. And since the teletext stream is still 
> being received, the primary receiving device (FF card) is 'in use' and 
> has NeedsDetachReceiver set - so a budget card is preferred for live 
> viewing. (FF cards normally use no cReceivers at all for live view, so 
> the device is automatically 'free' on channel switch.)
> (Btw: On 2x budget only systems, it seems as if the live view will 
> constantly switch between the devices for the same reason, or?)
> Taking a look at the subtitles receiver shows that the subtitles stream 
> is disconnected at the beginning of cDevice::SetChannel, which is right 
> before the GetDevice call, thus a FF card is 'free' again at the 
> GetDevice call.
> If there's no proper way to solve this right now, I could imagine a few 
> VDR changes that would:
> - Find a way to mark a receiver as being 'live related' and disconnect 
> it before live channel switching.
> - 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?

> - Extend GetDevice to ignore some receivers that will be disconnected 
> afterwards anyway - maybe define 'related' receivers that will 
> disconnect together.
> - Notify plugins about the upcoming channel switch _before_ the 
> GetDevice call, so live receivers can be disconnected.


More information about the vdr mailing list