From 047fd986bf3641ad3dc137746097271c339ee5f0 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 2 Mar 2015 02:32:55 +0100 Subject: [PATCH] avfilter/vf_drawbox: Fix handling of max values Fixes Ticket4332 Signed-off-by: Michael Niedermayer --- libavfilter/vf_drawbox.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libavfilter/vf_drawbox.c b/libavfilter/vf_drawbox.c index 115df884e1..799d07ead4 100644 --- a/libavfilter/vf_drawbox.c +++ b/libavfilter/vf_drawbox.c @@ -47,6 +47,7 @@ static const char *const var_names[] = { "h", ///< height of the rendered box "w", ///< width of the rendered box "t", + "max", NULL }; @@ -63,6 +64,7 @@ enum var_name { VAR_H, VAR_W, VAR_T, + VAR_MAX, VARS_NB }; @@ -142,30 +144,35 @@ static int config_input(AVFilterLink *inlink) for (i = 0; i <= NUM_EXPR_EVALS; i++) { /* evaluate expressions, fail on last iteration */ + var_values[VAR_MAX] = inlink->w; if ((ret = av_expr_parse_and_eval(&res, (expr = s->x_expr), var_names, var_values, NULL, NULL, NULL, NULL, NULL, 0, ctx)) < 0 && i == NUM_EXPR_EVALS) goto fail; s->x = var_values[VAR_X] = res; + var_values[VAR_MAX] = inlink->h; if ((ret = av_expr_parse_and_eval(&res, (expr = s->y_expr), var_names, var_values, NULL, NULL, NULL, NULL, NULL, 0, ctx)) < 0 && i == NUM_EXPR_EVALS) goto fail; s->y = var_values[VAR_Y] = res; + var_values[VAR_MAX] = inlink->w - s->x; if ((ret = av_expr_parse_and_eval(&res, (expr = s->w_expr), var_names, var_values, NULL, NULL, NULL, NULL, NULL, 0, ctx)) < 0 && i == NUM_EXPR_EVALS) goto fail; s->w = var_values[VAR_W] = res; + var_values[VAR_MAX] = inlink->h - s->y; if ((ret = av_expr_parse_and_eval(&res, (expr = s->h_expr), var_names, var_values, NULL, NULL, NULL, NULL, NULL, 0, ctx)) < 0 && i == NUM_EXPR_EVALS) goto fail; s->h = var_values[VAR_H] = res; + var_values[VAR_MAX] = INT_MAX; if ((ret = av_expr_parse_and_eval(&res, (expr = s->t_expr), var_names, var_values, NULL, NULL, NULL, NULL, NULL, 0, ctx)) < 0 && i == NUM_EXPR_EVALS)