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

Steve Lhomme robux4 at ycbcr.xyz
Fri Jul 5 16:19:45 CEST 2019


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



More information about the vlc-devel mailing list