From 2ec112f71cd03ccab1b6f9a00d29199a57bcc7a5 Mon Sep 17 00:00:00 2001 From: John Stebbins Date: Sun, 25 Oct 2015 11:36:10 -0700 Subject: vf_pad: fix x, y option expression evaluation 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 --- libavfilter/vf_pad.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'libavfilter') diff --git a/libavfilter/vf_pad.c b/libavfilter/vf_pad.c index 634af4c941..cddd2a6b2a 100644 --- a/libavfilter/vf_pad.c +++ b/libavfilter/vf_pad.c @@ -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); -- cgit v1.2.3