diff options
-rw-r--r-- | video/decode/d3d.c | 12 | ||||
-rw-r--r-- | video/decode/d3d.h | 5 | ||||
-rw-r--r-- | video/out/opengl/angle_common.c | 13 | ||||
-rw-r--r-- | video/out/opengl/angle_common.h | 13 | ||||
-rw-r--r-- | video/out/opengl/hwdec_d3d11egl.c | 2 | ||||
-rw-r--r-- | video/out/opengl/hwdec_d3d11eglrgb.c | 5 | ||||
-rw-r--r-- | video/out/opengl/hwdec_dxva2egl.c | 12 | ||||
-rw-r--r-- | wscript_build.py | 3 |
8 files changed, 27 insertions, 38 deletions
diff --git a/video/decode/d3d.c b/video/decode/d3d.c index 59d2a81664..5c65da469f 100644 --- a/video/decode/d3d.c +++ b/video/decode/d3d.c @@ -266,3 +266,15 @@ void copy_nv12(struct mp_image *dest, uint8_t *src_bits, buf.stride[1] = src_pitch; mp_image_copy_gpu(dest, &buf); } + +// Test if Direct3D11 can be used by us. Basically, this prevents trying to use +// D3D11 on Win7, and then failing somewhere in the process. +bool d3d11_check_decoding(ID3D11Device *dev) +{ + HRESULT hr; + // We assume that NV12 is always supported, if hw decoding is supported at + // all. + UINT supported = 0; + hr = ID3D11Device_CheckFormatSupport(dev, DXGI_FORMAT_NV12, &supported); + return !FAILED(hr) && (supported & D3D11_BIND_DECODER); +} diff --git a/video/decode/d3d.h b/video/decode/d3d.h index 15c423ab8c..16a8dc0258 100644 --- a/video/decode/d3d.h +++ b/video/decode/d3d.h @@ -19,6 +19,9 @@ #define MPV_DECODE_D3D_H #include <windows.h> +#include <d3d11.h> + +#include <stdbool.h> #include <inttypes.h> struct mp_image; @@ -62,4 +65,6 @@ BOOL is_clearvideo(const GUID *mode_guid); void copy_nv12(struct mp_image *dest, uint8_t *src_bits, unsigned src_pitch, unsigned surf_height); +bool d3d11_check_decoding(ID3D11Device *dev); + #endif diff --git a/video/out/opengl/angle_common.c b/video/out/opengl/angle_common.c deleted file mode 100644 index 21cc924714..0000000000 --- a/video/out/opengl/angle_common.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "angle_common.h" - -// Test if Direct3D11 can be used by us. Basically, this prevents trying to use -// D3D11 on Win7, and then failing somewhere in the process. -bool d3d11_check_decoding(ID3D11Device *dev) -{ - HRESULT hr; - // We assume that NV12 is always supported, if hw decoding is supported at - // all. - UINT supported = 0; - hr = ID3D11Device_CheckFormatSupport(dev, DXGI_FORMAT_NV12, &supported); - return !FAILED(hr) && (supported & D3D11_BIND_DECODER); -} diff --git a/video/out/opengl/angle_common.h b/video/out/opengl/angle_common.h deleted file mode 100644 index 14ecd6ab3c..0000000000 --- a/video/out/opengl/angle_common.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef MP_ANGLE_COMMON_H -#define MP_ANGLE_COMMON_H - -#include <initguid.h> -#include <assert.h> -#include <windows.h> -#include <d3d11.h> - -#include <stdbool.h> - -bool d3d11_check_decoding(ID3D11Device *dev); - -#endif
\ No newline at end of file diff --git a/video/out/opengl/hwdec_d3d11egl.c b/video/out/opengl/hwdec_d3d11egl.c index 549d3f5cac..1e69d87269 100644 --- a/video/out/opengl/hwdec_d3d11egl.c +++ b/video/out/opengl/hwdec_d3d11egl.c @@ -23,7 +23,6 @@ #include <EGL/egl.h> #include <EGL/eglext.h> -#include "angle_common.h" #include "angle_dynamic.h" #include "common/common.h" @@ -31,6 +30,7 @@ #include "osdep/windows_utils.h" #include "hwdec.h" #include "video/hwdec.h" +#include "video/decode/d3d.h" #ifndef EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE #define EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE 0x3AAB diff --git a/video/out/opengl/hwdec_d3d11eglrgb.c b/video/out/opengl/hwdec_d3d11eglrgb.c index 2e61189154..be8057cde3 100644 --- a/video/out/opengl/hwdec_d3d11eglrgb.c +++ b/video/out/opengl/hwdec_d3d11eglrgb.c @@ -23,7 +23,6 @@ #include <EGL/egl.h> #include <EGL/eglext.h> -#include "angle_common.h" #include "angle_dynamic.h" #include "common/common.h" @@ -31,6 +30,7 @@ #include "osdep/windows_utils.h" #include "hwdec.h" #include "video/hwdec.h" +#include "video/decode/d3d.h" #ifndef EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE #define EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE 0x3AAB @@ -87,6 +87,8 @@ static int create(struct gl_hwdec *hw) if (!angle_load()) return -1; + d3d_load_dlls(); + EGLDisplay egl_display = eglGetCurrentDisplay(); if (!egl_display) return -1; @@ -104,7 +106,6 @@ static int create(struct gl_hwdec *hw) p->egl_display = egl_display; - HANDLE d3d11_dll = GetModuleHandleW(L"d3d11.dll"); if (!d3d11_dll) { if (!hw->probing) MP_ERR(hw, "Failed to load D3D11 library\n"); diff --git a/video/out/opengl/hwdec_dxva2egl.c b/video/out/opengl/hwdec_dxva2egl.c index d67a85bff5..f206b962d1 100644 --- a/video/out/opengl/hwdec_dxva2egl.c +++ b/video/out/opengl/hwdec_dxva2egl.c @@ -29,11 +29,11 @@ #include "osdep/windows_utils.h" #include "hwdec.h" #include "video/hwdec.h" +#include "video/decode/d3d.h" struct priv { struct mp_hwdec_ctx hwctx; - HMODULE d3d9_dll; IDirect3D9Ex *d3d9ex; IDirect3DDevice9Ex *device9ex; IDirect3DQuery9 *query9; @@ -89,9 +89,6 @@ static void destroy(struct gl_hwdec *hw) if (p->d3d9ex) IDirect3D9Ex_Release(p->d3d9ex); - - if (p->d3d9_dll) - FreeLibrary(p->d3d9_dll); } static int create(struct gl_hwdec *hw) @@ -99,6 +96,8 @@ static int create(struct gl_hwdec *hw) if (!angle_load()) return -1; + d3d_load_dlls(); + EGLDisplay egl_display = eglGetCurrentDisplay(); if (!egl_display) return -1; @@ -118,15 +117,14 @@ static int create(struct gl_hwdec *hw) p->egl_display = egl_display; - p->d3d9_dll = LoadLibraryW(L"d3d9.dll"); - if (!p->d3d9_dll) { + if (!d3d9_dll) { MP_FATAL(hw, "Failed to load \"d3d9.dll\": %s\n", mp_LastError_to_str()); goto fail; } HRESULT (WINAPI *Direct3DCreate9Ex)(UINT SDKVersion, IDirect3D9Ex **ppD3D); - Direct3DCreate9Ex = (void *)GetProcAddress(p->d3d9_dll, "Direct3DCreate9Ex"); + Direct3DCreate9Ex = (void *)GetProcAddress(d3d9_dll, "Direct3DCreate9Ex"); if (!Direct3DCreate9Ex) { MP_FATAL(hw, "Direct3D 9Ex not supported\n"); goto fail; diff --git a/wscript_build.py b/wscript_build.py index 54518b3861..8f2b85c787 100644 --- a/wscript_build.py +++ b/wscript_build.py @@ -288,7 +288,7 @@ def build(ctx): ( "video/decode/dec_video.c"), ( "video/decode/dxva2.c", "d3d-hwaccel" ), ( "video/decode/d3d11va.c", "d3d-hwaccel" ), - ( "video/decode/d3d.c", "d3d-hwaccel" ), + ( "video/decode/d3d.c", "win32" ), ( "video/decode/vaapi.c", "vaapi-hwaccel" ), ( "video/decode/vd_lavc.c" ), ( "video/decode/videotoolbox.c", "videotoolbox-hwaccel" ), @@ -327,7 +327,6 @@ def build(ctx): ( "video/out/dither.c" ), ( "video/out/filter_kernels.c" ), ( "video/out/opengl/angle_dynamic.c", "egl-angle" ), - ( "video/out/opengl/angle_common.c", "egl-angle" ), ( "video/out/opengl/common.c", "gl" ), ( "video/out/opengl/context.c", "gl" ), ( "video/out/opengl/context_angle.c", "egl-angle" ), |