[vdr] [PATCH] re-use devices in transfer mode

Anssi Hannula anssi.hannula at gmail.com
Sun Apr 29 17:14:21 CEST 2007


Klaus Schmidinger wrote:
> On 04/21/07 16:26, Anssi Hannula wrote:
>> Udo Richter wrote:
>>> Anssi Hannula wrote:
>>>> However, the usual "use-already-tuned-devices" check in GetDevice() only
>>>> checks for device->Receiving(), which does not report transfer-moded
>>>> device, resulting in the new receiver being started on second device,
>>>> thus both devices being reserved for receiving data from the same
>>>> transponder.
>>> Without taking a deeper look into it right now, I think there was some
>>> trap with detecting transfer mode in case that some streams are received
>>> additionally to live mode, for example teletext with osdteletext plugin.
>>> You may want to double-check this. Changes to GetDevice tend to have
>>> strange side effects.
>> I proposed this same patch previously, but it was suggested to instead
>> of the check for transfer mode to just change the Receiving() to
>> Receiving(true). I didn't see any caveats back then, so I agreed.
>> Unfortunately, that resulted in problems with situations that you describe.
>>
>> However, this original version of the patch does explicitely check for a
>> device in transfer-mode, and does not care about osdteletext receivers.
>>
>> What could happen is that this would match the transfer modes whose
>> receiverdevice() is the primary device itself (some situations related
>> to the ca or ac3, I guess), thus starting the new receiver in the
>> primary device, which could cause side-effects if the card's bandwidth
>> is not wide enough. However, even without this patch, when a recording
>> is already taking place on the primary device, this rule matches and
>> another recording could be started on the primary device. I don't know
>> if we should be preventing these from happening, but if we do, I think
>> we could make the rule as
>> imp |= !device[i]->Receiving() && (device[i] !=
>> cTransferControl::ReceiverDevice() || device[i]->IsPrimaryDevice()) ||
>> ndr // prevents matching local-transfer-moded primary-device
>> or
>> imp |= !device[i]->Receiving() && device[i] !=
>> cTransferControl::ReceiverDevice() || device[i]->IsPrimaryDevice() ||
>> ndr // addidtionally prevents matching recording primary-devices
> 
> I'm not sure about changing anything in that area in any 1.4 maintenance patch.
> 
> If this gets changed at all, it will be in the 1.5 developer version.
> So please provide a patch for that version, possibly including all the
> thoughts that have come up in this thread.

Attached is a patch against 1.5.2. I changed it so that primary devices 
in local transfer mode are not considered for re-using (I don't know the 
best behaviour here, just trying to minimize the effects of the patch).

I.e. this patch now affects only non-primary devices:
- 2 non-primary devices, one used in transfer mode on transponder A, 
second free
- a new recording / streamdev session starts on transponder A
* Before:
The new recording starts on the free device.
* After:
The new recording starts on the already-tuned device.

-- 
Anssi Hannula
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vdr-1.5.2-getdevice-b.diff
Type: text/x-patch
Size: 1564 bytes
Desc: not available
Url : http://www.linuxtv.org/pipermail/vdr/attachments/20070429/639aede6/vdr-1.5.2-getdevice-b.bin


More information about the vdr mailing list