Klaus Schmidinger wrote: > Anssi Hannula wrote: > >> Klaus Schmidinger wrote: >> >>>> Anssi Hannula wrote: >>>> >>>>> The transfer-mode uses always priority -1. >>>>> >>>>> That presents a problem: If I connect to that vdr using streamdev, it >>>>> switches the first budget device off from the multiplex transfered to >>>>> the FF card, although there is a second identical budget >>>>> device available. >>>>> > But then again, it's of course the same problem if you are in Transfer-Mode > and a recording starts and selects the receiver device, even though an > other > device would be free. > > I'll think over this again... Okay, I finally found some time to solve this problem. You may remember may previous patch that just changed the priority, the patch which had a flaw: Thomas Bergwinkl wrote: > I think there is a problem with your patch. There is a reason for the > priority -1. Imagine you have a channel which can only be received by > one card and this card is used for transfer-mode. When you want to > switch to this channel, the transfer-mode has, with your patch, e.g > priority 0. But the new transfer-mode would have the same priority (but > not a higher), so there would be no free device (channel not available). > So when searching for a free device, vdr should consider that the > device, which is used for transfer-mode, could be free, if transfer-mode > for the current channel has ended. My new patch has a different approach: It seems that on cDevice::Priority() there is already a check that if the device is the primary device, the returned priority is a minimum of PrimaryLimit-1, which is low enough so that the channel can be switched if a device is being searched for a new receiver with priority PrimaryLimit. This patch modifies it to check (ActualDevice() == this) instead, so that in case of transfer-mode the Priority() returns PrimaryLimit-1 too. The SetChannel() is also modified to call GetDevice() with priority PrimaryLimit instead of 0 when searching for an available device for transfer-mode. The Receiving(bool CheckAny) is modified so that if it is called on the transfer-moded device, it returns true if receivers are found with priority < 0 even if CheckAny == false. The actual transfer-mode receiver priority is kept as -1. So, when something (e.g. streamdev) requests a channel with a priority 5 for example, it will use a free device if available, and detaches the transfer-mode only as a last resort (if the PrimaryLimit is small enough, of course). And if e.g. the user switches from transfer-mode DVB-T channel to another transfer-mode DVB-T channel on a different multiplex, the (this == ActualDevice()) in Receiving() evaluates to (false) when it is called, so the old device is still used for the new channel (unless of course a better suited device is found by GetDevice()). -- Anssi Hannula -------------- next part -------------- A non-text attachment was scrubbed... Name: vdr-1.4.0-transfermode-priority2.diff Type: text/x-patch Size: 1512 bytes Desc: not available Url : http://www.linuxtv.org/pipermail/vdr/attachments/20060511/569a2b38/vdr-1.4.0-transfermode-priority2.bin