summaryrefslogtreecommitdiffstats
path: root/video/decode
diff options
context:
space:
mode:
Diffstat (limited to 'video/decode')
-rw-r--r--video/decode/d3d.c12
-rw-r--r--video/decode/d3d.h5
2 files changed, 17 insertions, 0 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