From patchwork Sun Mar 3 11:37:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 46721 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a919:b0:19e:cdac:8cce with SMTP id cd25csp2264509pzb; Sun, 3 Mar 2024 03:35:36 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVyUIOUI0rmDvJLJxVMXtVWEXPGF/LQb6Bg+b/gLDubi2czBYwPxZgEOZv47OCHKcl/RcVTkqOI4AMjw1jwf1c3m67TLkIlQX56hA== X-Google-Smtp-Source: AGHT+IFKiZtynvsx+umj/3TOhY8SH29W/OSsO395PZ8i472wph1fSxA/R+VLQpLn07Evc/FBibWQ X-Received: by 2002:a17:906:34c6:b0:a3e:f79e:ce56 with SMTP id h6-20020a17090634c600b00a3ef79ece56mr4085844ejb.45.1709465736696; Sun, 03 Mar 2024 03:35:36 -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 js5-20020a17090797c500b00a451d077108si396252ejc.140.2024.03.03.03.35.35; Sun, 03 Mar 2024 03:35:36 -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=kPN2VVve; 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 22A2568D350; Sun, 3 Mar 2024 13:35:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2107.outbound.protection.outlook.com [40.92.75.107]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5C00968D237 for ; Sun, 3 Mar 2024 13:35:26 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KLB/F1qBlj4rM9zkQubRLLaq2Fed11qDdztR3N7n8yedOv7oauc2tZH1Vda/sEDeGzEoeb8N0kQrCkTSKa7c0Knhz5l3eefkS+3VtsYH2f7t0m0x9cW/QlS7XdwACZG6If1myXKG8OpZFRnyjNC0Qm8G2veV6aVPC7uXSb3raIJGkpZMWYsLfSv0hWlz6Lvs2AW8tIMzCYWiBMvszkQ40ADy5gbMiSBjnEyfrXGyNMi2ezjdqWCCM2rrTk/qSrrSJprIbH9L/r7ENS6atuawBcVXyR1tWFi70qFMIFPbYc0svYGrkpz9xXl/vR+d9Udw8qkQDWqwc7sxBnCF1eP+cQ== 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=CTY7QFEvxTgSRPOXDgXoFIUSH+pydpkoyKJx8hXPBVg=; b=ADIzsAeJTQBVjfRamEaNa5gbQluZ0ABRmDwU1BW1Gev6BSNjhzSwf02YZmO5L0TEzR+4Yu2AR4oXxZCdp3y/y3XC3UpZk4FxyiHh+w/9yn64MBVYCKKSiCiQ/XpMRAX+jQPYRYGuskVD5d4bqOkzooizppQtFGRGQcMr30zr4T1UWyYVE6oyhiUvPAVSNTg1xMzYoz8L2sNXzQufUQTCHSn1xUsZMQGqUDROc99x966R9SfbblVEBL1X8Htb2zUjRwTjsFW8vjehjce3PFxZbGyzIDcprgBJ00PMQ4LycbCsWzWGO3cSOIcDgHH2ZzMpL3i/YRtI3vYRJ9DZfS5esA== 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=CTY7QFEvxTgSRPOXDgXoFIUSH+pydpkoyKJx8hXPBVg=; b=kPN2VVveWtzEwvt3vNZG8WKDTxTw222DmQKeXH8WQoSznu+FTVcbsCbglalNSLVV/D79QGCzq0NYITmdStguIyBXYQ0po5JsL0w3vLFv7DHtG9O8vPMfsmcHk9jQEg0ybmFjXTnHvWe/vUmJRFR0Fi8YcdYb4O9H6Cs4o4gz3hhWz9Na+K0DXJeDN2d/FIeR8Mg4v4CKSvumhh3vqmmQpjpqwVZvKBPH3fh75GHMbYEchqRNU38ao5/4HWrXCmtkEDsIojB/Tno9J2aaFzZhFH6LqQfWdYZ27ZajCZIjw5Fy18yauPAlOgyL+IyVbZYKiF7fKBGOsRsT2Gz8IS472A== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS1P250MB0429.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:4aa::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.39; Sun, 3 Mar 2024 11:35:24 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d%5]) with mapi id 15.20.7316.023; Sun, 3 Mar 2024 11:35:24 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Mar 2024 12:37:17 +0100 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [RxrlVqum/hI+HHEtBdPsFMHwt6LuKgbf] X-ClientProxiedBy: FR5P281CA0052.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f0::11) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240303113718.313583-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS1P250MB0429:EE_ X-MS-Office365-Filtering-Correlation-Id: e9d3eb13-767e-41d9-3f22-08dc3b76044e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qWS75TkcoAvfPElD0BOnA8rDbcD1Pt992myJYru6WilIBEKipzKLL5lvp1LoRSklvi1tqlm0pjkK2yNObthqZexb55H+G0qAKKSu3boq+f/I4DPSd6ysNnOEIgOnYeemSrDmE8NICAHNM4R5+Mw8ofSQs0DmzhrgCOWdUyfMYu40bhNdmKjVixzCRrokt2+QGZ0+vcvUBIDbGj3VBo67NCXUQy23scJW01cOv/rmClxtDKtG/ixEuLLNpfsEUs0B3wV9oi4ePzUdf8c0NcfZNZ34Pvqa+N0pjcMOqruYPd6EIgPLzWp0kJa36UEL0BjV9J4+Jfg0Gv5gjOFsxGtxhal+EpKzeZoMoTt/x2ikAUwQrSBy1ffD73ctxp8rYfO9JNlPeeY/hwfeJG10FDbYSTjxyyfsPj0tog/3kSOj3/rlvimfSF5nmMLkNyWwbM6XJtcDctEKMLHI/EEM6bdPXJXPrMgfwnSiDC88jBvHpL7aJvS9kJvPrru8yPqNP94F5lc8XiNp6hfq7vU11tSR9hC9QQ13WfJ/2g7EykOHgueefBMHbAWBzsqRz7myRgwFHMloqwu50yjsgkHMgTmQY0WCJAyEbbhHRvaCw905S35BDQSuPfOZtEL87I7iW8LY X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hqETob1cPsys+Na+z+THMkv1fnczJ1jX1Zl88OeCGDWtOjpUxGcrTLv6Q0w0g+7eTs7ep7rH0wdQNR3TzEBoAvISQpR++1IzhL5sxCdmW17s6vJWCkiFIvm0uz+U/sowJGWo6ITqjx9/bdgSwr6ZFmX03R9h91Ua0FTkaq5EV432keYywaSvnx1+VtfahwEUp+bRfwsB6G8xTq2Q8V3k5/zy9zPk5b7P6k3neP0dfTXYYojpUIfSvw6t6/urpyhiOQn7gs4c27ex8SZ4R/mddggt7DMsWtnLf+2kKGpShSeuEG3mKUF2PHAaeD2B6xRy6Wle/ZtQuD/gpimD59IsL/gaSg9b399LPawqqnttttw2G0Nt0h6bgaUiFKqiFEDtne9wPB1KCNBPaC9QFczNqn9y5Qv6PbLxaQX9rmtFLHHQa/ioGsp+NW0rItmss8ngkCs2sKTVi/bIAxz56smtzywuy/TWs3zLJsDk9TCrlGaxt+RvU69kvQDQubafbAbD5QCjjdJoWQN4xgPuQPQ2WXjKjlFe4ZElku9Nvmu5fxlHfyDQbToMyFVJ3dITqyUH7YsKUf+wo02WZlPLHrbRaNTYsiCj+lciH6eAajfFpBhePLNEt1E7dt3m2sqk036SqBoB4NVAsFu0eSxQKf8vNXYEuXTHdz5hI98aT8GFOY7RBsC8Jxa8N694DHuNVJ2x3RMfVYFQy9fqSN3HycbLilDMxpks2Odm7Ged4PpYmKocmh3zqz+kFgpMh+Iex3U7fzA/Ptbj3IA1Hem7OSd4eu24Z4yjF72KlGeJavQYPdyM9E23c16UdLqPq11IBiWHy+5SFiPHCX/RoX/7YAuWUpRWRPPhlPI9PcOG6GE9DD5ppKelD5ilUYmI8/axycEde+PZmGz9WuG/rvwGytpmS1XRvjN1TlZAgVlb0Z0S34IK3FavbR9iTxACESb1nhkcxv6OhTTUuF7zh5BvniPA4k5tnufX3Y5W4elHwEqjFmSP1DFoQ3adfq54zVwc9G6pjtpxxysDTPMoIep5DhIvTV/0S79bIEeuGAjRxBeggR/p0YfuyblNNkkATx+vlRr8iYeazdPiVYGXTQ6vyoYKbWbbK1BowjN6BiyDNUIKQZGG/kzlbK+SQDDJvNMey3XhHixyA4eqjkHu6nVPSLRcpCqM6/cSXApkWTO9Bg9ItpALp8igOzYSts20qCWaM4wtPUIlcpIrFLcBcz3yviPtU1KuwJPrWMwuZaRdsulUF3EW4QMQQxFW3KWnwym10BM15nbsc76UFdnmWdDjNHno5A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e9d3eb13-767e-41d9-3f22-08dc3b76044e X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2024 11:35:24.5737 (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: AS1P250MB0429 Subject: [FFmpeg-devel] [PATCH 2/3] avcodec/vulkan: Make FFVkCodecMap decoder-only 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: EKxuNK4JWWuw All the fields of FFVkCodecMap are either decoder-only or encoder-only (with the latter being unused and unset for now). This commit therefore makes this struct decoder-only and moves it to vulkan_decode.c. Also use designated initializers while just at it. Signed-off-by: Andreas Rheinhardt --- libavcodec/vulkan_decode.c | 38 +++++++++++++++++++++++++++++++------- libavcodec/vulkan_video.c | 26 -------------------------- libavcodec/vulkan_video.h | 11 ----------- 3 files changed, 31 insertions(+), 44 deletions(-) diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index 5def908a21..b80415a019 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -22,6 +22,30 @@ #include "config_components.h" #include "libavutil/avassert.h" +typedef struct VkCodecMap { + enum AVCodecID codec_id; + FFVulkanExtensions decode_extension; + VkVideoCodecOperationFlagBitsKHR decode_op; +} VkCodecMap; + +static const VkCodecMap vk_codec_map[] = { + { + .codec_id = AV_CODEC_ID_H264, + .decode_extension = FF_VK_EXT_VIDEO_DECODE_H264, + .decode_op = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, + }, + { + .codec_id = AV_CODEC_ID_HEVC, + .decode_extension = FF_VK_EXT_VIDEO_DECODE_H265, + .decode_op = VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, + }, + { + .codec_id = AV_CODEC_ID_AV1, + .decode_extension = FF_VK_EXT_VIDEO_DECODE_AV1, + .decode_op = 0x01000000, /* TODO fix this */ + }, +}; + #if CONFIG_H264_VULKAN_HWACCEL extern const VkExtensionProperties ff_vk_dec_h264_ext; #endif @@ -44,11 +68,11 @@ static const VkExtensionProperties *dec_ext[] = { #endif }; -static const FFVkCodecMap *get_codecmap(enum AVCodecID codec_id) +static const VkCodecMap *get_codecmap(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]; + for (size_t i = 0; i < FF_ARRAY_ELEMS(vk_codec_map); i++) + if (vk_codec_map[i].codec_id == codec_id) + return &vk_codec_map[i]; av_assert1(!"unreachable"); return NULL; } @@ -670,7 +694,7 @@ static VkResult vulkan_setup_profile(AVCodecContext *avctx, FFVulkanDecodeProfileData *prof, AVVulkanDeviceContext *hwctx, FFVulkanFunctions *vk, - const struct FFVkCodecMap *vk_codec, + const VkCodecMap *vk_codec, VkVideoDecodeH264CapabilitiesKHR *h264_caps, VkVideoDecodeH265CapabilitiesKHR *h265_caps, VkVideoDecodeAV1CapabilitiesMESA *av1_caps, @@ -747,7 +771,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 VkCodecMap *vk_codec = get_codecmap(avctx->codec_id); AVHWFramesContext *frames = (AVHWFramesContext *)frames_ref->data; AVHWDeviceContext *device = (AVHWDeviceContext *)frames->device_ref->data; AVVulkanDeviceContext *hwctx = device->hwctx; @@ -1121,7 +1145,7 @@ int ff_vk_decode_init(AVCodecContext *avctx) FFVulkanContext *s; FFVulkanFunctions *vk; const VkVideoProfileInfoKHR *profile; - const FFVkCodecMap *vk_codec; + const VkCodecMap *vk_codec; VkVideoDecodeH264SessionParametersCreateInfoKHR h264_params = { .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR, diff --git a/libavcodec/vulkan_video.c b/libavcodec/vulkan_video.c index a87df52871..799ac7ee7c 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. */