summaryrefslogtreecommitdiffstats
path: root/video/out/hwdec/hwdec_vaapi.h
diff options
context:
space:
mode:
authorPhilip Langdale <philipl@overt.org>2019-09-14 20:05:21 -0700
committerPhilip Langdale <philipl@overt.org>2019-09-15 17:51:47 -0700
commitfa0a905ea07bd5691b8853806bae550749e47d30 (patch)
treecde7a1a5d5ec0ccc87b3f57f7f33ef7f718c7bc8 /video/out/hwdec/hwdec_vaapi.h
parent237f5fa1b7302d61466991d109179f86ce00b8bb (diff)
downloadmpv-fa0a905ea07bd5691b8853806bae550749e47d30.tar.bz2
mpv-fa0a905ea07bd5691b8853806bae550749e47d30.tar.xz
vo_gpu: hwdec_vaapi: Refactor Vulkan and OpenGL interops for VAAPI
Like hwdec_cuda, you get a big #ifdef mess if you try and keep the OpenGL and Vulkan interops in the same file. So, I've refactored them into separate files in a similar way.
Diffstat (limited to 'video/out/hwdec/hwdec_vaapi.h')
-rw-r--r--video/out/hwdec/hwdec_vaapi.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/video/out/hwdec/hwdec_vaapi.h b/video/out/hwdec/hwdec_vaapi.h
new file mode 100644
index 0000000000..05dab02629
--- /dev/null
+++ b/video/out/hwdec/hwdec_vaapi.h
@@ -0,0 +1,64 @@
+/*
+ * This file is part of mpv.
+ *
+ * mpv is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * mpv is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with mpv. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <va/va_drmcommon.h>
+
+#include "config.h"
+#include "video/vaapi.h"
+#include "video/out/gpu/hwdec.h"
+
+struct priv_owner {
+ struct mp_vaapi_ctx *ctx;
+ VADisplay *display;
+ int *formats;
+ bool probing_formats; // temporary during init
+
+ bool (*interop_init)(struct ra_hwdec_mapper *mapper,
+ const struct ra_imgfmt_desc *desc);
+ void (*interop_uninit)(const struct ra_hwdec_mapper *mapper);
+
+ bool (*interop_map)(struct ra_hwdec_mapper *mapper);
+ bool (*interop_map_legacy)(struct ra_hwdec_mapper *mapper,
+ const VABufferInfo *buffer_info,
+ const int *drm_fmts);
+ void (*interop_unmap)(struct ra_hwdec_mapper *mapper);
+};
+
+struct priv {
+ int num_planes;
+ struct mp_image layout;
+ struct ra_tex *tex[4];
+
+ VAImage current_image;
+ bool buffer_acquired;
+
+#if VA_CHECK_VERSION(1, 1, 0)
+ bool esh_not_implemented;
+ VADRMPRIMESurfaceDescriptor desc;
+ bool surface_acquired;
+#endif
+
+ void *interop_mapper_priv;
+};
+
+typedef bool (*vaapi_interop_init)(const struct ra_hwdec *hw);
+
+bool vaapi_gl_init(const struct ra_hwdec *hw);
+
+bool vaapi_vk_init(const struct ra_hwdec *hw);