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 865C848AA2 for ; Tue, 27 Feb 2024 19:57:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2CD0F68CE20; Tue, 27 Feb 2024 21:57:09 +0200 (EET) Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02olkn2097.outbound.protection.outlook.com [40.92.49.97]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C2F9B68CDE3 for ; Tue, 27 Feb 2024 21:57:02 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BM39mty8AYhbptCFlLXtMkR5Is62K8rwNYSRpYjbcOIEshPUGPBIkeCKLaKaUGZY8MJA2WTZwuK2AdAp/tos989BLAlBZPgCEuteNGmdvdo1ru4TuRySVgA7WRZNlENxReYOfmlHWNUOrxw3MCqo3BwZBCt0J8JgrJKcreDygTkMvXgjabWuOF8GWpkN0DSNUudhSM7iwclehnro9p6ZY7jdn+UfTsssV7kGd96jqHEYJ1v8zh1J7j2pybvXKk/L14SE1HAwPW+MfRvLUSkERwP9K7hFWd6aOfWC6z2+xdKMpa0fGQSND1P4vyKPkLr8uohrqHSv/SduT9LVYv5GUA== 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=VIuDmsLg0l/kEr2lTNPOIY+zkMbRxOEHRThXf/crcLQ=; b=AsSknwqVPw+IUH65yZlFzhnlnHLFByyywBsqk5xnuAkNlH7CGNinumD2dKmkvtFtbEvPiGFmrR1dFCfRsmqMEK68UIWvJGThreEqOrTEBuD27n1dWhkqh9XM8eXYuWKLGytp+lE2+88eorrhqfVP6xjSFHfDH7D4pTy9A3r4tM3v0hHLMjhtzUlIF8AMvJyJI3dFkMWRYNh0aYzQmR08FOGYeFabtfm6Chb4EWy0Y8iC3U2jXnrN1Db7vRuNmT4RRKuj7JNbk8uxzLoG29dloNR7iX0/ElEesHHpzfCs1zMpjpBzz/YD8zRysuu3KcK8sl8idK+KFbkLey+ZRcvCFg== 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=VIuDmsLg0l/kEr2lTNPOIY+zkMbRxOEHRThXf/crcLQ=; b=hbt7v3hwV9VcqeFU/gWi99bVVwRkkZ38vZYeYWKsdcxMHLepIIzfuDZO1lsUuQeJ/z0e6fmf6Rcc3NtWlFBn00Q/qsIeqyCZoKSjOAbKz9RN8z9yAzeFWUeWHgXjc5/ROf33M4csw023vguK3S5DkhmYRFiqFQ9YZadet1Wy7w3I5UeAg9kcW99zYFwPb9QkDX5PC3AaRRm4Ffj5X6tb+wiyZkyt82OguKAUXhsEFdGt+tI9ShwoQk2RQV1usSDE3XjfYfJ0dsopuos0iXYI0inhEpjy/IhBpCm7eOeZpbY8HLOn/LAJ9z0ln9CrVp7zx/6QqRyhBTmOoUra1LTz5A== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PR3P250MB0353.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:17c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.39; Tue, 27 Feb 2024 19:56:51 +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; Tue, 27 Feb 2024 19:56:51 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 27 Feb 2024 20:58:32 +0100 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [BiinKLlQ+6sT6T6Uz2EIzeNIVcxI4Zgb2xy3NJG4qzk=] X-ClientProxiedBy: ZR0P278CA0128.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:40::7) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240227195837.1410882-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|PR3P250MB0353:EE_ X-MS-Office365-Filtering-Correlation-Id: 87be4615-1227-4459-026e-08dc37ce3da7 X-MS-Exchange-SLBlob-MailProps: quCBMN2EvO955NsdKUA6qkXzJO14pLp7I3Z1u66sA3ywQ1IJM6IrSNYhds1rtrHGJMyYEMH7ADN4fFGo/tI/NKBRnXY15zPBIRx/tPkxGCqdcj1l62sECkU3tt+mx51sJFlUxh0wtL8FH/lRJJkTvf+j3AqBlaUR9roDsSng+YPJY061kUqnvMiQC3zA3hWdk8ySQK/6nmB7Km2Jk70Y0j2giU1lO+Fu/OquMXaQ6wCyWOK9s4xsOsfDNcjJpZPbKrKouGUqX1OxaDZqnpw+aj6ABGvHW6AW/VO5/9AclVYMLHdNgUxeMUPGN6UUFPcOvY8C6txKU54j+XPNTS5jix24FtCCQK4ip2NySIXiWnYfdW366zJLNZXHbXN3AE8WE9Sh/pWVtSYSuy9KO1Ef81W6gIheM4d+WmdqfYuPp3ipwMAxpDE01UuXGc8Dt+b0XqeE6O+V7VlrHzWaSml/Q3t/pPujauSjr0KFeH0j0CoZLMToNs7AiLU1Yg0bE8EA7xQHBd6kvetiPhx64p6+eM+a3X+NsZaQEn3NEiV+lSZK5C2iTpIr58fpnPIBtUUzDfT28XRHYEePJ24cfMBHqVlPDTBfqTAZYF1+zGY1zsUVGD8Ab9Nku++ni/P7A+d0s09+dRALniTuevZs8cyjsQRnwCUTGI4eklV6chILR5EhM9nTCFmdiE/3wvXHVSVjWX1Zb01VDA7pk4t7HboACA== X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: aCJcvZYtO0cb7EmVxdjnv8kWeZ/w5M/A2LXKxoHEAaORJfY1Hs8KjWIr0ZWR0liHcza3bXBe7JvKwzORMn5H+rBjfvLGdRQAazZ0fkOBpsbyFLb1T1rEj+BU1gjgDM4JQbReLlhZeXpgVWE4/994FmbEVbUpQFt9ILA88DFvb5o636dNTTIyotR4Wg6ayL4ibHVIy1xQgrLsBIaxakzAzIZTNUT/hh4hNbL1SYVKZUmJEaX1eJbQndqdbCJmshuMyOttMW/rtN1Do8yfEVgbqFYPyBsSQ3Y+JIUYuv3vxveh29I86CxyvMRk5Q2/05rEe6ChEBJFCAf1URnFjfmPtuo7d9ny1uTQlJae4r5q2aAM4qORlQjblzJ1JR6z4+c32DCy81cXfHbs2mp1O+DC0NX1NUgprQVl0OkvSGTIstOfGg2GZB3uaV6OVeIxwPPpVl0nl6s1KscW4h6OFqYYrDqdwgm+00dJNtswhgsJoqWxV77m7N5RcsMPN1cUoZzular6Au3kVn8X6DbO/2EtF/4xkhbQeH6kV9zwF7kuqcYWFLARTblnjfaVUg6/Agd6Mn4NvWLtU58xDqUTThZ6oKFr+04x/qPLi/UlhymSm+XARe8hdmfZNgf9R1EsB3IG X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mV16JB8/ahTx+ByM62eg2nDCO0Qc9PHtZM4AE7JlY7n4ZoVwuhCtB3HENwth?= =?us-ascii?Q?cgWa/ZAP/7vWkqRDF/esxPptC64vVsforNyTXo5yI+S1BXEorCpXMCHJtj/t?= =?us-ascii?Q?Xm/a44dtATi+wx0PXigZQWVTKR/ulXjSsVwh0oxElwSCBjfvQKo/duQ5Bedp?= =?us-ascii?Q?S4u9y7sSUi2nrUPirjIV/J3KbI2qop+akP5E+hY5+qLm/D92hG0spCjbPzkQ?= =?us-ascii?Q?XDBQb/olBTPsGrVDqEkEgJ5alJjl6K4pnpyqTBLY2jSxY4ROBMgKlQSPG23Z?= =?us-ascii?Q?CD4RjNpzuk14+x35rzjI3xFJ4wpGtEwWfCFAJ5sE3mcdZU+PLBpb6pG8dUd7?= =?us-ascii?Q?r3EdX604fXu5GaYgQs4WGYJUW2RJ4vrQsDJjxQKVNI/Ywt0Ghe+71on9W2CA?= =?us-ascii?Q?GjGm1tkXsBQ1gtrV0UCwgDj3lu9vwWVe+DevI2jwg3KnSFqJ0iw9TCr73+Wp?= =?us-ascii?Q?kTDT0hcHKTPwXE6E4J5OEQg+R2j1J/UZS4zk6IIqEtwOd2E/E/JWNSFnuqzD?= =?us-ascii?Q?OiTNPjhbrxw4ragZgDN02E3eKh6i6JW6HAdvSg467MRrOcQgofZsIL0AewFB?= =?us-ascii?Q?IN+4pZB3DCLNnX1zba8szQcG8CdFL6i5lTBIdLuxcoM/zga911+8R7swvMqO?= =?us-ascii?Q?v3KC5epevAvWib2P0sp/NMhNCd6xsSFwBi2XSNPnVAAT2Yy+9ZogJP7WBt/K?= =?us-ascii?Q?4KqhfV+HWfWgFdXscABD/CWMaZrJ4VYpHxkvL3004HoVlztIN1xl6iuqeVrV?= =?us-ascii?Q?f6Z/aHa3Sp5h5azTtxaCcmG/Z45gZxFfBBdCmnqwWsvupclanvhYAjhwUwWO?= =?us-ascii?Q?QB85aInxLbCqV6ZKcEU3ZA5hs2MboH0Y7VHiVf4J+8VmidSvtP6XZx4Gjc5J?= =?us-ascii?Q?t2unoaCW8+eumTw6pk060LZpN+lFwUwRbaJEDJ7lcNdwbDiCgCJEXn4HR/x/?= =?us-ascii?Q?WfufL8uGjhsljMjPjh9eyW+C1QXOpUayGEQ61VT3BaRwh3XgcnsM5z+AFxz4?= =?us-ascii?Q?OWa4LDUrTjaWMO5S4Rca9avjTKFQMeKZx95bJEC/L5BeibmKFkA08ctCGA4U?= =?us-ascii?Q?lG1HImK2fo87xTpNo3171clXaXss6qW8tfP5dcb8Fc0Cur7l34wHSBS0xsNu?= =?us-ascii?Q?HwOer2tcWs9YN5oBLhoggP9APkkBSha/XQqsaBE1Zo2ODz9oMmuUnOYCCG30?= =?us-ascii?Q?VsLgc+0B1uQiubsW9vLnU5MbxC/lBEbzy05yoG1HqldtDDORkwo5RIg8jSw1?= =?us-ascii?Q?NRqZ+k1/uID8zcUgVyuSmRYuIPfYjnSN8t8Gz+KXsQ=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 87be4615-1227-4459-026e-08dc37ce3da7 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2024 19:56:51.8474 (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: PR3P250MB0353 Subject: [FFmpeg-devel] [PATCH 4/9] avcodec/libxevd: Deduplicate code 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: Signed-off-by: Andreas Rheinhardt --- The ownership semantics of the pkt_au packet seem crazy; I have no clue when ownership has actually passed to libxevd (or rather: when one can expect to get an image with this packet attached returned from the decoder). Furthermore, given that libxevd sees this just as an opaque pointer (without free callback), we will leak AVPackets still stuck in libxevd if a user closes this decoder with the decoder not flushed. I don't know how libxevd behaves on errors; if it discard a frame in case of error, the associated packet will leak. Trying to compile doesn't work unless one overrides dangling-pointer warnings (which are treated as errors by the build system), so I don't expect anything good from them. libavcodec/libxevd.c | 160 +++++++++++++++++-------------------------- 1 file changed, 61 insertions(+), 99 deletions(-) diff --git a/libavcodec/libxevd.c b/libavcodec/libxevd.c index 0553ebfb06..33fd18f74d 100644 --- a/libavcodec/libxevd.c +++ b/libavcodec/libxevd.c @@ -252,6 +252,65 @@ static av_cold int libxevd_init(AVCodecContext *avctx) return 0; } +static int libxevd_return_frame(AVCodecContext *avctx, AVFrame *frame, + XEVD_IMGB *imgb, AVPacket **pkt_au) +{ + int ret; + + AVPacket* pkt_au_imgb = (AVPacket*)imgb->pdata[0]; + if(!pkt_au_imgb) { + av_log(avctx, AV_LOG_ERROR, "Invalid data needed to fill frame properties\n"); + + if (pkt_au) + av_packet_free(pkt_au); + av_frame_unref(frame); + + imgb->release(imgb); + imgb = NULL; + + return AVERROR_INVALIDDATA; + } + + // got frame + ret = libxevd_image_copy(avctx, imgb, frame); + if(ret < 0) { + av_log(avctx, AV_LOG_ERROR, "Image copying error\n"); + + av_packet_free(&pkt_au_imgb); + av_frame_unref(frame); + + imgb->release(imgb); + imgb = NULL; + + return ret; + } + + // use ff_decode_frame_props_from_pkt() to fill frame properties + ret = ff_decode_frame_props_from_pkt(avctx, frame, pkt_au_imgb); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "ff_decode_frame_props_from_pkt error\n"); + + av_packet_free(&pkt_au_imgb); + av_frame_unref(frame); + + imgb->release(imgb); + imgb = NULL; + + return ret; + } + + frame->pkt_dts = imgb->ts[XEVD_TS_DTS]; + frame->pts = imgb->ts[XEVD_TS_PTS]; + + av_packet_free(&pkt_au_imgb); + + // xevd_pull uses pool of objects of type XEVD_IMGB. + // The pool size is equal MAX_PB_SIZE (26), so release object when it is no more needed + imgb->release(imgb); + imgb = NULL; + + return 0; +} /** * Decode frame with decoupled packet/frame dataflow * @@ -361,56 +420,7 @@ static int libxevd_receive_frame(AVCodecContext *avctx, AVFrame *frame) return AVERROR(EAGAIN); } } else { - // got frame - AVPacket* pkt_au_imgb = (AVPacket*)imgb->pdata[0]; - if(!pkt_au_imgb) { - av_log(avctx, AV_LOG_ERROR, "Invalid data needed to fill frame properties\n"); - - av_packet_free(&pkt_au); - av_frame_unref(frame); - - imgb->release(imgb); - imgb = NULL; - - return AVERROR_INVALIDDATA; - } - - ret = libxevd_image_copy(avctx, imgb, frame); - if(ret < 0) { - av_log(avctx, AV_LOG_ERROR, "Image copying error\n"); - - av_packet_free(&pkt_au_imgb); - av_frame_unref(frame); - - imgb->release(imgb); - imgb = NULL; - - return ret; - } - - // use ff_decode_frame_props_from_pkt() to fill frame properties - ret = ff_decode_frame_props_from_pkt(avctx, frame, pkt_au_imgb); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "ff_decode_frame_props_from_pkt error\n"); - - av_packet_free(&pkt_au_imgb); - av_frame_unref(frame); - - imgb->release(imgb); - imgb = NULL; - - return ret; - } - - frame->pkt_dts = imgb->ts[XEVD_TS_DTS]; - frame->pts = imgb->ts[XEVD_TS_PTS]; - - av_packet_free(&pkt_au_imgb); - - // xevd_pull uses pool of objects of type XEVD_IMGB. - // The pool size is equal MAX_PB_SIZE (26), so release object when it is no more needed - imgb->release(imgb); - imgb = NULL; + return libxevd_return_frame(avctx, frame, imgb, &pkt_au); } } } @@ -428,61 +438,13 @@ static int libxevd_receive_frame(AVCodecContext *avctx, AVFrame *frame) return AVERROR_EXTERNAL; } else { // XEVD_OK - AVPacket* pkt_au_imgb; if (!imgb) { av_log(avctx, AV_LOG_ERROR, "Invalid decoded image data\n"); return AVERROR_EXTERNAL; } - pkt_au_imgb = (AVPacket*)imgb->pdata[0]; - if(!pkt_au_imgb) { - av_log(avctx, AV_LOG_ERROR, "Invalid data needed to fill frame properties\n"); - - imgb->release(imgb); - imgb = NULL; - - av_frame_unref(frame); - - return AVERROR_INVALIDDATA; - } - - // got frame - ret = libxevd_image_copy(avctx, imgb, frame); - if(ret < 0) { - av_packet_free(&pkt_au_imgb); - av_frame_unref(frame); - - imgb->release(imgb); - imgb = NULL; - - return ret; - } - // use ff_decode_frame_props_from_pkt() to fill frame properties - ret = ff_decode_frame_props_from_pkt(avctx, frame, pkt_au_imgb); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "ff_decode_frame_props_from_pkt error\n"); - - av_packet_free(&pkt_au_imgb); - av_frame_unref(frame); - - imgb->release(imgb); - imgb = NULL; - - return ret; - } - - frame->pkt_dts = imgb->ts[XEVD_TS_DTS]; - frame->pts = imgb->ts[XEVD_TS_PTS]; - - av_packet_free(&pkt_au_imgb); - - // xevd_pull uses pool of objects of type XEVD_IMGB. - // The pool size is equal MAX_PB_SIZE (26), so release object when it is no more needed - imgb->release(imgb); - imgb = NULL; - - return 0; + return libxevd_return_frame(avctx, frame, imgb, NULL); } } -- 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".