diff options
author | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2010-11-08 14:06:49 +0000 |
---|---|---|
committer | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2010-11-08 14:06:49 +0000 |
commit | d2af7205a12afde34c916ef96ba8c7a26aa0813e (patch) | |
tree | f66721788b2a9ad55d83c74cc075761bf9a5eaea /libavutil/eval.c | |
parent | 24de0edbd589b7cb0da51260073a1a28bb6a2619 (diff) | |
download | ffmpeg-d2af7205a12afde34c916ef96ba8c7a26aa0813e.tar.gz |
Use hierarchic names convention (prefix them with av_expr) for the
eval API.
More grep-friendly and more consistent with the rest of the FFmpeg
API.
Originally committed as revision 25708 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavutil/eval.c')
-rw-r--r-- | libavutil/eval.c | 96 |
1 files changed, 64 insertions, 32 deletions
diff --git a/libavutil/eval.c b/libavutil/eval.c index fdddd7720d..0fef97bd85 100644 --- a/libavutil/eval.c +++ b/libavutil/eval.c @@ -175,11 +175,11 @@ static double eval_expr(Parser *p, AVExpr *e) static int parse_expr(AVExpr **e, Parser *p); -void av_free_expr(AVExpr *e) +void av_expr_free(AVExpr *e) { if (!e) return; - av_free_expr(e->param[0]); - av_free_expr(e->param[1]); + av_expr_free(e->param[0]); + av_expr_free(e->param[1]); av_freep(&e); } @@ -217,7 +217,7 @@ static int parse_primary(AVExpr **e, Parser *p) if (p->s==NULL) { av_log(p, AV_LOG_ERROR, "Undefined constant or missing '(' in '%s'\n", s0); p->s= next; - av_free_expr(d); + av_expr_free(d); return AVERROR(EINVAL); } p->s++; // "(" @@ -227,7 +227,7 @@ static int parse_primary(AVExpr **e, Parser *p) return ret; if (p->s[0] != ')') { av_log(p, AV_LOG_ERROR, "Missing ')' in '%s'\n", s0); - av_free_expr(d); + av_expr_free(d); return AVERROR(EINVAL); } p->s++; // ")" @@ -235,7 +235,7 @@ static int parse_primary(AVExpr **e, Parser *p) return 0; } if ((ret = parse_expr(&(d->param[0]), p)) < 0) { - av_free_expr(d); + av_expr_free(d); return ret; } if (p->s[0]== ',') { @@ -244,7 +244,7 @@ static int parse_primary(AVExpr **e, Parser *p) } if (p->s[0] != ')') { av_log(p, AV_LOG_ERROR, "Missing ')' or too many args in '%s'\n", s0); - av_free_expr(d); + av_expr_free(d); return AVERROR(EINVAL); } p->s++; // ")" @@ -296,7 +296,7 @@ static int parse_primary(AVExpr **e, Parser *p) } av_log(p, AV_LOG_ERROR, "Unknown function in '%s'\n", s0); - av_free_expr(d); + av_expr_free(d); return AVERROR(EINVAL); } @@ -333,13 +333,13 @@ static int parse_factor(AVExpr **e, Parser *p) e1 = e0; p->s++; if ((ret = parse_pow(&e2, p, &sign2)) < 0) { - av_free_expr(e1); + av_expr_free(e1); return ret; } e0 = new_eval_expr(e_pow, 1, e1, e2); if (!e0) { - av_free_expr(e1); - av_free_expr(e2); + av_expr_free(e1); + av_expr_free(e2); return AVERROR(ENOMEM); } if (e0->param[1]) e0->param[1]->value *= (sign2|1); @@ -360,13 +360,13 @@ static int parse_term(AVExpr **e, Parser *p) int c= *p->s++; e1 = e0; if ((ret = parse_factor(&e2, p)) < 0) { - av_free_expr(e1); + av_expr_free(e1); return ret; } e0 = new_eval_expr(c == '*' ? e_mul : e_div, 1, e1, e2); if (!e0) { - av_free_expr(e1); - av_free_expr(e2); + av_expr_free(e1); + av_expr_free(e2); return AVERROR(ENOMEM); } } @@ -383,13 +383,13 @@ static int parse_subexpr(AVExpr **e, Parser *p) while (*p->s == '+' || *p->s == '-') { e1 = e0; if ((ret = parse_term(&e2, p)) < 0) { - av_free_expr(e1); + av_expr_free(e1); return ret; } e0 = new_eval_expr(e_add, 1, e1, e2); if (!e0) { - av_free_expr(e1); - av_free_expr(e2); + av_expr_free(e1); + av_expr_free(e2); return AVERROR(ENOMEM); } }; @@ -412,13 +412,13 @@ static int parse_expr(AVExpr **e, Parser *p) p->s++; e1 = e0; if ((ret = parse_subexpr(&e2, p)) < 0) { - av_free_expr(e1); + av_expr_free(e1); return ret; } e0 = new_eval_expr(e_last, 1, e1, e2); if (!e0) { - av_free_expr(e1); - av_free_expr(e2); + av_expr_free(e1); + av_expr_free(e2); return AVERROR(ENOMEM); } }; @@ -444,7 +444,7 @@ static int verify_expr(AVExpr *e) } } -int av_parse_expr(AVExpr **expr, const char *s, +int av_expr_parse(AVExpr **expr, const char *s, const char * const *const_names, const char * const *func1_names, double (* const *funcs1)(void *, double), const char * const *func2_names, double (* const *funcs2)(void *, double, double), @@ -483,7 +483,7 @@ int av_parse_expr(AVExpr **expr, const char *s, goto end; } if (!verify_expr(e)) { - av_free_expr(e); + av_expr_free(e); ret = AVERROR(EINVAL); goto end; } @@ -493,7 +493,7 @@ end: return ret; } -double av_eval_expr(AVExpr *e, const double *const_values, void *opaque) +double av_expr_eval(AVExpr *e, const double *const_values, void *opaque) { Parser p; @@ -502,24 +502,56 @@ double av_eval_expr(AVExpr *e, const double *const_values, void *opaque) return eval_expr(&p, e); } -int av_parse_and_eval_expr(double *d, const char *s, +int av_expr_parse_and_eval(double *d, const char *s, const char * const *const_names, const double *const_values, const char * const *func1_names, double (* const *funcs1)(void *, double), const char * const *func2_names, double (* const *funcs2)(void *, double, double), void *opaque, int log_offset, void *log_ctx) { AVExpr *e = NULL; - int ret = av_parse_expr(&e, s, const_names, func1_names, funcs1, func2_names, funcs2, log_offset, log_ctx); + int ret = av_expr_parse(&e, s, const_names, func1_names, funcs1, func2_names, funcs2, log_offset, log_ctx); if (ret < 0) { *d = NAN; return ret; } - *d = av_eval_expr(e, const_values, opaque); - av_free_expr(e); + *d = av_expr_eval(e, const_values, opaque); + av_expr_free(e); return isnan(*d) ? AVERROR(EINVAL) : 0; } +#if FF_API_OLD_EVAL_NAMES +int av_parse_expr(AVExpr **expr, const char *s, + const char * const *const_names, + const char * const *func1_names, double (* const *funcs1)(void *, double), + const char * const *func2_names, double (* const *funcs2)(void *, double, double), + int log_offset, void *log_ctx) +{ + return av_expr_parse(expr, s, const_names, func1_names, funcs1, func2_names, funcs2, + log_offset, log_ctx); +} + +double av_eval_expr(AVExpr *e, const double *const_values, void *opaque) +{ + return av_expr_eval(e, const_values, opaque); +} + +int av_parse_and_eval_expr(double *res, const char *s, + const char * const *const_names, const double *const_values, + const char * const *func1_names, double (* const *funcs1)(void *, double), + const char * const *func2_names, double (* const *funcs2)(void *, double, double), + void *opaque, int log_offset, void *log_ctx) +{ + return av_expr_parse_and_eval(res, s, const_names, const_values, func1_names, funcs1, func2_names, funcs2, + opaque, log_offset, log_ctx); +} + +void av_free_expr(AVExpr *e) +{ + av_expr_free(e); +} +#endif /* FF_API_OLD_EVAL_NAMES */ + #ifdef TEST #undef printf static double const_values[] = { @@ -584,27 +616,27 @@ int main(void) for (expr = exprs; *expr; expr++) { printf("Evaluating '%s'\n", *expr); - av_parse_and_eval_expr(&d, *expr, + av_expr_parse_and_eval(&d, *expr, const_names, const_values, NULL, NULL, NULL, NULL, NULL, 0, NULL); printf("'%s' -> %f\n\n", *expr, d); } - av_parse_and_eval_expr(&d, "1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", + av_expr_parse_and_eval(&d, "1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_names, const_values, NULL, NULL, NULL, NULL, NULL, 0, NULL); printf("%f == 12.7\n", d); - av_parse_and_eval_expr(&d, "80G/80Gi", + av_expr_parse_and_eval(&d, "80G/80Gi", const_names, const_values, NULL, NULL, NULL, NULL, NULL, 0, NULL); printf("%f == 0.931322575\n", d); for (i=0; i<1050; i++) { START_TIMER - av_parse_and_eval_expr(&d, "1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", + av_expr_parse_and_eval(&d, "1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_names, const_values, NULL, NULL, NULL, NULL, NULL, 0, NULL); - STOP_TIMER("av_parse_and_eval_expr") + STOP_TIMER("av_expr_parse_and_eval") } return 0; } |