/* * 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 . */ #include #include #include "video/out/android_common.h" #include "common.h" #include "context.h" #include "utils.h" struct priv { struct mpvk_ctx vk; }; static void android_uninit(struct ra_ctx *ctx) { struct priv *p = ctx->priv; ra_vk_ctx_uninit(ctx); mpvk_uninit(&p->vk); vo_android_uninit(ctx->vo); } static bool android_init(struct ra_ctx *ctx) { struct priv *p = ctx->priv = talloc_zero(ctx, struct priv); struct mpvk_ctx *vk = &p->vk; int msgl = ctx->opts.probing ? MSGL_V : MSGL_ERR; if (!vo_android_init(ctx->vo)) goto fail; if (!mpvk_init(vk, ctx, VK_KHR_ANDROID_SURFACE_EXTENSION_NAME)) goto fail; VkAndroidSurfaceCreateInfoKHR info = { .sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR, .window = vo_android_native_window(ctx->vo) }; struct ra_vk_ctx_params params = {0}; VkInstance inst = vk->vkinst->instance; VkResult res = vkCreateAndroidSurfaceKHR(inst, &info, NULL, &vk->surface); if (res != VK_SUCCESS) { MP_MSG(ctx, msgl, "Failed creating Android surface\n"); goto fail; } if (!ra_vk_ctx_init(ctx, vk, params, VK_PRESENT_MODE_FIFO_KHR)) goto fail; return true; fail: android_uninit(ctx); return false; } static bool android_reconfig(struct ra_ctx *ctx) { int w, h; if (!vo_android_surface_size(ctx->vo, &w, &h)) return false; ra_vk_ctx_resize(ctx, w, h); return true; } static int android_control(struct ra_ctx *ctx, int *events, int request, void *arg) { return VO_NOTIMPL; } const struct ra_ctx_fns ra_ctx_vulkan_android = { .type = "vulkan", .name = "androidvk", .reconfig = android_reconfig, .control = android_control, .init = android_init, .uninit = android_uninit, };