[FFmpeg-devel] [PATCH] lavfi/unsharp: add check on matrix x/y size values oddity

Nicolas George nicolas.george at normalesup.org
Sat Feb 16 10:48:09 CET 2013


Le septidi 27 pluviôse, an CCXXI, Stefano Sabatini a écrit :
> TODO: bump micro
> ---
>  doc/filters.texi         |    6 +++---
>  libavfilter/vf_unsharp.c |   20 +++++++++++++++++---
>  2 files changed, 20 insertions(+), 6 deletions(-)
> 
> diff --git a/doc/filters.texi b/doc/filters.texi
> index d2f2b2e..1527a32 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -4926,13 +4926,13 @@ A description of the accepted options follows.
>  @table @option
>  @item luma_msize_x, lx
>  @item chroma_msize_x, cx
> -Set the luma/chroma matrix horizontal size. It can be an integer
> +Set the luma/chroma matrix horizontal size. It must be an odd integer
>  between 3 and 63, default value is 5.
>  
>  @item luma_msize_y, ly
>  @item chroma_msize_y, cy
> -Set the luma/chroma matrix vertical size. It can be an integer between
> -3 and 63, default value is 5.
> +Set the luma/chroma matrix vertical size. It must be an odd integer
> +between 3 and 63, default value is 5.
>  
>  @item luma_amount, la
>  @item chroma_amount, ca
> diff --git a/libavfilter/vf_unsharp.c b/libavfilter/vf_unsharp.c
> index 9fd0588..867e2a0 100644
> --- a/libavfilter/vf_unsharp.c
> +++ b/libavfilter/vf_unsharp.c
> @@ -195,11 +195,18 @@ static int query_formats(AVFilterContext *ctx)
>      return 0;
>  }
>  
> -static void init_filter_param(AVFilterContext *ctx, FilterParam *fp, const char *effect_type, int width)
> +static int init_filter_param(AVFilterContext *ctx, FilterParam *fp, const char *effect_type, int width)
>  {
>      int z;
>      const char *effect;
>  
> +    if (!(fp->msize_x & 1) || !(fp->msize_y & 1)) {

It could be written if (!(fp->msize_x & fp->msize_y & 1)).

> +        av_log(ctx, AV_LOG_ERROR,
> +               "Invalid even size for %s matrix size x value '%d' or y value '%d'\n",
> +               effect_type, fp->msize_x, fp->msize_y);

"Invalid even size for %s matrix size %d x %d\n" ?

> +        return AVERROR(EINVAL);
> +    }
> +
>      effect = fp->amount == 0 ? "none" : fp->amount < 0 ? "blur" : "sharpen";
>  
>      av_log(ctx, AV_LOG_VERBOSE, "effect:%s type:%s msize_x:%d msize_y:%d amount:%0.2f\n",
> @@ -207,18 +214,25 @@ static void init_filter_param(AVFilterContext *ctx, FilterParam *fp, const char
>  
>      for (z = 0; z < 2 * fp->steps_y; z++)
>          fp->sc[z] = av_malloc(sizeof(*(fp->sc[z])) * (width + 2 * fp->steps_x));
> +
> +    return 0;
>  }
>  
>  static int config_props(AVFilterLink *link)
>  {
>      UnsharpContext *unsharp = link->dst->priv;
>      const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(link->format);
> +    int ret;
>  
>      unsharp->hsub = desc->log2_chroma_w;
>      unsharp->vsub = desc->log2_chroma_h;
>  
> -    init_filter_param(link->dst, &unsharp->luma,   "luma",   link->w);
> -    init_filter_param(link->dst, &unsharp->chroma, "chroma", SHIFTUP(link->w, unsharp->hsub));
> +    ret = init_filter_param(link->dst, &unsharp->luma,   "luma",   link->w);
> +    if (ret < 0)
> +        return ret;
> +    ret = init_filter_param(link->dst, &unsharp->chroma, "chroma", SHIFTUP(link->w, unsharp->hsub));
> +    if (ret < 0)
> +        return ret;
>  
>      return 0;
>  }

LGTM, thanks.

Regards,

-- 
  Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20130216/cce2087e/attachment.asc>


More information about the ffmpeg-devel mailing list