[vlc-devel] [PATCH 06/31] decoder: let the decoder device know it's force created

Thomas Guillem thomas at gllm.fr
Mon Jul 8 10:26:38 CEST 2019



On Mon, Jul 8, 2019, at 09:00, Steve Lhomme wrote:
> On 2019-07-06 17:01, Rémi Denis-Courmont wrote:
> > Hi,
> > 
> > That won't work properly if the "dec-dev" module list has more than one element. Using the force flag is rarely a good idea, if ever.
> 
> Do we want to set multiple possibilities to load a "dec-dev" ? Given it 
> kinda replaces avcodec-hw it doesn't seem to make sense to allow more 
> than one set by the user.
> 
> If the user set "direct3d9,direct3d11" then direct3d9 will be loaded 
> first, even though its priority is lower than direct3d11. It will then 
> be picked regardless of direct3d11. The force flag is only useful to 
> pick direct3d9 when direct3d11 would have been picked otherwise in 
> automatic mode.

+1

> 
> > Le 5 juillet 2019 17:19:45 GMT+03:00, Steve Lhomme <robux4 at ycbcr.xyz> a écrit :
> >> When selecting between D3D11 and D3D9 on Windows we need to know if the
> >> decoder
> >> device may be optional or not (with external rendering it's not).
> >> ---
> >> include/vlc_codec.h                           | 3 ++-
> >> modules/hw/d3d9/d3d9_device.c                 | 3 ++-
> >> modules/hw/d3d9/d3d9_filters.h                | 2 +-
> >> modules/hw/vaapi/decoder_device.c             | 3 ++-
> >> modules/video_output/opengl/converter_vdpau.c | 3 ++-
> >> modules/video_output/win32/direct3d9.c        | 5 +++--
> >> src/input/decoder_helpers.c                   | 3 +--
> >> 7 files changed, 13 insertions(+), 9 deletions(-)
> >>
> >> diff --git a/include/vlc_codec.h b/include/vlc_codec.h
> >> index 223550ce9c..a2f81756b5 100644
> >> --- a/include/vlc_codec.h
> >> +++ b/include/vlc_codec.h
> >> @@ -527,10 +527,11 @@ typedef struct vlc_decoder_device
> >>   * "decoder device" module open entry point
> >>   *
> >>   * @param device the "decoder device" structure to initialize
> >> + * @param forced whether the module is forced loaded or not
> >> * @param window pointer to a window to help device initialization (can
> >> be NULL)
> >>   **/
> >> typedef int (*vlc_decoder_device_Open)(vlc_decoder_device *device,
> >> -                                        vout_window_t *window);
> >> +                                       bool forced, vout_window_t
> >> *window);
> >> /** "decoder device" module close entry point */
> >> typedef void (*vlc_decoder_device_Close)(vlc_decoder_device *device);
> >>
> >> diff --git a/modules/hw/d3d9/d3d9_device.c
> >> b/modules/hw/d3d9/d3d9_device.c
> >> index aefc813b7a..acf7c31475 100644
> >> --- a/modules/hw/d3d9/d3d9_device.c
> >> +++ b/modules/hw/d3d9/d3d9_device.c
> >> @@ -47,8 +47,9 @@ typedef struct {
> >>      d3d9_decoder_device_t                    dec_device;
> >> } d3d9_decoder_device;
> >>
> >> -int D3D9OpenDecoderDevice(vlc_decoder_device *device, vout_window_t
> >> *wnd)
> >> +int D3D9OpenDecoderDevice(vlc_decoder_device *device, bool forced,
> >> vout_window_t *wnd)
> >> {
> >> +    VLC_UNUSED(forced);
> >> d3d9_decoder_device *sys = vlc_obj_malloc(VLC_OBJECT(device),
> >> sizeof(*sys));
> >>      if (unlikely(sys==NULL))
> >>          return VLC_ENOMEM;
> >> diff --git a/modules/hw/d3d9/d3d9_filters.h
> >> b/modules/hw/d3d9/d3d9_filters.h
> >> index 7819b12782..189c76f9f6 100644
> >> --- a/modules/hw/d3d9/d3d9_filters.h
> >> +++ b/modules/hw/d3d9/d3d9_filters.h
> >> @@ -35,7 +35,7 @@ void D3D9CloseConverter(vlc_object_t *);
> >> int  D3D9OpenCPUConverter(vlc_object_t *);
> >> void D3D9CloseCPUConverter(vlc_object_t *);
> >>
> >> -int D3D9OpenDecoderDevice(vlc_decoder_device *, vout_window_t *);
> >> +int D3D9OpenDecoderDevice(vlc_decoder_device *, bool, vout_window_t
> >> *);
> >> void D3D9CloseDecoderDevice(vlc_decoder_device *);
> >>
> >> void D3D9_FilterHoldInstance(filter_t *, d3d9_device_t *,
> >> D3DSURFACE_DESC *);
> >> diff --git a/modules/hw/vaapi/decoder_device.c
> >> b/modules/hw/vaapi/decoder_device.c
> >> index 5efe9e635b..e9f1e514f8 100644
> >> --- a/modules/hw/vaapi/decoder_device.c
> >> +++ b/modules/hw/vaapi/decoder_device.c
> >> @@ -217,8 +217,9 @@ Close(vlc_decoder_device *device)
> >> }
> >>
> >> static int
> >> -Open(vlc_decoder_device *device, vout_window_t *window)
> >> +Open(vlc_decoder_device *device, bool forced, vout_window_t *window)
> >> {
> >> +    VLC_UNUSED(forced);
> >>      VADisplay vadpy = NULL;
> >>      struct vaapi_instance *vainst = NULL;
> >> #if defined (HAVE_VA_X11)
> >> diff --git a/modules/video_output/opengl/converter_vdpau.c
> >> b/modules/video_output/opengl/converter_vdpau.c
> >> index d40d5d181f..b76878a05d 100644
> >> --- a/modules/video_output/opengl/converter_vdpau.c
> >> +++ b/modules/video_output/opengl/converter_vdpau.c
> >> @@ -185,8 +185,9 @@ DecoderContextClose(vlc_decoder_device *device)
> >> }
> >>
> >> static int
> >> -DecoderContextOpen(vlc_decoder_device *device, vout_window_t *window)
> >> +DecoderContextOpen(vlc_decoder_device *device, bool forced,
> >> vout_window_t *window)
> >> {
> >> +    VLC_UNUSED(forced);
> >>      if (!window || !vlc_xlib_init(VLC_OBJECT(window)))
> >>          return VLC_EGENERIC;
> >>
> >> diff --git a/modules/video_output/win32/direct3d9.c
> >> b/modules/video_output/win32/direct3d9.c
> >> index e625c22d48..7fafcb7a07 100644
> >> --- a/modules/video_output/win32/direct3d9.c
> >> +++ b/modules/video_output/win32/direct3d9.c
> >> @@ -73,7 +73,7 @@ static int  Open(vout_display_t *, const
> >> vout_display_cfg_t *,
> >>                   video_format_t *, vlc_video_context *);
> >> static void Close(vout_display_t *);
> >>
> >> -static int OpenD3D9DecoderDevice(vlc_decoder_device *, vout_window_t
> >> *);
> >> +static int OpenD3D9DecoderDevice(vlc_decoder_device *, bool,
> >> vout_window_t *);
> >> static void CloseD3D9DecoderDevice(vlc_decoder_device *);
> >>
> >> static int  GLConvOpen(vlc_object_t *);
> >> @@ -1995,9 +1995,10 @@ struct local_render_device
> >>      d3d9_decoder_device_t device;
> >> };
> >>
> >> -static int OpenD3D9DecoderDevice(vlc_decoder_device *device,
> >> vout_window_t *wnd)
> >> +static int OpenD3D9DecoderDevice(vlc_decoder_device *device, bool
> >> forced, vout_window_t *wnd)
> >> {
> >>      VLC_UNUSED(wnd);
> >> +    VLC_UNUSED(forced);
> >> struct local_render_device *display =
> >> vlc_obj_calloc(VLC_OBJECT(device), 1, sizeof(*display));
> >>      if (unlikely(display == NULL))
> >>          return VLC_ENOMEM;
> >> diff --git a/src/input/decoder_helpers.c b/src/input/decoder_helpers.c
> >> index 7384e2bda0..f484180371 100644
> >> --- a/src/input/decoder_helpers.c
> >> +++ b/src/input/decoder_helpers.c
> >> @@ -105,7 +105,7 @@ static int decoder_device_Open(void *func, bool
> >> forced, va_list ap)
> >>      vlc_decoder_device_Open open = func;
> >>      vlc_decoder_device *device = va_arg(ap, vlc_decoder_device *);
> >>      vout_window_t *window = va_arg(ap, vout_window_t *);
> >> -    int ret = open(device, window);
> >> +    int ret = open(device, forced, window);
> >>      if (ret != VLC_SUCCESS)
> >>      {
> >>          device->sys = NULL;
> >> @@ -116,7 +116,6 @@ static int decoder_device_Open(void *func, bool
> >> forced, va_list ap)
> >>      {
> >>          assert(device->type != VLC_DECODER_DEVICE_NONE);
> >>      }
> >> -    (void) forced;
> >>      return ret;
> >> }
> >>
> >> -- 
> >> 2.17.1
> >>
> >> _______________________________________________
> >> 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