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 EFE964A787 for ; Mon, 8 Apr 2024 20:17:26 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F1F9968D430; Mon, 8 Apr 2024 23:16:15 +0300 (EEST) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2086.outbound.protection.outlook.com [40.92.89.86]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0145068D357 for ; Mon, 8 Apr 2024 23:16:13 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NkWDS8WbwNHEaric7yqzOL3bguZfIQMiZC657BtRxjj6X6AFTGPyYBflpj9Xj1MYxMMPWHDdDSYwij2xXYY/k4OSWDpBF/aKvyMZJJ4K4K7XfE5viJUerDh//fcDbAMwdv+HcPBSf+6O2MVbFFxOXdNJhjhF4iTmIwZjp/JUW2nBRXJ5uPgEhtp599aLWAi/aVBCNHJlXVDQSSlTCi/VyNlKJ4tEwbc3I7WTJVmpiL+yPUiHLXLV8k2k3FNg72RwI0Ud1/9Y5e8wBmKK9paZoTJ3DyiukL/7blF37EpdttvlJS2fRZC4n/KA3o+EWhgw8XEG/kq7QJdraoUpGN/UdA== 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=AM8CJ3H5WtKdSMGddSm+DBsPwNgMe0KKqok2xgYSH9g=; b=MzjIpaayx9aXK7SvtaPkohTKXy59qeWH6VWi6NDduRMsnZXyZwHIBEdAqmOdgZxnHCwng1s8E6Igqv2CxodFXtWBdjWHmA9OrArOkH9t5QRa3I7+TSWNI+rqRtpQnLO/R0KGh90ws6nszTA7adkB1Gj/O4qYwkGhGob078Wf3PG8XXSf3/PpLK37PaBfhXCl8dE2sL6+IDggGQek7IGDqTyJPZlTdqLRfpX7kjLUhVQPSLIr040fbsM5u+5U3cXCEuGO2lr1GPIslUWHAMa2XoBFrGYkeP+lO5NLKOdWGOI/8Nlx3HAlvQGQ6Xyp2nHiAmZ4+v92EJKbEn6hC8eEDA== 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=AM8CJ3H5WtKdSMGddSm+DBsPwNgMe0KKqok2xgYSH9g=; b=SjUoSF6CTlFVLqdf6msWmSKVXW7+kmT6sMSyTIoj76dTpH7SeDkJpIgOMiOyKxSD7vZ/iAEw1CVb7cEqOZkU7E9+LgmiHFU4odLyYj9zQAlsVKaZgVFfphRmOrrvnsATn0+P62zsArXw83bV0b3FApKo3kuNGvoxol+DNtgCLiFxKsJqQVGrMK5iiGHitUcsKAIR5cppHEc2ew/Hr/2MbsGNlAxI0nljEw1t/pH2L9M5UC1KrgukYM5yAKAVfmGQBAs0HBZuFLZm3neQkywjdDVw0qY2AybHrgoqXlJrR6rL25C/VCIalNxJcw5gVpUM2W6sn6AgrpnVKK9ZTRl2Ow== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AM8P250MB0171.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:322::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Mon, 8 Apr 2024 20:16:08 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d%4]) with mapi id 15.20.7409.042; Mon, 8 Apr 2024 20:16:08 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 22:14:00 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [SHI3YkZK4Mca7OXCYW4IB0s9lvsGBQGAQ/HOWhHc6Y0=] X-ClientProxiedBy: ZR0P278CA0124.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:20::21) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240408201405.2136840-21-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AM8P250MB0171:EE_ X-MS-Office365-Filtering-Correlation-Id: 4d2d3e68-2f7c-41cb-127a-08dc5808b9e3 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TkTNkTH2piA25IMEFjTc8wHcJElMLGdy3KCeFqiERl+2cQB+aPs+dGgCh2ujvBVd6gvRNY3atCNwyeqlHvLnRMs3fujYE/qDNnUVRBgJLH/bGlcvhZqvQs1FaKMz9ljXv+ystwK0sgtdTw6/thphYUGlbxfWyt5VP7d+iTmytBH7UbxeRQLSbIvBkg7BvbHEp7hREv7sLMZQHgAB2WUFO8Cli7t3zOL4vpd7ONmYegU55QupnUOJdocdxIBjmGYZmClaQFtQJ7cuaOeT6KBpnz67n7a1N2BJDQtDUnGG+QU4pjPNkFDHjSi2PTNPeMey2OciHI2nJNmHhvYEFGowuVQSmcSOdBE52UJK9gFn8BGJWW0Mygy67tT7ZBLdfE+pdo7IQYRSftHh/9p4at+mafSWQ+QVriYPfEqG3SzL/hNVO7Yd/DLJDUH++/diYKehGFRYEwDTv7wCozHijv3HqwsOgJLmDL0bIQBuuen1GeG3+pLB0z4sTErBhQIn8c2QJdB5TbL9DRynRRRI/r3WUE9UQMAGf91s5Nb4nc7pA25Jx3m3bVJcorbQyzj61wFgZAR6EPCYOHVidXfYWfeHG31tMNrt03C8jIzj3ChBoeBBWneWPhQu6QBaCKTWRSVt X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?XopMlH7sfZ+5zHzMlzEQtt036Gaj4lG4p2KijenZx9NbJXY1vbL2vXE/pKkM?= =?us-ascii?Q?2Hhybm7/GYkjzGZuF7DsWM7VKw8QkGArAOxGHpdqjt8Vmy9WttLP8D8gOQoO?= =?us-ascii?Q?xDyccTegdauNwTdjH8zcLyeAHSjUw9jRoHGR/R17MT8aAOMBOW+2mKwsfsx7?= =?us-ascii?Q?15e06E+dub+Pj7mmaiCqxy3WcGi91ziqOfLfSGI5FWsxV1A25lkvC82FBqI1?= =?us-ascii?Q?6LzM46DBrHpEqFoqlRUZv5hF6zC7UbCQLhiX3uvZgoIH+j4hBjeln26xenFd?= =?us-ascii?Q?/ce8wMuN82zzZMWIMRdSYkkztUSyq6GQ66WUITz4I0MQl11BclHeYhoutvGk?= =?us-ascii?Q?F1s/nGyqYWbMZB99rkHlcxkTAIihkzAGE3ztbEsyXDOm1cfVZUWafiZ4/tWQ?= =?us-ascii?Q?3/bcnU1atncgPOW4WR44c8dPRUV7sqggPdG1AF8pXGnTZoORGLwk5h97edTk?= =?us-ascii?Q?Z/HR8cwp3R69jzJlehrk0AyxrbRKZ1ieVWJ1sewGVYnrslmAKy4/6Cwu+2Nw?= =?us-ascii?Q?ZyZknTPYh9dW6vhB2THzzssK/dNbZxQF2RYfAuRHqyXQ4jLek+Cm0f7f+O13?= =?us-ascii?Q?ckkDrWOBYkIP1NZPWXYuAdQPZjmRtJnMYHCy1CQ7O56RpVq9JEk4pjB4jl6n?= =?us-ascii?Q?NBqFV+6OVacT4OkihT4zeqVe9EWoRVtCp/ReSWpN0e+/Oz38STyDXkMK3Gae?= =?us-ascii?Q?UQBf9dZnMkX/3UKZ5+1U99KdBtrCaca/jNGIDYjHs+XIVbONukGkQCYv7Et+?= =?us-ascii?Q?lfxlnWW8WM0O5ttFiPlFgZLhD7bSrdylFYuH8xLP0KXLCAZmYjSH5XNDgCgt?= =?us-ascii?Q?ybtaeudB4aVEH3z9X6MsqNTjVLEhbHhRtiAIr1UOcCKUH+nVl6N4Of6G7Mda?= =?us-ascii?Q?mgEXk0KnaBvqk+C2MzlmBhAZBKkRnNtKK56hbVQ5Q2RJEk1z4kDrjLXJCWpx?= =?us-ascii?Q?bY2lZpMD682s/T/ZyuSs6fE9908XgncC7dhWodnKCPf78iJvh8JVF9zhBQbb?= =?us-ascii?Q?lJkgS87Fm4NpelBlHSvOvzBPy04CTGyWMDbBFTd2nAmeUKK2WzlsdjWtP5UN?= =?us-ascii?Q?XPhVi/cwVvyD0JnKUQdskkUR/vdddtQ2JYED+LJZKJHNHUzAKlyl1SwLGBId?= =?us-ascii?Q?Aa13mGP2SlCSGOAPjhMY/CGNijkF4nHRMZerQl4RNLjLnAy6gOipVbsvXu86?= =?us-ascii?Q?0c5W+XchBH0ra/wZOZiCvq/zWPk7/gPOLH+WLYySl1HeMrre71CPCunebTaQ?= =?us-ascii?Q?O3HvYmiSxoEBv40DFbR1sPdY+6OT59hK8xe6QnBb8Q=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4d2d3e68-2f7c-41cb-127a-08dc5808b9e3 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2024 20:16:08.3152 (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: AM8P250MB0171 Subject: [FFmpeg-devel] [PATCH v2 22/27] avcodec/qsv: Use RefStruct API for memory id (mids) array 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 and therefore error checks and cleanup code; also avoids indirections. Signed-off-by: Andreas Rheinhardt --- libavcodec/qsv.c | 55 +++++++++++++++------------------------ libavcodec/qsv_internal.h | 11 ++++---- libavcodec/qsvdec.c | 3 ++- libavcodec/qsvenc.c | 3 ++- 4 files changed, 31 insertions(+), 41 deletions(-) diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c index d9c81b7158..b07302cdf6 100644 --- a/libavcodec/qsv.c +++ b/libavcodec/qsv.c @@ -35,6 +35,7 @@ #include "avcodec.h" #include "qsv_internal.h" +#include "refstruct.h" #define MFX_IMPL_VIA_MASK(impl) (0x0f00 & (impl)) #define QSV_HAVE_USER_PLUGIN !QSV_ONEVPL @@ -740,20 +741,19 @@ int ff_qsv_init_internal_session(AVCodecContext *avctx, QSVSession *qs, return 0; } -static void mids_buf_free(void *opaque, uint8_t *data) +static void mids_buf_free(FFRefStructOpaque opaque, void *obj) { - AVBufferRef *hw_frames_ref = opaque; + AVBufferRef *hw_frames_ref = opaque.nc; av_buffer_unref(&hw_frames_ref); - av_freep(&data); } -static AVBufferRef *qsv_create_mids(AVBufferRef *hw_frames_ref) +static QSVMid *qsv_create_mids(AVBufferRef *hw_frames_ref) { AVHWFramesContext *frames_ctx = (AVHWFramesContext*)hw_frames_ref->data; AVQSVFramesContext *frames_hwctx = frames_ctx->hwctx; int nb_surfaces = frames_hwctx->nb_surfaces; - AVBufferRef *mids_buf, *hw_frames_ref1; + AVBufferRef *hw_frames_ref1; QSVMid *mids; int i; @@ -761,35 +761,27 @@ static AVBufferRef *qsv_create_mids(AVBufferRef *hw_frames_ref) if (!hw_frames_ref1) return NULL; - mids = av_calloc(nb_surfaces, sizeof(*mids)); + mids = ff_refstruct_alloc_ext(nb_surfaces * sizeof(*mids), 0, + hw_frames_ref1, mids_buf_free); if (!mids) { av_buffer_unref(&hw_frames_ref1); return NULL; } - mids_buf = av_buffer_create((uint8_t*)mids, nb_surfaces * sizeof(*mids), - mids_buf_free, hw_frames_ref1, 0); - if (!mids_buf) { - av_buffer_unref(&hw_frames_ref1); - av_freep(&mids); - return NULL; - } - for (i = 0; i < nb_surfaces; i++) { QSVMid *mid = &mids[i]; mid->handle_pair = (mfxHDLPair*)frames_hwctx->surfaces[i].Data.MemId; mid->hw_frames_ref = hw_frames_ref1; } - return mids_buf; + return mids; } static int qsv_setup_mids(mfxFrameAllocResponse *resp, AVBufferRef *hw_frames_ref, - AVBufferRef *mids_buf) + QSVMid *mids) { AVHWFramesContext *frames_ctx = (AVHWFramesContext*)hw_frames_ref->data; AVQSVFramesContext *frames_hwctx = frames_ctx->hwctx; - QSVMid *mids = (QSVMid*)mids_buf->data; int nb_surfaces = frames_hwctx->nb_surfaces; int i; @@ -810,12 +802,7 @@ static int qsv_setup_mids(mfxFrameAllocResponse *resp, AVBufferRef *hw_frames_re return AVERROR(ENOMEM); } - resp->mids[resp->NumFrameActual + 1] = av_buffer_ref(mids_buf); - if (!resp->mids[resp->NumFrameActual + 1]) { - av_buffer_unref((AVBufferRef**)&resp->mids[resp->NumFrameActual]); - av_freep(&resp->mids); - return AVERROR(ENOMEM); - } + resp->mids[resp->NumFrameActual + 1] = ff_refstruct_ref(mids); return 0; } @@ -849,7 +836,7 @@ static mfxStatus qsv_frame_alloc(mfxHDL pthis, mfxFrameAllocRequest *req, return MFX_ERR_UNSUPPORTED; } - ret = qsv_setup_mids(resp, ctx->hw_frames_ctx, ctx->mids_buf); + ret = qsv_setup_mids(resp, ctx->hw_frames_ctx, ctx->mids); if (ret < 0) { av_log(ctx->logctx, AV_LOG_ERROR, "Error filling an external frame allocation request\n"); @@ -860,7 +847,8 @@ static mfxStatus qsv_frame_alloc(mfxHDL pthis, mfxFrameAllocRequest *req, AVHWFramesContext *ext_frames_ctx = (AVHWFramesContext*)ctx->hw_frames_ctx->data; mfxFrameInfo *i = &req->Info; - AVBufferRef *frames_ref, *mids_buf; + AVBufferRef *frames_ref; + QSVMid *mids; AVHWFramesContext *frames_ctx; AVQSVFramesContext *frames_hwctx; @@ -888,14 +876,14 @@ static mfxStatus qsv_frame_alloc(mfxHDL pthis, mfxFrameAllocRequest *req, return MFX_ERR_MEMORY_ALLOC; } - mids_buf = qsv_create_mids(frames_ref); - if (!mids_buf) { + mids = qsv_create_mids(frames_ref); + if (!mids) { av_buffer_unref(&frames_ref); return MFX_ERR_MEMORY_ALLOC; } - ret = qsv_setup_mids(resp, frames_ref, mids_buf); - av_buffer_unref(&mids_buf); + ret = qsv_setup_mids(resp, frames_ref, mids); + ff_refstruct_unref(&mids); av_buffer_unref(&frames_ref); if (ret < 0) { av_log(ctx->logctx, AV_LOG_ERROR, @@ -912,7 +900,7 @@ static mfxStatus qsv_frame_alloc(mfxHDL pthis, mfxFrameAllocRequest *req, static mfxStatus qsv_frame_free(mfxHDL pthis, mfxFrameAllocResponse *resp) { av_buffer_unref((AVBufferRef**)&resp->mids[resp->NumFrameActual]); - av_buffer_unref((AVBufferRef**)&resp->mids[resp->NumFrameActual + 1]); + ff_refstruct_unref(&resp->mids[resp->NumFrameActual + 1]); av_freep(&resp->mids); return MFX_ERR_NONE; } @@ -1104,11 +1092,10 @@ int ff_qsv_init_session_frames(AVCodecContext *avctx, mfxSession *psession, qsv_frames_ctx->logctx = avctx; /* allocate the memory ids for the external frames */ - av_buffer_unref(&qsv_frames_ctx->mids_buf); - qsv_frames_ctx->mids_buf = qsv_create_mids(qsv_frames_ctx->hw_frames_ctx); - if (!qsv_frames_ctx->mids_buf) + ff_refstruct_unref(&qsv_frames_ctx->mids); + qsv_frames_ctx->mids = qsv_create_mids(qsv_frames_ctx->hw_frames_ctx); + if (!qsv_frames_ctx->mids) return AVERROR(ENOMEM); - qsv_frames_ctx->mids = (QSVMid*)qsv_frames_ctx->mids_buf->data; qsv_frames_ctx->nb_mids = frames_hwctx->nb_surfaces; err = MFXVideoCORE_SetFrameAllocator(session, &frame_allocator); diff --git a/libavcodec/qsv_internal.h b/libavcodec/qsv_internal.h index c2d301b4a2..d970cd20f0 100644 --- a/libavcodec/qsv_internal.h +++ b/libavcodec/qsv_internal.h @@ -115,11 +115,12 @@ typedef struct QSVFramesContext { AVBufferRef *hw_frames_ctx; void *logctx; - /* The memory ids for the external frames. - * Refcounted, since we need one reference owned by the QSVFramesContext - * (i.e. by the encoder/decoder) and another one given to the MFX session - * from the frame allocator. */ - AVBufferRef *mids_buf; + /** + * The memory ids for the external frames. + * Refcounted (via the RefStruct API), since we need one reference + * owned by the QSVFramesContext (i.e. by the encoder/decoder) and + * another one given to the MFX session from the frame allocator. + */ QSVMid *mids; int nb_mids; } QSVFramesContext; diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index fd9267c6f4..5528bcdc8c 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -50,6 +50,7 @@ #include "hwconfig.h" #include "qsv.h" #include "qsv_internal.h" +#include "refstruct.h" #if QSV_ONEVPL #include @@ -885,7 +886,7 @@ static void qsv_decode_close_qsvcontext(QSVContext *q) ff_qsv_close_internal_session(&q->internal_qs); av_buffer_unref(&q->frames_ctx.hw_frames_ctx); - av_buffer_unref(&q->frames_ctx.mids_buf); + ff_refstruct_unref(&q->frames_ctx.mids); av_buffer_pool_uninit(&q->pool); } diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 3a8607fca6..018d193495 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -41,6 +41,7 @@ #include "qsv.h" #include "qsv_internal.h" #include "qsvenc.h" +#include "refstruct.h" struct profile_names { mfxU16 profile; @@ -2649,7 +2650,7 @@ int ff_qsv_enc_close(AVCodecContext *avctx, QSVEncContext *q) ff_qsv_close_internal_session(&q->internal_qs); av_buffer_unref(&q->frames_ctx.hw_frames_ctx); - av_buffer_unref(&q->frames_ctx.mids_buf); + ff_refstruct_unref(&q->frames_ctx.mids); cur = q->work_frames; while (cur) { -- 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".