[FFmpeg-devel] [PATCH 02/10] avfilter/signalstats: remove pointless sub filter init system

Clément Bœsch u at pkh.me
Sun Nov 23 00:38:58 CET 2014


---
 libavfilter/vf_signalstats.c | 57 ++++++++++++--------------------------------
 1 file changed, 15 insertions(+), 42 deletions(-)

diff --git a/libavfilter/vf_signalstats.c b/libavfilter/vf_signalstats.c
index 8c6a2d6..b5b45b8 100644
--- a/libavfilter/vf_signalstats.c
+++ b/libavfilter/vf_signalstats.c
@@ -43,7 +43,6 @@ typedef struct {
     enum FilterMode outfilter;
     int filters;
     AVFrame *frame_prev;
-    char *vrep_line;
     uint8_t rgba_color[4];
     int yuv_color[3];
 } SignalstatsContext;
@@ -88,7 +87,6 @@ static av_cold void uninit(AVFilterContext *ctx)
 {
     SignalstatsContext *s = ctx->priv;
     av_frame_free(&s->frame_prev);
-    av_freep(&s->vrep_line);
 }
 
 static int query_formats(AVFilterContext *ctx)
@@ -124,12 +122,6 @@ static int config_props(AVFilterLink *outlink)
     s->fs = inlink->w * inlink->h;
     s->cfs = s->chromaw * s->chromah;
 
-    if (s->filters & 1<<FILTER_VREP) {
-        s->vrep_line = av_malloc(inlink->h * sizeof(*s->vrep_line));
-        if (!s->vrep_line)
-            return AVERROR(ENOMEM);
-    }
-
     return 0;
 }
 
@@ -209,49 +201,34 @@ filter_tout_outlier(p[(y-j) * lw + x + i], \
 
 #define VREP_START 4
 
-static void filter_init_vrep(SignalstatsContext *s, const AVFrame *p, int w, int h)
-{
-    int i, y;
-    int lw = p->linesize[0];
-
-    for (y = VREP_START; y < h; y++) {
-        int totdiff = 0;
-        int y2lw = (y - VREP_START) * lw;
-        int ylw = y * lw;
-
-        for (i = 0; i < w; i++)
-            totdiff += abs(p->data[0][y2lw + i] - p->data[0][ylw + i]);
-
-        /* this value should be definable */
-        s->vrep_line[y] = totdiff < w;
-    }
-}
-
 static int filter_vrep(SignalstatsContext *s, const AVFrame *in, AVFrame *out, int y, int w, int h)
 {
-    int x, score = 0;
+    const uint8_t *p = in->data[0];
+    const int lw = in->linesize[0];
+    int x, score, totdiff = 0;
+    const int y2lw = (y - VREP_START) * lw;
+    const int ylw  =  y               * lw;
 
     if (y < VREP_START)
         return 0;
 
-    for (x = 0; x < w; x++) {
-        if (s->vrep_line[y]) {
-            score++;
-            if (out)
-                burn_frame(s, out, x, y);
-        }
-    }
+    for (x = 0; x < w; x++)
+        totdiff += abs(p[y2lw + x] - p[ylw + x]);
+
+    score = (totdiff < w) * w;
+    if (score && out)
+        for (x = 0; x < w; x++)
+            burn_frame(s, out, x, y);
     return score;
 }
 
 static const struct {
     const char *name;
-    void (*init)(SignalstatsContext *s, const AVFrame *p, int w, int h);
     int (*process)(SignalstatsContext *s, const AVFrame *in, AVFrame *out, int y, int w, int h);
 } filters_def[] = {
-    {"TOUT", NULL,              filter_tout},
-    {"VREP", filter_init_vrep,  filter_vrep},
-    {"BRNG", NULL,              filter_brng},
+    {"TOUT", filter_tout},
+    {"VREP", filter_vrep},
+    {"BRNG", filter_brng},
     {NULL}
 };
 
@@ -299,10 +276,6 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
         av_frame_make_writable(out);
     }
 
-    for (fil = 0; fil < FILT_NUMB; fil ++)
-        if ((s->filters & 1<<fil) && filters_def[fil].init)
-            filters_def[fil].init(s, in, link->w, link->h);
-
     // Calculate luma histogram and difference with previous frame or field.
     for (j = 0; j < link->h; j++) {
         for (i = 0; i < link->w; i++) {
-- 
2.1.3



More information about the ffmpeg-devel mailing list