[FFmpeg-devel] [PATCH 2/4] lavfi/delogo: remember left and right samples when interpolating
Stefano Sabatini
stefasab at gmail.com
Fri Jul 5 11:20:08 CEST 2013
On date Friday 2013-07-05 10:32:57 +0200, Jean Delvare encoded:
> The left and right samples are the same for the whole line, so store
> their values and don't recompute them for every iteration of "y".
>
> This simple optimization results in a speed improvement between 15%
> and 20% in my tests (depending on the logo geometry.)
>
> Result is obviously the same.
>
> Signed-off-by: Jean Delvare <khali at linux-fr.org>
> ---
> libavfilter/vf_delogo.c | 16 ++++++++++------
> 1 file changed, 10 insertions(+), 6 deletions(-)
>
> --- ffmpeg.orig/libavfilter/vf_delogo.c 2013-07-05 10:09:42.129990158 +0200
> +++ ffmpeg/libavfilter/vf_delogo.c 2013-07-05 10:18:39.963903236 +0200
> @@ -65,6 +65,7 @@ static void apply_delogo(uint8_t *dst, i
> uint8_t *xdst, *xsrc;
>
> uint8_t *topleft, *botleft, *topright;
> + unsigned int left_sample, right_sample;
> int xclipl, xclipr, yclipt, yclipb;
> int logo_x1, logo_x2, logo_y1, logo_y2;
>
> @@ -89,6 +90,13 @@ static void apply_delogo(uint8_t *dst, i
> src += (logo_y1 + 1) * src_linesize;
>
> for (y = logo_y1+1; y < logo_y2-1; y++) {
> + left_sample = topleft[src_linesize*(y-logo_y1)] +
> + topleft[src_linesize*(y-logo_y1-1)] +
> + topleft[src_linesize*(y-logo_y1+1)];
> + right_sample = topright[src_linesize*(y-logo_y1)] +
> + topright[src_linesize*(y-logo_y1-1)] +
> + topright[src_linesize*(y-logo_y1+1)];
> +
> for (x = logo_x1+1,
> xdst = dst+logo_x1+1,
> xsrc = src+logo_x1+1; x < logo_x2-1; x++, xdst++, xsrc++) {
> @@ -100,13 +108,9 @@ static void apply_delogo(uint8_t *dst, i
> weightb = (uint64_t)(x-logo_x1) * (logo_x2-1-x) * (y-logo_y1) * sar.num;
>
> interp =
> - (topleft[src_linesize*(y-logo_y1)] +
> - topleft[src_linesize*(y-logo_y1-1)] +
> - topleft[src_linesize*(y-logo_y1+1)]) * weightl
> + left_sample * weightl
> +
> - (topright[src_linesize*(y-logo_y1)] +
> - topright[src_linesize*(y-logo_y1-1)] +
> - topright[src_linesize*(y-logo_y1+1)]) * weightr
> + right_sample * weightr
> +
> (topleft[x-logo_x1] +
> topleft[x-logo_x1-1] +
LGTM and nice, thanks.
--
FFmpeg = Fanciful Fabulous Mind-dumbing Practical Ermetic Gargoyle
More information about the ffmpeg-devel
mailing list