FFmpeg
|
#include <float.h>
#include "attributes.h"
#include "avutil.h"
#include "common.h"
#include "eval.h"
#include "ffmath.h"
#include "log.h"
#include "mathematics.h"
#include "mem.h"
#include "sfc64.h"
#include "time.h"
#include "avstring.h"
#include "reverse.h"
Go to the source code of this file.
Data Structures | |
struct | Parser |
struct | AVExpr |
Macros | |
#define | VARS 10 |
#define | IS_IDENTIFIER_CHAR(c) ((c) - '0' <= 9U || (c) - 'a' <= 25U || (c) - 'A' <= 25U || (c) == '_') |
#define | COMPUTE_NEXT_RANDOM() |
Functions | |
double | av_strtod (const char *numstr, char **tail) |
Parse the string in numstr and return its value as a double. More... | |
static int | strmatch (const char *s, const char *prefix) |
static double | etime (double v) |
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(). More... | |
static int | parse_primary (AVExpr **e, Parser *p) |
static AVExpr * | make_eval_expr (int type, int value, AVExpr *p0, AVExpr *p1) |
static int | parse_pow (AVExpr **e, Parser *p, int *sign) |
static int | parse_dB (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. More... | |
static int | expr_count (AVExpr *e, unsigned *counter, int size, int type) |
int | av_expr_count_vars (AVExpr *e, unsigned *counter, int size) |
Track the presence of variables and their number of occurrences in a parsed expression. More... | |
int | av_expr_count_func (AVExpr *e, unsigned *counter, int size, int arg) |
Track the presence of user provided functions and their number of occurrences in a parsed expression. More... | |
double | av_expr_eval (AVExpr *e, const double *const_values, void *opaque) |
Evaluate a previously parsed expression. More... | |
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. More... | |
Variables | |
static const AVClass | eval_class |
struct { | |
double bin_val | |
double dec_val | |
int8_t exp | |
} | si_prefixes [ 'z' - 'E'+1] |
struct { | |
const char * name | |
double value | |
} | constants [] |
simple arithmetic expression evaluator.
see http://joe.hotchkiss.com/programming/eval/eval.html
Definition in file eval.c.
#define COMPUTE_NEXT_RANDOM | ( | ) |
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 by 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 107 of file eval.c.
Referenced by ff_parse_sample_rate(), parse_number(), parse_points_str(), parse_primary(), parse_string(), parse_weights(), set_param(), and var_read_float().
|
static |
Definition at line 148 of file eval.c.
Referenced by parse_primary().
Definition at line 181 of file eval.c.
Referenced by parse_primary().
Definition at line 186 of file eval.c.
Referenced by av_expr_eval().
Definition at line 639 of file eval.c.
Referenced by av_expr_parse(), and parse_primary().
void av_expr_free | ( | AVExpr * | e | ) |
Free a parsed expression previously created with av_expr_parse().
Definition at line 358 of file eval.c.
Referenced by addroi_uninit(), av_expr_free(), av_expr_parse(), av_expr_parse_and_eval(), avfilter_free(), command(), config_input(), config_output(), config_params(), config_props(), eval_expr(), ff_rate_control_uninit(), generate_kernel(), geq_uninit(), init(), init_axis_color(), init_cqt(), init_volume(), libplacebo_uninit(), noise_close(), nppscale_parse_expr(), nppscale_uninit(), ost_free(), overlay_cuda_uninit(), parse_channel_expressions(), parse_expr(), parse_factor(), parse_primary(), parse_subexpr(), parse_term(), process_command(), scale_parse_expr(), set_enable_expr(), set_expr(), setts_close(), and uninit().
Definition at line 369 of file eval.c.
Referenced by parse_dB(), and parse_pow().
Definition at line 530 of file eval.c.
Referenced by parse_expr(), parse_factor(), parse_subexpr(), and parse_term().
Definition at line 542 of file eval.c.
Referenced by parse_dB().
Definition at line 549 of file eval.c.
Referenced by parse_factor().
Definition at line 564 of file eval.c.
Referenced by parse_term().
Definition at line 591 of file eval.c.
Referenced by parse_subexpr().
Definition at line 615 of file eval.c.
Referenced by parse_expr().
|
static |
Definition at line 669 of file eval.c.
Referenced by av_expr_parse().
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_offset | log level offset, can be used to silence error messages |
log_ctx | parent logging context |
Definition at line 710 of file eval.c.
Referenced by addroi_init(), av_expr_parse_and_eval(), config_input(), config_output(), config_params(), config_props(), ff_rate_control_init(), generate_kernel(), geq_init(), init(), init_axis_color(), init_cqt(), init_volume(), initialize(), libplacebo_init(), modplug_read_header(), noise_init(), nppscale_parse_expr(), process_command(), process_forced_keyframes(), scale_parse_expr(), set_enable_expr(), set_expr(), and setts_init().
|
static |
Definition at line 766 of file eval.c.
Referenced by av_expr_count_func(), and av_expr_count_vars().
int av_expr_count_vars | ( | AVExpr * | e, |
unsigned * | counter, | ||
int | size | ||
) |
Track the presence of variables and their number of occurrences in a parsed expression.
e | the AVExpr to track variables in |
counter | a zero-initialized array where the count of each variable will be stored |
size | size of array |
Definition at line 782 of file eval.c.
Referenced by check_exprs(), nppscale_scale(), and scale_frame().
int av_expr_count_func | ( | AVExpr * | e, |
unsigned * | counter, | ||
int | size, | ||
int | arg | ||
) |
Track the presence of user provided functions and their number of occurrences in a parsed expression.
e | the AVExpr to track user provided functions in |
counter | a zero-initialized array where the count of each function will be stored if you passed 5 functions with 2 arguments to av_expr_parse() then for arg=2 this will use up to 5 entries. |
size | size of array |
arg | number of arguments the counted functions have |
Definition at line 787 of file eval.c.
Referenced by geq_init().
Evaluate a previously parsed expression.
e | the AVExpr to evaluate |
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 792 of file eval.c.
Referenced by activate(), addroi_config_input(), av_expr_parse_and_eval(), config_input(), config_output(), config_props(), do_eval(), draw_text(), eval_expr(), eval_pts(), evaluate_timeline_at_frame(), filter_channel(), filter_frame(), forced_kf_apply(), generate_kernel(), get_max_local_gain(), get_qscale(), get_target_gain(), init(), init_axis_color(), init_cqt(), init_volume(), modplug_read_packet(), noise(), nppscale_eval_dimensions(), output_single_frame(), parse_expr(), request_frame(), scale_eval_dimensions(), select_frame(), set_brightness(), set_contrast(), set_gamma(), set_saturation(), set_volume(), setts_filter(), slice_geq_filter(), update_alpha(), update_context(), and update_crops().
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_offset | log level offset, can be used to silence error messages |
log_ctx | parent logging context |
Definition at line 803 of file eval.c.
Referenced by activate(), av_parse_ratio(), calc_persp_luts(), config_input(), config_output_props(), config_props(), drawbox_vaapi_config_output(), ff_print_eval_expr(), ff_print_formatted_eval_expr(), ff_scale_eval_dimensions(), filter_frame(), generate_kernel(), get_aspect_ratio(), main(), pad_opencl_config_output(), pad_vaapi_config_output(), and set_string_number().
|
static |
Definition at line 61 of file eval.c.
Referenced by av_expr_parse().
int8_t exp |
Definition at line 73 of file eval.c.
Referenced by ac3_exponent_min_c(), ac3_extract_exponents_c(), acelp_decode_gain_codef(), adpcm_decode_frame(), apply_channel_coupling(), ath(), av_bessel_i0(), av_div_sf_ieee754(), av_mul_sf_ieee754(), bit_allocate(), bitreduction(), comp_harmonic_coeff(), compute_exp_strategy(), config_filter(), config_input(), config_output(), convert_sp2zp(), create_freq_table(), decode(), decode_aiff_header(), decode_subframe(), dnn_detect_parse_yolo_output(), encode_exp_vlc(), encode_exponents(), encode_exponents_blk_ch(), erf(), estimate_pitch(), eval_expr(), evrc_decode_frame(), fade_gain(), ff_ac3_bit_alloc_calc_psd(), ff_tx_mdct_fwd(), ff_tx_mdct_inv(), filter_dbl(), filter_frame(), fir_to_phase(), gaussian(), generate_min_phase_kernel(), generate_window_func(), get_aiff_header(), get_coef(), get_volume(), hom(), init(), init_gaussian_filter(), init_pass2(), mapres(), modify_qscale(), mult(), nb_decode(), noise_filter(), output_gain(), parse_mantissas(), parse_points(), parse_primary(), put_float(), qdm2_fft_decode_tones(), qdm2_fft_init_coefficient(), quant(), quantize_mantissas_blk_ch(), sbr_hf_g_filt_c(), scalbnl(), set_ap1(), set_band_parameters(), set_default_ctl_value(), set_gauss(), set_parameters(), sigmoid(), spectral_flatness(), speex_std_stereo(), stream_component_open(), swri_dither_init(), sws_getGaussianVec(), trc_arib_std_b67_inv(), try_export_flags(), twinvq_mulawinv(), unsharp_opencl_make_filter_params(), vorbis_floor0_decode(), vorbisfloat2float(), and wv_get_value_float().
const { ... } si_prefixes['z' - 'E' + 1] |
Referenced by av_strtod().
const char* name |
Definition at line 98 of file eval.c.
Referenced by parse_primary().
double value |
Definition at line 99 of file eval.c.
Referenced by make_eval_expr().
const { ... } constants[] |
Referenced by jxl_u32(), and parse_primary().