[vlc-devel] [PATCH 09/14] d3d11: use D3D11_Create and D3D11_Destroy
Steve Lhomme
robux4 at videolabs.io
Sat Nov 18 14:29:23 CET 2017
---
modules/codec/avcodec/d3d11va.c | 9 ++++++++-
modules/video_output/win32/direct3d11.c | 24 ++----------------------
2 files changed, 10 insertions(+), 23 deletions(-)
diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c
index e94b4287e0..0fcc7b6ab1 100644
--- a/modules/codec/avcodec/d3d11va.c
+++ b/modules/codec/avcodec/d3d11va.c
@@ -109,6 +109,7 @@ struct vlc_va_sys_t
unsigned textureWidth;
unsigned textureHeight;
+ d3d11_handle_t hd3d;
d3d11_device_t d3d_dev;
#if !defined(NDEBUG) && defined(HAVE_DXGIDEBUG_H)
@@ -311,6 +312,8 @@ static void Close(vlc_va_t *va, void **ctx)
directx_va_Close(va, &sys->dx_sys);
+ D3D11_Destroy( &sys->hd3d );
+
#if !defined(NDEBUG) && defined(HAVE_DXGIDEBUG_H)
if (sys->dxgidebug_dll)
FreeLibrary(sys->dxgidebug_dll);
@@ -390,6 +393,10 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat pix_fmt,
va->sys->textureHeight = fmt->video.i_height;
}
+ err = D3D11_Create( va, &sys->hd3d );
+ if (err != VLC_SUCCESS)
+ goto error;
+
#if VLC_WINSTORE_APP
err = directx_va_Open(va, &sys->dx_sys, false);
#else
@@ -431,7 +438,7 @@ static int D3dCreateDevice(vlc_va_t *va)
}
/* */
- hr = D3D11_CreateDevice(va, dx_sys->hdecoder_dll, true, &sys->d3d_dev);
+ hr = D3D11_CreateDevice(va, &sys->hd3d, true, &sys->d3d_dev);
if (FAILED(hr)) {
msg_Err(va, "D3D11CreateDevice failed. (hr=0x%lX)", hr);
return VLC_EGENERIC;
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index ceb4d34c4c..85eeb643fe 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -139,9 +139,6 @@ struct vout_display_sys_t
HINSTANCE hdxgi_dll; /* handle of the opened dxgi dll */
d3d11_handle_t hd3d;
HINSTANCE hd3dcompiler_dll; /* handle of the opened d3dcompiler dll */
- /* We should find a better way to store this or atleast a shorter name */
- PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN OurD3D11CreateDeviceAndSwapChain;
- PFN_D3D11_CREATE_DEVICE OurD3D11CreateDevice;
pD3DCompile OurD3DCompile;
#endif
#if defined(HAVE_ID3D11VIDEODECODER)
@@ -418,11 +415,8 @@ static int OpenHwnd(vout_display_t *vd)
if (!sys)
return VLC_ENOMEM;
- sys->hd3d.hdll = LoadLibrary(TEXT("D3D11.DLL"));
- if (!sys->hd3d.hdll) {
- msg_Warn(vd, "cannot load d3d11.dll, aborting");
+ if (D3D11_Create(vd, &sys->hd3d) != VLC_SUCCESS)
return VLC_EGENERIC;
- }
sys->hd3dcompiler_dll = Direct3D11LoadShaderLibrary();
if (!sys->hd3dcompiler_dll) {
@@ -437,14 +431,6 @@ static int OpenHwnd(vout_display_t *vd)
Direct3D11Destroy(vd);
return VLC_EGENERIC;
}
-
- sys->OurD3D11CreateDevice =
- (void *)GetProcAddress(sys->hd3d.hdll, "D3D11CreateDevice");
- if (!sys->OurD3D11CreateDevice) {
- msg_Err(vd, "Cannot locate reference to D3D11CreateDevice in d3d11 DLL");
- Direct3D11Destroy(vd);
- return VLC_EGENERIC;
- }
return VLC_SUCCESS;
}
#else
@@ -1242,20 +1228,14 @@ static void Direct3D11Destroy(vout_display_t *vd)
#if !VLC_WINSTORE_APP
vout_display_sys_t *sys = vd->sys;
- if (sys->hd3d.hdll)
- FreeLibrary(sys->hd3d.hdll);
if (sys->hd3dcompiler_dll)
FreeLibrary(sys->hd3dcompiler_dll);
- sys->OurD3D11CreateDevice = NULL;
- sys->OurD3D11CreateDeviceAndSwapChain = NULL;
sys->OurD3DCompile = NULL;
sys->hdxgi_dll = NULL;
- sys->hd3d.hdll = NULL;
sys->hd3dcompiler_dll = NULL;
-#else
- VLC_UNUSED(vd);
#endif
+ D3D11_Destroy( &vd->sys->hd3d );
}
#if !VLC_WINSTORE_APP
--
2.14.2
More information about the vlc-devel
mailing list