[vdr] How to properly attach stream to live view?
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