avfilter/vf_mix: make setting weights more user friendly
authorPaul B Mahol <onemda@gmail.com>
Sun, 29 Apr 2018 17:27:15 +0000 (19:27 +0200)
committerPaul B Mahol <onemda@gmail.com>
Sun, 29 Apr 2018 17:27:15 +0000 (19:27 +0200)
Signed-off-by: Paul B Mahol <onemda@gmail.com>
doc/filters.texi
libavfilter/vf_mix.c

index 249d882..f31747e 100644 (file)
@@ -11177,7 +11177,9 @@ The number of inputs. If unspecified, it defaults to 2.
 
 @item weights
 Specify weight of each input video stream as sequence.
-Each weight is separated by space.
+Each weight is separated by space. If number of weights
+is smaller than number of @var{frames} last specified
+weight will be used for all remaining unset weights.
 
 @item scale
 Specify scale, if it is set it will be multiplied with sum
@@ -15603,7 +15605,9 @@ The number of successive frames to mix. If unspecified, it defaults to 3.
 
 @item weights
 Specify weight of each input video frame.
-Each weight is separated by space.
+Each weight is separated by space. If number of weights is smaller than
+number of @var{frames} last specified weight will be used for all remaining
+unset weights.
 
 @item scale
 Specify scale, if it is set it will be multiplied with sum
index 9ae61c5..14e0f19 100644 (file)
@@ -74,7 +74,7 @@ static av_cold int init(AVFilterContext *ctx)
 {
     MixContext *s = ctx->priv;
     char *p, *arg, *saveptr = NULL;
-    int i, ret;
+    int i, ret, last;
 
     s->tmix = !strcmp(ctx->filter->name, "tmix");
 
@@ -110,6 +110,11 @@ static av_cold int init(AVFilterContext *ctx)
         p = NULL;
         sscanf(arg, "%f", &s->weights[i]);
         s->wfactor += s->weights[i];
+        last = i;
+    }
+    for (; i < s->nb_inputs; i++) {
+        s->weights[i] = s->weights[last];
+        s->wfactor += s->weights[i];
     }
     if (s->scale == 0) {
         s->wfactor = 1 / s->wfactor;