From patchwork Sun Aug 22 00:47:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 29698 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:b707:0:0:0:0:0 with SMTP id t7csp652611ybj; Sat, 21 Aug 2021 17:48:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz8h1NCohDOB80uKiXahU9ajj6AYbOmbTnNQEANl40m0QIsGIouRgvL+gZ5DuH7IkljXqM2 X-Received: by 2002:a05:6402:1d19:: with SMTP id dg25mr29633236edb.153.1629593289899; Sat, 21 Aug 2021 17:48:09 -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 d1si11357111ejz.402.2021.08.21.17.48.09; Sat, 21 Aug 2021 17:48:09 -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=qwpkuaLs; 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 7581C687F3D; Sun, 22 Aug 2021 03:48:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (unknown [40.92.91.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9F86F680258 for ; Sun, 22 Aug 2021 03:48:02 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SLSGiVcOa3mzaFvFhHaPLufY5RkOTdhn6bpbQBaUt6+hfh+F+9USUT5NrGo8rT0BHeM0XngJ2mjCjK2QEEVTQOqnUdgzYS+lVm3EPFbxv++2vaOcYlAGE57FtpREUuchSjNXq5hoXtfcELovIdv/+ccUO6qQ61XMkKXzCxctXeEk6B30HD2ilReFnypQCHEpflygXVju5ovX8I3xx1cXxcXpJGBBVEPqXEh4TFoiLv/br0enIiAqkmxL14SM4zveifrExzgObHTRfZRl0uBNBVtF0Pn8R4N+MXQel7oo/m6Tgn0fPlPLuQfJZO0X2gm2lTO3PvBzsZlIYDzloaykcg== 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-SenderADCheck; bh=YwhRVEPnNc1tHOC0RPKEmaKdLprVc8iRYheUtcw15UQ=; b=ceF/fg5AhTo2Av16n05mv7qZvJWGUFoSdby0mxBW8hXFjcFSFvm+CTImTvsIJ/Luk+/NnXuefS0czHZr/936ETEt0Cja1C9hY1vrKwmuz9+qPGNAObtnk/+O9nZGQNx8eGvA37A6S/4E7mEfYa7XO/iWttUj36Pgw9ct8zQITlQ+9AFyl3ZDLltyve8gkuxx1TapJ5Fj0Ee4Peptqqj7JaTF+u22g2XkTkcT6varqKcbTe0kk2zb6QkogfuJb6gIE5bCBU1PTwHotOohEcIZnSuaXA6h0KzcA+N5Dz4FS2QDnv0sUyA/WO5eVLrcE38axp7OJ7cI0yeN1z4tDRQVfA== 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=YwhRVEPnNc1tHOC0RPKEmaKdLprVc8iRYheUtcw15UQ=; b=qwpkuaLs8AvN4+FW8+bL33ZJzFLnUi1YejaKQo0QcmXm5QNyWTjMH4Yg1cypIwkQWKJD8Ae8IDaHGHMpn7KxUDBL1P06rP2o4o0X2aXbGbbyFw7wXtom2etME7NkbKFbnHKn/S9ZLv9GhjTPsn0s64g83z12mqIuykyu53gQgjmUkvzo5JDtc3H0mbmReTbc4soyQ+bBoow6wK/OmEn72E07QSPZgc8wc+vYxK745droAimhPOdDv1lw/zof7M/fvwhDo3cZ7rwByGugxdV2rsjireM/BjiFrSb3OHAniSYnOK1iWkDX6nIpWr0lrHjeG2h1oYTfPjdBzvEtn+cXJQ== Received: from PR3PR03MB6665.eurprd03.prod.outlook.com (2603:10a6:102:7d::6) by PR3PR03MB6681.eurprd03.prod.outlook.com (2603:10a6:102:78::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Sun, 22 Aug 2021 00:48:01 +0000 Received: from PR3PR03MB6665.eurprd03.prod.outlook.com ([fe80::2924:e83a:49ed:92f0]) by PR3PR03MB6665.eurprd03.prod.outlook.com ([fe80::2924:e83a:49ed:92f0%5]) with mapi id 15.20.4436.023; Sun, 22 Aug 2021 00:48:01 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 22 Aug 2021 02:47:31 +0200 Message-ID: X-Mailer: git-send-email 2.30.2 In-Reply-To: References: X-TMN: [LS70CZlH1Ef2Lj+QLai+59Y5qMtrxfpg] X-ClientProxiedBy: AM4PR0902CA0006.eurprd09.prod.outlook.com (2603:10a6:200:9b::16) To PR3PR03MB6665.eurprd03.prod.outlook.com (2603:10a6:102:7d::6) X-Microsoft-Original-Message-ID: <20210822004754.1341756-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.142.38) by AM4PR0902CA0006.eurprd09.prod.outlook.com (2603:10a6:200:9b::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.18 via Frontend Transport; Sun, 22 Aug 2021 00:48:00 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e6ddbd86-b25b-407d-b029-08d965067e2f X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiT83tPMj9nze4Xg6Ue9mZjy+4SWrC2unfjrhKJwSRJ2Ag0mPcj1D0plv8Y36MYTrPuwY9YKgxGC8tLoRgb9kjR0vX8QM40DD3vjpDfDVZgC6RDTKUhPX/iZa3ZSCUQiuQYSt1kukT2iZGIYS0iId4dsa6iWr0io968e7lBo33gAMByvlgCZO8R1B5taEWmNxFvsb6HI5sSJFnck3AeEdjZZ2V1kpbI60vZLkhJ5KZD1QrZrc5QrO/pO5HyILGGPqyMuI0rYl/cm17CCVARwpL22ltT4P/rPJUd1iTvN22D8t1IbuZuSt6IOyJiY6qg0r+TwC2fcpIN4u6qWrPtsMy2ZoLOBn0/hOzIEsGizmRHUyjSB74sDHcBQ7HhF7JB+8m+ZBZ4E+r+ph244YhqCw98A63d5c1QQTFY2hTSGAUh7yy9UPwtbQE+iu6X3ByBu1p5nLBqHdVogmdDDBj+kzz1C+jv+NLdpQm9igKuFsfZxnDBCB8+XXK2ohV2imrIV2+sqSi+rrhnc4PR1ACd7t90w9NG3XqsM9mRpo0d5YyyIMe780T0JNYFLBvEUQ1M46U+m4hjBTmv9UoaWqXn5Y2Ixmg+BmDcFdKOhMl7xWmrALrni9O0nIU69C04HQvU16W51P/t7yFW8DtXoDDxi3HTNEfgsyftAbcdkDk237kincoa0/Tl34SWgZr7IbzmkHUai/A+liaCmlvV4O56yOVw13IGfo8SuIZCVr0NpUTkfp9ZzTGT5+Ek8lV0js35fd70= X-MS-TrafficTypeDiagnostic: PR3PR03MB6681: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KrYw4I59A3HQFKsjtlpN1y4pN0eaZVfL4e7E/7F/ClsQh+b54C15pFixFrc7AuqnBPv2hcvO28rFY6Hu1+HoUJVes/RwoHrn6qujYA/o7gpUmk0rlUWqObsB2WzWbTy5rLkSYIXP23awSZ0zjcQxBqw16+mIPzMubueSfZGaCDhXA3ypFfL77Wvf4onefHlMmNUTR0hXMINz1YGk/6G+AnfupKfGRHXVRN3KtphIW4jf+9ZBX5Zh1am2PtNgoAcfGNyIqmmPR+2/wh3MO8KWc8Na+vZX3cltIqXydWphgSnUpvXJ7KSKqW5x7rjsTb6YCrZTvFOO6HBbq7xk/xOWAJkoBkKuKTOX6rdjcjSK8GbiFo2Xb4NCI721iNd9oWxSGEMqJ+VWtvqh/uhgsl1yQKlXoySx78357MCbCs6KKnp8q/6s70ut013MXc8CZsqh X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Bxw5E6XW4REZfhaMCtIzN9JcGYwGRa2tbiDoQASWVypSLVHrECMKuqTPuCvRJtnj7KeZJnm4J3NfuDyOkThbsdP0s/MTGYEngGHjQXV5KTbP4vQonKR2w/xajtOlY3GjwTbvyj4/hhWyx+Tb2tqW2Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e6ddbd86-b25b-407d-b029-08d965067e2f X-MS-Exchange-CrossTenant-AuthSource: PR3PR03MB6665.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2021 00:48:01.2980 (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: PR3PR03MB6681 Subject: [FFmpeg-devel] [PATCH v3 02/25] avfilter/avfilter: Allow to free non-static pads generically 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: nMzXkScyIwUm Content-Length: 3707 This can be enabled/disabled on a per-pad basis by setting the AVFILTERPAD_FLAG_FREE_NAME flag; variants of ff_append_(in|out)pads that do this for you have been added and will be put to use in the following commits. Signed-off-by: Andreas Rheinhardt --- libavfilter/avfilter.c | 21 ++++++++++++++++++++- libavfilter/internal.h | 10 ++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 2681d04fc0..4b6a3d1e8f 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -123,8 +123,11 @@ static int append_pad(unsigned *count, AVFilterPad **pads, *pads = newpads; if (newlinks) *links = newlinks; - if (!newpads || !newlinks) + if (!newpads || !newlinks) { + if (newpad->flags & AVFILTERPAD_FLAG_FREE_NAME) + av_freep(&newpad->name); return AVERROR(ENOMEM); + } memcpy(*pads + idx, newpad, sizeof(AVFilterPad)); (*links)[idx] = NULL; @@ -139,11 +142,23 @@ int ff_append_inpad(AVFilterContext *f, AVFilterPad *p) return append_pad(&f->nb_inputs, &f->input_pads, &f->inputs, p); } +int ff_append_inpad_free_name(AVFilterContext *f, AVFilterPad *p) +{ + p->flags |= AVFILTERPAD_FLAG_FREE_NAME; + return ff_append_inpad(f, p); +} + int ff_append_outpad(AVFilterContext *f, AVFilterPad *p) { return append_pad(&f->nb_outputs, &f->output_pads, &f->outputs, p); } +int ff_append_outpad_free_name(AVFilterContext *f, AVFilterPad *p) +{ + p->flags |= AVFILTERPAD_FLAG_FREE_NAME; + return ff_append_outpad(f, p); +} + int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad) { @@ -754,9 +769,13 @@ void avfilter_free(AVFilterContext *filter) for (i = 0; i < filter->nb_inputs; i++) { free_link(filter->inputs[i]); + if (filter->input_pads[i].flags & AVFILTERPAD_FLAG_FREE_NAME) + av_freep(&filter->input_pads[i].name); } for (i = 0; i < filter->nb_outputs; i++) { free_link(filter->outputs[i]); + if (filter->output_pads[i].flags & AVFILTERPAD_FLAG_FREE_NAME) + av_freep(&filter->output_pads[i].name); } if (filter->filter->priv_class) diff --git a/libavfilter/internal.h b/libavfilter/internal.h index cc95f06c4c..6ddf024d93 100644 --- a/libavfilter/internal.h +++ b/libavfilter/internal.h @@ -68,6 +68,11 @@ struct AVFilterPad { */ #define AVFILTERPAD_FLAG_NEEDS_WRITABLE (1 << 0) + /** + * The pad's name is allocated and should be freed generically. + */ +#define AVFILTERPAD_FLAG_FREE_NAME (1 << 1) + /** * A combination of AVFILTERPAD_FLAG_* flags. */ @@ -231,9 +236,14 @@ void ff_tlog_link(void *ctx, AVFilterLink *link, int end); /** * Append a new input/output pad to the filter's list of such pads. + * + * The *_free_name versions will set the AVFILTERPAD_FLAG_FREE_NAME flag + * ensuring that the name will be freed generically (even on insertion error). */ int ff_append_inpad (AVFilterContext *f, AVFilterPad *p); int ff_append_outpad(AVFilterContext *f, AVFilterPad *p); +int ff_append_inpad_free_name (AVFilterContext *f, AVFilterPad *p); +int ff_append_outpad_free_name(AVFilterContext *f, AVFilterPad *p); /** * Request an input frame from the filter at the other end of the link.