[vlc-commits] d3d11: use a helper to get the proper type of the D3D11 decoder device

Steve Lhomme git at videolan.org
Fri Sep 20 13:54:09 CEST 2019


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Fri Sep 20 09:19:19 2019 +0200| [8d2782de726f2f9d96859b863cc2330deb06a656] | committer: Steve Lhomme

d3d11: use a helper to get the proper type of the D3D11 decoder device

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8d2782de726f2f9d96859b863cc2330deb06a656
---

 modules/video_chroma/d3d11_fmt.h        | 23 +++++++++++++++++++++++
 modules/video_output/win32/direct3d11.c |  7 ++-----
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/modules/video_chroma/d3d11_fmt.h b/modules/video_chroma/d3d11_fmt.h
index 0f2051c2e7..8afe82bd80 100644
--- a/modules/video_chroma/d3d11_fmt.h
+++ b/modules/video_chroma/d3d11_fmt.h
@@ -23,6 +23,8 @@
 #ifndef VLC_VIDEOCHROMA_D3D11_FMT_H_
 #define VLC_VIDEOCHROMA_D3D11_FMT_H_
 
+#include <vlc_codec.h>
+
 #include <d3d11.h>
 #include <d3dcompiler.h>
 
@@ -96,6 +98,27 @@ static inline bool is_d3d11_opaque(vlc_fourcc_t chroma)
            chroma == VLC_CODEC_D3D11_OPAQUE_BGRA;
 }
 
+static inline d3d11_decoder_device_t *GetD3D11OpaqueDevice(vlc_decoder_device *device)
+{
+    if (device == NULL || device->type != VLC_DECODER_DEVICE_D3D11VA)
+        return NULL;
+    return device->opaque;
+}
+
+static inline d3d11_decoder_device_t *GetD3D11OpaqueContext(vlc_video_context *vctx)
+{
+    vlc_decoder_device *device = vctx ? vctx->device : NULL;
+    if (unlikely(device == NULL))
+        return NULL;
+    d3d11_decoder_device_t *res = NULL;
+    if (device->type == VLC_DECODER_DEVICE_D3D11VA)
+    {
+        assert(device->opaque != NULL);
+        res = GetD3D11OpaqueDevice(device);
+    }
+    return res;
+}
+
 void AcquireD3D11PictureSys(picture_sys_d3d11_t *p_sys);
 
 void ReleaseD3D11PictureSys(picture_sys_d3d11_t *p_sys);
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index 9fa245a5f1..3938f7c176 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -325,12 +325,9 @@ static int Open(vout_display_t *vd, const vout_display_cfg_t *cfg,
     sys->startEndRenderingCb = var_InheritAddress( vd, "vout-cb-make-current" );
     sys->selectPlaneCb       = var_InheritAddress( vd, "vout-cb-select-plane" );
 
-    d3d11_decoder_device_t *d3d11_decoder = NULL;
-    if ( context && context->device->type == VLC_DECODER_DEVICE_D3D11VA )
-        d3d11_decoder = context->device->opaque;
-
     HRESULT hr;
-    if (d3d11_decoder && d3d11_decoder->device)
+    d3d11_decoder_device_t *d3d11_decoder = GetD3D11OpaqueContext(context);
+    if ( d3d11_decoder == NULL )
     {
         hr = D3D11_CreateDeviceExternal(vd, d3d11_decoder->device,
                                         is_d3d11_opaque(vd->source.i_chroma),



More information about the vlc-commits mailing list