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

Stefano Sabatini git at videolan.org
Sun Feb 17 11:53:16 CET 2013


ffmpeg | branch: master | Stefano Sabatini <stefasab at gmail.com> | Fri Feb 15 14:18:02 2013 +0100| [ef4c71e8f83a46fb31a11f0a066efb90821c579f] | committer: Stefano Sabatini

lavfi/unsharp: add check on matrix x/y size values oddity

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ef4c71e8f83a46fb31a11f0a066efb90821c579f
---

 doc/filters.texi         |    6 +++---
 libavfilter/version.h    |    2 +-
 libavfilter/vf_unsharp.c |   20 +++++++++++++++++---
 3 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index 4c85d71..b7f7e7d 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -4970,13 +4970,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/version.h b/libavfilter/version.h
index dbcf76e..8747e0f 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -30,7 +30,7 @@
 
 #define LIBAVFILTER_VERSION_MAJOR  3
 #define LIBAVFILTER_VERSION_MINOR  38
-#define LIBAVFILTER_VERSION_MICRO 100
+#define LIBAVFILTER_VERSION_MICRO 101
 
 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
                                                LIBAVFILTER_VERSION_MINOR, \
diff --git a/libavfilter/vf_unsharp.c b/libavfilter/vf_unsharp.c
index 2170d65..53de99f 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 & fp->msize_y & 1)) {
+        av_log(ctx, AV_LOG_ERROR,
+               "Invalid even size for %s matrix size %dx%d\n",
+               effect_type, fp->msize_x, fp->msize_y);
+        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;
 }



More information about the ffmpeg-cvslog mailing list