vf_pad: fix x, y option expression evaluation
authorJohn Stebbins <stebbins@jetheaddev.com>
Sun, 25 Oct 2015 18:36:10 +0000 (11:36 -0700)
committerLuca Barbato <lu_zero@gentoo.org>
Fri, 6 Nov 2015 14:03:51 +0000 (15:03 +0100)
Calculation of x an y based on width and height did not work when
width == 0 or height == 0.  "0" substitutes the input width and
height, but did so too late for x, y expression evaluation.

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
libavfilter/vf_pad.c

index 634af4c..cddd2a6 100644 (file)
@@ -167,12 +167,17 @@ static int config_input(AVFilterLink *inlink)
                                       NULL, NULL, NULL, NULL, NULL, 0, ctx)) < 0)
         goto eval_fail;
     s->h = var_values[VAR_OUT_H] = var_values[VAR_OH] = res;
+    if (!s->h)
+        var_values[VAR_OUT_H] = var_values[VAR_OH] = s->h = inlink->h;
+
     /* evaluate the width again, as it may depend on the evaluated output height */
     if ((ret = av_expr_parse_and_eval(&res, (expr = s->w_expr),
                                       var_names, var_values,
                                       NULL, NULL, NULL, NULL, NULL, 0, ctx)) < 0)
         goto eval_fail;
     s->w = var_values[VAR_OUT_W] = var_values[VAR_OW] = res;
+    if (!s->w)
+        var_values[VAR_OUT_W] = var_values[VAR_OW] = s->w = inlink->w;
 
     /* evaluate x and y */
     av_expr_parse_and_eval(&res, (expr = s->x_expr),
@@ -197,11 +202,6 @@ static int config_input(AVFilterLink *inlink)
         return AVERROR(EINVAL);
     }
 
-    if (!s->w)
-        s->w = inlink->w;
-    if (!s->h)
-        s->h = inlink->h;
-
     s->w &= ~((1 << s->hsub) - 1);
     s->h &= ~((1 << s->vsub) - 1);
     s->x &= ~((1 << s->hsub) - 1);