From patchwork Thu Mar 7 00:32:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 46862 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d90e:b0:19e:cdac:8cce with SMTP id jd14csp732873pzb; Wed, 6 Mar 2024 16:32:57 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCW/Yu3Y2qbRcDEeNn8EWVCIt+9hPNqGhMHqsFO5HT54bJkuVssWIxSBeWA32XuJF3bunHm0GRVYt/16zlNaa7ULUS19+yKcrD0yQQ== X-Google-Smtp-Source: AGHT+IHYWDP+KZtm4PsAMjF5Mmoqz3kd6JbN6FVPQS8MCR2IzqX/cNKMK4Hegr8bnf7MpOWou0F4 X-Received: by 2002:a17:906:f355:b0:a3f:da1c:ae4c with SMTP id hg21-20020a170906f35500b00a3fda1cae4cmr12809271ejb.54.1709771576790; Wed, 06 Mar 2024 16:32:56 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q19-20020a170906b29300b00a45c4ca579dsi483511ejz.257.2024.03.06.16.32.56; Wed, 06 Mar 2024 16:32:56 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=amXl6WiX; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A293568CD4B; Thu, 7 Mar 2024 02:32:52 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01olkn2037.outbound.protection.outlook.com [40.92.66.37]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 350EE68CCCD for ; Thu, 7 Mar 2024 02:32:45 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kX3GP2bVsmb8MQiNEAHbXr4Q4U6fKh1PX3g1wOQ3hp4yC7T7P6Kn403Kn07uSvvRJqEEVP5UcOod/tQTWFKbGqPqT0jId6FTAYK9xxQ7P4sdVOs1cSJykON8x0LG0lqlYcs7/cF0nQW3SX0tTuORoOSp49gUSjwNVCHwJl26hQTOhk+xWjlmBqepazScvUbwLlVQkvn5undKRv7s7YtxVqI8PNWEsrbUB1tKxmjqt/152kO2fUXPgzMWFUNFIQyahroFB/JxQq9qcQB2nkCcSB+uxj3UqpT+mB5lsy8cNvYYHQmJtgYiWLpSguoXvt6fTDEAiZ6WqSO6X397ew3Gog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=EGzebzTxt3qGtz33ycOzB8q/DjxF18Tk8lHOFgRW7cs=; b=gSJOzsJRESn2OQLDOdDhn1FN78cifEznp22Yem8dyY8FoFqqhPgFIQ0mBZOlTyHMdTP6CBdQTNxKS7vu+Ze++YF+h9Y+v+eRUi1OYpKKbYOi5fr83PSBreu2tT+KXAMAXuOhbD5MIRylD2cSOA30PStrWtrGWUcD+KCXJOdsLLaWYiozzUBT4GodmPBoma7hgJfD2Q2jqPRdbvefmqNNoSzJe2shhyVGiU/Rk33JIa7hliRVRHr6pjp7GluAl1ecVS4OgM8HLHk5Q8XDozLuii37loLyyDpMYFeIpNOUfE5Mo4OXMaxotYDVwAR30WNn70gZGDs41IlSRKcM4peNJQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EGzebzTxt3qGtz33ycOzB8q/DjxF18Tk8lHOFgRW7cs=; b=amXl6WiXTXnWXs5S97LgtgzypqsJo6q2Y505TbutZto+deKEmDay0Mz6gViE5b38d4hES77rShyeiqplAxiJmjRrCuQtTrkBGc751BQEGpBf20lTIhWkoGEEn4w2nImVH6SGJMU5JgMP/V5Gx5DJThSU9vSmdG1Ayq9TDZZtCQXs3HMXBAoMEkFs/NtB+xriKc9GtIqSOGRwN0TtwXf4CtxepUyUR4WDzkAaTxqWVK44tqvpM9e/NzFTqIPrsfHb+6jgs39lfVUnOFnMxArR6Bkp3GVEGUnAWlg6G9aoJdx7ytwb4BJ+wC0/WUud187BLWVPQgorYzG4xT0FGZXHzg== Received: from GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:109::15) by AS8P250MB0038.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:359::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7362.24; Thu, 7 Mar 2024 00:32:42 +0000 Received: from GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM ([fe80::a8f2:5082:22e4:8d1b]) by GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM ([fe80::a8f2:5082:22e4:8d1b%5]) with mapi id 15.20.7339.035; Thu, 7 Mar 2024 00:32:42 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 7 Mar 2024 01:32:32 +0100 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [CauufUXoTePaUgixuKdhEv9sVAk6+a3yYAN3v1NoxUY=] X-ClientProxiedBy: FR4P281CA0243.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f5::11) To GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:109::15) X-Microsoft-Original-Message-ID: <20240307003234.3396724-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1SPRMB0052:EE_|AS8P250MB0038:EE_ X-MS-Office365-Filtering-Correlation-Id: ed2eaf86-e52d-4881-20e9-08dc3e3e197a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Qf55Dz/tVit+VS48gyqrRfCHcg3nxPprtVhI0kTYEuekHJlD1P4J7twTqXUQ6t4zYqRFPXzkKnrdhXjsGTTXdT1mo/xD7wAdNX9WNYzf/QQWC2abWWZbYj8nLVxujaJ6L03J+uThNKOFhli9nELc8zk1iYr/JZxHvep9RjGjMLw4A1biHDYqFuPM6GWnC1yHiJZysqbJy1Ob+mWMfk8drp+x3onVONWcvZT3MMODK11a5Ws83pQxUGOPhS82ukZu4IWdvymLGqKfOWrwvl+6J/y07JbCXwsdFCWs4BWRX/7rNMgKZS7g42DlLjQ4cFi2pMt1p+sZPJYQsj3LyVpP1NY/VVzLDmtnF3cNiE3CsbGeIemohQm6PAOaVIWgUrV5fPAz9xN6SQXU4kRzK0HKm02YDBce9qseO3a44PyY2BqUVGvIwPbTsWTWfdL1qXljCWJSjATI+dW5E6Ua9bWM94lje7xVitG2x1GTvo7zUUoU76zb8WHwKeoxg7UhXpm5dW+9bavzw+ACfiJU4WUSxOEDhe7dMCvXS3QcACRU7Mn016q8BJIYRKP2mC9B5Vpjep/vd1G5gxrVetj1p9AGQ9qttE6sexgDzA0meg61FdgcfYc4mGBEkhc47T1eC9NF X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Fa3plfVQsR2febPeaJd6Kjl5c5P2WqJEuJf6GmIA8YR0baTkr9YCBKQXta1pSn2RhGUh67JG34a8bw/t72ZZCbDuPjzVTtTADTo2YTB012mZOLJAQnpKkb3dr4c/LYQKWwX8dBik44KSzdEjxO2FUshE7YtkTln1j0jUReq8fGR9jJSy7PH2WjkKURdubpwa+8DJiAdImQswBWRSK4h44mDUWk2q73bMpkQGoVP3WhihT/c5Of+1fMbpM1Q8QmwMF/y+Ojx1XhD7bQxrIUrcKMVTdozRc4w/7nRR/O/EpvPYj7QG1gBYD0UvJeqOd1TdCHS2UgD9GQi7Lg/V/1OM/AIr15/s86JGSrAFg+4IB9uGi4tctxhI4HQDnP0pRvqCoVosDr2VmRNg5ebj0YQwrJugZfYWIOX56qdRlxlrKppdxG8+qbN2cnyFcY08ky08w89mdD5/z+EFOH0zGcEQk1eeWieh/wc/MmWo+eqr4ZBNs03BQdrlOQBus/gYgLXQXA0uGF4OXNssKwFj3aTDmyoU7GOqFhk5fF+rk43GTA4BTtFy6xdrvshS4RRBV1ed2JC8uoI53rpLIyL19LkYaVl70Aul9venzbcfQX3kx227zgQvs42iYGWWsUs6SDbhCLK3+0ATKvOXh56+0ik5C8gHGWxwZRAf44Tpm067YTTxd3LrDoXk7dkAza1RwyxcUXY+meO/yNPqAtXCDZX/UeT3RC5+AnsYZ9MkoEgiL9Z7vjV3jJ8W4FWGp2r5ETjdwMYkPl2jjOysqyWXUBPp7tC1Zv05b5dkVf6C5LzcZqe7nb4HNObQ5NELK1CnOqwAspHZj/QJF925matOMxToasuY6Kd2Ph3Miwu/x46S08C1SNKuQOPXmCx7qapYDlHOEB/TxZK/Hl5pszOxnpYFziHM3MptqJZql06LW9JrEZiANyFQdRLpMWLgJg5KDgb1S7jqccYthUUAs21YDrgIsU2G6/u7IKOw1tmdivMCtbXs8GFARiLcmEuYyff46oU3fv9gWvvOamiabZ4YduG5SXvVPN4kqPqQROba4vb5JlWmiGWIlwP0fpyrsD9an9+4BQmIIx6kaVVYeyEnWI71SiRJvYp+BE9wQ9AH1S7Ndh3SW7cPG8QvR0BWLjkA3n5Jswe+aeX9jm+igzMVeTnT+SuLLXOW69W+9RwQUmh4JIz7SYL5oeyvlIwdn+oMCi0UhvC4xKf0VeUsIXTgAmkevJAJJjn2kWeyVH48cidfqwNf4DkBv1NqJO2lDeT9lv9T4oN4xYpSlCBgYrqW473ZMg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed2eaf86-e52d-4881-20e9-08dc3e3e197a X-MS-Exchange-CrossTenant-AuthSource: GV1SPRMB0052.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Mar 2024 00:32:41.7853 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8P250MB0038 Subject: [FFmpeg-devel] [PATCH 2/4] avcodec/vulkan_video: Merge dec part of FFVkCodecMap and extension props X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: EqdPnWTdZ3Wt All the fields of FFVkCodecMap are either decoder-only or encoder-only (with the latter being unused and unset for now). Yet there is already a per-decoder struct containing static information about these decoders, namely VkExtensionProperties. This commit merges the decoder-parts of FFVkCodecMap with the VkExtensionProperties into a common structure. Given that FFVkCodecMap is now unused, it is removed. Signed-off-by: Andreas Rheinhardt --- Given that these descriptors are decoding-specific, one could drop the decode_ prefix from decode_(op|extension). libavcodec/vulkan_av1.c | 10 +++++--- libavcodec/vulkan_decode.c | 49 +++++++++++++++++--------------------- libavcodec/vulkan_decode.h | 7 ++++++ libavcodec/vulkan_h264.c | 10 +++++--- libavcodec/vulkan_hevc.c | 10 +++++--- libavcodec/vulkan_video.c | 26 -------------------- libavcodec/vulkan_video.h | 11 --------- 7 files changed, 50 insertions(+), 73 deletions(-) diff --git a/libavcodec/vulkan_av1.c b/libavcodec/vulkan_av1.c index 9730e4b08d..03ae553ff8 100644 --- a/libavcodec/vulkan_av1.c +++ b/libavcodec/vulkan_av1.c @@ -23,9 +23,13 @@ /* Maximum number of tiles specified by any defined level */ #define MAX_TILES 256 -const VkExtensionProperties ff_vk_dec_av1_ext = { - .extensionName = VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_EXTENSION_NAME, - .specVersion = VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION, +const FFVulkanDecodeDescriptor ff_vk_dec_av1_desc = { + .decode_extension = FF_VK_EXT_VIDEO_DECODE_AV1, + .decode_op = 0x01000000, /* TODO fix this */ + .ext_props = { + .extensionName = VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_EXTENSION_NAME, + .specVersion = VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION, + }, }; typedef struct AV1VulkanDecodePicture { diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index 2448ee99ec..6777aa5887 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -20,38 +20,33 @@ #include "vulkan_video.h" #include "vulkan_decode.h" #include "config_components.h" -#include "libavutil/avassert.h" #include "libavutil/vulkan_loader.h" #if CONFIG_H264_VULKAN_HWACCEL -extern const VkExtensionProperties ff_vk_dec_h264_ext; +extern const FFVulkanDecodeDescriptor ff_vk_dec_h264_desc; #endif #if CONFIG_HEVC_VULKAN_HWACCEL -extern const VkExtensionProperties ff_vk_dec_hevc_ext; +extern const FFVulkanDecodeDescriptor ff_vk_dec_hevc_desc; #endif #if CONFIG_AV1_VULKAN_HWACCEL -extern const VkExtensionProperties ff_vk_dec_av1_ext; +extern const FFVulkanDecodeDescriptor ff_vk_dec_av1_desc; #endif -static const VkExtensionProperties *dec_ext[] = { +static const FFVulkanDecodeDescriptor *dec_descs[] = { #if CONFIG_H264_VULKAN_HWACCEL - [AV_CODEC_ID_H264] = &ff_vk_dec_h264_ext, + [AV_CODEC_ID_H264] = &ff_vk_dec_h264_desc, #endif #if CONFIG_HEVC_VULKAN_HWACCEL - [AV_CODEC_ID_HEVC] = &ff_vk_dec_hevc_ext, + [AV_CODEC_ID_HEVC] = &ff_vk_dec_hevc_desc, #endif #if CONFIG_AV1_VULKAN_HWACCEL - [AV_CODEC_ID_AV1] = &ff_vk_dec_av1_ext, + [AV_CODEC_ID_AV1] = &ff_vk_dec_av1_desc, #endif }; -static const FFVkCodecMap *get_codecmap(enum AVCodecID codec_id) +static const FFVulkanDecodeDescriptor *get_codecdesc(enum AVCodecID codec_id) { - for (size_t i = 0; i < FF_ARRAY_ELEMS(ff_vk_codec_map); i++) - if (ff_vk_codec_map[i].codec_id == codec_id) - return &ff_vk_codec_map[i]; - av_assert1(!"unreachable"); - return NULL; + return dec_descs[codec_id]; } static const VkVideoProfileInfoKHR *get_video_profile(FFVulkanDecodeShared *ctx, enum AVCodecID codec_id) @@ -671,7 +666,7 @@ static VkResult vulkan_setup_profile(AVCodecContext *avctx, FFVulkanDecodeProfileData *prof, AVVulkanDeviceContext *hwctx, FFVulkanFunctions *vk, - const struct FFVkCodecMap *vk_codec, + const FFVulkanDecodeDescriptor *vk_desc, VkVideoDecodeH264CapabilitiesKHR *h264_caps, VkVideoDecodeH265CapabilitiesKHR *h265_caps, VkVideoDecodeAV1CapabilitiesMESA *av1_caps, @@ -722,7 +717,7 @@ static VkResult vulkan_setup_profile(AVCodecContext *avctx, profile->sType = VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR; profile->pNext = usage; - profile->videoCodecOperation = vk_codec->decode_op; + profile->videoCodecOperation = vk_desc->decode_op; profile->chromaSubsampling = ff_vk_subsampling_from_av_desc(desc); profile->lumaBitDepth = ff_vk_depth_from_av_depth(desc->comp[0].depth); profile->chromaBitDepth = profile->lumaBitDepth; @@ -748,7 +743,7 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_ { VkResult ret; int max_level, base_profile, cur_profile; - const FFVkCodecMap *vk_codec = get_codecmap(avctx->codec_id); + const FFVulkanDecodeDescriptor *vk_desc = get_codecdesc(avctx->codec_id); AVHWFramesContext *frames = (AVHWFramesContext *)frames_ref->data; AVHWDeviceContext *device = (AVHWDeviceContext *)frames->device_ref->data; AVVulkanDeviceContext *hwctx = device->hwctx; @@ -780,11 +775,11 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_ VkVideoFormatPropertiesKHR *ret_info; uint32_t nb_out_fmts = 0; - if (!vk_codec->decode_op || !vk_codec->decode_extension) { + if (!vk_desc->decode_op || !vk_desc->decode_extension) { av_log(avctx, AV_LOG_ERROR, "Unsupported codec for Vulkan decoding: %s!\n", avcodec_get_name(avctx->codec_id)); return AVERROR(ENOSYS); - } else if (!(vk_codec->decode_extension & ctx->s.extensions)) { + } else if (!(vk_desc->decode_extension & ctx->s.extensions)) { av_log(avctx, AV_LOG_ERROR, "Device does not support decoding %s!\n", avcodec_get_name(avctx->codec_id)); return AVERROR(ENOSYS); @@ -796,7 +791,7 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_ avctx->codec_id == AV_CODEC_ID_AV1 ? STD_VIDEO_AV1_MESA_PROFILE_MAIN : 0; - ret = vulkan_setup_profile(avctx, prof, hwctx, vk, vk_codec, + ret = vulkan_setup_profile(avctx, prof, hwctx, vk, vk_desc, &h264_caps, &h265_caps, &av1_caps, @@ -812,7 +807,7 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_ avcodec_profile_name(avctx->codec_id, cur_profile), avcodec_profile_name(avctx->codec_id, base_profile)); cur_profile = base_profile; - ret = vulkan_setup_profile(avctx, prof, hwctx, vk, vk_codec, + ret = vulkan_setup_profile(avctx, prof, hwctx, vk, vk_desc, &h264_caps, &h265_caps, &av1_caps, @@ -867,10 +862,10 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_ caps->maxActiveReferencePictures); av_log(avctx, AV_LOG_VERBOSE, " Codec header name: '%s' (driver), '%s' (compiled)\n", caps->stdHeaderVersion.extensionName, - dec_ext[avctx->codec_id]->extensionName); + vk_desc->ext_props.extensionName); av_log(avctx, AV_LOG_VERBOSE, " Codec header version: %i.%i.%i (driver), %i.%i.%i (compiled)\n", CODEC_VER(caps->stdHeaderVersion.specVersion), - CODEC_VER(dec_ext[avctx->codec_id]->specVersion)); + CODEC_VER(vk_desc->ext_props.specVersion)); av_log(avctx, AV_LOG_VERBOSE, " Decode modes:%s%s%s\n", dec_caps->flags ? "" : " invalid", @@ -1122,7 +1117,7 @@ int ff_vk_decode_init(AVCodecContext *avctx) FFVulkanContext *s; FFVulkanFunctions *vk; const VkVideoProfileInfoKHR *profile; - const FFVkCodecMap *vk_codec; + const FFVulkanDecodeDescriptor *vk_desc; VkVideoDecodeH264SessionParametersCreateInfoKHR h264_params = { .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR, @@ -1179,9 +1174,9 @@ int ff_vk_decode_init(AVCodecContext *avctx) /* Create queue context */ qf = ff_vk_qf_init(s, &ctx->qf, VK_QUEUE_VIDEO_DECODE_BIT_KHR); - vk_codec = get_codecmap(avctx->codec_id); + vk_desc = get_codecdesc(avctx->codec_id); /* Check for support */ - if (!(s->video_props[qf].videoCodecOperations & vk_codec->decode_op)) { + if (!(s->video_props[qf].videoCodecOperations & vk_desc->decode_op)) { av_log(avctx, AV_LOG_ERROR, "Decoding %s not supported on the given " "queue family %i!\n", avcodec_get_name(avctx->codec_id), qf); return AVERROR(EINVAL); @@ -1198,7 +1193,7 @@ int ff_vk_decode_init(AVCodecContext *avctx) session_create.maxActiveReferencePictures = ctx->caps.maxActiveReferencePictures; session_create.pictureFormat = s->hwfc->format[0]; session_create.referencePictureFormat = session_create.pictureFormat; - session_create.pStdHeaderVersion = dec_ext[avctx->codec_id]; + session_create.pStdHeaderVersion = &vk_desc->ext_props; session_create.pVideoProfile = profile; /* Create decode exec context for this specific main thread. diff --git a/libavcodec/vulkan_decode.h b/libavcodec/vulkan_decode.h index b0b1ff5614..3e7cd38774 100644 --- a/libavcodec/vulkan_decode.h +++ b/libavcodec/vulkan_decode.h @@ -25,6 +25,13 @@ #include "vulkan_video.h" +typedef struct FFVulkanDecodeDescriptor { + FFVulkanExtensions decode_extension; + VkVideoCodecOperationFlagBitsKHR decode_op; + + VkExtensionProperties ext_props; +} FFVulkanDecodeDescriptor; + typedef struct FFVulkanDecodeProfileData { VkVideoDecodeH264ProfileInfoKHR h264_profile; VkVideoDecodeH265ProfileInfoKHR h265_profile; diff --git a/libavcodec/vulkan_h264.c b/libavcodec/vulkan_h264.c index 39c123ddca..695b986a7c 100644 --- a/libavcodec/vulkan_h264.c +++ b/libavcodec/vulkan_h264.c @@ -21,9 +21,13 @@ #include "vulkan_decode.h" -const VkExtensionProperties ff_vk_dec_h264_ext = { - .extensionName = VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME, - .specVersion = VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION, +const FFVulkanDecodeDescriptor ff_vk_dec_h264_desc = { + .decode_extension = FF_VK_EXT_VIDEO_DECODE_H264, + .decode_op = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, + .ext_props = { + .extensionName = VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME, + .specVersion = VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION, + }, }; typedef struct H264VulkanDecodePicture { diff --git a/libavcodec/vulkan_hevc.c b/libavcodec/vulkan_hevc.c index 033172cbd6..e3a1319958 100644 --- a/libavcodec/vulkan_hevc.c +++ b/libavcodec/vulkan_hevc.c @@ -22,9 +22,13 @@ #include "vulkan_decode.h" -const VkExtensionProperties ff_vk_dec_hevc_ext = { - .extensionName = VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME, - .specVersion = VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION, +const FFVulkanDecodeDescriptor ff_vk_dec_hevc_desc = { + .decode_extension = FF_VK_EXT_VIDEO_DECODE_H265, + .decode_op = VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, + .ext_props = { + .extensionName = VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME, + .specVersion = VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION, + }, }; typedef struct HEVCHeaderSPS { diff --git a/libavcodec/vulkan_video.c b/libavcodec/vulkan_video.c index dc6652709f..4be13ecc55 100644 --- a/libavcodec/vulkan_video.c +++ b/libavcodec/vulkan_video.c @@ -16,34 +16,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "codec_id.h" - #include "vulkan_video.h" -const FFVkCodecMap ff_vk_codec_map[3] = { - { - .codec_id = AV_CODEC_ID_H264, - 0, - 0, - FF_VK_EXT_VIDEO_DECODE_H264, - VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, - }, - { - .codec_id = AV_CODEC_ID_HEVC, - 0, - 0, - FF_VK_EXT_VIDEO_DECODE_H265, - VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR - }, - { - .codec_id = AV_CODEC_ID_AV1, - 0, - 0, - FF_VK_EXT_VIDEO_DECODE_AV1, - 0x01000000 /* TODO fix this */ - }, -}; - #define ASPECT_2PLANE (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT) #define ASPECT_3PLANE (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT) diff --git a/libavcodec/vulkan_video.h b/libavcodec/vulkan_video.h index b06e369abd..bb69e920bb 100644 --- a/libavcodec/vulkan_video.h +++ b/libavcodec/vulkan_video.h @@ -19,7 +19,6 @@ #ifndef AVCODEC_VULKAN_VIDEO_H #define AVCODEC_VULKAN_VIDEO_H -#include "codec_id.h" #include "vulkan.h" #include @@ -31,14 +30,6 @@ #define CODEC_VER_PAT(ver) (ver & ((1 << 12) - 1)) #define CODEC_VER(ver) CODEC_VER_MAJ(ver), CODEC_VER_MIN(ver), CODEC_VER_PAT(ver) -typedef struct FFVkCodecMap { - enum AVCodecID codec_id; - FFVulkanExtensions encode_extension; - VkVideoCodecOperationFlagBitsKHR encode_op; - FFVulkanExtensions decode_extension; - VkVideoCodecOperationFlagBitsKHR decode_op; -} FFVkCodecMap; - typedef struct FFVkVideoSession { VkVideoSessionKHR session; VkDeviceMemory *mem; @@ -47,8 +38,6 @@ typedef struct FFVkVideoSession { AVBufferPool *buf_pool; } FFVkVideoCommon; -extern const FFVkCodecMap ff_vk_codec_map[3]; - /** * Get pixfmt from a Vulkan format. */