[vlc-devel] [PATCH 3/4] video_output: try to create a decoder device even if creating the window failed

Steve Lhomme robux4 at ycbcr.xyz
Mon Jan 13 15:59:45 CET 2020


On 2020-01-13 15:54, Thomas Guillem wrote:
> 
> On Mon, Jan 13, 2020, at 15:47, Rémi Denis-Courmont wrote:
>> Hi,
>>
>> Does VA require an actual window? I'd think it only requires a 
>> display, so a vout_window_t in disabled state should suffice.
> 
> Indeed, we don't have any API that require an enabled window.
> VA only need:
>      Display *x11dpy = XOpenDisplay(window->display.x11);
>      VADisplay vadpy = *vadpyp = vaGetDisplay(x11dpy);
> 
> So, I think we could simplify everything by not requiring an enabled 
> window. I that case, you can load the window module, and create the 
> decoder device without a valid size.

Luckily that may be what this patch does. It's using 
sys->display_cfg.window regarless of its state. It may be NULL or set 
but not enabled.

>>
>> Le 13 janvier 2020 15:56:43 GMT+02:00, Thomas Guillem <thomas at gllm.fr> 
>> a écrit :
>>
>>
>>     On Mon, Jan 13, 2020, at 13:35, Steve Lhomme wrote:
>>
>>         "In some cases (nvdec, mmal, mediacodec ?) the actual size of
>>         the video
>>         to decode is known only after data have been processed, long
>>         after the
>>         device is setup to use with this API. There are hacks to try
>>         to guess
>>         the size early but in the end it's just a hack."
>>
>>
>>     What to we do when we have a hw decoder that doesn't know its
>>     actual size but a window is required ? (vaapi).
>>
>>     >
>>
>>         This removes the need for these hacks for those using a
>>         decoder device
>>         that doesn't need a window.
>>
>>         On 2020-01-13 13:27, Alexandre Janniaux wrote:
>>
>>             Hi,
>>
>>             This looks dangerous if it is expected to have an enabled
>>             window at decoder device creation. vout_window handle
>>             values will basically be undefined without any way for the
>>             decoder device to know it. Why do you need this?
>>
>>             Regards,
>>             --
>>             Alexandre Janniaux
>>             Videolabs
>>
>>             On Mon, Jan 13, 2020 at 12:07:33PM +0100, Steve Lhomme wrote:
>>
>>                 ------------------------------------------------------------------------
>>                 src/video_output/video_output.c | 20 +++++++++-----------
>>                 1 file changed, 9 insertions(+), 11 deletions(-)
>>
>>                 diff --git a/src/video_output/video_output.c
>>                 b/src/video_output/video_output.c
>>                 index 5d583dbe0ca..9540707ab2b 100644
>>                 --- a/src/video_output/video_output.c
>>                 +++ b/src/video_output/video_output.c
>>                 @@ -2099,20 +2099,18 @@ vlc_decoder_device
>>                 *vout_GetDevice(const vout_device_configuration_t *cfg)
>>                 assert(cfg->fmt != NULL);
>>                 vout_thread_sys_t *sys = cfg->vout->p;
>>
>>                 - if (!VoutCheckFormat(cfg->fmt))
>>                 - return NULL;
>>                 -
>>                 - video_format_t original;
>>                 - VoutFixFormat(&original, cfg->fmt);
>>                 -
>>                 vlc_mutex_lock(&sys->window_lock);
>>                 - int res = EnableWindowLocked(cfg->vout, &original);
>>                 - if (res == 0 && sys->dec_device == NULL)
>>                 + if (VoutCheckFormat(cfg->fmt))
>>                 + {
>>                 + video_format_t original;
>>                 + VoutFixFormat(&original, cfg->fmt);
>>                 +
>>                 + EnableWindowLocked(cfg->vout, &original);
>>                 + video_format_Clean(&original);
>>                 + }
>>                 + if (sys->dec_device == NULL)
>>                 sys->dec_device =
>>                 vlc_decoder_device_Create(&cfg->vout->obj,
>>                 sys->display_cfg.window);
>>                 dec_device = sys->dec_device ?
>>                 vlc_decoder_device_Hold( sys->dec_device ) : NULL;
>>                 vlc_mutex_unlock(&sys->window_lock);
>>                 - video_format_Clean(&original);
>>                 - if (res != 0)
>>                 - return NULL;
>>                 return dec_device;
>>                 }
>>                 --
>>                 2.17.1
>>                 ------------------------------------------------------------------------
>>                 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
>>
>>         ------------------------------------------------------------------------
>>         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
> 
> 
> _______________________________________________
> 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