From 25bb72af621c4cfe90b0856e948a1301630b42b8 Mon Sep 17 00:00:00 2001 From: Limin Wang Date: Mon, 30 Dec 2019 19:09:57 +0800 Subject: avfilter/vf_signalstats: make the alloc array used for any bit depth Signed-off-by: Limin Wang --- libavfilter/vf_signalstats.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'libavfilter') diff --git a/libavfilter/vf_signalstats.c b/libavfilter/vf_signalstats.c index 7dadff45b3..8b2a9ca7c2 100644 --- a/libavfilter/vf_signalstats.c +++ b/libavfilter/vf_signalstats.c @@ -168,7 +168,6 @@ static int config_output(AVFilterLink *outlink) s->vsub = desc->log2_chroma_h; s->depth = desc->comp[0].depth; s->maxsize = 1 << s->depth; - if (s->depth > 8) { s->histy = av_malloc_array(s->maxsize, sizeof(*s->histy)); s->histu = av_malloc_array(s->maxsize, sizeof(*s->histu)); s->histv = av_malloc_array(s->maxsize, sizeof(*s->histv)); @@ -176,7 +175,6 @@ static int config_output(AVFilterLink *outlink) if (!s->histy || !s->histu || !s->histv || !s->histsat) return AVERROR(ENOMEM); - } outlink->w = inlink->w; outlink->h = inlink->h; @@ -464,8 +462,6 @@ static const struct { {NULL} }; -#define DEPTH 256 - static int compute_sat_hue_metrics8(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) { int i, j; @@ -559,11 +555,11 @@ static int filter_frame8(AVFilterLink *link, AVFrame *in) pw = 0, cpw = 0; // prev int fil; char metabuf[128]; - unsigned int histy[DEPTH] = {0}, - histu[DEPTH] = {0}, - histv[DEPTH] = {0}, + unsigned int *histy = s->histy, + *histu = s->histu, + *histv = s->histv, histhue[360] = {0}, - histsat[DEPTH] = {0}; // limited to 8 bit data. + *histsat = s->histsat; int miny = -1, minu = -1, minv = -1; int maxy = -1, maxu = -1, maxv = -1; int lowy = -1, lowu = -1, lowv = -1; @@ -607,6 +603,7 @@ static int filter_frame8(AVFilterLink *link, AVFrame *in) NULL, FFMIN(s->chromah, ff_filter_get_nb_threads(ctx))); // Calculate luma histogram and difference with previous frame or field. + memset(s->histy, 0, s->maxsize * sizeof(*s->histy)); for (j = 0; j < link->h; j++) { for (i = 0; i < link->w; i++) { const int yuv = in->data[0][w + i]; @@ -620,6 +617,9 @@ static int filter_frame8(AVFilterLink *link, AVFrame *in) } // Calculate chroma histogram and difference with previous frame or field. + memset(s->histu, 0, s->maxsize * sizeof(*s->histu)); + memset(s->histv, 0, s->maxsize * sizeof(*s->histv)); + memset(s->histsat, 0, s->maxsize * sizeof(*s->histsat)); for (j = 0; j < s->chromah; j++) { for (i = 0; i < s->chromaw; i++) { const int yuvu = in->data[1][cw+i]; @@ -664,7 +664,7 @@ static int filter_frame8(AVFilterLink *link, AVFrame *in) chighp = lrint(s->cfs * 90 / 100.); accy = accu = accv = accsat = 0; - for (fil = 0; fil < DEPTH; fil++) { + for (fil = 0; fil < s->maxsize; fil++) { if (miny < 0 && histy[fil]) miny = fil; if (minu < 0 && histu[fil]) minu = fil; if (minv < 0 && histv[fil]) minv = fil; -- cgit v1.2.3