X-Git-Url: https://git.libav.org/?p=libav.git;a=blobdiff_plain;f=libavcodec%2Feval.h;h=5f208e599ae81cdc603d72c22f4cd69f09d59568;hp=05a2f1ef2a89b98a598ed6bbf5b814b76e69773e;hb=2b65bb45b59389d25661f3b3df45daa721d8abc8;hpb=85b4eb08ccf03edb01b2b9cee11c27717be140b8 diff --git a/libavcodec/eval.h b/libavcodec/eval.h index 05a2f1ef2a..5f208e599a 100644 --- a/libavcodec/eval.h +++ b/libavcodec/eval.h @@ -1,6 +1,4 @@ /* - * simple arithmetic expression evaluator - * * Copyright (c) 2002 Michael Niedermayer * * This file is part of FFmpeg. @@ -21,30 +19,86 @@ */ /** - * @file eval.h - * eval header. + * @file + * simple arithmetic expression evaluator */ #ifndef AVCODEC_EVAL_H #define AVCODEC_EVAL_H -#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) -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); -#endif -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, char **error); - -typedef struct ff_expr_s AVEvalExpr; -AVEvalExpr * ff_parse(char *s, const char **const_name, - double (**func1)(void *, double), const char **func1_name, - double (**func2)(void *, double, double), char **func2_name, - char **error); -double ff_parse_eval(AVEvalExpr * e, double *const_value, void *opaque); -void ff_eval_free(AVEvalExpr * e); +typedef struct AVExpr AVExpr; + +/** + * Parses and evaluates an expression. + * Note, this is significantly slower than ff_eval_expr(). + * + * @param s expression as a zero terminated string for example "1+2^3+5*5+sin(2/3)" + * @param const_name NULL terminated array of zero terminated strings of constant identifers for example {"PI", "E", 0} + * @param const_value a zero terminated array of values for the identifers from const_name + * @param func1_name NULL terminated array of zero terminated strings of func1 identifers + * @param func1 NULL terminated array of function pointers for functions which take 1 argument + * @param func2_name NULL terminated array of zero terminated strings of func2 identifers + * @param func2 NULL terminated array of function pointers for functions which take 2 arguments + * @param opaque a pointer which will be passed to all functions from func1 and func2 + * @param log_ctx parent logging context + * @return the value of the expression + */ +double ff_parse_and_eval_expr(const char *s, + const char * const *const_name, const double *const_value, + const char * const *func1_name, double (* const *func1)(void *, double), + const char * const *func2_name, double (* const *func2)(void *, double, double), + void *opaque, int log_offset, void *log_ctx); + +/** + * Parses an expression. + * + * @param s expression as a zero terminated string for example "1+2^3+5*5+sin(2/3)" + * @param const_name NULL terminated array of zero terminated strings of constant identifers for example {"PI", "E", 0} + * @param func1_name NULL terminated array of zero terminated strings of func1 identifers + * @param func1 NULL terminated array of function pointers for functions which take 1 argument + * @param func2_name NULL terminated array of zero terminated strings of func2 identifers + * @param func2 NULL terminated array of function pointers for functions which take 2 arguments + * @param log_ctx parent logging context + * @return AVExpr which must be freed with ff_free_expr() by the user when it is not needed anymore + * NULL if anything went wrong + */ +AVExpr *ff_parse_expr(const char *s, + const char * const *const_name, + const char * const *func1_name, double (* const *func1)(void *, double), + const char * const *func2_name, double (* const *func2)(void *, double, double), + int log_offset, void *log_ctx); + +/** + * Evaluates a previously parsed expression. + * + * @param const_value a zero terminated array of values for the identifers from ff_parse const_name + * @param opaque a pointer which will be passed to all functions from func1 and func2 + * @return the value of the expression + */ +double ff_eval_expr(AVExpr * e, const double *const_value, void *opaque); + +/** + * Frees a parsed expression previously created with ff_parse(). + */ +void ff_free_expr(AVExpr *e); + +/** + * Parses the string in numstr and returns its value as a double. If + * the string is empty, contains only whitespaces, or does not contain + * an initial substring that has the expected syntax for a + * floating-point number, no conversion is performed. In this case, + * returns a value of zero and the value returned in tail is the value + * of numstr. + * + * @param numstr a string representing a number, may contain one of + * the International System number postfixes, for example 'K', 'M', + * 'G'. If 'i' is appended after the postfix, powers of 2 are used + * instead of powers of 10. The 'B' postfix multiplies the value for + * 8, and can be appended after another postfix or used alone. This + * allows using for example 'KB', 'MiB', 'G' and 'B' as postfix. + * @param tail if non-NULL puts here the pointer to the char next + * after the last parsed character + */ +double av_strtod(const char *numstr, char **tail); #endif /* AVCODEC_EVAL_H */