From patchwork Sun Aug 22 00:47:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 29704 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:b707:0:0:0:0:0 with SMTP id t7csp654474ybj; Sat, 21 Aug 2021 17:51:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxXhUlw15Mc18LLV0zg7d6RF2LS9D6WPRNkVOyVqoby5Kmob3RqUfRLDuzkz2GuM9AWvuNf X-Received: by 2002:a50:9b52:: with SMTP id a18mr29854525edj.165.1629593512117; Sat, 21 Aug 2021 17:51:52 -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 m16si1610778edr.432.2021.08.21.17.51.51; Sat, 21 Aug 2021 17:51:52 -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="MyY1E/GZ"; 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 284E968A642; Sun, 22 Aug 2021 03:48:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-oln040092066037.outbound.protection.outlook.com [40.92.66.37]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 958F868A603 for ; Sun, 22 Aug 2021 03:48:36 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dQTKqQiCBvmWoTxe4nB9VFRbeVmGZYqJ9ULDRXuEt902f83ZPj1wq9YFEVhVefNM2LjSd5LbVFK0Lmyg1gYBibUv+aHsq/vMTfjSm3Sj6pWXg3SzCxiWVhjpJxa2woOqYoG3Mbw+YOaYOOdapDR8K3zDYbD/mu9L/NBCZQr13SW0n4UMDoHkhg7QHaIVNtUwcQ+sXCHrGQFkj+11W6k66IrG5OCTQVt6pdYwmLhIuiPxuqpsYnkbOABtV8UX4bfLaYnds3AChDEOIblJ1S2TqN57+8zXjRWXvkfp7n3TIUwdBs/gBGpZkINhP3f4w/vF64UvKXj4GVpVEL9CV0ds3g== 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=LUkZ/AwUYJCyDqZSP/oRNeso5HOyNL78Kc1PohIywx8=; b=VifeNIjgugb8Am9hvZFgiZsvBk8adhARHQ2Od5iepYMjoLTWXeOjET2Ysxt6t7wvC1WciL2LyjpmH3YzrFEazlDMGuerMhNYW1g8NKE5u6m+/VACWr4TJ0Fy1qkxgteWfCP6eC6BjbaOCpFfEXKjarIRG8yOkGlTapTojJnAc2yNzfzP5bwuHGcTxK9TRakZE9wtlGwDXI1GNlVYdV9X0qxgxPwSng58lZkNGd6BKJbwv9uWWfrzRTcJwIfxkCHmk5VJPmAddkUY46yHfG7TtuT04wJSIpxanvCwcCt4smXxHEYwrCMVij0rFUP2kYKOmZOziatTFQAPppDvKmoA0A== 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=LUkZ/AwUYJCyDqZSP/oRNeso5HOyNL78Kc1PohIywx8=; b=MyY1E/GZ/IqMA+E7glSHJHS8icIYLpzmLwobKD7wrcRi5hwpUberOx+dJQ1cqdBtMlbt6qwo0k6KcuPVznS5RhfKn/ml8rTZs8as7bbyrnPsdHzdzOd3FN1XH9EwsBMfi6BAjjnP9cHaub953sh+ckB1H9VTOLCibEjwJJ0MntuWCpgiR6xjuEnwlFmFvWs4e6fxsitVUp+P7K0mA9qe1px9hP1eIxvTeY/PHRzFewe4uDIfSSDDkURHsxKibG8PER0ap3qdGKQluw3ZICGuyUJaxsqMv18yeoLR5KTOhNhzT0TWFMiV7KO58Al8s4nx2wT57+juytRkiwqEKlhkpg== Received: from PR3PR03MB6665.eurprd03.prod.outlook.com (2603:10a6:102:7d::6) by PA4PR03MB7296.eurprd03.prod.outlook.com (2603:10a6:102:104::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19; Sun, 22 Aug 2021 00:48:35 +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:35 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 22 Aug 2021 02:47:54 +0200 Message-ID: X-Mailer: git-send-email 2.30.2 In-Reply-To: References: X-TMN: [nwHGaLCxWiAPJHFJNsPIM08jztbSG/g4] 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-24-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:34 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3068da99-62c5-48da-3bc1-08d96506923b X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNUPHJiP61NwviEKWmldPD2hWtCX6duWabdmmTZ2tg1pQgUy4GixgVJ7vG3qyF8zRYk1aK66Xsii2y2DQ+0Bhvrtdl3Ptfkl9sDg1LrHAhOBSs4yMyY11bGcFJTbqIA1ylU2SQZrlx/R9zoDDIARhZDieJUYh7mO+kNffFEPYtsY8p88i3wUxZDzuXEKOoZjrb2aekyr+NTrSev64tG6N4NylXGIuNY5aOhUfjx1T2sW1MtXpKa2CUGcpbUuycCALve3kUPpLL7BuT0aXnmd4B50ru1HVM60kE3LOXvhIAHD7WdTp8AcipBRC+WBXbkL3ReO+G9qcx2Bhb04v7pIoP5UJXdTlU3NPXnFtVa+Pff14qRM5HcZ0gesO6ZGkI1VGYvEsngKpczky+jTOjtDwfJL4rD+4meTInMggZGpsjBtZRK8WXU5W6Db7DAUq73SH7dJ7mcTyfzUOjMDFPI45I3Zd92h5dEHW8nxjqNvU9od5Kv//QHZFoD8vLQjkAZSFSrkCtz+QNMHwLsHw2j8Q1P2XoYp/yELRTWeWFCYaCJmIB416PJC1LkRITxcr6swt0B+o5Vm7Hx6UY6vpLZsHxeEjvbMv6zNWA7joGOj40oPE+4N2qsytJtQH51hpEAH3pOaoe23rvIt4X52Tj/lG+rE1H6ZIZumShnxqCgZMb2Ii8ht1kTDGleUl9XztOWPTAwTlq//V85Pwc4FUETBrTqKiHjz/0tQEFU= X-MS-TrafficTypeDiagnostic: PA4PR03MB7296: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UkEw14lDAgSIUHFNq1ORdXo/Xb+NXGvcuRsQjO7cK1fhB71/ggHDyZmUIn35U8JQ5WwvcBbpttb0CidZmU+uEORgOYxnW0zu3OILK83glwNA1SKIOiEvUl/TSMPFUa2/c7AvoGHTS64N488hPYZiTs8V3gnaZgSmIKi+bdwfL5L0MZr2WJMpFkuCBLQdIGL/fP0O83vQGme7cNnh7yZN6AiViCuZdsnf66O73lEYDlIt0BnbESnOfs4nosEy+DaaQaUg4RHbFzIy+PvFByp+l2u/IMKeGdOWMFHcGGmGFz2IotuwWOuY1F0Oecx4wms0Jz8dedRBgiMxSGrAUkn5SpKQjH3SYGEqvkL7pSe7trDJ2gJEfYVkyis0q3RjpCNq3pIxdVthSsSZ7N9/QY6xvGgik2s3mEhRaaE39eNiYE7i5Zvoig/CSIhWRxMm4Nyd X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dI5N9pjL5R8x/E50wti06zE//awtVRYKWXGV+rPQBrs3O0WtpWtHQtjwNEs0RfXo81z2sZBrKbJSVrvFFDRZEpM7cNaMFBAQXzOCdHtVIEE/JG/bW3DpLuWQtj1gHXf9fs4zpexjAArW/4AM7Zvu7g== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3068da99-62c5-48da-3bc1-08d96506923b 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:34.9211 (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: PA4PR03MB7296 Subject: [FFmpeg-devel] [PATCH v3 25/25] avfilter/vf_xmedian: Split portion of init unique to xmedian off 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: FmDabksZiHLb Content-Length: 4327 Signed-off-by: Andreas Rheinhardt --- libavfilter/vf_xmedian.c | 56 ++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/libavfilter/vf_xmedian.c b/libavfilter/vf_xmedian.c index f8e4e4adb2..a9e3255a2a 100644 --- a/libavfilter/vf_xmedian.c +++ b/libavfilter/vf_xmedian.c @@ -39,7 +39,7 @@ typedef struct XMedianContext { int planes; float percentile; - int tmedian; + int xmedian; int radius; int index; int depth; @@ -92,15 +92,9 @@ static int query_formats(AVFilterContext *ctx) static av_cold int init(AVFilterContext *ctx) { XMedianContext *s = ctx->priv; - int ret; - - s->tmedian = !strcmp(ctx->filter->name, "tmedian"); - if (!s->tmedian) { - s->radius = s->nb_inputs / 2; - } else { + if (!s->xmedian) s->nb_inputs = s->radius * 2 + 1; - } if (s->nb_inputs & 1) s->index = s->radius * 2.f * s->percentile; @@ -110,18 +104,6 @@ static av_cold int init(AVFilterContext *ctx) if (!s->frames) return AVERROR(ENOMEM); - for (int i = 0; i < s->nb_inputs && !s->tmedian; i++) { - AVFilterPad pad = { 0 }; - - pad.type = AVMEDIA_TYPE_VIDEO; - pad.name = av_asprintf("input%d", i); - if (!pad.name) - return AVERROR(ENOMEM); - - if ((ret = ff_append_inpad_free_name(ctx, &pad)) < 0) - return ret; - } - return 0; } @@ -270,7 +252,7 @@ static int config_output(AVFilterLink *outlink) FFFrameSyncIn *in; int i, ret; - for (int i = 1; i < s->nb_inputs && !s->tmedian; i++) { + for (int i = 1; i < s->nb_inputs && s->xmedian; i++) { if (ctx->inputs[i]->h != height || ctx->inputs[i]->w != width) { av_log(ctx, AV_LOG_ERROR, "Input %d size (%dx%d) does not match input %d size (%dx%d).\n", i, ctx->inputs[i]->w, ctx->inputs[i]->h, 0, width, height); return AVERROR(EINVAL); @@ -297,7 +279,7 @@ static int config_output(AVFilterLink *outlink) s->height[1] = s->height[2] = AV_CEIL_RSHIFT(inlink->h, s->desc->log2_chroma_h); s->height[0] = s->height[3] = inlink->h; - if (s->tmedian) + if (!s->xmedian) return 0; outlink->w = width; @@ -333,7 +315,7 @@ static av_cold void uninit(AVFilterContext *ctx) ff_framesync_uninit(&s->fs); - for (int i = 0; i < s->nb_frames && s->frames && s->tmedian; i++) + for (int i = 0; i < s->nb_frames && s->frames && !s->xmedian; i++) av_frame_free(&s->frames[i]); av_freep(&s->frames); } @@ -362,6 +344,31 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar return 0; } +#if CONFIG_XMEDIAN_FILTER +static av_cold int xmedian_init(AVFilterContext *ctx) +{ + XMedianContext *s = ctx->priv; + int ret; + + s->xmedian = 1; + + s->radius = s->nb_inputs / 2; + + for (int i = 0; i < s->nb_inputs; i++) { + AVFilterPad pad = { 0 }; + + pad.type = AVMEDIA_TYPE_VIDEO; + pad.name = av_asprintf("input%d", i); + if (!pad.name) + return AVERROR(ENOMEM); + + if ((ret = ff_append_inpad_free_name(ctx, &pad)) < 0) + return ret; + } + + return init(ctx); +} + #define OFFSET(x) offsetof(XMedianContext, x) #define FLAGS AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM #define TFLAGS AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_RUNTIME_PARAM @@ -381,7 +388,6 @@ static const AVFilterPad outputs[] = { }, }; -#if CONFIG_XMEDIAN_FILTER FRAMESYNC_DEFINE_CLASS(xmedian, XMedianContext, fs); const AVFilter ff_vf_xmedian = { @@ -392,7 +398,7 @@ const AVFilter ff_vf_xmedian = { .query_formats = query_formats, FILTER_OUTPUTS(outputs), .preinit = xmedian_framesync_preinit, - .init = init, + .init = xmedian_init, .uninit = uninit, .activate = activate, .flags = AVFILTER_FLAG_DYNAMIC_INPUTS | AVFILTER_FLAG_SLICE_THREADS |