[vlc-devel] [PATCH] directx-va: do not load the DLL if not needed
Steve Lhomme
robux4 at gmail.com
Wed Jun 17 14:26:01 CEST 2015
From: Steve Lhomme <robUx4 at gmail.com>
---
modules/codec/avcodec/d3d11va.c | 2 +-
modules/codec/avcodec/directx_va.c | 16 +++++++++-------
modules/codec/avcodec/directx_va.h | 2 +-
modules/codec/avcodec/dxva2.c | 2 +-
4 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c
index 65a136f..5c27077 100644
--- a/modules/codec/avcodec/d3d11va.c
+++ b/modules/codec/avcodec/d3d11va.c
@@ -348,7 +348,7 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
}
}
- err = directx_va_Open(va, &sys->dx_sys, ctx, fmt);
+ err = directx_va_Open(va, &sys->dx_sys, ctx, fmt, dx_sys->d3ddev==NULL || va->sys->d3dctx==NULL);
if (err!=VLC_SUCCESS)
goto error;
diff --git a/modules/codec/avcodec/directx_va.c b/modules/codec/avcodec/directx_va.c
index c0b3c93..034a572 100644
--- a/modules/codec/avcodec/directx_va.c
+++ b/modules/codec/avcodec/directx_va.c
@@ -422,20 +422,22 @@ void directx_va_Close(vlc_va_t *va, directx_sys_t *dx_sys)
}
int directx_va_Open(vlc_va_t *va, directx_sys_t *dx_sys,
- AVCodecContext *ctx, const es_format_t *fmt)
+ AVCodecContext *ctx, const es_format_t *fmt, bool b_dll)
{
// TODO va->sys = sys;
dx_sys->codec_id = ctx->codec_id;
vlc_mutex_init( &dx_sys->surface_lock );
- /* 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;
+ if (b_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");
}
- msg_Dbg(va, "DLLs loaded");
/* */
if (dx_sys->pf_create_device(va)) {
diff --git a/modules/codec/avcodec/directx_va.h b/modules/codec/avcodec/directx_va.h
index 3377f85..7559be2 100644
--- a/modules/codec/avcodec/directx_va.h
+++ b/modules/codec/avcodec/directx_va.h
@@ -134,7 +134,7 @@ typedef struct
} directx_sys_t;
-int directx_va_Open(vlc_va_t *, directx_sys_t *, AVCodecContext *ctx, const es_format_t *fmt);
+int directx_va_Open(vlc_va_t *, directx_sys_t *, AVCodecContext *ctx, const es_format_t *fmt, bool b_dll);
void directx_va_Close(vlc_va_t *, directx_sys_t *);
int directx_va_Setup(vlc_va_t *, directx_sys_t *, AVCodecContext *avctx, vlc_fourcc_t *chroma);
int directx_va_Get(vlc_va_t *, directx_sys_t *, picture_t *pic, uint8_t **data);
diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
index 0d1cdfc..d92384b 100644
--- a/modules/codec/avcodec/dxva2.c
+++ b/modules/codec/avcodec/dxva2.c
@@ -357,7 +357,7 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
if (p_sys!=NULL)
IDirect3DSurface9_GetDevice(p_sys->surface, (IDirect3DDevice9**) &dx_sys->d3ddev );
- err = directx_va_Open(va, &sys->dx_sys, ctx, fmt);
+ err = directx_va_Open(va, &sys->dx_sys, ctx, fmt, dx_sys->d3ddev==NULL);
if (err!=VLC_SUCCESS)
goto error;
--
2.4.3
More information about the vlc-devel
mailing list