aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2015-09-28 10:18:06 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2015-09-28 13:23:47 +0200
commit3e5b02bdb8e5b35564893e6618c217e4c949c743 (patch)
tree56ba072debba714be493f8921c96665b2e23d0bb
parent578f721f5dcf5577e0b06447082497319ccb7a39 (diff)
downloadffmpeg-3e5b02bdb8e5b35564893e6618c217e4c949c743.tar.gz
avfilter/delogo: Fix show option when band is small
The code assumed that the outermost interpolated pixels were always in the fuzzy area defined by the band option. However if the band value is small, there may be no fuzzy area on a given plane. In that case, option show did not work, no rectangle was drawn (or only on the luma plane, depending on the band value and chroma plane subsampling factors.) Fix the problem by not making any assumption on where the outermost interpolated pixels will be. The new code was verified to produce the same result as the original code when the band value is not small. Signed-off-by: Jean Delvare <jdelvare@suse.de> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavfilter/vf_delogo.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libavfilter/vf_delogo.c b/libavfilter/vf_delogo.c
index 0178ee0413..3258493236 100644
--- a/libavfilter/vf_delogo.c
+++ b/libavfilter/vf_delogo.c
@@ -1,7 +1,7 @@
/*
* Copyright (c) 2002 Jindrich Makovicka <makovick@gmail.com>
* Copyright (c) 2011 Stefano Sabatini
- * Copyright (c) 2013 Jean Delvare <jdelvare@suse.com>
+ * Copyright (c) 2013, 2015 Jean Delvare <jdelvare@suse.com>
*
* This file is part of FFmpeg.
*
@@ -101,6 +101,12 @@ static void apply_delogo(uint8_t *dst, int dst_linesize,
xdst = dst+logo_x1+1,
xsrc = src+logo_x1+1; x < logo_x2-1; x++, xdst++, xsrc++) {
+ if (show && (y == logo_y+1 || y == logo_y+logo_h-2 ||
+ x == logo_x+1 || x == logo_x+logo_w-2)) {
+ *xdst = 0;
+ continue;
+ }
+
/* Weighted interpolation based on relative distances, taking SAR into account */
weightl = (uint64_t) (logo_x2-1-x) * (y-logo_y1) * (logo_y2-1-y) * sar.den;
weightr = (uint64_t)(x-logo_x1) * (y-logo_y1) * (logo_y2-1-y) * sar.den;
@@ -138,8 +144,6 @@ static void apply_delogo(uint8_t *dst, int dst_linesize,
dist = FFMAX(dist, y-(logo_y+logo_h-1-band));
*xdst = (*xsrc*dist + interp*(band-dist))/band;
- if (show && (dist == band-1))
- *xdst = 0;
}
}