changeset 3770:ea345e1e440f libavcodec

Introduce ff_eval2 which is equivalent to ff_eval but does not log anything. Instead, error messages are passed upward by means of a struct member variable.
author takis
date Tue, 26 Sep 2006 22:01:33 +0000
parents cf04e15a72ac
children fa3075e3e3c1
files eval.c
diffstat 1 files changed, 21 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/eval.c	Tue Sep 26 20:26:22 2006 +0000
+++ b/eval.c	Tue Sep 26 22:01:33 2006 +0000
@@ -52,6 +52,7 @@
     double (**func2)(void *, double a, double b); // NULL terminated
     char **func2_name;          // NULL terminated
     void *opaque;
+    char **error;
 } Parser;
 
 extern double av_strtod(const char *name, char **tail);
@@ -88,7 +89,7 @@
 
     p->s= strchr(p->s, '(');
     if(p->s==NULL){
-        av_log(NULL, AV_LOG_ERROR, "Parser: missing ( in \"%s\"\n", next);
+        *p->error = "missing (";
         p->s= next;
         return NAN;
     }
@@ -99,7 +100,7 @@
         d2= evalExpression(p);
     }
     if(p->s[0] != ')'){
-        av_log(NULL, AV_LOG_ERROR, "Parser: missing ) in \"%s\"\n", next);
+        *p->error = "missing )";
         return NAN;
     }
     p->s++; // ")"
@@ -138,7 +139,7 @@
             }
         }
 
-        av_log(NULL, AV_LOG_ERROR, "Parser: unknown function in \"%s\"\n", next);
+        *p->error = "unknown function";
         return NAN;
     }
 
@@ -185,10 +186,10 @@
     return ret;
 }
 
-double ff_eval(char *s, double *const_value, const char **const_name,
+double ff_eval2(char *s, double *const_value, const char **const_name,
                double (**func1)(void *, double), const char **func1_name,
                double (**func2)(void *, double, double), char **func2_name,
-               void *opaque){
+               void *opaque, char **error){
     Parser p;
 
     p.stack_index=100;
@@ -200,10 +201,25 @@
     p.func2      = func2;
     p.func2_name = func2_name;
     p.opaque     = opaque;
+    p.error= error;
 
     return evalExpression(&p);
 }
 
+#if LIBAVCODEC_VERSION_INT < ((51<<16)+(16<<8)+0)
+attribute_deprecated double ff_eval(char *s, double *const_value, const char **const_name,
+               double (**func1)(void *, double), const char **func1_name,
+               double (**func2)(void *, double, double), char **func2_name,
+               void *opaque){
+    char *error=NULL;
+    double ret;
+    ret = ff_eval2(s, const_value, const_name, func1, func1_name, func2, func2_name, opaque, &error);
+    if (error)
+        av_log(NULL, AV_LOG_ERROR, "Error evaluating \"%s\": %s\n", s, error);
+    return ret;
+}
+#endif
+
 #ifdef TEST
 #undef printf
 static double const_values[]={