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

2010-07-19 Thread Frank Schmirler
Hi Udo,

On Sun, 18 Jul 2010 15:45:02 +0200, Udo Richter wrote
 In short, -1 receivers are supposed to be disconnectable at any time,
 but transfer mode runs at -1 priority too, and should not be
 disconnected. Transfer mode runs at -1 so that an existing transfer mode
 does not block channel switching. The solution is to let the channel
 switch code know that the transfer source device will soon be available.

Good shot. Streamdev suffers from a similar problem and would benefit from
this patch, too. If a streamdev-client prepars to switch channels, the current
stream blocks a device which will also become available a little later. At the
moment streamdev temporarily detaches the client's receiver if no other device
is able to do the job anyway. With the volatile flag this should no longer be
necessary.

Cheers,
Frank


___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr


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

2010-07-18 Thread Udo Richter
Hi list, hi Klaus,

In continuation of this old topic [1] and the bug ticket [2]:

I've written a patch that changes handling of receivers in VDR. The
patch makes sure that receivers of priority of -1 won't block a device,
without re-introducing the Live TV Freeze [3] bug.

Details of this issue are very well documented in [2], patches are also
available there.


In short, -1 receivers are supposed to be disconnectable at any time,
but transfer mode runs at -1 priority too, and should not be
disconnected. Transfer mode runs at -1 so that an existing transfer mode
does not block channel switching. The solution is to let the channel
switch code know that the transfer source device will soon be available.


Cheers,

Udo

[1] http://www.linuxtv.org/pipermail/vdr/2008-June/017073.html
[2] http://projects.vdr-developer.org/issues/show/10
[3] http://linuxtv.org/mailinglists/vdr/2004/05-2004/msg00115.html

___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr


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

2008-06-07 Thread Udo Richter
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.

- 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.


Cheers,

Udo

___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr


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

2008-06-07 Thread Klaus Schmidinger
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.

Klaus

___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr


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

2008-06-07 Thread Udo Richter
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

___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr