[vlc-devel] [PATCH] vout: create/release the decoder device when the window is enabled/disabled

Steve Lhomme robux4 at ycbcr.xyz
Thu Sep 19 14:29:36 CEST 2019


On 2019-09-19 14:06, Rémi Denis-Courmont wrote:
> No. The name is correct. That's thewhole point of distinguish between decoder device and video context.

It's not and we already said it at the workshop. First we wanted to call 
it "decoder hint". That's why my push branches are currently called 
push/hint/XXX to use that new design.

I also raised the point that it will also be used to create encoders so 
the "decoder" name is not really fitting.

> The decoder device abstracts the video decoding DSP, and shields the decoder abstraction from depending on windowing systems (so that headless decoding is possible).

Yes, it's a hint. About what the end of the pipeline is going to use (in 
transcoding the encoder is the end of the pipeline).

> The video context provides abstracts the GPU for video processing purpose - filter, conversion, blend and render.

> The video context is guaranteed to have a window underneath it,

That contradicts your "headless decoding is possible" 2 lines above.

 > since rendering may depend on the intended display controller.

The "decoder device/adapter hint" is there to avoid useless copies as 
some point. But if the video context(s) pushed in the pipeline is does 
not match the hint there will be some conversion needed (or the pipeline 
simply can't work).

For example for D3D11 external rendering the D3D11 device/adapter from 
the host app is kept in the "decoder device". The D3D11 render *has* to 
use this device/adapter. It's more than a hint. But the decoder may not 
use it. It could be NVDEC for example, pushing a NVDEC video context. A 
converter will be used to adapt this video context to the D3D11 display 
module format.

> Le 19 septembre 2019 10:19:13 GMT+03:00, Steve Lhomme <robux4 at ycbcr.xyz> a écrit :
>> On 2019-09-19 8:40, Rémi Denis-Courmont wrote:
>>> It's called "decoder device" because it's for the decoder.
>>
>> The name itself is not correct. As explained, it is also used by
>> filters
>> to create video context from scratch (that will output pictures
>> compatible with the "decoder device" used by the display module). We
>> could call it "output device" or even "output adapter" since it seems
>> to
>> always be tied to a display adapter.
>>
>> In the case of transcoding it's actually the device used by the
>> encoder,
>> that the decoder needs to try to match.
>>
>> As Alexandre reminded, it's mostly a hint for the decoder (and filters)
>>
>> to match the output. So we could also call it "device hint".
>>
>>> And the decoder device does not have to come from a window. That's
>> not how it's going to work for transcoding.
>>
>> It doesn't have to in most cases. But for devices like VAAPI it needs
>> to
>> know the type and ID of the window so the decoder can actually be used
>> (not sure if there are encoders for VAAPI and if they can use a dummy
>> VADisplay value). See the Open() of the VAAPI decoder device [1]. No
>> window => no "decoder device". No "decoder device" => no decoder.
>>
>> We actually designed the "decoder device" during the workshop because
>> of
>> that. I did not originally go that way since on Windows I never need to
>>
>> know the window (and in fact I can't know the adapter from the HWND).
>>
>> [1]
>> https://code.videolan.org/videolan/vlc/blob/master/modules/hw/vaapi/decoder_device.c#L223
>>
>>> Le 19 septembre 2019 09:30:30 GMT+03:00, Steve Lhomme
>> <robux4 at ycbcr.xyz> a écrit :
>>>> On 2019-09-19 8:11, Steve Lhomme wrote:
>>>>> On 2019-09-18 18:16, Rémi Denis-Courmont wrote:
>>>>>> Le keskiviikkona 18. syyskuuta 2019, 17.13.18 EEST Steve Lhomme a
>>>> écrit :
>>>>>>> The decoder device ("dec-dev") should be tied to the lifecyle of
>>>> the
>>>>>>> window.
>>>>>>
>>>>>> Well, no. It's tied to an enabled window, which is longer than a
>>>> vout,
>>>>>> but
>>>>>> shorter than a window.
>>>>>
>>>>> I can change it to:
>>>>> The decoder device ("dec-dev") should be tied to the lifecyle of an
>>>>> enabled window.
>>>>>
>>>>>> And AFAIK, the vout should not know about the decoder or decoder
>>>>>> device at
>>>>>> all. It should use the video context only.
>>>>>
>>>>> And how do you plan to convey this decoder device instance to the
>>>>> decoder/filters without going through the vout ?
>>>>
>>>> For the record, the decoder device is created with a vout_window_t,
>>>> because in some cases (VAAPI for example) it needs to know about
>> which
>>>> window is used. This vout_window_t is created and stored by the
>> vout.
>>>> _______________________________________________
>>>> vlc-devel mailing list
>>>> To unsubscribe or modify your subscription options:
>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>
>>> -- 
>>> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez
>> excuser ma brièveté.
>>>
>>>
>>> _______________________________________________
>>> vlc-devel mailing list
>>> To unsubscribe or modify your subscription options:
>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
> 
> -- 
> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
> 
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
> 


More information about the vlc-devel mailing list