From patchwork Sat Jul 15 17:22:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Peter_Gro=C3=9Fe?= X-Patchwork-Id: 4323 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.1.76 with SMTP id 73csp2611501vsb; Sat, 15 Jul 2017 10:22:22 -0700 (PDT) X-Received: by 10.28.170.8 with SMTP id t8mr1425091wme.111.1500139342786; Sat, 15 Jul 2017 10:22:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1500139342; cv=none; d=google.com; s=arc-20160816; b=ASNatyxDgd4rGPbTpC7rsVOCHx88yz07/JqfwPysOy+df7aoy22x637YsXpUKktNM0 D2rtQte01xBVii+MOCx4gX8WhlHJsNuDAy+UE8Rtq2TZGQkPbbyktcTnxAHnu3tn0VxO JtgIWtvozEemwa3zjIVa+PDjgSYB8Ms0/HLa6x/kYvqxsArYlAUKuQkWSKS5w+Al0ul1 vMhQLbHxB5suTAntbMqQ1IcSIgFBL3FYDeZ2kH3pVEBmMKZeCKkYeiITqjVtEeCPTPr/ /ux8Pq+hcHVM9DueMKUQcgPC5OswxagPXOyLDbr8F5d2GBclVsim55rvhsjNNVkgu8h1 40Sg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :delivered-to:arc-authentication-results; bh=yNgNk61p+RGy1jg+nYkVSQi3dfWdJzseh7uDvm7Jmyc=; b=IGX7LN1pPtzJ2CBCR44gz7RkcBmRXlbNyKRlHDRRxGS8iAmtvfcnp+z/1uekIhaavF D/++qaCn/rmfeTC2LCXzDajbOPZ1nCiIZrBa8UxPQ8ueLz4UtOe+tTTJKykguLo1iLtj iFE8o8NSLpE+RfoX5T9q9sMffp6i77/YuL81TyTAnnZNkwXSTD0gf21ZyABqPJKxxNR/ 83b6uJfOMzYqos7/LOBZUMsFS+qy5jSkZ+KNHo7z0FFbzl7F0kOVGMygTwTNb6vjaUD0 VmGo9WHrSpPradSgOca42mlhxrEdwvuj0WLEM/1HKfdqHK/Fy/fNH9ELIWmPZ/qPjHHp xnPA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j61si8820044wrj.331.2017.07.15.10.22.21; Sat, 15 Jul 2017 10:22:22 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BCAB66899A4; Sat, 15 Jul 2017 20:22:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from james.theweblords.de (james.theweblords.de [217.11.55.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1D31A687EAF for ; Sat, 15 Jul 2017 20:22:06 +0300 (EEST) Received: (qmail 12605 invoked by uid 210); 15 Jul 2017 17:22:12 -0000 X-Qmail-Scanner-Diagnostics: from x4d07d466.dyn.telefonica.de (petronios@theweblords.de@x4d07d466.dyn.telefonica.de) by james (envelope-from , uid 201) with qmail-scanner-2.10st (mhr: 1.0. spamassassin: 3.4.1. perlscan: 2.10st. Clear:RC:1(77.7.212.102):. Processed in 0.087619 secs); 15 Jul 2017 17:22:12 -0000 Received: from x4d07d466.dyn.telefonica.de (HELO montepegro.fem.tu-ilmenau.de) (petronios@theweblords.de@77.7.212.102) by james.theweblords.de with ESMTPA; 15 Jul 2017 17:22:12 -0000 From: =?UTF-8?q?Peter=20Gro=C3=9Fe?= To: ffmpeg-devel@ffmpeg.org Date: Sat, 15 Jul 2017 19:22:06 +0200 Message-Id: <20170715172206.10199-1-pegro@friiks.de> X-Mailer: git-send-email 2.13.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avfilter/vf_overlay: fix alpha blending when main source has an alpha channel X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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: =?UTF-8?q?Peter=20Gro=C3=9Fe?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Use alpha value from alpha channel instead of selected component channel. Signed-off-by: Peter Große --- libavfilter/vf_overlay.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c index 5c9f590957..cde09f5fb3 100644 --- a/libavfilter/vf_overlay.c +++ b/libavfilter/vf_overlay.c @@ -508,7 +508,7 @@ static av_always_inline void blend_plane(AVFilterContext *ctx, int dst_hp = AV_CEIL_RSHIFT(dst_h, vsub); int yp = y>>vsub; int xp = x>>hsub; - uint8_t *s, *sp, *d, *dp, *a, *ap; + uint8_t *s, *sp, *d, *dp, *a, *ap, *da, *dap; int jmax, j, k, kmax; j = FFMAX(-yp, 0); @@ -517,12 +517,16 @@ static av_always_inline void blend_plane(AVFilterContext *ctx, + (yp+j) * dst->linesize[dst_plane] + dst_offset; ap = src->data[3] + (j<linesize[3]; + if (main_has_alpha) + dap = dst->data[3] + (j<linesize[3]; for (jmax = FFMIN(-yp + dst_hp, src_hp); j < jmax; j++) { k = FFMAX(-xp, 0); d = dp + (xp+k) * dst_step; s = sp + k; a = ap + (k<linesize[3]] + - d[1] + d[src->linesize[3]+1]) >> 2; + alpha_d = (da[0] + da[src->linesize[3]] + + da[1] + da[src->linesize[3]+1]) >> 2; } else if (hsub || vsub) { alpha_h = hsub && k+1 < src_wp ? - (d[0] + d[1]) >> 1 : d[0]; + (da[0] + da[1]) >> 1 : da[0]; alpha_v = vsub && j+1 < src_hp ? - (d[0] + d[src->linesize[3]]) >> 1 : d[0]; + (da[0] + da[src->linesize[3]]) >> 1 : da[0]; alpha_d = (alpha_v + alpha_h) >> 1; } else - alpha_d = d[0]; + alpha_d = da[0]; alpha = UNPREMULTIPLY_ALPHA(alpha, alpha_d); } *d = FAST_DIV255(*d * (255 - alpha) + *s * alpha);