[vlc-commits] directx_va: move the DXVA2 loading outside of directx_va

Steve Lhomme git at videolan.org
Mon Nov 20 19:14:09 CET 2017


vlc | branch: master | Steve Lhomme <robUx4 at videolabs.io> | Sat Nov 18 14:29:28 2017 +0100| [0bcdc1c4d5fb1797ebd882493519e9bcec855733] | committer: Jean-Baptiste Kempf

directx_va: move the DXVA2 loading outside of directx_va

For D3D11 the same DLL used to create the device is used to create the decoder.
For DXVA2 we need an extra DLL but we don't need to make this code generic.

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

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

 modules/codec/avcodec/directx_va.c | 12 ------------
 modules/codec/avcodec/directx_va.h |  4 ----
 modules/codec/avcodec/dxva2.c      | 17 ++++++++++++++---
 3 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/modules/codec/avcodec/directx_va.c b/modules/codec/avcodec/directx_va.c
index 7554604b51..9b4f20cf72 100644
--- a/modules/codec/avcodec/directx_va.c
+++ b/modules/codec/avcodec/directx_va.c
@@ -330,22 +330,10 @@ int directx_va_Setup(vlc_va_t *va, directx_sys_t *dx_sys, const AVCodecContext *
 void directx_va_Close(vlc_va_t *va, directx_sys_t *dx_sys)
 {
     va_pool_Close(va, &dx_sys->va_pool);
-    if (dx_sys->hdecoder_dll)
-        FreeLibrary(dx_sys->hdecoder_dll);
 }
 
 int directx_va_Open(vlc_va_t *va, directx_sys_t *dx_sys)
 {
-    if (dx_sys->psz_decoder_dll) {
-        /* Load dll*/
-        dx_sys->hdecoder_dll = LoadLibrary(dx_sys->psz_decoder_dll);
-        if (!dx_sys->hdecoder_dll) {
-            msg_Warn(va, "cannot load DirectX decoder DLL");
-            goto error;
-        }
-        msg_Dbg(va, "DLLs loaded");
-    }
-
     if (va_pool_Open(va, &dx_sys->va_pool) != VLC_SUCCESS)
         goto error;
 
diff --git a/modules/codec/avcodec/directx_va.h b/modules/codec/avcodec/directx_va.h
index 4219394e53..7dbef97abb 100644
--- a/modules/codec/avcodec/directx_va.h
+++ b/modules/codec/avcodec/directx_va.h
@@ -59,10 +59,6 @@ typedef struct
     /* for pre allocation */
     D3D_DecoderSurface     *hw_surface[MAX_SURFACE_COUNT];
 
-    /* DLL */
-    HINSTANCE             hdecoder_dll;
-    const TCHAR           *psz_decoder_dll;
-
     /* Video service */
     GUID                   input;
     D3D_DecoderDevice      *d3ddec;
diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
index fc9a1cae49..f6ecc020e7 100644
--- a/modules/codec/avcodec/dxva2.c
+++ b/modules/codec/avcodec/dxva2.c
@@ -115,6 +115,9 @@ struct vlc_va_sys_t
     d3d9_handle_t          hd3d;
     d3d9_device_t          d3d_dev;
 
+    /* DLL */
+    HINSTANCE              dxva2_dll;
+
     /* Device manager */
     IDirect3DDeviceManager9  *devmng;
     HANDLE                   device;
@@ -241,6 +244,9 @@ static void Close(vlc_va_t *va, void **ctx)
 
     directx_va_Close(va, &sys->dx_sys);
 
+    if (sys->dxva2_dll)
+        FreeLibrary(sys->dxva2_dll);
+
     free((char *)va->description);
     free(sys);
 }
@@ -266,6 +272,13 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
         goto error;
     }
 
+    /* Load dll*/
+    sys->dxva2_dll = LoadLibrary(TEXT("DXVA2.DLL"));
+    if (!sys->dxva2_dll) {
+        msg_Warn(va, "cannot load DXVA2 decoder DLL");
+        goto error;
+    }
+
     dx_sys = &sys->dx_sys;
 
     dx_sys->va_pool.pf_create_device           = D3dCreateDevice;
@@ -280,7 +293,6 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
     dx_sys->va_pool.pf_new_surface_context     = NewSurfacePicContext;
     dx_sys->pf_get_input_list          = DxGetInputList;
     dx_sys->pf_setup_output            = DxSetupOutput;
-    dx_sys->psz_decoder_dll            = TEXT("DXVA2.DLL");
 
     va->sys = sys;
 
@@ -391,12 +403,11 @@ static char *DxDescribe(vlc_va_sys_t *sys)
 static int D3dCreateDeviceManager(vlc_va_t *va)
 {
     vlc_va_sys_t *sys = va->sys;
-    directx_sys_t *dx_sys = &va->sys->dx_sys;
 
     HRESULT (WINAPI *CreateDeviceManager9)(UINT *pResetToken,
                                            IDirect3DDeviceManager9 **);
     CreateDeviceManager9 =
-      (void *)GetProcAddress(dx_sys->hdecoder_dll,
+      (void *)GetProcAddress(sys->dxva2_dll,
                              "DXVA2CreateDirect3DDeviceManager9");
 
     if (!CreateDeviceManager9) {



More information about the vlc-commits mailing list