[FFmpeg-devel] [PATCH 2/2 v2] delogo: Take SAR into account

Stefano Sabatini stefasab at gmail.com
Fri Jun 28 00:51:55 CEST 2013


Note:
lavfi/delogo: take SAR into account

as subject would be more consistent with (my own) conventions.

On date Wednesday 2013-06-26 14:57:34 +0200, Jean Delvare encoded:
> When interpolating, weights are based on relative distances, which
> assume square pixels. If a non-1:1 sample aspect ratio is used, it
> should be taken into account when comparing distances, because the
> human eye and brain care about the picture as it is displayed, not
> stored.
> 
> Signed-off-by: Jean Delvare <khali at linux-fr.org>
> ---
> No functional change since v1, but rebasing was needed.
> 
>  libavfilter/version.h   |    2 +-
>  libavfilter/vf_delogo.c |   14 ++++++++------
>  2 files changed, 9 insertions(+), 7 deletions(-)
> 
> --- ffmpeg.orig/libavfilter/vf_delogo.c	2013-06-25 21:56:27.049663266 +0200
> +++ ffmpeg/libavfilter/vf_delogo.c	2013-06-25 22:00:58.615920845 +0200
> @@ -56,7 +56,7 @@
>   */
>  static void apply_delogo(uint8_t *dst, int dst_linesize,
>                           uint8_t *src, int src_linesize,
> -                         int w, int h,
> +                         int w, int h, AVRational sar,
>                           int logo_x, int logo_y, int logo_w, int logo_h,
>                           int band, int show, int direct)
>  {
> @@ -67,6 +67,7 @@ static void apply_delogo(uint8_t *dst, i
>      uint8_t *topleft, *botleft, *topright;
>      int xclipl, xclipr, yclipt, yclipb;
>      int logo_x1, logo_x2, logo_y1, logo_y2;

> +    int sar_num = sar.num ? : 1;

GNU extension, check:
http://en.wikipedia.org/wiki/%3F:#C

Potentially non portable.

Also you can modify the sar variable in place, and avoid the
additional temporary sar_num.

>  
>      xclipl = FFMAX(-logo_x, 0);
>      xclipr = FFMAX(logo_x+logo_w-w, 0);
> @@ -93,11 +94,11 @@ static void apply_delogo(uint8_t *dst, i
>               xdst = dst+logo_x1+1,
>               xsrc = src+logo_x1+1; x < logo_x2-1; x++, xdst++, xsrc++) {
>  
> -            /* Weighted interpolation based on relative distances */
> -            weightl = (uint64_t)              (logo_x2-1-x) * (y-logo_y1) * (logo_y2-1-y);
> -            weightr = (uint64_t)(x-logo_x1)                 * (y-logo_y1) * (logo_y2-1-y);
> -            weightt = (uint64_t)(x-logo_x1) * (logo_x2-1-x)               * (logo_y2-1-y);
> -            weightb = (uint64_t)(x-logo_x1) * (logo_x2-1-x) * (y-logo_y1);
> +            /* 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;

I'd expect
(logo_x2-1-x)*sar.num * (y-logo_y1)*sar.den * (logo_y2-1-y)*sar.den

but maybe I'm missing something...

> +            weightr = (uint64_t)(x-logo_x1)                 * (y-logo_y1) * (logo_y2-1-y) * sar.den;
> +            weightt = (uint64_t)(x-logo_x1) * (logo_x2-1-x)               * (logo_y2-1-y) * sar_num;
> +            weightb = (uint64_t)(x-logo_x1) * (logo_x2-1-x) * (y-logo_y1)                 * sar_num;
>  
>              interp =
>                  (topleft[src_linesize*(y-logo_y  -yclipt)]   +
> @@ -239,6 +240,7 @@ static int filter_frame(AVFilterLink *in
>                       in ->data[plane], in ->linesize[plane],
>                       FF_CEIL_RSHIFT(inlink->w, hsub),
>                       FF_CEIL_RSHIFT(inlink->h, vsub),
> +                     in->sample_aspect_ratio,
>                       s->x>>hsub, s->y>>vsub,
>                       FF_CEIL_RSHIFT(s->w, hsub),
>                       FF_CEIL_RSHIFT(s->h, vsub),
> --- ffmpeg.orig/libavfilter/version.h	2013-06-25 18:13:56.702312485 +0200
> +++ ffmpeg/libavfilter/version.h	2013-06-25 21:59:34.304666042 +0200
> @@ -31,7 +31,7 @@
>  
>  #define LIBAVFILTER_VERSION_MAJOR  3
>  #define LIBAVFILTER_VERSION_MINOR  77
> -#define LIBAVFILTER_VERSION_MICRO 101
> +#define LIBAVFILTER_VERSION_MICRO 102

No need to bump version for this.
-- 
FFmpeg = Fierce & Fancy Most Perfectionist Elected Game


More information about the ffmpeg-devel mailing list