diff options
author | Philip Langdale <philipl@overt.org> | 2019-09-14 20:05:21 -0700 |
---|---|---|
committer | Philip Langdale <philipl@overt.org> | 2019-09-15 17:51:47 -0700 |
commit | fa0a905ea07bd5691b8853806bae550749e47d30 (patch) | |
tree | cde7a1a5d5ec0ccc87b3f57f7f33ef7f718c7bc8 /video/out/hwdec/hwdec_vaapi.h | |
parent | 237f5fa1b7302d61466991d109179f86ce00b8bb (diff) | |
download | mpv-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.h | 64 |
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); |