OSDN Git Service

eval: support 3 parameter functions.
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 22 Feb 2012 16:19:35 +0000 (17:19 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 22 Feb 2012 22:09:47 +0000 (23:09 +0100)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavutil/eval.c

index fda0997..cb4141a 100644 (file)
@@ -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];
     }
 }