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 95251476A3 for ; Tue, 19 Sep 2023 19:58:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7E5D568C972; Tue, 19 Sep 2023 22:57:23 +0300 (EEST) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2045.outbound.protection.outlook.com [40.92.89.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9DF0C68C961 for ; Tue, 19 Sep 2023 22:57:22 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=USFDXM2DIcVKc3SceFBEUAy0gOV4eX45ege6yUiWCeu2XIr7jzw3GR3RdIP8uwOW915Lhd1MJZWwlJzrHp/CH0Heak6fR0VJ04k0wj3MHWmk1W/tZbxjkD27aWRsiYoUnzFYb/48QZc6lSTXowJcN7yQ6ujYA02tnwuFDkmDCDFbcU6Ge5dKEs+4MGbcnhcf5LXHgOAQK5WFySPtQJyuIPosXrPVFxH5DrDBsYoxGniJaUNIRuaqYLvN29hLhMrKM7khUyK1zDuYJzeXX9zgwPz4tWMwARo3hoRxtg95sWc9YjRXdaANTiMXXuXm/vnZLDQq4+Lb939txFyi9dRXTg== 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=7Y13kBwJ4L11h09L4yza7byc9Y66gGhlGEEDwoOPfxU=; b=NBVtY3+iF8XJ//c42YVFbZfOzifErOJnX92GDeOVO7IltM1yEgmFdtshAytKucq+MRMy+AhdpmWeeFnJejAE4kyJfV6elJ6b0EIby5HqabKO2wLsQ8KPHjxHzL0ySzl54Wb6NvVsHLMxF92W1ek8ZiYI/mlm+DxWFWXnN2qG8Pm4gKvp6siZAHua+u4uLO5E0FYrpPRJukFVYb+AnnHnVYRZew93U0fCZ8ncbV+h7uoATgLzXVeHnb0TH5s+Eyf2kV6WWDcNjh+jaVBj8fqlJpJh2gEMe3Y3SzG/LJCEm8YWedZY8MT91uu+1Mxs1JjCdY4iEe83GmxyiesgtbWLVQ== 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=7Y13kBwJ4L11h09L4yza7byc9Y66gGhlGEEDwoOPfxU=; b=iwg48CIjbZRIr2FO9aNZmjgAUC/x5VmE5F6EMAcGW0q4MkvIEQpQ5Owf4k57VRiJXR5BuAUt2EV39RiWBIwqhdY36AQRA/7sNlmqa0nQhkyDFdK3uthctoLCFvFb4K9Y5vqVKgpXiBKUAxQ5q+mTAV2Lonwfm8qxf0ZhNUP+BvqapO1/nAMnGqgHx/+OvjAlkyKtWvTYeZq3v6qXXTV7mTBDEEYRuBb92duY+UVj99xR3D8aTsropAro27+hkSf282kt+t770LMKfxryuu//Hpuk/zyKVThbY2UPi/52X2fSsx6j31ftnqfLabj3ZWdzASoR4wpGM9Q7QrFBKeN4aw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AM8P250MB0215.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:326::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.26; Tue, 19 Sep 2023 19:57:21 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6792.026; Tue, 19 Sep 2023 19:57:21 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Sep 2023 21:57:05 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [LBk+Y5YniC0sq2gqDT30YMHPKi2dHZX2] X-ClientProxiedBy: ZR0P278CA0086.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:22::19) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230919195734.1005750-13-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AM8P250MB0215:EE_ X-MS-Office365-Filtering-Correlation-Id: 82e578ac-2c60-4a5a-6584-08dbb94aa237 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Gb/EPnSfJ6PkX6j/TJrupdMr5i3UKH2xPmDStQgxTcpgQ4WVM7LbQkmZqNSOsmkYxVlf4KpnG4dKSf+nLlda8vfa8hRStmrGYNxt7lGwCMV1AsVOwanarHySWvm3uUQXpNgD6FuwEwHfoeU0jvw87Y1FL43o+UFR/AEbeCuOQH/3R7MMd83HlmPxN/Syb7yWmUI7QjpfTUod+sYAw81SA0bDMhpDXLlf4/tN1ikKfCEdomisir8WNTKU/b4Bf8xGT283dR/O6WLwGl82ZUrlWDEfCR1HMjY9fyCtfLQcA2dl8z574QL+te6a7OAmOmH0WdkkLJgc3eNI4qJRN5Lv1XOTQcKL/faQ16z/tbNENehnJYZpbShnbflpyypd1jWoDkfXU20MNDIqbqYlXfCIfwfgs4NVF8MM/Fm5mD40EJv+IJzW6nEQBh8IY+0o2LFYwlO3pwmqZGnjHaWUm2vl8TlPw2BIaAnUh1Zi7ZdTP6i/VPkaX+Y4do/4lvaYocyFOIsPW8W6JPZC9NQ0j/+pS0ljb6maEmdOM0PEpsjssJGqGzW9jowWLh6sf9gTDQ/LNm3HbGbvLR8eho0/8UYmQNTcO1r1fh8uhhvDdPtw4C7UuBjYlPHHQ6lwFZtmQ8b1 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?yqfPCZrrZ1nUV02987CzCnz9Tngx5X0IhBnIVaOeH55blHnmmKbo4XfrdcFj?= =?us-ascii?Q?qYnxKZ4SMqkbQP2FJM0X9d2GmtvIdVJYTbmcV2Kw4kl0SZjrqMUmwWeUV+19?= =?us-ascii?Q?TOMLEKbBfVAJDQyW19EgjuiHphFt8tsykruU/W2mShMetTPFAD696PNYWIXs?= =?us-ascii?Q?sVO3+7mdGrIw/NeySRJHO+H60ytVbQjtgAljtPRV/R4KZow7o0ia8D4wakOi?= =?us-ascii?Q?9HKXirfwMqliFYKlkntJNQp6GjdCewP9ABFtEElh7rY12GE6S9ktshbQ+xwo?= =?us-ascii?Q?EZDtsIDtRSM4/+e2yyXfRb7DMcqihJ0CYjshKvYkqfexfOuH66wH2tHLGh2Z?= =?us-ascii?Q?klqEZi/tElBCXYtrZ4zMPINqC8udx2/7i8Zk3ZccK/ckLGXQRVDGvYGITx2C?= =?us-ascii?Q?8CYeYHCm5KNRSfWQNoXvDony3BdSGP5wriSt3qQu3p7KRazyPHekKsdQTiJr?= =?us-ascii?Q?IggNvXWr1GGCJnalBhMZmljuL73r5BBDQBxi69k7tjitFUSPiKr57iBwsTaZ?= =?us-ascii?Q?Fa/LVwV+NWp9b6ihbAWCeIbdXvI0PV+uM0kRgL9s0logAZRMVjY1EIo/XTS1?= =?us-ascii?Q?OrIKuiC4TsG38TeHRacjxC5q4KOyCmolvKklSIQaW/1+Wmxn9wWfmoBMle+n?= =?us-ascii?Q?6324ASZkqHTNk5aW3GyOIvJTYQu4gKtllROO1XxUToJZXxOJGiwg5k93UqHo?= =?us-ascii?Q?1rzES9X3+ioiAIngFUVHCHZ3Ex6dOpH1lAnEz1DkTjjcGty5UOKEKlk1aGy6?= =?us-ascii?Q?a1vNqled/r/owb3Urhpnv8u/kdbZGoJgidg6ZaewFy3xHnfwFf3/ixvyM8qP?= =?us-ascii?Q?KOHtHtgUYlo/t+hviVKZzPE9nfIIwaqgKoSntaMPiWFWFUGGRM3cZRMMTFh6?= =?us-ascii?Q?BIRaSeGK+4sAAAsbsGurxfDEPAieplKt3Vr1GKocQJGLBcPAuku7kp7SDuT+?= =?us-ascii?Q?KplPxM9NGD/eskb8RWwfpr2N9zkawTam5FlyUlzdKtW9dAXLBOGE2vG2s0bV?= =?us-ascii?Q?hnLhFVoNI62E6dtswapEwnCV9QAehZxCf2WijNFxMt4udyxzyWCOogqJuIeE?= =?us-ascii?Q?KLLJ4WmZC/hlxHhinGsP+646EbU+v+ISBDnZ/etVOvt6jalHq3FGe8B6wair?= =?us-ascii?Q?NWhSQ4+9e6iZS+VjW8qhDwmJSckhAG/rA/I9eDdnWDaDzJmikgu5t5rRRV7n?= =?us-ascii?Q?6ohsw91kJ3Pu+enjxgDbc0k9f6OBw/s/z3yNQbeMQuRqeArHLUNi0Q3HDrYg?= =?us-ascii?Q?tIoVssCwvFU7rSb4ElBB?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 82e578ac-2c60-4a5a-6584-08dbb94aa237 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 19:57:20.9693 (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: AM8P250MB0215 Subject: [FFmpeg-devel] [PATCH 13/42] avcodec/vulkan_decode: Use RefStruct API for shared_ref 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: Avoids allocations, error checks and indirections. Also increases type-safety. Signed-off-by: Andreas Rheinhardt --- libavcodec/vulkan_av1.c | 2 +- libavcodec/vulkan_decode.c | 49 ++++++++++++++++---------------------- libavcodec/vulkan_decode.h | 2 +- libavcodec/vulkan_h264.c | 2 +- libavcodec/vulkan_hevc.c | 2 +- 5 files changed, 24 insertions(+), 33 deletions(-) diff --git a/libavcodec/vulkan_av1.c b/libavcodec/vulkan_av1.c index 7c8dda7798..4998bf7ebc 100644 --- a/libavcodec/vulkan_av1.c +++ b/libavcodec/vulkan_av1.c @@ -106,7 +106,7 @@ static int vk_av1_create_params(AVCodecContext *avctx, AVBufferRef **buf) { const AV1DecContext *s = avctx->priv_data; FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + FFVulkanDecodeShared *ctx = dec->shared_ctx; const AV1RawSequenceHeader *seq = s->raw_seq; diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index ef4a1c3809..e6a0646139 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -16,6 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "refstruct.h" #include "vulkan_video.h" #include "vulkan_decode.h" #include "config_components.h" @@ -71,7 +72,7 @@ int ff_vk_update_thread_context(AVCodecContext *dst, const AVCodecContext *src) FFVulkanDecodeContext *dst_ctx = dst->internal->hwaccel_priv_data; if (!dst_ctx->exec_pool.cmd_bufs) { - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)src_ctx->shared_ref->data; + FFVulkanDecodeShared *ctx = src_ctx->shared_ctx; const VkVideoProfileInfoKHR *profile = get_video_profile(ctx, dst->codec_id); if (!profile) { @@ -89,9 +90,7 @@ int ff_vk_update_thread_context(AVCodecContext *dst, const AVCodecContext *src) return err; } - err = av_buffer_replace(&dst_ctx->shared_ref, src_ctx->shared_ref); - if (err < 0) - return err; + ff_refstruct_replace(&dst_ctx->shared_ctx, src_ctx->shared_ctx); if (src_ctx->session_params) { err = av_buffer_replace(&dst_ctx->session_params, src_ctx->session_params); @@ -175,7 +174,7 @@ int ff_vk_decode_prepare_frame(FFVulkanDecodeContext *dec, AVFrame *pic, int alloc_dpb) { int err; - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + FFVulkanDecodeShared *ctx = dec->shared_ctx; FFVulkanFunctions *vk = &ctx->s.vkfn; vkpic->slices_size = 0; @@ -239,7 +238,7 @@ int ff_vk_decode_add_slice(AVCodecContext *avctx, FFVulkanDecodePicture *vp, uint32_t *nb_slices, const uint32_t **offsets) { FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + FFVulkanDecodeShared *ctx = dec->shared_ctx; static const uint8_t startcode_prefix[3] = { 0x0, 0x0, 0x1 }; const size_t startcode_len = add_startcode ? sizeof(startcode_prefix) : 0; @@ -299,7 +298,7 @@ int ff_vk_decode_add_slice(AVCodecContext *avctx, FFVulkanDecodePicture *vp, void ff_vk_decode_flush(AVCodecContext *avctx) { FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + FFVulkanDecodeShared *ctx = dec->shared_ctx; FFVulkanFunctions *vk = &ctx->s.vkfn; VkVideoBeginCodingInfoKHR decode_start = { @@ -336,7 +335,7 @@ int ff_vk_decode_frame(AVCodecContext *avctx, FFVkVideoBuffer *sd_buf; FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + FFVulkanDecodeShared *ctx = dec->shared_ctx; FFVulkanFunctions *vk = &ctx->s.vkfn; /* Output */ @@ -586,9 +585,9 @@ void ff_vk_decode_free_frame(AVHWDeviceContext *dev_ctx, FFVulkanDecodePicture * av_frame_free(&vp->dpb_frame); } -static void free_common(void *opaque, uint8_t *data) +static void free_common(FFRefStructOpaque unused, void *obj) { - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)data; + FFVulkanDecodeShared *ctx = obj; FFVulkanContext *s = &ctx->s; FFVulkanFunctions *vk = &ctx->s.vkfn; @@ -613,8 +612,6 @@ static void free_common(void *opaque, uint8_t *data) s->hwctx->alloc); ff_vk_uninit(s); - - av_free(ctx); } static int vulkan_decode_bootstrap(AVCodecContext *avctx, AVBufferRef *frames_ref) @@ -626,21 +623,15 @@ static int vulkan_decode_bootstrap(AVCodecContext *avctx, AVBufferRef *frames_re AVVulkanDeviceContext *hwctx = device->hwctx; FFVulkanDecodeShared *ctx; - if (dec->shared_ref) + if (dec->shared_ctx) return 0; - ctx = av_mallocz(sizeof(*ctx)); - if (!ctx) + dec->shared_ctx = ff_refstruct_alloc_ext(sizeof(*ctx), 0, NULL, + free_common); + if (!dec->shared_ctx) return AVERROR(ENOMEM); - dec->shared_ref = av_buffer_create((uint8_t *)ctx, sizeof(*ctx), - free_common, NULL, 0); - if (!dec->shared_ref) { - av_free(ctx); - return AVERROR(ENOMEM); - } - - ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + ctx = dec->shared_ctx; ctx->s.extensions = ff_vk_extensions_to_mask(hwctx->enabled_dev_extensions, hwctx->nb_enabled_dev_extensions); @@ -648,13 +639,13 @@ static int vulkan_decode_bootstrap(AVCodecContext *avctx, AVBufferRef *frames_re if (!(ctx->s.extensions & FF_VK_EXT_VIDEO_DECODE_QUEUE)) { av_log(avctx, AV_LOG_ERROR, "Device does not support the %s extension!\n", VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME); - av_buffer_unref(&dec->shared_ref); + ff_refstruct_unref(&dec->shared_ctx); return AVERROR(ENOSYS); } err = ff_vk_load_functions(device, &ctx->s.vkfn, ctx->s.extensions, 1, 1); if (err < 0) { - av_buffer_unref(&dec->shared_ref); + ff_refstruct_unref(&dec->shared_ctx); return err; } @@ -751,7 +742,7 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_ VkFormat best_vkfmt; FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + FFVulkanDecodeShared *ctx = dec->shared_ctx; FFVulkanFunctions *vk = &ctx->s.vkfn; VkVideoCapabilitiesKHR *caps = &ctx->caps; @@ -1095,14 +1086,14 @@ int ff_vk_decode_create_params(AVBufferRef **par_ref, void *logctx, FFVulkanDeco int ff_vk_decode_uninit(AVCodecContext *avctx) { FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + FFVulkanDecodeShared *ctx = dec->shared_ctx; /* Wait on and free execution pool */ ff_vk_exec_pool_free(&ctx->s, &dec->exec_pool); av_freep(&dec->hevc_headers); av_buffer_unref(&dec->session_params); - av_buffer_unref(&dec->shared_ref); + ff_refstruct_unref(&dec->shared_ctx); av_freep(&dec->slice_off); return 0; } @@ -1148,7 +1139,7 @@ int ff_vk_decode_init(AVCodecContext *avctx) return err; /* Initialize contexts */ - ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + ctx = dec->shared_ctx; s = &ctx->s; vk = &ctx->s.vkfn; diff --git a/libavcodec/vulkan_decode.h b/libavcodec/vulkan_decode.h index c983b44029..b0b1ff5614 100644 --- a/libavcodec/vulkan_decode.h +++ b/libavcodec/vulkan_decode.h @@ -54,7 +54,7 @@ typedef struct FFVulkanDecodeShared { } FFVulkanDecodeShared; typedef struct FFVulkanDecodeContext { - AVBufferRef *shared_ref; + FFVulkanDecodeShared *shared_ctx; AVBufferRef *session_params; FFVkExecPool exec_pool; diff --git a/libavcodec/vulkan_h264.c b/libavcodec/vulkan_h264.c index 2cb54bb1ff..172c6c4e8e 100644 --- a/libavcodec/vulkan_h264.c +++ b/libavcodec/vulkan_h264.c @@ -287,7 +287,7 @@ static int vk_h264_create_params(AVCodecContext *avctx, AVBufferRef **buf) { int err; FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + FFVulkanDecodeShared *ctx = dec->shared_ctx; const H264Context *h = avctx->priv_data; /* SPS */ diff --git a/libavcodec/vulkan_hevc.c b/libavcodec/vulkan_hevc.c index d5116bb48c..0f301b42fe 100644 --- a/libavcodec/vulkan_hevc.c +++ b/libavcodec/vulkan_hevc.c @@ -636,7 +636,7 @@ static int vk_hevc_create_params(AVCodecContext *avctx, AVBufferRef **buf) int err; const HEVCContext *h = avctx->priv_data; FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; - FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data; + FFVulkanDecodeShared *ctx = dec->shared_ctx; VkVideoDecodeH265SessionParametersAddInfoKHR h265_params_info = { .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR, -- 2.34.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".