[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