Browse code

avfilter/avf_avectorscope: stop making output fully transparent

Paul B Mahol authored on 2015/08/07 23:44:19
Showing 2 changed files
... ...
@@ -11696,13 +11696,17 @@ Set the output frame rate. Default value is @code{25}.
11696 11696
 @item rc
11697 11697
 @item gc
11698 11698
 @item bc
11699
-Specify the red, green and blue contrast. Default values are @code{40}, @code{160} and @code{80}.
11699
+@item ac
11700
+Specify the red, green, blue and alpha contrast. Default values are @code{40},
11701
+@code{160}, @code{80} and @code{255}.
11700 11702
 Allowed range is @code{[0, 255]}.
11701 11703
 
11702 11704
 @item rf
11703 11705
 @item gf
11704 11706
 @item bf
11705
-Specify the red, green and blue fade. Default values are @code{15}, @code{10} and @code{5}.
11707
+@item af
11708
+Specify the red, green, blue and alpha fade. Default values are @code{15},
11709
+@code{10}, @code{5} and @code{5}.
11706 11710
 Allowed range is @code{[0, 255]}.
11707 11711
 
11708 11712
 @item zoom
... ...
@@ -45,8 +45,8 @@ typedef struct AudioVectorScopeContext {
45 45
     int w, h;
46 46
     int hw, hh;
47 47
     int mode;
48
-    int contrast[3];
49
-    int fade[3];
48
+    int contrast[4];
49
+    int fade[4];
50 50
     double zoom;
51 51
     AVRational frame_rate;
52 52
 } AudioVectorScopeContext;
... ...
@@ -63,13 +63,15 @@ static const AVOption avectorscope_options[] = {
63 63
     { "r",    "set video rate", OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str="25"}, 0, 0, FLAGS },
64 64
     { "size", "set video size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str="400x400"}, 0, 0, FLAGS },
65 65
     { "s",    "set video size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str="400x400"}, 0, 0, FLAGS },
66
-    { "rc", "set red contrast",   OFFSET(contrast[0]), AV_OPT_TYPE_INT, {.i64=40}, 0, 255, FLAGS },
66
+    { "rc", "set red contrast",   OFFSET(contrast[0]), AV_OPT_TYPE_INT, {.i64=40},  0, 255, FLAGS },
67 67
     { "gc", "set green contrast", OFFSET(contrast[1]), AV_OPT_TYPE_INT, {.i64=160}, 0, 255, FLAGS },
68
-    { "bc", "set blue contrast",  OFFSET(contrast[2]), AV_OPT_TYPE_INT, {.i64=80}, 0, 255, FLAGS },
68
+    { "bc", "set blue contrast",  OFFSET(contrast[2]), AV_OPT_TYPE_INT, {.i64=80},  0, 255, FLAGS },
69
+    { "ac", "set alpha contrast", OFFSET(contrast[3]), AV_OPT_TYPE_INT, {.i64=255}, 0, 255, FLAGS },
69 70
     { "rf", "set red fade",       OFFSET(fade[0]), AV_OPT_TYPE_INT, {.i64=15}, 0, 255, FLAGS },
70 71
     { "gf", "set green fade",     OFFSET(fade[1]), AV_OPT_TYPE_INT, {.i64=10}, 0, 255, FLAGS },
71
-    { "bf", "set blue fade",      OFFSET(fade[2]), AV_OPT_TYPE_INT, {.i64=5}, 0, 255, FLAGS },
72
-    { "zoom", "set zoom factor",  OFFSET(zoom), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 1, 10, FLAGS },
72
+    { "bf", "set blue fade",      OFFSET(fade[2]), AV_OPT_TYPE_INT, {.i64=5},  0, 255, FLAGS },
73
+    { "af", "set alpha fade",     OFFSET(fade[3]), AV_OPT_TYPE_INT, {.i64=5},  0, 255, FLAGS },
74
+    { "zoom", "set zoom factor",  OFFSET(zoom), AV_OPT_TYPE_DOUBLE, {.dbl=1},  1, 10, FLAGS },
73 75
     { NULL }
74 76
 };
75 77
 
... ...
@@ -92,6 +94,7 @@ static void draw_dot(AudioVectorScopeContext *s, unsigned x, unsigned y)
92 92
     dst[0] = FFMIN(dst[0] + s->contrast[0], 255);
93 93
     dst[1] = FFMIN(dst[1] + s->contrast[1], 255);
94 94
     dst[2] = FFMIN(dst[2] + s->contrast[2], 255);
95
+    dst[3] = FFMIN(dst[3] + s->contrast[3], 255);
95 96
 }
96 97
 
97 98
 static void fade(AudioVectorScopeContext *s)
... ...
@@ -106,6 +109,7 @@ static void fade(AudioVectorScopeContext *s)
106 106
                 d[j+0] = FFMAX(d[j+0] - s->fade[0], 0);
107 107
                 d[j+1] = FFMAX(d[j+1] - s->fade[1], 0);
108 108
                 d[j+2] = FFMAX(d[j+2] - s->fade[2], 0);
109
+                d[j+3] = FFMAX(d[j+3] - s->fade[3], 0);
109 110
             }
110 111
             d += linesize;
111 112
         }