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.