[FFmpeg-cvslog] avfilter/vf_signalstats: make the alloc array used for any bit depth
Limin Wang
git at videolan.org
Sun May 10 17:38:08 EEST 2020
ffmpeg | branch: master | Limin Wang <lance.lmwang at gmail.com> | Mon Dec 30 19:09:57 2019 +0800| [25bb72af621c4cfe90b0856e948a1301630b42b8] | committer: Limin Wang
avfilter/vf_signalstats: make the alloc array used for any bit depth
Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=25bb72af621c4cfe90b0856e948a1301630b42b8
---
libavfilter/vf_signalstats.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
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;
More information about the ffmpeg-cvslog
mailing list