From patchwork Sun Mar 3 11:35:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 46720 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a919:b0:19e:cdac:8cce with SMTP id cd25csp2263803pzb; Sun, 3 Mar 2024 03:33:28 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXyBNuZ84S13Lk6U58NTs8LLrlVTYKtRku4BcRO3K0crPbD+6ll7ER+8kNRixFOvPeODIkgMXiCjTkuV+yx5pRkjIS47QjsphwXCA== X-Google-Smtp-Source: AGHT+IG1S9EVxUrDjHBq+wklVob8luvqS8d0GWz/Qj1TgWsJa/oKCiyvaSVCkYA/PbAVtsuKte7h X-Received: by 2002:a17:906:131a:b0:a44:488f:77dd with SMTP id w26-20020a170906131a00b00a44488f77ddmr4434397ejb.64.1709465608317; Sun, 03 Mar 2024 03:33:28 -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 h24-20020a170906111800b00a4404386287si3067062eja.81.2024.03.03.03.33.27; Sun, 03 Mar 2024 03:33:28 -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=NFJMDrg6; 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 B8BEF68D359; Sun, 3 Mar 2024 13:33:24 +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-vi1eur04olkn2092.outbound.protection.outlook.com [40.92.75.92]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BA82868D313 for ; Sun, 3 Mar 2024 13:33:17 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eKVuQJZAyQn16gzEqXMXQd4H3Mciu9MbiL+2QIjQ1fuju/s07o6+1WaKo1+JmRGrT3wafO2Gazv6wII9G7wo7zdbs/LdnFsQz96mW57ch1F3vGIQhmznXGTYP9VdNsdbdQeR3Qksjq0HhCJyahzmBwAtABLKTtrxwgbBxCY477Urr3T2UMQ5m9iCfXVFiMKpAYugfp/ICCQ4LUZ//Hk8hRZreK7pt0GqHbzH+T0AWO07keyWfRlD+KRpxzf9N/BFzA6moNMshAz3liBIBbuduyK4Xa6JmGLrwsJNn7YWo6l77spnKI609LeAe0UY9IhkgtAkqg+6E9Bjaw4dXrACfw== 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=gWMRMeX5VO6UxZvSM0/p8mnFhA3tDp5Oi2dbMjIhUAw=; b=dx8zQm7D91ichBwGMeTGIdYWi08FzYIA1etspCi0yAw5YmxUQHSIIEX4upi4041/WnvDc4Kk8LPC8kMhr1fzZV7tGEaNoLqolnV4dDoO78rJM0uEIMqHp7eV33hsNct0lCWY8Tn0MkCQk5OYeodlvNnq4qdwM0OPIw20ZXZDPQXabSNempN1erBSPw3gumkfvThDS4/qHhq+gDWn30/9aYu16uliUZH1pltp4WtL+iPtTWqt3Qe6oI/6pk/0dlVdEV5a9nvG7faoga6RIO5QJe+zuEzfEBfg0xP+N2bPYWwhMVxUG+Nm9mHdNerO1ewP53KajqRoJZsbaFTevDwgSg== 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=gWMRMeX5VO6UxZvSM0/p8mnFhA3tDp5Oi2dbMjIhUAw=; b=NFJMDrg6QIq7qIh1iDbxFb+yDz7VXYbipVaUQz896QuwRwdOfERnlCwiiQJQPYAXM7s9v/9m42hK9pbFRgVu5sW/LHk5Jf1vAfJyn0W0GUNgbsvAS9AP0RzvK9w9ppPxKQUissQ9KTYA0l4MQU2t4Mh+ycSp1UciSxCZ+XIF0VBHaQpLJzl7RIrgF2KnInKj2j2XMHpgHQV3j6oTTdIJNkgCtasGmP7uII06Ul58ojIDMpDyS78zI0B/wUJqOuRtVY7Duj8TrrLDNepqV4j9jXeLVTQpjpCF0CyalW2vIOLoptyRnlYOpzBmqTfur2QoT/zHPH67QcwzYDMyoued+g== 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:33:15 +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:33:15 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Mar 2024 12:35:06 +0100 Message-ID: X-Mailer: git-send-email 2.40.1 X-TMN: [gWsTN7YOc4nXn/w8xiOECg1PhShcTWrh3kVK24Lx9iI=] X-ClientProxiedBy: ZR0P278CA0204.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:6a::13) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240303113508.313480-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: fbdb00d8-17d8-4471-25b6-08dc3b75b787 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WEKb9+mpodjTtJapJG80rrz/LpWOdnCMhazOLKLDaqWb+TB0tSee8rHQ5cWjCxmZdzk5Wp8V83gD4IIGA9cIsLkHVrg6Ox4H1UXZMJOm5e8/QIiYDXCMxLUGyqxY+ZqcKUajxH/dZJEy2I/+BzZ3JJCje1+EITCmzmO7jCtkjXWd9HozozEnfAmbSQDDC64TCeE6DKK01m3djXw/pYP2Pt5Qh1aRqco/AM2CMl4cx81QeZfCcJ4qaQdezOJwgI0d9KVReFt9GGQbcJHAISXZAy12Ce2dh7n3Epbf7YHU+Em/NNtrqHxO8RyC1+PM7ZG35WiOcnj6nkyt8QQycLW5pGnM3+lPi1NSl/Dfh8VTHG+3w5gRzZ5AJ6xC/Z/9COKXfsw4911BArtuVQDg3s1ynuSCV1GkzmH/KDv+TJBuejbVwUz3U7Zzt6KsRgxljTo4VhLwylWrkekUJkQUMVSjuiXTg/ssQ2AWdd+KinxRv6LX+On+CtuqG979iN9e1OqrrxDU8ha6JhfE9QApM9/XZ+U4wsbpnPrtlw2plIshuSScl/Dt/L/DTx+hMG0/OpqR6iFqOTtqrWHr0fjiF0z6Dk1QTNC8o2GUcVgzL1xztQ2lCzKBOMZfy6rlnFVV0lsZ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XklUENjCLP8Hzz1cod1FkfEUGOBn5Ifxgpy5MZhOjnLqBQ9koySzNUZLcaQ1ZxU/spFqLsLMiEPXK8tJeP4YwkoVGcUJ+AWws7CR9/OLnCpuokOdehJmz+0PKkHTbxnPeaI6epubEG4Sp6DAmbNZ1YQdgylOaTKzFVqv0TloQRHdNyomo5Ruk2WVVAi0C41ktcjRTvPMfU6JbCaNLsdOg/Jnnm9H7bgNJwCW/7mJCvzf/Vv8/BRTaXy7SsAmy97Z+yrSE61NGzUMz+bxpMxNU9lz4lParMh4f90E7ORcF2MTxMeijE8qdEvbL0vSkxrpNRDNHZc03FGD8L/XGyd+Kv7fMG4ATLNbwd30FTifOxCs2ZnqG4yEjthd1gfRpFlfpYB9AdE1an05xiY0EDiGGgCaTlrbwtAOol89uOjSXynU7nHOu6K3pyJ4UEqKFCeXoOUNPdvgYzWDExPxphhb/6gZ7W8vQBVs8BSqlqvXgIexclf4um81T2EEsBzs+Y+J85lGLrXPCWsDndik5eRkd7lbhAEnF69q3T5w5loFsz7SwEElHyU+LGy97cIDLOcrRc7VdRl11NcR7aOZm9RgsusQ3sv1NMP5aX6R6l4f7rktwKP63BOIWAFZ/MwOnkcFbp8bgOXXH3nz0QCvrTraM5PsTxSJhLdK1qAD7iZRe1oiGFBwZD7g2k//CGDfQYeVJ9fwGZ7T6uTUPB8mgeK6LHvuGMW3RwkFgDkd4Rc7ZX8WUH2J/lNg2UrJcTI57Ex6MKrC4yDgDi53BGpS44N1ec9mhSGYiUrY6WN+wztxBDiunGYHGLcJpuL7r/+irfbH4HBtQjF1+sT0zYQVoS5Ivuh5cSYc2o0XG3Y5+9m53lWb0xOwS8JvROvYr3oqSFHfm/141m1m6NziHlh9sm249LBKjT4CJ+9XrjSJvVyMFagPTdzl7KVEvmCeHPGsHiK0az8okKm724t+L7zQHvtq+ZIrDrthAFlD9hU62mAgbKAXjV2mcVQbe++POEF7oeH7+0gUJqxohVwir5POMBHb6S+smcqGKocyuNFZJJ5WJqXtq+bkweGj3W71q4GKSpLdEK1V0Bjf/dJZiuzwWhG8agKhFZFTZEOUz930TXuHf9ckIz2i9WO7HKEBAn3gGs1mCVnjgeRshzGJt0ETLS1iegehwpSX6rWOmsHDxFV9HxE+woxePWWNarmBHJ1HtGA5Sy75vZIMd04X2tCUqTiCXdJZvaWHcxXz10P07GnEMeR0iqgUzOdmttG7u9z3gmZupqXyA7XArnBe+cJiusYNmw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fbdb00d8-17d8-4471-25b6-08dc3b75b787 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:33:15.7973 (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 1/3] avcodec/vulkan_video: Don't use sparse table 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: CP95WLr5PQax ff_vk_codec_map currently is an array indexed by AVCodecID; it has AV_CODEC_ID_FIRST_AUDIO (= 65536) entries, but uses only three of them; only 24B of 1MiB were actually used This commit fixes this by adding an AVCodecID field to the table and making it non-sparse. Signed-off-by: Andreas Rheinhardt --- libavcodec/vulkan_decode.c | 17 ++++++++++++++--- libavcodec/vulkan_video.c | 11 +++++++---- libavcodec/vulkan_video.h | 6 ++---- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index fdbcbb450a..5def908a21 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -20,6 +20,7 @@ #include "vulkan_video.h" #include "vulkan_decode.h" #include "config_components.h" +#include "libavutil/avassert.h" #if CONFIG_H264_VULKAN_HWACCEL extern const VkExtensionProperties ff_vk_dec_h264_ext; @@ -43,6 +44,15 @@ static const VkExtensionProperties *dec_ext[] = { #endif }; +static const FFVkCodecMap *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]; + av_assert1(!"unreachable"); + return NULL; +} + static const VkVideoProfileInfoKHR *get_video_profile(FFVulkanDecodeShared *ctx, enum AVCodecID codec_id) { const VkVideoProfileListInfoKHR *profile_list; @@ -737,7 +747,7 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_ { VkResult ret; int max_level, base_profile, cur_profile; - const struct FFVkCodecMap *vk_codec = &ff_vk_codec_map[avctx->codec_id]; + const FFVkCodecMap *vk_codec = get_codecmap(avctx->codec_id); AVHWFramesContext *frames = (AVHWFramesContext *)frames_ref->data; AVHWDeviceContext *device = (AVHWDeviceContext *)frames->device_ref->data; AVVulkanDeviceContext *hwctx = device->hwctx; @@ -1111,6 +1121,7 @@ int ff_vk_decode_init(AVCodecContext *avctx) FFVulkanContext *s; FFVulkanFunctions *vk; const VkVideoProfileInfoKHR *profile; + const FFVkCodecMap *vk_codec; VkVideoDecodeH264SessionParametersCreateInfoKHR h264_params = { .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR, @@ -1167,9 +1178,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); /* Check for support */ - if (!(s->video_props[qf].videoCodecOperations & - ff_vk_codec_map[avctx->codec_id].decode_op)) { + if (!(s->video_props[qf].videoCodecOperations & vk_codec->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); diff --git a/libavcodec/vulkan_video.c b/libavcodec/vulkan_video.c index fb20315db4..a87df52871 100644 --- a/libavcodec/vulkan_video.c +++ b/libavcodec/vulkan_video.c @@ -20,20 +20,23 @@ #include "vulkan_video.h" -const FFVkCodecMap ff_vk_codec_map[AV_CODEC_ID_FIRST_AUDIO] = { - [AV_CODEC_ID_H264] = { +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, }, - [AV_CODEC_ID_HEVC] = { + { + .codec_id = AV_CODEC_ID_HEVC, 0, 0, FF_VK_EXT_VIDEO_DECODE_H265, VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR }, - [AV_CODEC_ID_AV1] = { + { + .codec_id = AV_CODEC_ID_AV1, 0, 0, FF_VK_EXT_VIDEO_DECODE_AV1, diff --git a/libavcodec/vulkan_video.h b/libavcodec/vulkan_video.h index 51f44dd543..b06e369abd 100644 --- a/libavcodec/vulkan_video.h +++ b/libavcodec/vulkan_video.h @@ -32,6 +32,7 @@ #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; @@ -46,10 +47,7 @@ typedef struct FFVkVideoSession { AVBufferPool *buf_pool; } FFVkVideoCommon; -/** - * Index is codec_id. - */ -extern const FFVkCodecMap ff_vk_codec_map[AV_CODEC_ID_FIRST_AUDIO]; +extern const FFVkCodecMap ff_vk_codec_map[3]; /** * Get pixfmt from a Vulkan format. 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. */ From patchwork Sun Mar 3 11:37:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 46722 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a919:b0:19e:cdac:8cce with SMTP id cd25csp2264555pzb; Sun, 3 Mar 2024 03:35:45 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXL3VwDfARnEvzbYEaHo9cWsGYN1cv2sX0OK5yWnN6KmL7KbMbl8wbGVKsA0OYY2q8QaBUBt2liIzHD1MMOpGKyC5FG0BGbOXeZ4Q== X-Google-Smtp-Source: AGHT+IEKmbnFIwmWCYQ6qae00Eb8QH596Z3463uA93ZdGjIYzKgIORkwNnWTAsRQ7FhS2GtAtiiZ X-Received: by 2002:a05:6402:31af:b0:566:f603:75d2 with SMTP id dj15-20020a05640231af00b00566f60375d2mr2999901edb.16.1709465744749; Sun, 03 Mar 2024 03:35:44 -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 f18-20020a056402355200b005653f265584si3145035edd.241.2024.03.03.03.35.44; Sun, 03 Mar 2024 03:35:44 -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=Gk7juGe3; 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 3288D68D389; Sun, 3 Mar 2024 13:35:38 +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 92FA368D2D1 for ; Sun, 3 Mar 2024 13:35:31 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YIkG2DrH7/a3A4wzGZYTCsj2oqaDpqCpXGqcv9xB2TyK3QiexieiiyDciyrxGjy0s0fO+of+e83K9WSfFqRHiI2Y1o7h0Nw4hBeFcmS+hSMWygmaUaNMT+3KnqX9JlDHKkOKVMbvfEce+tI9xvi7qUrsp7MTYx+Y/Kuq80N1lRKCcWo5VSoHExI86j/k86UWRa+gHnU0vfyQY8/WifwaivAJZjY23P/CuFKKn0GtDTYbtc7vTe9HGGCKzBlJZ6/0B5lpqG8joKiCqGwwAl4AK/8v2Ant2llgibhZStOO0YSnDwrKr+WJ9/626lHekytV/hCo/k44S3Xx7Ca5fg4X3Q== 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=XkJAgf2BAERab4yARr9CuCEUwX84gmPLPbxsUNsEBFM=; b=OZ1qH4LMwvMnQYXQjeQE191VHuull5nTqadlvoEpp3dXadYA06CbYLvNptknMx9LXYXMQs1BJd6w948qV1+clm14UzMGNoTfDluXWsMq9eKrA5DZCE/IaiRJD2uymRHsCX5kwJkON6HhHMNkaC06Tb9hoahrZ6PUgQ2SLW3SgHXj79EtM8lgyku+wdUrHDjtSfZsPhHoZnViPJaTmkEtC7W07ymdqw2JJLMLqXcs2m5wat4lM91+MT7ltM5/ZZnwS1J+clhMgFSuPfoTjG8mEzM0h4hEnKWSV5YFEoht1GlCxGEk8caMwqMVFGCXh6zSJCS6UiWqip5KAmQpYcGkGA== 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=XkJAgf2BAERab4yARr9CuCEUwX84gmPLPbxsUNsEBFM=; b=Gk7juGe3RrBpZw25jNK5/QF9KwHRzLS7t7UBRES62lmvbxCwnixpbON2mkj0UpoHYxzo35DpZgMKZ9Jfk8f9gqgWTS52Po72o/WcpPE8KNJ1JlCgwGZlxhwyN1WOiB1fE8HjKddFmElX55pj3LxSEWeXa0xq2yQyfUQO7XC0NKyLD9Mun/6IZlxlomHX9jFjNIXB42Z4UeJulLEASixQrES43+gMGmOeaud/fux6/9CCkA1G7sDC7ovrZWyQkeP11yvrG9H1HevHjFngoF+faN7GnKrJfZKYfwM4nC2RKScMxYEKngB+bldopgHawzKsndrJx5hJO49TmIg7cT+3MA== 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:26 +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:26 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Mar 2024 12:37:18 +0100 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [9Wje/W362riAG3C/O1a9TaAK0KNy0CMk] 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-2-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: 1df617c2-440a-4107-3716-08dc3b760577 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PHbrn4HvkEahwFpLjxd5cNSORAKnaAg78IbCSDbLp4x8l+LSnoHkbpcC8uP5Pnyy1GMYztqt9asdc5VMwMjKc/IclNfZb4no1BBsmCyDD+IPp6F8aYeG+8yjf5x1POTnFvE0BpxnsCEcxQFUr+z2MMEyHNvE6JGEUpsU73/si6fIsMKxQPVdb1ZeoG8n4IQbig8jiWqD8xStkrhZKQqnMQeSdymbgj/L/OewMCLR61qqd82p5YPHd0imdU3WCYBN6XFz2OoSy0zAh7F4UL2d994scK3KsDs+7g0rQdbGrhRLpDRsrKVfkbTuEImfbHLqzjJJUgj3P7RUwqzPtXdWxrnRTzGgJesV9eWTGLjmIsalFYcScBy4unVyREM00EW3M0uEaas81ZzWimDLv82KPOJNOkVIVCpc/BQzv+WkXOEC4cJl5+n50abaBYqmIr6uDSXCuZk8/WgfNundUiRizD+dH5QaWqDl11IjuAq41L5DW1tX/uS2YzAYs4VxZRHsg9yNxbPSk+9ONY+rUhvq54YkcU93R0rnUHlgLTkIj9/OmIjxRI8wWFY4OA5QVViwMvXGyR8Yocv12nMZiRp1WOGlhts2KBNbgX2c5wJpNecvRlksVRUmnr0sFQwMKBxZ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: VjhW7PstwNeoPKXKHOkQYhPy4NyTuKlHnufIAqiEKZmXmN4ddIlwKOBGUGC8xO/3lvbyDHmO6vqroIjX6w8Kyxrw4dkaZoQTkpQXgZcwLD0F2hovwi0AqkpBAkG2B1/HQJ5+FUrIr+hfwQ9Af1QHul9ivUmEXSECSWNlEoPxBvNPvLBTxxQb5XBn/sCEyFEx5NCB1bHiORtNK8dAdz0B86lrOsyf0dP3pwV6R+6kQ0A3UanZ/UbCbAKlXRcre6ceDMV6JJCAkyPYyHtwXFtfJVKV8ro4uDk6sgrvGhHMhTOZID2MqCldMiSM7kwA7p6eSvZWlIjL396dBTvB6UkXnQ6XjPA4CDCSyjsvr88lOkekcBoM8hpRrrrJFPevfyElnsD1yqarkWFFwIJkiz00No2dYGcBkqUhVbZsH1GNY8Dpr+HwikmKJm1SJ4EmrUJXtLozK/Mf6FnB13nyQb8q3ni9ZkSJhdmpTT7xvBP647kPInGHNtxugS7bPkY1nbaGn505RqL/fmO/fmpzsNdEA5bMlxEbS4aCECdr0VhQpEePVKV1PAia7c32mTlI98MIfdMbHmQVIbOJkE3nI8mVDEKpBefVc1ve7KaqpO6gGIxSE7pLOOD4JMMoIWXBYqzL0YjmALyF+nsuusS+tIEe76Lty1R2P2+E1pcQ5Svry2ouZLkrXpwv3zjOgaRhgwxS41OChS6vedBrUiPB/Ef0B+8p5qJABRHdxYa6yS2MM0Aa3N8wyYHQHp0g3rW12bzw9ZFizCt6xaDkW2hOSqKLYzoqPJFHA6e32RLHAuQipkumrWk0aJad28kicoqth94xcAUgrZ0D7XavY9lyFkSD16/mcVbXew/FlOU/mOG54BrsChC/q0M0ZNk3CKudnZ1pMm6j8jJLOrMI+e+puYbwYHE6ekbWlbxjCph4W3TEUfyv93E7MMBHgo6tPTTxTz44T/fFpHMIJOQe7rIwEkh1WQjw0Mb7ZE+uXfkd5p6bcSq0zTm9efrId1mBSVK31othWhlrlvbfP4yMWjyrFWc38klGmw7ssbVlSfhfggW1aYr5dLJQRhc9Dzm1uTt66ENj0MdDeXKxLRGA+Kvxm1tFKc6Ai6CT+H0btMuPrd2Tt+Vr4fiX2Md4DkTMY/Guelm//lhYl8+yPNSk4+KiZXUBiTb4uXl+oJymiOuE6v+OKPdHKs9w089nB+LI0El9PoAgH3Jm5bts+CJdaOShvPNe3ABfyExkv4Mo1eueuJMSjyxAGZzEFhUIWb1pLhpuQd3d6yTqtpdBnGo9vYbEpi20vA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1df617c2-440a-4107-3716-08dc3b760577 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:26.5242 (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 3/3] avcodec/vulkan_decode: Un-sparse extensions table 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: xdwmF8L3BD0+ Only three of the 226 (== AV_CODEC_ID_AV1) entries have been used. Unsparsing this table is especially important given that this array lives in .data.rel.ro. Signed-off-by: Andreas Rheinhardt --- Instead of parallel tables, one could also merge VkCodecMap and VkExtensionProperties (i.e. putting one of the latter inside the former) if preferred. libavcodec/vulkan_decode.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index b80415a019..121ed40f40 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -28,22 +28,29 @@ typedef struct VkCodecMap { VkVideoCodecOperationFlagBitsKHR decode_op; } VkCodecMap; +/* The following table and dec_ext below are supposed to be parallel. */ static const VkCodecMap vk_codec_map[] = { +#if CONFIG_H264_VULKAN_HWACCEL { .codec_id = AV_CODEC_ID_H264, .decode_extension = FF_VK_EXT_VIDEO_DECODE_H264, .decode_op = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, }, +#endif +#if CONFIG_HEVC_VULKAN_HWACCEL { .codec_id = AV_CODEC_ID_HEVC, .decode_extension = FF_VK_EXT_VIDEO_DECODE_H265, .decode_op = VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, }, +#endif +#if CONFIG_AV1_VULKAN_HWACCEL { .codec_id = AV_CODEC_ID_AV1, .decode_extension = FF_VK_EXT_VIDEO_DECODE_AV1, .decode_op = 0x01000000, /* TODO fix this */ }, +#endif }; #if CONFIG_H264_VULKAN_HWACCEL @@ -58,16 +65,19 @@ extern const VkExtensionProperties ff_vk_dec_av1_ext; static const VkExtensionProperties *dec_ext[] = { #if CONFIG_H264_VULKAN_HWACCEL - [AV_CODEC_ID_H264] = &ff_vk_dec_h264_ext, + &ff_vk_dec_h264_ext, #endif #if CONFIG_HEVC_VULKAN_HWACCEL - [AV_CODEC_ID_HEVC] = &ff_vk_dec_hevc_ext, + &ff_vk_dec_hevc_ext, #endif #if CONFIG_AV1_VULKAN_HWACCEL - [AV_CODEC_ID_AV1] = &ff_vk_dec_av1_ext, + &ff_vk_dec_av1_ext, #endif }; +_Static_assert(FF_ARRAY_ELEMS(dec_ext) == FF_ARRAY_ELEMS(vk_codec_map), + "dec_ext and vk_codec_map out-of-sync"); + static const VkCodecMap *get_codecmap(enum AVCodecID codec_id) { for (size_t i = 0; i < FF_ARRAY_ELEMS(vk_codec_map); i++) @@ -77,6 +87,11 @@ static const VkCodecMap *get_codecmap(enum AVCodecID codec_id) return NULL; } +static const VkExtensionProperties *get_extension(const VkCodecMap *vk_codec) +{ + return dec_ext[vk_codec - vk_codec_map]; +} + static const VkVideoProfileInfoKHR *get_video_profile(FFVulkanDecodeShared *ctx, enum AVCodecID codec_id) { const VkVideoProfileListInfoKHR *profile_list; @@ -772,6 +787,7 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_ VkResult ret; int max_level, base_profile, cur_profile; const VkCodecMap *vk_codec = get_codecmap(avctx->codec_id); + const VkExtensionProperties *extension = get_extension(vk_codec); AVHWFramesContext *frames = (AVHWFramesContext *)frames_ref->data; AVHWDeviceContext *device = (AVHWDeviceContext *)frames->device_ref->data; AVVulkanDeviceContext *hwctx = device->hwctx; @@ -890,10 +906,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); + extension->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(extension->specVersion)); av_log(avctx, AV_LOG_VERBOSE, " Decode modes:%s%s%s\n", dec_caps->flags ? "" : " invalid", @@ -1221,7 +1237,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 = get_extension(vk_codec); session_create.pVideoProfile = profile; /* Create decode exec context for this specific main thread.