lavfi/unsharp: add check on matrix x/y size values oddity
This commit is contained in:
parent
b8bb661dab
commit
ef4c71e8f8
@ -4970,13 +4970,13 @@ A description of the accepted options follows.
|
|||||||
@table @option
|
@table @option
|
||||||
@item luma_msize_x, lx
|
@item luma_msize_x, lx
|
||||||
@item chroma_msize_x, cx
|
@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.
|
between 3 and 63, default value is 5.
|
||||||
|
|
||||||
@item luma_msize_y, ly
|
@item luma_msize_y, ly
|
||||||
@item chroma_msize_y, cy
|
@item chroma_msize_y, cy
|
||||||
Set the luma/chroma matrix vertical size. It can be an integer between
|
Set the luma/chroma matrix vertical size. It must be an odd integer
|
||||||
3 and 63, default value is 5.
|
between 3 and 63, default value is 5.
|
||||||
|
|
||||||
@item luma_amount, la
|
@item luma_amount, la
|
||||||
@item chroma_amount, ca
|
@item chroma_amount, ca
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
#define LIBAVFILTER_VERSION_MAJOR 3
|
#define LIBAVFILTER_VERSION_MAJOR 3
|
||||||
#define LIBAVFILTER_VERSION_MINOR 38
|
#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, \
|
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||||||
LIBAVFILTER_VERSION_MINOR, \
|
LIBAVFILTER_VERSION_MINOR, \
|
||||||
|
@ -195,11 +195,18 @@ static int query_formats(AVFilterContext *ctx)
|
|||||||
return 0;
|
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;
|
int z;
|
||||||
const char *effect;
|
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";
|
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",
|
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++)
|
for (z = 0; z < 2 * fp->steps_y; z++)
|
||||||
fp->sc[z] = av_malloc(sizeof(*(fp->sc[z])) * (width + 2 * fp->steps_x));
|
fp->sc[z] = av_malloc(sizeof(*(fp->sc[z])) * (width + 2 * fp->steps_x));
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int config_props(AVFilterLink *link)
|
static int config_props(AVFilterLink *link)
|
||||||
{
|
{
|
||||||
UnsharpContext *unsharp = link->dst->priv;
|
UnsharpContext *unsharp = link->dst->priv;
|
||||||
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(link->format);
|
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(link->format);
|
||||||
|
int ret;
|
||||||
|
|
||||||
unsharp->hsub = desc->log2_chroma_w;
|
unsharp->hsub = desc->log2_chroma_w;
|
||||||
unsharp->vsub = desc->log2_chroma_h;
|
unsharp->vsub = desc->log2_chroma_h;
|
||||||
|
|
||||||
init_filter_param(link->dst, &unsharp->luma, "luma", link->w);
|
ret = init_filter_param(link->dst, &unsharp->luma, "luma", link->w);
|
||||||
init_filter_param(link->dst, &unsharp->chroma, "chroma", SHIFTUP(link->w, unsharp->hsub));
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user