Commit | Line | Data |
---|---|---|
b2f86c17 | 1 | /* |
b2f86c17 PI |
2 | * Copyright (c) 2002 Michael Niedermayer <michaelni@gmx.at> |
3 | * | |
b78e7197 DB |
4 | * This file is part of FFmpeg. |
5 | * | |
6 | * FFmpeg is free software; you can redistribute it and/or | |
b2f86c17 PI |
7 | * modify it under the terms of the GNU Lesser General Public |
8 | * License as published by the Free Software Foundation; either | |
b78e7197 | 9 | * version 2.1 of the License, or (at your option) any later version. |
b2f86c17 | 10 | * |
b78e7197 | 11 | * FFmpeg is distributed in the hope that it will be useful, |
b2f86c17 PI |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * Lesser General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU Lesser General Public | |
b78e7197 | 17 | * License along with FFmpeg; if not, write to the Free Software |
b2f86c17 PI |
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | */ | |
20 | ||
21 | /** | |
ba87f080 | 22 | * @file |
8c216473 | 23 | * simple arithmetic expression evaluator |
b2f86c17 PI |
24 | */ |
25 | ||
98790382 SS |
26 | #ifndef AVCODEC_EVAL_H |
27 | #define AVCODEC_EVAL_H | |
b2f86c17 | 28 | |
a3731cad | 29 | typedef struct AVExpr AVExpr; |
5fccafdb | 30 | |
21d4d5da MN |
31 | /** |
32 | * Parses and evaluates an expression. | |
4565caf1 | 33 | * Note, this is significantly slower than ff_eval_expr(). |
f54978f1 | 34 | * |
21d4d5da | 35 | * @param s expression as a zero terminated string for example "1+2^3+5*5+sin(2/3)" |
21d4d5da | 36 | * @param const_name NULL terminated array of zero terminated strings of constant identifers for example {"PI", "E", 0} |
edd259f9 | 37 | * @param const_value a zero terminated array of values for the identifers from const_name |
21d4d5da | 38 | * @param func1_name NULL terminated array of zero terminated strings of func1 identifers |
edd259f9 | 39 | * @param func1 NULL terminated array of function pointers for functions which take 1 argument |
21d4d5da | 40 | * @param func2_name NULL terminated array of zero terminated strings of func2 identifers |
edd259f9 | 41 | * @param func2 NULL terminated array of function pointers for functions which take 2 arguments |
21d4d5da | 42 | * @param opaque a pointer which will be passed to all functions from func1 and func2 |
2b65bb45 | 43 | * @param log_ctx parent logging context |
21d4d5da MN |
44 | * @return the value of the expression |
45 | */ | |
edd259f9 SS |
46 | double ff_parse_and_eval_expr(const char *s, |
47 | const char * const *const_name, const double *const_value, | |
48 | const char * const *func1_name, double (* const *func1)(void *, double), | |
49 | const char * const *func2_name, double (* const *func2)(void *, double, double), | |
2b65bb45 | 50 | void *opaque, int log_offset, void *log_ctx); |
b2f86c17 | 51 | |
21d4d5da | 52 | /** |
94e57758 | 53 | * Parses an expression. |
f54978f1 | 54 | * |
21d4d5da | 55 | * @param s expression as a zero terminated string for example "1+2^3+5*5+sin(2/3)" |
21d4d5da MN |
56 | * @param const_name NULL terminated array of zero terminated strings of constant identifers for example {"PI", "E", 0} |
57 | * @param func1_name NULL terminated array of zero terminated strings of func1 identifers | |
edd259f9 | 58 | * @param func1 NULL terminated array of function pointers for functions which take 1 argument |
21d4d5da | 59 | * @param func2_name NULL terminated array of zero terminated strings of func2 identifers |
edd259f9 | 60 | * @param func2 NULL terminated array of function pointers for functions which take 2 arguments |
2b65bb45 | 61 | * @param log_ctx parent logging context |
f8fea468 | 62 | * @return AVExpr which must be freed with ff_free_expr() by the user when it is not needed anymore |
21d4d5da MN |
63 | * NULL if anything went wrong |
64 | */ | |
edd259f9 SS |
65 | AVExpr *ff_parse_expr(const char *s, |
66 | const char * const *const_name, | |
67 | const char * const *func1_name, double (* const *func1)(void *, double), | |
68 | const char * const *func2_name, double (* const *func2)(void *, double, double), | |
2b65bb45 | 69 | int log_offset, void *log_ctx); |
f54978f1 | 70 | |
21d4d5da MN |
71 | /** |
72 | * Evaluates a previously parsed expression. | |
f54978f1 | 73 | * |
21d4d5da MN |
74 | * @param const_value a zero terminated array of values for the identifers from ff_parse const_name |
75 | * @param opaque a pointer which will be passed to all functions from func1 and func2 | |
76 | * @return the value of the expression | |
77 | */ | |
4565caf1 | 78 | double ff_eval_expr(AVExpr * e, const double *const_value, void *opaque); |
f8fea468 | 79 | |
80ed7014 SS |
80 | /** |
81 | * Frees a parsed expression previously created with ff_parse(). | |
82 | */ | |
f8fea468 | 83 | void ff_free_expr(AVExpr *e); |
85b4eb08 | 84 | |
d171a651 SS |
85 | /** |
86 | * Parses the string in numstr and returns its value as a double. If | |
87 | * the string is empty, contains only whitespaces, or does not contain | |
88 | * an initial substring that has the expected syntax for a | |
89 | * floating-point number, no conversion is performed. In this case, | |
90 | * returns a value of zero and the value returned in tail is the value | |
91 | * of numstr. | |
92 | * | |
93 | * @param numstr a string representing a number, may contain one of | |
94 | * the International System number postfixes, for example 'K', 'M', | |
95 | * 'G'. If 'i' is appended after the postfix, powers of 2 are used | |
96 | * instead of powers of 10. The 'B' postfix multiplies the value for | |
97 | * 8, and can be appended after another postfix or used alone. This | |
98 | * allows using for example 'KB', 'MiB', 'G' and 'B' as postfix. | |
99 | * @param tail if non-NULL puts here the pointer to the char next | |
100 | * after the last parsed character | |
1c2744d1 SS |
101 | */ |
102 | double av_strtod(const char *numstr, char **tail); | |
103 | ||
98790382 | 104 | #endif /* AVCODEC_EVAL_H */ |