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 F39214A25A for ; Mon, 25 Mar 2024 20:15:26 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3716968D4DA; Mon, 25 Mar 2024 22:15:24 +0200 (EET) Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2110.outbound.protection.outlook.com [40.107.105.110]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3C1D568D469 for ; Mon, 25 Mar 2024 22:15:17 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a+ZTi2VH6QtmWEfhqZZYQJpFMYX6+5LpbKX9IAwysc5QBzSIB+X0aSn+0uS+RZ4Gg1q7lO3qKYT25vQw7DEvpb3uCXNGj6o3qUlN0/jThBfhmo3/W19R1ZLgtthddDj5fAWCj0Ex3Kw4YEjbjDIVfQiKjC4kFLk01AiqfcTEKmwwCuwW1yfJrIVljb9nq54e27kltLK2Y89UBCLpcQFFmE0QnrULuGlAZTORR/f2wPMLd9p/fVylRFeqZnOhZz0Ruco+sfiNYJv/HvSC3+0rCrmfHBlDLBs0prxs0y03pYvF79SVyevkJasF+8zPlr0/Equ/v9LPh7/+5lJ/oUHOzA== 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=dIj8LUQOCdzNnbGX6iNUvXShg8XM32Qw3nLq3HqIzYM=; b=iw0RbwKN9KaDtn1j2H6InRUfyDkVJgv0Cxlgq9WxHE340qsllt1QfaCE5VMOBSbvDFfWjTxXrKmXZETxwoaREXHvAYavQK39UpB6I+aSDBuAGm6ChjsM063qiUUl1iPJ/9WL/YabLEOYXDsMCd+SLvm+P3T/vOzyQVFmc0QyYBuIHLkuj6jWgtu/U2GD3XNkrucdYgn8+5SAwnvR+CUQZh8ZpykMTseYq0EarQu2+F1prUki2lwS/kWxp8pByOUBaXr8N0lMHog7F79EVcAc9atyFlVOVFI5kPNR+D/gVls7xqVBb0tArdZdGll6BKd20ZKEp7xolZ/ClYEvfgiBkg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mail.polimi.it; dmarc=pass action=none header.from=polimi.it; dkim=pass header.d=polimi.it; arc=none Received: from DU0P251MB0720.EURP251.PROD.OUTLOOK.COM (2603:10a6:10:342::14) by GV1P251MB1002.EURP251.PROD.OUTLOOK.COM (2603:10a6:150:96::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.31; Mon, 25 Mar 2024 20:15:15 +0000 Received: from DU0P251MB0720.EURP251.PROD.OUTLOOK.COM ([fe80::c3d3:d0:7ff:6b57]) by DU0P251MB0720.EURP251.PROD.OUTLOOK.COM ([fe80::c3d3:d0:7ff:6b57%4]) with mapi id 15.20.7409.028; Mon, 25 Mar 2024 20:15:15 +0000 Message-ID: <7c123da1-cb8c-4b35-96c2-7569cacd75e6@polimi.it> Date: Mon, 25 Mar 2024 21:15:13 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org X-ClientProxiedBy: MI1P293CA0004.ITAP293.PROD.OUTLOOK.COM (2603:10a6:290:2::13) To DU0P251MB0720.EURP251.PROD.OUTLOOK.COM (2603:10a6:10:342::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0P251MB0720:EE_|GV1P251MB1002:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4A2ZzXy3jU/TSpwnMwawkbn+YcFKV2NCNP+tydotTJjes7zbjM0aQa5xULsR97T6N3y5YFgc5CpKofEWb9iaLWUNaH89AYfjsX+m4ObBVZI/KbStKVn+jGc7ba6ObB1+ef1DY28gir4nssxhfbda4EHIDFw3zQtMTlQeMxaG01MeZPV8kf3IZz7W2y+11qxUq2dJYve/Dafbpk9tahg+eiY6cGocrljtvf7ytp2a7r5u9z2J1eFBGB/DfZg3An6wrPK9Vy/zydaGsWNOi19Ekn0WGc4gBr8ka/+KRTkXwWaadp0DmSvgw/IR/U32enARpGg4p9ZuV4TSaxrqmVX3IQrrQuGAPvx0b/cnunTNj7LzdAYORY+gcFieROapawyH8PYuOkobAbgKbpevaxZE57txV7naBa7IxZggQFdh//gMgsiWmMlXw2Omn4SXR1MpH2Fz63fTKRILmekZeT5Z4g== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0P251MB0720.EURP251.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230031)(366007)(376005)(1800799015)(81742002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RDQ0NHZSSUxpNzdsMkxaeG5NbUdUQXpxL3IvVFJEazhvcTNqb2ViRmwvMGJq?= =?utf-8?B?K2d1ZFBTamZEUVFCWnI2RTJJTVh5YS9lTmdHTGhtWlU0UVZzNVVKREg4VDA1?= =?utf-8?B?SVZ0NWpTOFJUS2JJRDltcWEwRFNFTm5scEtxNmZzcEVxbmJHeFNZTXVSQjV3?= =?utf-8?B?QXVjQjA0ZnZRSmRlNTgyZEN3N201KzdkQ2l0am83RFRCVUVsQmhnL3kxaCtm?= =?utf-8?B?anVQZWdyZFFQelNtZmpjWjA2RnIyUFl4YWRTbi9NQTNQcVN1bXA4cVhZQkcx?= =?utf-8?B?eGs4b2FmYUZRc05OcS9Zd3ZtK2x1c2owbmg5WXdnNE1OZCsxWHp1WG0wRlZ6?= =?utf-8?B?NE9ZR09MSXpRdU1yODhJNTkwSm5INDhQWkQ0VTF5ZkFrYlBmVFZuaUhMNTVF?= =?utf-8?B?OFZLUm1GOFJFVUFXeS9yYTBzRHBQSEdoTU9Jd2RCYU9GNXZ4QUNiRlRiaU1C?= =?utf-8?B?Y1pPcTh0TWNCZFlTNWdJOWVIeFhDd3FuYXUwZlhEalQxUEtSdHRTMnhWREQ0?= =?utf-8?B?WTlzdDRZaU8xRmNEMTQvM0VSbjl1TlFldTFjczZuREZwNXRMMmRNTURHVWZC?= =?utf-8?B?VDE1eEZNSjh4UVRNQ0ptTVh3QkNPQk9vTS8ydEJOQW8zRFJ3cDZKN0FjakZY?= =?utf-8?B?dEN5N2oxUlBOckRrSEx2WmhmSjhtQ2xmVWhqclg2VHpaSTJScUp6dWdWVzZU?= =?utf-8?B?bXFvY2FveHp0MkxsSCs3ZHgzanZndXJoZmMyZVdIb0tML0NXRzRrY0Vid0NL?= =?utf-8?B?RExsdHdybnF1dlVvS3lWVlBGb0dUdURIeUZjVnF4YWp1MFZWK29nUWRxdllD?= =?utf-8?B?bGdwSkRhVzg2cGpzRDhVeXVGTE12aHNzSXgvbEtDYmRPZ3p4eTF0MTlFM3Ri?= =?utf-8?B?Zi8xeWRacXIvUWE2SHVVNmdSMFU4RzJiZFR4NmFWMnNIbDhPS1pLN1ZMQkJH?= =?utf-8?B?M1FIZndEdGR6aDl2ZHYwcHBMakVoOU9MVExZL3k0Y2hHaWQ1YXpmVDBRaFVW?= =?utf-8?B?Q2dPaHhmQWdHT2Z6UUNrN0hmcEkvNEl3VFZHaUJuTmkxTDl0NUJwK2h6Yy9q?= =?utf-8?B?QkJjSjZobjhzMmxvS2pYMnhia0d5ZXZwOTZYNWhHRkoyTmtibFRtWDhES0ZS?= =?utf-8?B?aGx2WmpubU9qV0NjT0dSTGhDaW1zblJ1ZUlWdmg5VkdaZFBkNm9HZDJxNk5C?= =?utf-8?B?bVdNTWZ4M1ZOK3VVSERZdFFYdjhwWkU2ZTZnT3J3MzA2Um9DTEhPMlF2UzJK?= =?utf-8?B?MjdjaFppNTY3MXRrQ28rYk9FSHZobVVmamRrZjRmWHFsZWNlS1QvV1JteW40?= =?utf-8?B?Zi9SV1NCTXNDUnUyQ3haWGdMc0dpdWxob3RrNFEwcldzektCOUE5c1hUZHF3?= =?utf-8?B?VFhaTkh5dFZiNDFpZjNBMFdJZFNKRDhTR3lWWXk4SGFnbWM4RUxkRERCS1Yw?= =?utf-8?B?eUdnaURIL2t5QXcvaFJVdUFJOFVPMDVGV1ZHVTgwRnp0MnRaeVkwSE0wOERK?= =?utf-8?B?ckU1RjFjRnhaeDlyWkQ2Y0NaajVSUDJmVStRQ1JzbXRyeUJpQ3ZnaUR4eG13?= =?utf-8?B?a1pxMld5ZEVzMGZJdEpxNnVRd1pPSUc1a1ZyS2ozV2lUdHJIUTJCRVpZR21L?= =?utf-8?B?QWg2OC9WcGkzYWlzdzltMFlUdmlmS25rU0xnQmlFeXYyVkw5Q1ZnVldNNzIw?= =?utf-8?B?bDEyMVNiblliRnh1M3V4S1J6RStadm4xUHpnRGQ5Tk1PN0F2djV0djhBSXZ1?= =?utf-8?B?dG1oUW1KNTR1L20vd3ZFdHlSMXVpT1p3dmNYZVYwNlpsSWM4azlqVU50d0Iv?= =?utf-8?B?UUllNVpqVmU3RER5emM0ZE9lR0tMZFRwY2FNV21FUVlkN3ZvR3hwZlZFTisx?= =?utf-8?B?UDRJRmloajFQOUJnM1p5RU82RUtuU0RHWkpWcWNDVktNb2pscFQxU2pjbXg1?= =?utf-8?B?djJ3dTMzYXpnWEltbGhJaWNnZ1Q3SmRoSi9pYTBlaUxXM21IWDZCdVJuWTVh?= =?utf-8?B?djJmVTA4eFhVY09MNy81R3lmeFNOeWhBTGRvOEs1anZ5R2lyZEkvNE51b2V4?= =?utf-8?B?R1g1bDNJRnNuM0lXNGo5K3g0bWY0bVZ5MXg4b1pGTHJpbVZEVWNlMTVQVW1j?= =?utf-8?Q?Fu4ZHYOZiKt2D0hn1rYurxl26?= X-OriginatorOrg: polimi.it X-MS-Exchange-CrossTenant-Network-Message-Id: ef1f2ecd-b425-4745-e728-08dc4d084852 X-MS-Exchange-CrossTenant-AuthSource: DU0P251MB0720.EURP251.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2024 20:15:14.9650 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0a17712b-6df3-425d-808e-309df28a5eeb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HJVsNlqiCDh/+9wW+jnoTBjUW6c5kP53DvJ6edFG1j5/UqBL94JqN2ej1s5Pd3ODOGaPFUeJayLlGjiEMNK7Dg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1P251MB1002 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] Added alpha layer support for smartblur - reformatted patch 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: , From: Andrea Mastroberti via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Andrea Mastroberti <10736595@polimi.it> Content-Type: multipart/mixed; boundary="===============2633775554637074576==" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --===============2633775554637074576== Content-Language: en-US Content-Type: message/rfc822; name="0001-Added-alpha-layer-support-for-smartblur.eml" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-Added-alpha-layer-support-for-smartblur.eml" From: Andrea Mastroberti <10736595@polimi.it> Date: Tue, 19 Mar 2024 17:44:04 +0100 Subject: [PATCH] Added alpha layer support for smartblur X-Unsent: 1 To: ffmpeg-devel@ffmpeg.org Content-Type: text/plain MIME-Version: 1.0 Signed-off-by: Andrea Mastroberti <10736595@polimi.it> --- doc/filters.texi | 20 ++++++++++++++++- libavfilter/version.h | 2 +- libavfilter/vf_smartblur.c | 44 ++++++++++++++++++++++++++++++-------- 3 files changed, 55 insertions(+), 11 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 913365671d..30b3627724 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -22688,9 +22688,27 @@ whether a pixel should be blurred or not. The option value must be an integer in the range [-30,30]. A value of 0 will filter all the image, a value included in [0,30] will filter flat areas and a value included in [-30,0] will filter edges. Default value is @option{luma_threshold}. + +@item alpha_radius, ar +Set the alpha radius. The option value must be a float number in +the range [0.1,5.0] that specifies the variance of the gaussian filter +used to blur the image (slower if larger). Default value is 1.0. + +@item alpha_strength, as +Set the alpha strength. The option value must be a float number +in the range [-1.0,1.0] that configures the blurring. A value included +in [0.0,1.0] will blur the image whereas a value included in +[-1.0,0.0] will sharpen the image. Default value is 1.0. + +@item alpha_threshold, at +Set the alpha threshold used as a coefficient to determine +whether a pixel should be blurred or not. The option value must be an +integer in the range [-30,30]. A value of 0 will filter all the image, +a value included in [0,30] will filter flat areas and a value included +in [-30,0] will filter edges. Default value is 0. @end table -If a chroma option is not explicitly set, the corresponding luma value +If a chroma or alpha option is not explicitly set, the corresponding luma value is set. @section sobel diff --git a/libavfilter/version.h b/libavfilter/version.h index d5a6bc143a..f01b3f8e91 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -32,7 +32,7 @@ #include "version_major.h" #define LIBAVFILTER_VERSION_MINOR 0 -#define LIBAVFILTER_VERSION_MICRO 100 +#define LIBAVFILTER_VERSION_MICRO 101 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ diff --git a/libavfilter/vf_smartblur.c b/libavfilter/vf_smartblur.c index ae0ec05b2d..bc377d0b92 100644 --- a/libavfilter/vf_smartblur.c +++ b/libavfilter/vf_smartblur.c @@ -54,6 +54,7 @@ typedef struct SmartblurContext { const AVClass *class; FilterParam luma; FilterParam chroma; + FilterParam alpha; int hsub; int vsub; unsigned int sws_flags; @@ -77,6 +78,13 @@ static const AVOption smartblur_options[] = { { "chroma_threshold", "set chroma threshold", OFFSET(chroma.threshold), AV_OPT_TYPE_INT, {.i64=THRESHOLD_MIN-1}, THRESHOLD_MIN-1, THRESHOLD_MAX, .flags=FLAGS }, { "ct", "set chroma threshold", OFFSET(chroma.threshold), AV_OPT_TYPE_INT, {.i64=THRESHOLD_MIN-1}, THRESHOLD_MIN-1, THRESHOLD_MAX, .flags=FLAGS }, + { "alpha_radius", "set alpha radius", OFFSET(alpha.radius), AV_OPT_TYPE_FLOAT, {.dbl=1.0}, RADIUS_MIN, RADIUS_MAX, .flags=FLAGS }, + { "ar" , "set alpha radius", OFFSET(alpha.radius), AV_OPT_TYPE_FLOAT, {.dbl=1.0}, RADIUS_MIN, RADIUS_MAX, .flags=FLAGS }, + { "alpha_strength", "set alpha strength", OFFSET(alpha.strength), AV_OPT_TYPE_FLOAT, {.dbl=1.0}, STRENGTH_MIN, STRENGTH_MAX, .flags=FLAGS }, + { "as", "set alpha strength", OFFSET(alpha.strength), AV_OPT_TYPE_FLOAT, {.dbl=1.0}, STRENGTH_MIN, STRENGTH_MAX, .flags=FLAGS }, + { "alpha_threshold", "set alpha threshold", OFFSET(alpha.threshold), AV_OPT_TYPE_INT, {.i64=0}, THRESHOLD_MIN, THRESHOLD_MAX, .flags=FLAGS }, + { "at", "set alpha threshold", OFFSET(alpha.threshold), AV_OPT_TYPE_INT, {.i64=0}, THRESHOLD_MIN, THRESHOLD_MAX, .flags=FLAGS }, + { NULL } }; @@ -86,7 +94,7 @@ static av_cold int init(AVFilterContext *ctx) { SmartblurContext *s = ctx->priv; - /* make chroma default to luma values, if not explicitly set */ + /* make chroma and alpha default to luma values, if not explicitly set */ if (s->chroma.radius < RADIUS_MIN) s->chroma.radius = s->luma.radius; if (s->chroma.strength < STRENGTH_MIN) @@ -94,15 +102,23 @@ static av_cold int init(AVFilterContext *ctx) if (s->chroma.threshold < THRESHOLD_MIN) s->chroma.threshold = s->luma.threshold; - s->luma.quality = s->chroma.quality = 3.0; + if (s->alpha.radius < RADIUS_MIN) + s->alpha.radius = s->alpha.radius; + if (s->alpha.strength < STRENGTH_MIN) + s->alpha.strength = s->alpha.strength; + if (s->alpha.threshold < THRESHOLD_MIN) + s->alpha.threshold = s->alpha.threshold; + + s->luma.quality = s->chroma.quality = s->alpha.quality = 3.0; s->sws_flags = SWS_BICUBIC; av_log(ctx, AV_LOG_VERBOSE, "luma_radius:%f luma_strength:%f luma_threshold:%d " - "chroma_radius:%f chroma_strength:%f chroma_threshold:%d\n", + "chroma_radius:%f chroma_strength:%f chroma_threshold:%d\n" + "alpha_radius:%f alpha_strength:%f alpha_threshold:%d ", s->luma.radius, s->luma.strength, s->luma.threshold, - s->chroma.radius, s->chroma.strength, s->chroma.threshold); - + s->chroma.radius, s->chroma.strength, s->chroma.threshold, + s->alpha.radius, s->alpha.strength, s->alpha.threshold); return 0; } @@ -112,13 +128,15 @@ static av_cold void uninit(AVFilterContext *ctx) sws_freeContext(s->luma.filter_context); sws_freeContext(s->chroma.filter_context); + sws_freeContext(s->alpha.filter_context); } static const enum AVPixelFormat pix_fmts[] = { - AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV422P, - AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV411P, - AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV440P, - AV_PIX_FMT_GRAY8, + AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P, + AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA422P, + AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P, + AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P, + AV_PIX_FMT_YUV440P, AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }; @@ -162,6 +180,7 @@ static int config_props(AVFilterLink *inlink) AV_CEIL_RSHIFT(inlink->w, s->hsub), AV_CEIL_RSHIFT(inlink->h, s->vsub), s->sws_flags); + alloc_sws_context(&s->alpha, inlink->w, inlink->h, s->sws_flags); return 0; } @@ -261,6 +280,13 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic) s->chroma.filter_context); } + if (inpic->data[3]) { + blur(outpic->data[3], outpic->linesize[3], + inpic->data[3], inpic->linesize[3], + inlink->w, inlink->h, s->alpha.threshold, + s->alpha.filter_context); + } + av_frame_free(&inpic); return ff_filter_frame(outlink, outpic); } -- 2.44.0 --===============2633775554637074576== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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". --===============2633775554637074576==--