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

Thomas Guillem thomas at gllm.fr
Mon Jan 13 16:03:00 CET 2020



On Mon, Jan 13, 2020, at 15:59, Steve Lhomme wrote:
> 
> 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.

I disagree with this patch. It add one more complexity, different bugs because the decoder device was created with or without a window because the decoder probed it during Open() or when the size was known...

What  not requiring the window to be 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
> > 
> _______________________________________________
> 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