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 D82F642C40 for ; Mon, 2 May 2022 17:52:01 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EBFA568B2B0; Mon, 2 May 2022 20:51:58 +0300 (EEST) Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9915968B03B for ; Mon, 2 May 2022 20:51:52 +0300 (EEST) Received: by mail-pj1-f54.google.com with SMTP id w5-20020a17090aaf8500b001d74c754128so30522pjq.0 for ; Mon, 02 May 2022 10:51:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=qbEd/KaFLCbZBFvdahw3fTibPwI2HuMtuCx4cbrCkJg=; b=bcn8bGgRAJBadFBC2rb45dameqorb4cfr6Wgc5uFzNq+b49uoNYID+DFVjFGwjLH7W NZRgASOlB3e6BAbQlDkYgnJxnEZzvaMPPkbmZE8WzBiPOVhBM3+UhE82yGYYV7zgfJDZ lwF52JE7bTDNRBCl6tEiJmfprLFgjJnVQAw6+YrMsZqwhErJcCtAygX0dSJLifRM+vpQ gzXT3FhNupKuigpqBJvZq5CUjDLrLb+csoiVHOTeIWe0rbEShX7AKoSj7x4SNrXIyDRW X3qB3KEUxgLpir91byN+XYS/uaj6TEGyIXajqP1gsJO1h6oCnKgJIHg4b0hQq6xlP2y0 Ag/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=qbEd/KaFLCbZBFvdahw3fTibPwI2HuMtuCx4cbrCkJg=; b=c63EquV/V/yenjnt9Dabqoej/C2xuy7mUvuuzo7U9YLAUglpMVuz01U4kPupNOaOc3 MWiiSAFWOjcO5FNYAhWaU5egLSlxG5uJfQDfsry/SrAicg70DcLju4pB8QQH4zyl9iAJ zUOeW7wUWdiktDFIJ42H3inz1NGH5yfNaDurzJa1d2Qd3WX0wl32Ok0royaLgDXg2CXL eqI2+VSIYrysrf1c5FfzyATBXk8ns+d4Zsh6PxyGnWQSi0Wc9IBYAEIDYBeALfM6LT7c 20No0cw3GydGg4gS8utY7lre3p5HuXrXp6DkRfEUiR6S8H/uX1A1q5HX/GeJUyCzco9r TNfA== X-Gm-Message-State: AOAM530R9ZuBfVd3nIphSU5DptWMQyKB95wAdjxMr6WMKcLbDOXXb1pY FtwzM9HgJ4TC+fBHQJYUObMo0qwAownc5g== X-Google-Smtp-Source: ABdhPJyqdMDmJbOqS28o1W/axyEHyWjK+3e+gpbzg4dc2z9+F4KeCdgTvIygSQzc7Wus+x3/SYjfhg== X-Received: by 2002:a17:902:b703:b0:158:2667:7447 with SMTP id d3-20020a170902b70300b0015826677447mr12612973pls.92.1651513910318; Mon, 02 May 2022 10:51:50 -0700 (PDT) Received: from localhost.localdomain ([223.167.244.38]) by smtp.gmail.com with ESMTPSA id m8-20020a63fd48000000b003c14af505f4sm11132298pgj.12.2022.05.02.10.51.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 May 2022 10:51:50 -0700 (PDT) From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 01:51:43 +0800 Message-Id: <20220502175143.1643-1-linjie.justin.fu@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avfilter/vf_overlay: Fix the calculation of average alpha with alpha composition and threads > 1 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: Linjie Fu 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: The calculation of average alpha utilizes the value of next line(alpha[x+linesize]): alpha[0] alpha[1] alpha[0+linesize] alpha[1+linesize] However, alpha[x+linesize] could be either an alpha_composited value or an original value if it locates at next slice, which may lead to an incorrect output and run2run changed MD5. Hence, only utilizes the alpha within one slice on the boundary to fix the calculation of average alpha. CMD: $ffmpeg -i https://samples.ffmpeg.org/FLV/flash_with_alpha/laraShadow_dl.flv \ -filter_complex "nullsrc=1920x1080[arena];[arena][0:v]overlay" \ -vframes 10 -an -f md5 - Before: Incorrect output and changed MD5 at each run. After this patch: Consistent output and MD5. Signed-off-by: Linjie Fu --- [RFC]This is a partial fix. A fully-fixed method may be don't overwrite dst_alpha or preserve the original alpha value in composite_alpha(). Then we can use the original alpha value for calculation in blend_plane(). libavfilter/vf_overlay.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c index f560d54dae..9488ccd0d7 100644 --- a/libavfilter/vf_overlay.c +++ b/libavfilter/vf_overlay.c @@ -515,13 +515,13 @@ static av_always_inline void blend_plane_##depth##_##nbits##bits(AVFilterContext if (main_has_alpha && alpha != 0 && alpha != max) { \ /* average alpha for color components, improve quality */ \ uint8_t alpha_d; \ - if (hsub && vsub && j+1 < src_hp && k+1 < src_wp) { \ + if (hsub && vsub && j+1 < src_hp && k+1 < src_wp && j+1 < slice_end) { \ alpha_d = (da[0] + da[dst->linesize[3]] + \ da[1] + da[dst->linesize[3]+1]) >> 2; \ } else if (hsub || vsub) { \ alpha_h = hsub && k+1 < src_wp ? \ (da[0] + da[1]) >> 1 : da[0]; \ - alpha_v = vsub && j+1 < src_hp ? \ + alpha_v = vsub && j+1 < src_hp && j+1 < slice_end ? \ (da[0] + da[dst->linesize[3]]) >> 1 : da[0]; \ alpha_d = (alpha_v + alpha_h) >> 1; \ } else \ -- 2.31.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".