From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 3FC0C46BC7 for ; Sun, 3 Mar 2024 11:33:26 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6B08268D353; Sun, 3 Mar 2024 13:33:24 +0200 (EET) 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: =?us-ascii?Q?XklUENjCLP8Hzz1cod1FkfEUGOBn5Ifxgpy5MZhOjnLqBQ9koySzNUZLcaQ1?= =?us-ascii?Q?ZxU/spFqLsLMiEPXK8tJeP4YwkoVGcUJ+AWws7CR9/OLnCpuokOdehJmz+0P?= =?us-ascii?Q?KkHTbxnPeaI6epubEG4Sp6DAmbNZ1YQdgylOaTKzFVqv0TloQRHdNyomo5Ru?= =?us-ascii?Q?k2WVVAi0C41ktcjRTvPMfU6JbCaNLsdOg/Jnnm9H7bgNJwCW/7mJCvzf/Vv8?= =?us-ascii?Q?/BRTaXy7SsAmy97Z+yrSE61NGzUMz+bxpMxNU9lz4lParMh4f90E7ORcF2MT?= =?us-ascii?Q?xMeijE8qdEvbL0vSkxrpNRDNHZc03FGD8L/XGyd+Kv7fMG4ATLNbwd30FTif?= =?us-ascii?Q?OxCs2ZnqG4yEjthd1gfRpFlfpYB9AdE1an05xiY0EDiGGgCaTlrbwtAOol89?= =?us-ascii?Q?uOjSXynU7nHOu6K3pyJ4UEqKFCeXoOUNPdvgYzWDExPxphhb/6gZ7W8vQBVs?= =?us-ascii?Q?8BSqlqvXgIexclf4um81T2EEsBzs+Y+J85lGLrXPCWsDndik5eRkd7lbhAEn?= =?us-ascii?Q?F69q3T5w5loFsz7SwEElHyU+LGy97cIDLOcrRc7VdRl11NcR7aOZm9RgsusQ?= =?us-ascii?Q?3sv1NMP5aX6R6l4f7rktwKP63BOIWAFZ/MwOnkcFbp8bgOXXH3nz0QCvrTra?= =?us-ascii?Q?M5PsTxSJhLdK1qAD7iZRe1oiGFBwZD7g2k//CGDfQYeVJ9fwGZ7T6uTUPB8m?= =?us-ascii?Q?geK6LHvuGMW3RwkFgDkd4Rc7ZX8WUH2J/lNg2UrJcTI57Ex6MKrC4yDgDi53?= =?us-ascii?Q?BGpS44N1ec9mhSGYiUrY6WN+wztxBDiunGYHGLcJpuL7r/+irfbH4HBtQjF1?= =?us-ascii?Q?+sT0zYQVoS5Ivuh5cSYc2o0XG3Y5+9m53lWb0xOwS8JvROvYr3oqSFHfm/14?= =?us-ascii?Q?1m1m6NziHlh9sm249LBKjT4CJ+9XrjSJvVyMFagPTdzl7KVEvmCeHPGsHiK0?= =?us-ascii?Q?az8okKm724t+L7zQHvtq+ZIrDrthAFlD9hU62mAgbKAXjV2mcVQbe++POEF7?= =?us-ascii?Q?oeH7+0gUJqxohVwir5POMBHb6S+smcqGKocyuNFZJJ5WJqXtq+bkweGj3W71?= =?us-ascii?Q?q4GKSpLdEK1V0Bjf/dJZiuzwWhG8agKhFZFTZEOUz930TXuHf9ckIz2i9WO7?= =?us-ascii?Q?HKEBAn3gGs1mCVnjgeRshzGJt0ETLS1iegehwpSX6rWOmsHDxFV9HxE+woxe?= =?us-ascii?Q?PWWNarmBHJ1HtGA5Sy75vZIMd04X2tCUqTiCXdJZvaWHcxXz10P07GnEMeR0?= =?us-ascii?Q?iqgUzOdmttG7u9z3gmZupqXyA7XArnBe+cJiusYNmw=3D=3D?= 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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. -- 2.40.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".