[vlc-devel] [PATCH 06/14] direct3d9: move D3D9_Create/D3D9_Destroy in libd3d9_cmmon
Steve Lhomme
robux4 at videolabs.io
Sat Nov 18 14:26:39 CET 2017
---
modules/video_chroma/d3d9_fmt.c | 62 ++++++++++++++++++++++++++++++++
modules/video_chroma/d3d9_fmt.h | 4 +++
modules/video_output/win32/direct3d9.c | 66 ++--------------------------------
3 files changed, 68 insertions(+), 64 deletions(-)
diff --git a/modules/video_chroma/d3d9_fmt.c b/modules/video_chroma/d3d9_fmt.c
index 833ba6e6cf..f2a5505a54 100644
--- a/modules/video_chroma/d3d9_fmt.c
+++ b/modules/video_chroma/d3d9_fmt.c
@@ -171,3 +171,65 @@ int D3D9_FillPresentationParameters(vlc_object_t *o, d3d9_handle_t *hd3d, UINT A
return VLC_SUCCESS;
}
+
+void D3D9_Destroy(d3d9_handle_t *hd3d)
+{
+ if (hd3d->obj)
+ {
+ IDirect3D9_Release(hd3d->obj);
+ hd3d->obj = NULL;
+ }
+ if (hd3d->hdll)
+ {
+ FreeLibrary(hd3d->hdll);
+ hd3d->hdll = NULL;
+ }
+}
+
+/**
+ * It initializes an instance of Direct3D9
+ */
+#undef D3D9_Create
+int D3D9_Create(vlc_object_t *o, d3d9_handle_t *hd3d)
+{
+ hd3d->hdll = LoadLibrary(TEXT("D3D9.DLL"));
+ if (!hd3d->hdll) {
+ msg_Warn(o, "cannot load d3d9.dll, aborting");
+ return VLC_EGENERIC;
+ }
+
+ LPDIRECT3D9 (WINAPI *OurDirect3DCreate9)(UINT SDKVersion);
+ OurDirect3DCreate9 =
+ (void *)GetProcAddress(hd3d->hdll, "Direct3DCreate9");
+ if (!OurDirect3DCreate9) {
+ msg_Err(o, "Cannot locate reference to Direct3DCreate9 ABI in DLL");
+ goto error;
+ }
+
+ HRESULT (WINAPI *OurDirect3DCreate9Ex)(UINT SDKVersion, IDirect3D9Ex **ppD3D);
+ OurDirect3DCreate9Ex =
+ (void *)GetProcAddress(hd3d->hdll, "Direct3DCreate9Ex");
+
+ /* Create the D3D object. */
+ hd3d->use_ex = false;
+ if (OurDirect3DCreate9Ex) {
+ HRESULT hr = OurDirect3DCreate9Ex(D3D_SDK_VERSION, &hd3d->objex);
+ if(!FAILED(hr)) {
+ msg_Dbg(o, "Using Direct3D9 Extended API!");
+ hd3d->use_ex = true;
+ }
+ }
+
+ if (!hd3d->obj)
+ {
+ hd3d->obj = OurDirect3DCreate9(D3D_SDK_VERSION);
+ if (!hd3d->obj) {
+ msg_Err(o, "Could not create Direct3D9 instance.");
+ goto error;
+ }
+ }
+ return VLC_SUCCESS;
+error:
+ D3D9_Destroy( hd3d );
+ return VLC_EGENERIC;
+}
diff --git a/modules/video_chroma/d3d9_fmt.h b/modules/video_chroma/d3d9_fmt.h
index b793717b9a..8fd22140d6 100644
--- a/modules/video_chroma/d3d9_fmt.h
+++ b/modules/video_chroma/d3d9_fmt.h
@@ -78,6 +78,10 @@ HRESULT D3D9_CreateDevice(vlc_object_t *, d3d9_handle_t *, HWND,
#define D3D9_CreateDevice(a,b,c,d,e) D3D9_CreateDevice( VLC_OBJECT(a), b, c, d, e )
void D3D9_ReleaseDevice(d3d9_device_t *);
+int D3D9_Create(vlc_object_t *, d3d9_handle_t *);
+#define D3D9_Create(a,b) D3D9_Create( VLC_OBJECT(a), b )
+
+void D3D9_Destroy(d3d9_handle_t *);
int D3D9_FillPresentationParameters(vlc_object_t *, d3d9_handle_t *, UINT AdapterToUse, HWND,
const video_format_t *, d3d9_device_t *out);
diff --git a/modules/video_output/win32/direct3d9.c b/modules/video_output/win32/direct3d9.c
index 4aed47b6b1..df35bc55e1 100644
--- a/modules/video_output/win32/direct3d9.c
+++ b/modules/video_output/win32/direct3d9.c
@@ -184,7 +184,6 @@ static picture_pool_t*DisplayPool(vout_display_t *, unsigned);
static int Control(vout_display_t *, int, va_list);
static void Manage (vout_display_t *);
-static int D3D9_Create(vlc_object_t *, d3d9_handle_t *);
static int Direct3D9Reset (vout_display_t *);
static void Direct3D9Destroy(struct d3dctx *);
@@ -265,7 +264,7 @@ static int Open(vlc_object_t *object)
if (!sys)
return VLC_ENOMEM;
- if (D3D9_Create(VLC_OBJECT(vd), &sys->d3dctx.hd3d)) {
+ if (D3D9_Create(vd, &sys->d3dctx.hd3d)) {
msg_Err(vd, "Direct3D9 could not be initialized");
free(sys);
return VLC_EGENERIC;
@@ -734,73 +733,12 @@ static void Manage (vout_display_t *vd)
}
}
-static void D3D9_Release(d3d9_handle_t *hd3d)
-{
- if (hd3d->obj)
- {
- IDirect3D9_Release(hd3d->obj);
- hd3d->obj = NULL;
- }
- if (hd3d->hdll)
- {
- FreeLibrary(hd3d->hdll);
- hd3d->hdll = NULL;
- }
-}
-
-/**
- * It initializes an instance of Direct3D9
- */
-static int D3D9_Create(vlc_object_t *o, d3d9_handle_t *hd3d)
-{
- hd3d->hdll = LoadLibrary(TEXT("D3D9.DLL"));
- if (!hd3d->hdll) {
- msg_Warn(o, "cannot load d3d9.dll, aborting");
- return VLC_EGENERIC;
- }
-
- LPDIRECT3D9 (WINAPI *OurDirect3DCreate9)(UINT SDKVersion);
- OurDirect3DCreate9 =
- (void *)GetProcAddress(hd3d->hdll, "Direct3DCreate9");
- if (!OurDirect3DCreate9) {
- msg_Err(o, "Cannot locate reference to Direct3DCreate9 ABI in DLL");
- goto error;
- }
-
- HRESULT (WINAPI *OurDirect3DCreate9Ex)(UINT SDKVersion, IDirect3D9Ex **ppD3D);
- OurDirect3DCreate9Ex =
- (void *)GetProcAddress(hd3d->hdll, "Direct3DCreate9Ex");
-
- /* Create the D3D object. */
- hd3d->use_ex = false;
- if (OurDirect3DCreate9Ex) {
- HRESULT hr = OurDirect3DCreate9Ex(D3D_SDK_VERSION, &hd3d->objex);
- if(!FAILED(hr)) {
- msg_Dbg(o, "Using Direct3D9 Extended API!");
- hd3d->use_ex = true;
- }
- }
-
- if (!hd3d->obj)
- {
- hd3d->obj = OurDirect3DCreate9(D3D_SDK_VERSION);
- if (!hd3d->obj) {
- msg_Err(o, "Could not create Direct3D9 instance.");
- goto error;
- }
- }
- return VLC_SUCCESS;
-error:
- D3D9_Release( hd3d );
- return VLC_EGENERIC;
-}
-
/**
* It releases an instance of Direct3D9
*/
static void Direct3D9Destroy(struct d3dctx *d3dctx)
{
- D3D9_Release( &d3dctx->hd3d );
+ D3D9_Destroy( &d3dctx->hd3d );
if (d3dctx->hxdll)
{
--
2.14.2
More information about the vlc-devel
mailing list