#include "avutil.h"
#include "eval.h"
#include "log.h"
Go to the source code of this file.
Data Structures | |
struct | Parser |
struct | AVExpr |
Defines | |
#define | VARS 10 |
#define | IS_IDENTIFIER_CHAR(c) ((c) - '0' <= 9U || (c) - 'a' <= 25U || (c) - 'A' <= 25U || (c) == '_') |
Functions | |
double | av_strtod (const char *numstr, char **tail) |
Parse the string in numstr and return its value as a double. | |
static int | strmatch (const char *s, const char *prefix) |
static double | eval_expr (Parser *p, AVExpr *e) |
static int | parse_expr (AVExpr **e, Parser *p) |
void | av_expr_free (AVExpr *e) |
Free a parsed expression previously created with av_expr_parse(). | |
static int | parse_primary (AVExpr **e, Parser *p) |
static AVExpr * | new_eval_expr (int type, int value, AVExpr *p0, AVExpr *p1) |
static int | parse_pow (AVExpr **e, Parser *p, int *sign) |
static int | parse_factor (AVExpr **e, Parser *p) |
static int | parse_term (AVExpr **e, Parser *p) |
static int | parse_subexpr (AVExpr **e, Parser *p) |
static int | verify_expr (AVExpr *e) |
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), int log_offset, void *log_ctx) |
Parse an expression. | |
double | av_expr_eval (AVExpr *e, const double *const_values, void *opaque) |
Evaluate a previously parsed expression. | |
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) |
Parse and evaluate an expression. | |
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) |
double | av_eval_expr (AVExpr *e, const double *const_values, void *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) |
void | av_free_expr (AVExpr *e) |
Variables | |
class { | |
Eval | |
av_default_item_name | |
NULL | |
LIBAVUTIL_VERSION_INT | |
}; | |
static const int8_t | si_prefixes ['z'- 'E'+1] |
struct { | |
const char * name | |
double value | |
} | constants [] |
see http://joe.hotchkiss.com/programming/eval/eval.html
Definition in file eval.c.
#define VARS 10 |
double av_eval_expr | ( | AVExpr * | e, | |
const double * | const_values, | |||
void * | opaque | |||
) |
double av_expr_eval | ( | AVExpr * | e, | |
const double * | const_values, | |||
void * | opaque | |||
) |
Evaluate a previously parsed expression.
const_values | a zero terminated array of values for the identifiers from av_expr_parse() const_names | |
opaque | a pointer which will be passed to all functions from funcs1 and funcs2 |
Definition at line 558 of file eval.c.
Referenced by av_eval_expr(), av_expr_parse_and_eval(), config_props(), draw_text(), get_qscale(), init(), modplug_read_packet(), put_image(), request_frame(), select_frame(), send_next(), and start_frame().
void av_expr_free | ( | AVExpr * | e | ) |
Free a parsed expression previously created with av_expr_parse().
Definition at line 210 of file eval.c.
Referenced by av_expr_free(), av_expr_parse(), av_expr_parse_and_eval(), av_free_expr(), ff_rate_control_uninit(), parse_expr(), parse_factor(), parse_primary(), parse_subexpr(), parse_term(), and uninit().
int av_expr_parse | ( | AVExpr ** | expr, | |
const char * | s, | |||
const char *const * | const_names, | |||
const char *const * | func1_names, | |||
double(**)(void *, double) | funcs1, | |||
const char *const * | func2_names, | |||
double(**)(void *, double, double) | funcs2, | |||
int | log_offset, | |||
void * | log_ctx | |||
) |
Parse an expression.
expr | a pointer where is put an AVExpr containing the parsed value in case of successful parsing, or NULL otherwise. The pointed to AVExpr must be freed with av_expr_free() by the user when it is not needed anymore. | |
s | expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" | |
const_names | NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} | |
func1_names | NULL terminated array of zero terminated strings of funcs1 identifiers | |
funcs1 | NULL terminated array of function pointers for functions which take 1 argument | |
func2_names | NULL terminated array of zero terminated strings of funcs2 identifiers | |
funcs2 | NULL terminated array of function pointers for functions which take 2 arguments | |
log_ctx | parent logging context |
Definition at line 507 of file eval.c.
Referenced by av_expr_parse_and_eval(), av_parse_expr(), config_input(), config_props(), ff_rate_control_init(), init(), modplug_read_header(), and vf_open().
int av_expr_parse_and_eval | ( | double * | res, | |
const char * | s, | |||
const char *const * | const_names, | |||
const double * | const_values, | |||
const char *const * | func1_names, | |||
double(**)(void *, double) | funcs1, | |||
const char *const * | func2_names, | |||
double(**)(void *, double, double) | funcs2, | |||
void * | opaque, | |||
int | log_offset, | |||
void * | log_ctx | |||
) |
Parse and evaluate an expression.
Note, this is significantly slower than av_expr_eval().
res | a pointer to a double where is put the result value of the expression, or NAN in case of error | |
s | expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" | |
const_names | NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} | |
const_values | a zero terminated array of values for the identifiers from const_names | |
func1_names | NULL terminated array of zero terminated strings of funcs1 identifiers | |
funcs1 | NULL terminated array of function pointers for functions which take 1 argument | |
func2_names | NULL terminated array of zero terminated strings of funcs2 identifiers | |
funcs2 | NULL terminated array of function pointers for functions which take 2 arguments | |
opaque | a pointer which will be passed to all functions from funcs1 and funcs2 | |
log_ctx | parent logging context |
Definition at line 568 of file eval.c.
Referenced by av_parse_and_eval_expr(), av_parse_video_rate(), config(), config_input(), config_input_overlay(), config_output_props(), config_props(), init(), main(), and set_string_number().
void av_free_expr | ( | AVExpr * | e | ) |
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(**)(void *, double) | funcs1, | |||
const char *const * | func2_names, | |||
double(**)(void *, double, double) | funcs2, | |||
void * | opaque, | |||
int | log_offset, | |||
void * | log_ctx | |||
) |
int av_parse_expr | ( | AVExpr ** | expr, | |
const char * | s, | |||
const char *const * | const_names, | |||
const char *const * | func1_names, | |||
double(**)(void *, double) | funcs1, | |||
const char *const * | func2_names, | |||
double(**)(void *, double, double) | funcs2, | |||
int | log_offset, | |||
void * | log_ctx | |||
) |
double av_strtod | ( | const char * | numstr, | |
char ** | tail | |||
) |
Parse the string in numstr and return 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.
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. | |
tail | if non-NULL puts here the pointer to the char next after the last parsed character |
Definition at line 84 of file eval.c.
Referenced by ff_parse_sample_rate(), parse_number_or_die(), and parse_primary().
Definition at line 360 of file eval.c.
Referenced by parse_expr(), parse_factor(), parse_subexpr(), and parse_term().
static int strmatch | ( | const char * | s, | |
const char * | prefix | |||
) | [static] |
static int verify_expr | ( | AVExpr * | e | ) | [static] |
const { ... } [static] |
struct { ... } constants[] [static] |
const int8_t si_prefixes['z'- 'E'+1] [static] |
Initial value:
{ ['y'-'E']= -24, ['z'-'E']= -21, ['a'-'E']= -18, ['f'-'E']= -15, ['p'-'E']= -12, ['n'-'E']= - 9, ['u'-'E']= - 6, ['m'-'E']= - 3, ['c'-'E']= - 2, ['d'-'E']= - 1, ['h'-'E']= 2, ['k'-'E']= 3, ['K'-'E']= 3, ['M'-'E']= 6, ['G'-'E']= 9, ['T'-'E']= 12, ['P'-'E']= 15, ['E'-'E']= 18, ['Z'-'E']= 21, ['Y'-'E']= 24, }
Definition at line 52 of file eval.c.
Referenced by av_strtod().
double value |
Definition at line 77 of file eval.c.
Referenced by ape_tag_read_field(), asf_write_header1(), avi_read_tag(), decode_block(), decode_byterun(), decode_info_header(), decode_motion(), decode_skip_count(), encode_rgb48_10bit(), ff_bgmc_decode(), ff_read_riff_info(), get_tag(), gxf_material_tags(), gxf_track_tags(), id3v2_3_metadata_split_date(), init_loop_filter(), mov_read_timecode_track(), mpegaudio_tableinit(), mxf_read_pixel_layout(), nsv_parse_NSVf_header(), pcx_rle_decode(), qdm2_decode(), qdm2_decode_fft_packets(), qdm2_get_se_vlc(), qdm2_get_vlc(), radix_sort_pass(), read_info_chunk(), read_tag(), read_var_block_data(), sunrast_decode_frame(), tgq_decode_block(), tiff_decode_tag(), tta_decode_frame(), vc1_decode_i_block(), vc1_decode_i_block_adv(), vc1_decode_intra_block(), vc1_decode_p_block(), vda_dictionary_with_pts(), vlc_decode_block(), vp56_rac_gets(), vp8_rac_get_uint(), and wv_get_value_float().