avfilter:audio: fix shadowed AVFrame *out
[ffmpeg.git] / libavfilter / f_drawgraph.c
index d8fe2aa..2b9340b 100644 (file)
@@ -51,13 +51,13 @@ typedef struct DrawGraphContext {
 
 static const AVOption drawgraph_options[] = {
     { "m1", "set 1st metadata key", OFFSET(key[0]), AV_OPT_TYPE_STRING, {.str=""}, CHAR_MIN, CHAR_MAX, FLAGS },
-    { "fg1", "set 1st foreground color expression", OFFSET(fg_str[0]), AV_OPT_TYPE_STRING, {.str="0xff0000"}, CHAR_MIN, CHAR_MAX, FLAGS },
+    { "fg1", "set 1st foreground color expression", OFFSET(fg_str[0]), AV_OPT_TYPE_STRING, {.str="0xffff0000"}, CHAR_MIN, CHAR_MAX, FLAGS },
     { "m2", "set 2nd metadata key", OFFSET(key[1]), AV_OPT_TYPE_STRING, {.str=""}, CHAR_MIN, CHAR_MAX, FLAGS },
-    { "fg2", "set 2nd foreground color expression", OFFSET(fg_str[1]), AV_OPT_TYPE_STRING, {.str="0x00ff00"}, CHAR_MIN, CHAR_MAX, FLAGS },
+    { "fg2", "set 2nd foreground color expression", OFFSET(fg_str[1]), AV_OPT_TYPE_STRING, {.str="0xff00ff00"}, CHAR_MIN, CHAR_MAX, FLAGS },
     { "m3", "set 3rd metadata key", OFFSET(key[2]), AV_OPT_TYPE_STRING, {.str=""}, CHAR_MIN, CHAR_MAX, FLAGS },
-    { "fg3", "set 3rd foreground color expression", OFFSET(fg_str[2]), AV_OPT_TYPE_STRING, {.str="0xff00ff"}, CHAR_MIN, CHAR_MAX, FLAGS },
+    { "fg3", "set 3rd foreground color expression", OFFSET(fg_str[2]), AV_OPT_TYPE_STRING, {.str="0xffff00ff"}, CHAR_MIN, CHAR_MAX, FLAGS },
     { "m4", "set 4th metadata key", OFFSET(key[3]), AV_OPT_TYPE_STRING, {.str=""}, CHAR_MIN, CHAR_MAX, FLAGS },
-    { "fg4", "set 4th foreground color expression", OFFSET(fg_str[3]), AV_OPT_TYPE_STRING, {.str="0xffff00"}, CHAR_MIN, CHAR_MAX, FLAGS },
+    { "fg4", "set 4th foreground color expression", OFFSET(fg_str[3]), AV_OPT_TYPE_STRING, {.str="0xffffff00"}, CHAR_MIN, CHAR_MAX, FLAGS },
     { "bg", "set background color", OFFSET(bg), AV_OPT_TYPE_COLOR, {.str="white"}, CHAR_MIN, CHAR_MAX, FLAGS },
     { "min", "set minimal value", OFFSET(min), AV_OPT_TYPE_FLOAT, {.dbl=-1.}, INT_MIN, INT_MAX, FLAGS },
     { "max", "set maximal value", OFFSET(max), AV_OPT_TYPE_FLOAT, {.dbl=1.}, INT_MIN, INT_MAX, FLAGS },
@@ -65,10 +65,11 @@ static const AVOption drawgraph_options[] = {
         {"bar", "draw bars", OFFSET(mode), AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "mode"},
         {"dot", "draw dots", OFFSET(mode), AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "mode"},
         {"line", "draw lines", OFFSET(mode), AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "mode"},
-    { "slide", "set slide mode", OFFSET(slide), AV_OPT_TYPE_INT, {.i64=0}, 0, 2, FLAGS, "slide" },
+    { "slide", "set slide mode", OFFSET(slide), AV_OPT_TYPE_INT, {.i64=0}, 0, 3, FLAGS, "slide" },
         {"frame", "draw new frames", OFFSET(slide), AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "slide"},
         {"replace", "replace old columns with new", OFFSET(slide), AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "slide"},
         {"scroll", "scroll from right to left", OFFSET(slide), AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "slide"},
+        {"rscroll", "scroll from left to right", OFFSET(slide), AV_OPT_TYPE_CONST, {.i64=3}, 0, 0, FLAGS, "slide"},
     { "size", "set graph size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str="900x256"}, 0, 0, FLAGS },
     { "s", "set graph size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str="900x256"}, 0, 0, FLAGS },
     { NULL }
@@ -161,7 +162,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
 
     for (i = 0; i < 4; i++) {
         double values[VAR_VARS_NB];
-        int j, y, x, fg, bg, old;
+        int j, y, x, old;
+        uint32_t fg, bg;
         float vf;
 
         e = av_dict_get(metadata, s->key[i], NULL, 0);
@@ -180,7 +182,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
         fg = av_expr_eval(s->fg_expr[i], values, NULL);
         bg = AV_RN32(s->bg);
 
-        if (i == 0 && s->x >= outlink->w) {
+        if (i == 0 && (s->x >= outlink->w || s->slide == 3)) {
             if (s->slide == 0 || s->slide == 1)
                 s->x = 0;
 
@@ -191,6 +193,13 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
                             out->data[0] + j * out->linesize[0] + 4,
                             (outlink->w - 1) * 4);
                 }
+            } else if (s->slide == 3) {
+                s->x = 0;
+                for (j = 0; j < outlink->h; j++) {
+                    memmove(out->data[0] + j * out->linesize[0] + 4,
+                            out->data[0] + j * out->linesize[0],
+                            (outlink->w - 1) * 4);
+                }
             } else if (s->slide == 0) {
                 clear_image(s, out, outlink);
             }
@@ -201,7 +210,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
 
         switch (s->mode) {
         case 0:
-            if (i == 0 && (s->slide == 1 || s->slide == 2))
+            if (i == 0 && (s->slide > 0))
                 for (j = 0; j < outlink->h; j++)
                     draw_dot(bg, x, j, out);
 
@@ -217,7 +226,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
             }
             break;
         case 1:
-            if (i == 0 && (s->slide == 1 || s->slide == 2))
+            if (i == 0 && (s->slide > 0))
                 for (j = 0; j < outlink->h; j++)
                     draw_dot(bg, x, j, out);
             draw_dot(fg, x, y, out);
@@ -228,7 +237,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
                 s->prev_y[i] = y;
             }
 
-            if (i == 0 && (s->slide == 1 || s->slide == 2)) {
+            if (i == 0 && (s->slide > 0)) {
                 for (j = 0; j < y; j++)
                     draw_dot(bg, x, j, out);
                 for (j = outlink->h - 1; j > y; j--)