summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2018-04-29 19:27:15 +0200
committerPaul B Mahol <onemda@gmail.com>2018-04-29 19:27:15 +0200
commitc0f2abcc8d2acfc95e675a05303db958c3866b03 (patch)
treeb9d58ba83908725666fbf9f4779e569e3e9fc3df
parent6e95d80e6fae978f8a44afc24b0c5097a062719f (diff)
avfilter/vf_mix: make setting weights more user friendly
Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r--doc/filters.texi8
-rw-r--r--libavfilter/vf_mix.c7
2 files changed, 12 insertions, 3 deletions
diff --git a/doc/filters.texi b/doc/filters.texi
index 249d88265c..f31747ebf5 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -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
diff --git a/libavfilter/vf_mix.c b/libavfilter/vf_mix.c
index 9ae61c59d2..14e0f19e2d 100644
--- a/libavfilter/vf_mix.c
+++ b/libavfilter/vf_mix.c
@@ -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;