summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-06-30 12:27:15 +0200
committerwm4 <wm4@nowhere>2017-06-30 18:57:37 +0200
commitdd408e68ed57fa5130bef976751e58a5d6e42f75 (patch)
tree7b47f293f3a07b318289ac277bcba6c588f0e586
parentc61520b6bd51d2ab8ba1fa14d89170844ebd159b (diff)
downloadmpv-dd408e68ed57fa5130bef976751e58a5d6e42f75.tar.bz2
mpv-dd408e68ed57fa5130bef976751e58a5d6e42f75.tar.xz
d3d: make DXVA2 support optional
This partially reverts the change from a longer time ago to always build DXVA2 and D3D11VA together. To make it simpler, we change the following: - building with ANGLE headers is now required to build D3D hwaccels - if DXVA2 is enabled, D3D11VA is still forcibly built - the CLI vo_opengl ANGLE backend is now under --egl-angle-win32 This is done to reduce the dependency mess slightly.
-rw-r--r--options/options.c2
-rw-r--r--video/decode/d3d.c7
-rw-r--r--video/decode/vd_lavc.c3
-rw-r--r--video/out/opengl/context.c2
-rw-r--r--video/out/opengl/hwdec.c6
-rw-r--r--wscript28
-rw-r--r--wscript_build.py14
7 files changed, 44 insertions, 18 deletions
diff --git a/options/options.c b/options/options.c
index 02dc5e94dd..db63efa9d2 100644
--- a/options/options.c
+++ b/options/options.c
@@ -699,7 +699,7 @@ const m_option_t mp_opts[] = {
OPT_SUBSTRUCT("", gl_video_opts, gl_video_conf, 0),
#endif
-#if HAVE_EGL_ANGLE
+#if HAVE_EGL_ANGLE_WIN32
OPT_SUBSTRUCT("", angle_opts, angle_conf, 0),
#endif
diff --git a/video/decode/d3d.c b/video/decode/d3d.c
index d81f481e7c..3e6e1accc8 100644
--- a/video/decode/d3d.c
+++ b/video/decode/d3d.c
@@ -377,9 +377,12 @@ AVBufferRef *d3d9_wrap_device_ref(struct IDirect3DDevice9 *device) { return NULL
#else /* !HAVE_D3D_HWACCEL_NEW */
#include <libavutil/hwcontext.h>
-#include <libavutil/hwcontext_dxva2.h>
#include <libavutil/hwcontext_d3d11va.h>
+#if HAVE_D3D9_HWACCEL
+#include <libavutil/hwcontext_dxva2.h>
+#endif
+
void d3d_hwframes_refine(struct lavc_ctx *ctx, AVBufferRef *hw_frames_ctx)
{
AVHWFramesContext *fctx = (void *)hw_frames_ctx->data;
@@ -400,11 +403,13 @@ void d3d_hwframes_refine(struct lavc_ctx *ctx, AVBufferRef *hw_frames_ctx)
fctx->width = FFALIGN(fctx->width, alignment);
fctx->height = FFALIGN(fctx->height, alignment);
+#if HAVE_D3D9_HWACCEL
if (fctx->format == AV_PIX_FMT_DXVA2_VLD) {
AVDXVA2FramesContext *hwctx = fctx->hwctx;
hwctx->surface_type = DXVA2_VideoDecoderRenderTarget;
}
+#endif
if (fctx->format == AV_PIX_FMT_D3D11) {
AVD3D11VAFramesContext *hwctx = fctx->hwctx;
diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c
index 226fd30bd3..a36adbf334 100644
--- a/video/decode/vd_lavc.c
+++ b/video/decode/vd_lavc.c
@@ -265,8 +265,11 @@ static const struct vd_lavc_hwdec *const hwdec_list[] = {
#endif
#if HAVE_D3D_HWACCEL
&mp_vd_lavc_d3d11va,
+
+ #if HAVE_D3D9_HWACCEL
&mp_vd_lavc_dxva2,
&mp_vd_lavc_dxva2_copy,
+ #endif
&mp_vd_lavc_d3d11va_copy,
#endif
#if HAVE_ANDROID
diff --git a/video/out/opengl/context.c b/video/out/opengl/context.c
index 72311e11fa..a3b92ac8b4 100644
--- a/video/out/opengl/context.c
+++ b/video/out/opengl/context.c
@@ -56,7 +56,7 @@ static const struct mpgl_driver *const backends[] = {
#if HAVE_GL_COCOA
&mpgl_driver_cocoa,
#endif
-#if HAVE_EGL_ANGLE
+#if HAVE_EGL_ANGLE_WIN32
&mpgl_driver_angle,
#endif
#if HAVE_GL_WIN32
diff --git a/video/out/opengl/hwdec.c b/video/out/opengl/hwdec.c
index 60a6ee82a9..346493671f 100644
--- a/video/out/opengl/hwdec.c
+++ b/video/out/opengl/hwdec.c
@@ -51,15 +51,15 @@ static const struct gl_hwdec_driver *const mpgl_hwdec_drivers[] = {
&gl_hwdec_videotoolbox,
#endif
#if HAVE_D3D_HWACCEL
-#if HAVE_EGL_ANGLE
&gl_hwdec_d3d11egl,
&gl_hwdec_d3d11eglrgb,
+ #if HAVE_D3D9_HWACCEL
&gl_hwdec_dxva2egl,
+ #endif
#endif
-#if HAVE_GL_DXINTEROP
+#if HAVE_GL_DXINTEROP_D3D9
&gl_hwdec_dxva2gldx,
#endif
-#endif
#if HAVE_CUDA_HWACCEL
&gl_hwdec_cuda,
#endif
diff --git a/wscript b/wscript
index 3fbcf1db88..99263b7ee5 100644
--- a/wscript
+++ b/wscript
@@ -619,7 +619,7 @@ video_output_features = [
check_statement('d3d9.h', 'IDirect3D9Ex *d'))
} , {
'name': '--egl-angle',
- 'desc': 'OpenGL Win32 ANGLE Backend',
+ 'desc': 'OpenGL ANGLE headers',
'deps_any': [ 'os-win32', 'os-cygwin' ],
'groups': [ 'gl' ],
'func': check_statement(['EGL/egl.h', 'EGL/eglext.h'],
@@ -635,6 +635,12 @@ video_output_features = [
'-DANGLE_NO_ALIASES', '-DANGLE_EXPORT='],
lib=['EGL', 'GLESv2', 'dxguid', 'd3d9',
'gdi32', 'stdc++'])
+ }, {
+ 'name': '--egl-angle-win32',
+ 'desc': 'OpenGL Win32 ANGLE Backend',
+ 'deps': [ 'egl-angle', 'win32-desktop' ],
+ 'groups': [ 'gl' ],
+ 'func': check_true,
} , {
'name': '--vdpau',
'desc': 'VDPAU acceleration',
@@ -736,7 +742,7 @@ video_output_features = [
'name': 'egl-helpers',
'desc': 'EGL helper functions',
'deps_any': [ 'egl-x11', 'mali-fbdev', 'rpi', 'gl-wayland', 'egl-drm',
- 'egl-angle' ],
+ 'egl-angle-win32' ],
'func': check_true
}
]
@@ -794,13 +800,14 @@ hwaccel_features = [
' ? 1 : -1]',
use='libav'),
}, {
+ # (conflated with ANGLE for easier deps)
'name': '--d3d-hwaccel',
- 'desc': 'DXVA2 and D3D11VA hwaccel',
- 'deps': [ 'win32-desktop' ],
+ 'desc': 'D3D11VA hwaccel (plus ANGLE)',
+ 'deps': [ 'os-win32', 'egl-angle' ],
'func': check_true,
}, {
'name': '--d3d-hwaccel-new',
- 'desc': 'DXVA2 and D3D11VA hwaccel (new API)',
+ 'desc': 'D3D11VA hwaccel (new API)',
'func': check_statement('libavcodec/version.h',
'int x[(LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(58, 4, 0) && '
' LIBAVCODEC_VERSION_MICRO < 100) ||'
@@ -810,6 +817,17 @@ hwaccel_features = [
use='libav'),
'deps': [ 'd3d-hwaccel' ],
}, {
+ 'name': '--d3d9-hwaccel',
+ 'desc': 'DXVA2 hwaccel (plus ANGLE)',
+ 'deps': [ 'd3d-hwaccel', 'egl-angle-win32' ],
+ 'func': check_true,
+ }, {
+ 'name': '--gl-dxinterop-d3d9',
+ 'desc': 'OpenGL/DirectX Interop Backend DXVA2 interop',
+ 'deps': [ 'gl-dxinterop', 'd3d9-hwaccel' ],
+ 'groups': [ 'gl' ],
+ 'func': check_true,
+ }, {
'name': '--cuda-hwaccel',
'desc': 'CUDA hwaccel',
'deps': [ 'gl' ],
diff --git a/wscript_build.py b/wscript_build.py
index 3a98cf96ac..7ecd14bd9f 100644
--- a/wscript_build.py
+++ b/wscript_build.py
@@ -325,10 +325,10 @@ def build(ctx):
( "video/vdpau.c", "vdpau" ),
( "video/vdpau_mixer.c", "vdpau" ),
( "video/vt.c", "videotoolbox-hwaccel" ),
- ( "video/decode/d3d.c", "win32-desktop" ),
+ ( "video/decode/d3d.c", "d3d-hwaccel" ),
( "video/decode/dec_video.c"),
( "video/decode/hw_cuda.c", "cuda-hwaccel" ),
- ( "video/decode/hw_dxva2.c", "d3d-hwaccel" ),
+ ( "video/decode/hw_dxva2.c", "d3d9-hwaccel" ),
( "video/decode/hw_d3d11va.c", "d3d-hwaccel" ),
( "video/decode/hw_videotoolbox.c", "videotoolbox-hwaccel" ),
( "video/decode/vd_lavc.c" ),
@@ -366,7 +366,7 @@ def build(ctx):
( "video/out/opengl/angle_dynamic.c", "egl-angle" ),
( "video/out/opengl/common.c", "gl" ),
( "video/out/opengl/context.c", "gl" ),
- ( "video/out/opengl/context_angle.c", "egl-angle" ),
+ ( "video/out/opengl/context_angle.c", "egl-angle-win32" ),
( "video/out/opengl/context_cocoa.c", "gl-cocoa" ),
( "video/out/opengl/context_drm_egl.c", "egl-drm" ),
( "video/out/opengl/context_dxinterop.c","gl-dxinterop" ),
@@ -382,10 +382,10 @@ def build(ctx):
( "video/out/opengl/formats.c", "gl" ),
( "video/out/opengl/hwdec.c", "gl" ),
( "video/out/opengl/hwdec_cuda.c", "cuda-hwaccel" ),
- ( "video/out/opengl/hwdec_d3d11egl.c", "egl-angle" ),
- ( "video/out/opengl/hwdec_d3d11eglrgb.c","egl-angle" ),
- ( "video/out/opengl/hwdec_dxva2gldx.c", "gl-dxinterop" ),
- ( "video/out/opengl/hwdec_dxva2egl.c", "egl-angle" ),
+ ( "video/out/opengl/hwdec_d3d11egl.c", "d3d-hwaccel" ),
+ ( "video/out/opengl/hwdec_d3d11eglrgb.c","d3d-hwaccel" ),
+ ( "video/out/opengl/hwdec_dxva2gldx.c", "gl-dxinterop-d3d9" ),
+ ( "video/out/opengl/hwdec_dxva2egl.c", "d3d9-hwaccel" ),
( "video/out/opengl/hwdec_osx.c", "videotoolbox-gl" ),
( "video/out/opengl/hwdec_ios.m", "ios-gl" ),
( "video/out/opengl/hwdec_rpi.c", "rpi" ),