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

Steve Lhomme robux4 at ycbcr.xyz
Mon Jul 8 08:57:50 CEST 2019


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.

> 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
> 


More information about the vlc-devel mailing list