diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-02-22 20:19:35 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-02-23 02:09:47 +0400 |
commit | 094673ff1b1a0f83584f3aeea76a3e9c9e3129bf (patch) | |
tree | b48fc29eb7454c351ef294a7db2d1e581bf7dd33 /libavutil/eval.c | |
parent | 43b1943a55b4b9de962761db38d5ecc3c8eef45a (diff) |
eval: support 3 parameter functions.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavutil/eval.c')
-rw-r--r-- | libavutil/eval.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libavutil/eval.c b/libavutil/eval.c index fda099734c..cb4141a6f7 100644 --- a/libavutil/eval.c +++ b/libavutil/eval.c @@ -145,7 +145,7 @@ struct AVExpr { double (*func1)(void *, double); double (*func2)(void *, double, double); } a; - struct AVExpr *param[2]; + struct AVExpr *param[3]; double *var; }; @@ -229,6 +229,7 @@ void av_expr_free(AVExpr *e) if (!e) return; av_expr_free(e->param[0]); av_expr_free(e->param[1]); + av_expr_free(e->param[2]); av_freep(&e->var); av_freep(&e); } @@ -301,6 +302,10 @@ static int parse_primary(AVExpr **e, Parser *p) p->s++; // "," parse_expr(&d->param[1], p); } + if (p->s[0]== ',') { + p->s++; // "," + parse_expr(&d->param[2], p); + } if (p->s[0] != ')') { av_log(p, AV_LOG_ERROR, "Missing ')' or too many args in '%s'\n", s0); av_expr_free(d); @@ -517,8 +522,8 @@ static int verify_expr(AVExpr *e) case e_sqrt: case e_not: case e_random: - return verify_expr(e->param[0]); - default: return verify_expr(e->param[0]) && verify_expr(e->param[1]); + return verify_expr(e->param[0]) && !e->param[2]; + default: return verify_expr(e->param[0]) && verify_expr(e->param[1]) && !e->param[2]; } } |