From patchwork Mon Oct 2 18:13:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 44105 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1204:b0:15d:8365:d4b8 with SMTP id v4csp1574574pzf; Mon, 2 Oct 2023 11:13:11 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGrRx9qmzPxHunHc/5xxLrxKbwHz038C4yMbwN0SlhyB+yyDtlLHRbWYZRRGS16Mepr6d+t X-Received: by 2002:a17:906:530b:b0:9a9:9c6c:c4ef with SMTP id h11-20020a170906530b00b009a99c6cc4efmr11294275ejo.23.1696270391403; Mon, 02 Oct 2023 11:13:11 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u22-20020a1709064ad600b00997c7157a03si19009039ejt.642.2023.10.02.11.13.10; Mon, 02 Oct 2023 11:13:11 -0700 (PDT) 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="gDdE+/Y8"; 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 429D868CC50; Mon, 2 Oct 2023 21:12:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04olkn2057.outbound.protection.outlook.com [40.92.74.57]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1342B68CC11 for ; Mon, 2 Oct 2023 21:12:51 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YQjDwlZGPUDMkAe9jhhpjwThFOmHe1itn5TBVfCRTbGrrQLneCruPctSESljovsTS+duJvW3IteCa+Kh+C+y0hQX+klOIabAC50OBEGwwpw4Eer2ub5SmJPKcOb3NypFg9A4QN+5V+gNg/adLn1BNfsXqAr2KFc7PYdOP1tMcXCFFvm/tpvmnRczA7Sccs+1QLPWxr5VfRk5I2HTdCMX7xVcCSdoVhzIU44ze+F+QYGvKK5l1Qn4jziAzdPWUCFgsU/bZluzo5xCn2ww3qIR9j1XKWRXMlH6BLA97EXvyUaBE1NNF2sNHgcK0T+/X7X14P0vPC57Pb0BaQLFFNi5Fw== 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=7ZZy0ePMHTBKhTnUf1MoL0sX0RJtMXtTzOAztJrlNeE=; b=eVHdzChQbvEAfNfoO73DI3QyqNWc6EY678nc97/3Zw+L8FuiFsQsbJm50vdJuf33agLd18vTcqfvOl/XlcDS4MMMoPOZKXkCNw0Q7REKxfoTHnAkbfHCB7clU6DX/A2CM7m12RRL7a7F9TZ6w5r6kIN/sfW4GTFOnLu5GIcMN5Z0au82qiqgiT3sCWV88KBuyOFtn3eDPlRvyby6YgLuUJppKXsM57GML5TQ5oTVHgRdX2hBXeazA9J/ng3zwE3imZFJHS4ujh4NaVTsCInkLoEP7HZjCCbqRg8ZcqJfYbOKPZqeEqaNoY/XHgRFHtPjaj3hCRDNet6NNjh0tToKtg== 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=7ZZy0ePMHTBKhTnUf1MoL0sX0RJtMXtTzOAztJrlNeE=; b=gDdE+/Y8WOf1BDuDrxsjavkRfDD0fZryThU+RM9CfOs3i2btN0mvNPqZMyVJnoIqVVVihbWxRNvQu/mVx1oimxfFPDj2OUhaTgKgKYLUlCCOAu8ZtP+GIC6Uk1evN7Ftupd0wSu9MO4wU4v1n3BLxDpmsfAE4j4GIt7rb8dO1ZPBmD/ODsR6BZfHip3vh1f9eYkf4nUtMGrID+1tui6XsCh9LIlkWBcDVdCLMB1zNZi3UUuuUPWe9u7l7TscjHCHfOuxugkRPlH+erij6o0d+d9oKczs6cGoWH2nuTsmQwv/NAMWnbt5c67G1xctR6lBIMRXz/9vAZKAVgLdFZA9iw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0218.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:379::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.27; Mon, 2 Oct 2023 18:12:47 +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; Mon, 2 Oct 2023 18:12:47 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 2 Oct 2023 20:13:36 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [fElPifHaNBjx3rL/cMNcycg0hsClcrF7] X-ClientProxiedBy: ZR0P278CA0087.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:22::20) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20231002181338.1030463-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS8P250MB0218:EE_ X-MS-Office365-Filtering-Correlation-Id: 170ec70c-b993-4625-4016-08dbc3732e8b X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Cos/6ow5haDVRTNGba1x7jdDQgSuYP0fAhJfWlK78fv70pc1SpjJQB8s0sf5IMQP3LcManKKvlyCXXmAZFbjnxUMfHktmv7cQps2K/bTTGvdkpSUKTGSEQfmaYoAGCevpo9vq7LjxgMR1WNM+RyTC/jCWE+EqTtpGG6ryVRNtT5FNUMCjnKiWRX7xyP+RqDx5lD93AIPZx8nJaU4lO7LNKvWeBsMGP0Hn1N4BS105FSp9Z47lEonhYTDmARrsxVxJ7L2CEyAzvjdBbWnPMXZXCoXtHE3i8997Pl7sLmSRK8wNusSU3SpkrSchU0Yt7nNr2dItF2PmBg8ea3T5cbT//lzXaSGZeUbvSSnlycvjvTviLIA6iYofaZ89wqY6B2BHNZgZzXjCnet1hLRL/T+CAzYhOB4///4bNJG9rkO+MDG1AxwMomHT8nQ85XQvSqbYNay4ECvddUdLOFIsxZrq4xRYJWsHcDWhCR04i37rkKDX43QidtZ3BWeN9OrgscKrRX/5nQTs0eSFPHdDZdIW42wQAQJT8YrpH6t2KB/uXL1VRSgTWjX6Bf00gBlFXrGOY9haPJvuQT3zj/Dt++gXVuyNxNAHDV/s4pcs3VQ/rsscxpERJLuEE94Cdv3/VU/ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Why+WHoSprhDnaNidplMSRPnDQDN7x1pCZmAm2I+W6vqyaAWur83RbjIUSnrRWLjr7kLmCScjvLlgOlVSmY6jJeXDC+EmG8VZn4fOFylMVFNxd40PQB31Z6ZxlXmvQ9bSKK1UXkKWvtAelLbCiA7yWAWLLftkobO9O45dfCpxs89lpueIHcZWpeVJZJNL9ZxIZRQJercB2QoaYTiy/okrXm0G4WgH2jrBOAO1D/axNko4rQFwibkNIcxF2fN/adAbZVfAztUNecVsynyQYPn4kaAzDx86cBUgm3Z9yutKd4nzFgM0+UoUovrUrMn6iqJpM0QT4FsXXCb9Pn5DH+DoKhIHGe87dyPA5UeDhWiEFPsteDUZAuNV/E9p1RsnogSNRBXqG0dny1coicaKw4qrRFddg0BOrFaVK7obRVtzv4fN+US2Ks08yOHFAfTxEeiYMSbhk1WKaac19EMCd20pS4RLw4ZDBmFVYdQqR0V2aiAT4tFj1Z1yITLXccpDzBZ3/Ha4zOjsd396rKeT1sgrLMGL0ZhPbQ4QFGHBet0uvzSKiPw3RaFXEF0CbeSA1opR7MGcwtPHe4LL2dmaCE4OATmGkm3b+IdYrknJQj4c6e65delyhsHu7i2vjeu9T/mGNoN/ttKI7ZDgHS5IltERLUfv8LdbAt4a0j+wF2gI+2MHHoX3T8fkDLeChOBjZ3aui7p89S7lgWfpNUiRdMheFD/lJTgoEGPtV9cK13nv/wmW4k/e6yTD83EDoSrZWj9zLjgKTZG6URSgkacZfV2nIYGXcTTkvVnLqzXEThzyIIZkJv+aWmWlFKJsfln8+LfENnSbNnP5VPCom87X5RLwOgvZlvBqZisZMm/MfTRirHeWtPoDaILxZnf2pRx2dsI0CG/Mz1nHp/pt7dkqoCEbG3ouULJdIb5YX3mzqDMNnj07d0bxAojKY+PVo/e5626jhQoF62q5jGelw5/dCxekDa8VGY6IB/k/GqGm+NzxVPy0IakNyVlnORTo62lPr7ubQlO6oA9YQH71ySxDBa6pTh+oGCwkw5SW6nKc2z64FghhiOZ78Eq06QmlTBbtfoTJOwz9Cs3GProzGQ2M/VGKbVeqJkdr/igQ9OZsA3c1xMxFl+o7l+Cxu1vn139UW/hkyn330mTiFFR9Kzp53mfmiAnam0LNF7egk1tEZyf0PV4m8SGRufuJB2NOhcwWockGrmIrFV+WfO0XDqotpE3PbWaTay4E7CJwEorEIOtCVZsxkpnYRpnGrg4pS7r8QeR X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 170ec70c-b993-4625-4016-08dbc3732e8b X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2023 18:12:47.5179 (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: AS8P250MB0218 Subject: [FFmpeg-devel] [PATCH 47/49] avcodec/rkmppdec: Allocate AVDRMFrameDescriptor and frame ctx jointly 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: u4dHZELSGcxZ Avoids an allocation and therefore one error path. Signed-off-by: Andreas Rheinhardt --- libavcodec/rkmppdec.c | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/libavcodec/rkmppdec.c b/libavcodec/rkmppdec.c index dd0b9c5a4d..5998b6edef 100644 --- a/libavcodec/rkmppdec.c +++ b/libavcodec/rkmppdec.c @@ -300,12 +300,10 @@ static int rkmpp_send_packet(AVCodecContext *avctx, const AVPacket *avpkt) static void rkmpp_release_frame(void *opaque, uint8_t *data) { AVDRMFrameDescriptor *desc = (AVDRMFrameDescriptor *)data; - AVBufferRef *framecontextref = (AVBufferRef *)opaque; - RKMPPFrameContext *framecontext = (RKMPPFrameContext *)framecontextref->data; + RKMPPFrameContext *framecontext = opaque; mpp_frame_deinit(&framecontext->frame); ff_refstruct_unref(&framecontext->decoder_ref); - av_buffer_unref(&framecontextref); av_free(desc); } @@ -314,12 +312,9 @@ static int rkmpp_retrieve_frame(AVCodecContext *avctx, AVFrame *frame) { RKMPPDecodeContext *rk_context = avctx->priv_data; RKMPPDecoder *decoder = rk_context->decoder; - RKMPPFrameContext *framecontext = NULL; - AVBufferRef *framecontextref = NULL; int ret; MppFrame mppframe = NULL; MppBuffer buffer = NULL; - AVDRMFrameDescriptor *desc = NULL; AVDRMLayerDescriptor *layer = NULL; int mode; MppFrameFormat mppformat; @@ -408,11 +403,21 @@ static int rkmpp_retrieve_frame(AVCodecContext *avctx, AVFrame *frame) // now setup the frame buffer info buffer = mpp_frame_get_buffer(mppframe); if (buffer) { - desc = av_mallocz(sizeof(AVDRMFrameDescriptor)); - if (!desc) { + RKMPPFrameContext *framecontext; + AVDRMFrameDescriptor *desc; + // We allocate the descriptor in buf[0] jointly with a structure + // that will allow to hold additional information + // for properly releasing MPP frames and decoder. + struct { + AVDRMFrameDescriptor desc; + RKMPPFrameContext framecontext; + } *combined_desc = av_mallocz(sizeof(*combined_desc)); + if (!combined_desc) { ret = AVERROR(ENOMEM); goto fail; } + desc = &combined_desc->desc; + framecontext = &combined_desc->framecontext; desc->nb_objects = 1; desc->objects[0].fd = mpp_buffer_get_fd(buffer); @@ -431,23 +436,15 @@ static int rkmpp_retrieve_frame(AVCodecContext *avctx, AVFrame *frame) layer->planes[1].offset = layer->planes[0].pitch * mpp_frame_get_ver_stride(mppframe); layer->planes[1].pitch = layer->planes[0].pitch; - // we also allocate a struct in buf[0] that will allow to hold additionnal information - // for releasing properly MPP frames and decoder - framecontextref = av_buffer_allocz(sizeof(*framecontext)); - if (!framecontextref) { - ret = AVERROR(ENOMEM); - goto fail; - } - // MPP decoder needs to be closed only when all frames have been released. - framecontext = (RKMPPFrameContext *)framecontextref->data; framecontext->frame = mppframe; frame->data[0] = (uint8_t *)desc; frame->buf[0] = av_buffer_create((uint8_t *)desc, sizeof(*desc), rkmpp_release_frame, - framecontextref, AV_BUFFER_FLAG_READONLY); + framecontext, AV_BUFFER_FLAG_READONLY); if (!frame->buf[0]) { + av_free(combined_desc); ret = AVERROR(ENOMEM); goto fail; } @@ -476,12 +473,6 @@ fail: if (mppframe) mpp_frame_deinit(&mppframe); - if (framecontextref) - av_buffer_unref(&framecontextref); - - if (desc) - av_free(desc); - return ret; }