diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 4a6712c921..417a8468b7 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -31,7 +31,7 @@ #define LIBAVCODEC_VERSION_MAJOR 52 #define LIBAVCODEC_VERSION_MINOR 67 -#define LIBAVCODEC_VERSION_MICRO 0 +#define LIBAVCODEC_VERSION_MICRO 1 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ diff --git a/libavcodec/eval.c b/libavcodec/eval.c index ce4d0f515e..0eadf1cbe1 100644 --- a/libavcodec/eval.c +++ b/libavcodec/eval.c @@ -369,9 +369,10 @@ static int verify_expr(AVExpr * e) { } } -AVExpr *ff_parse_expr(const char *s, const char * const *const_name, - double (* const *func1)(void *, double), const char * const *func1_name, - double (* const *func2)(void *, double, double), const char * const *func2_name, +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), const char **error){ Parser p; AVExpr *e = NULL; @@ -412,11 +413,12 @@ double ff_eval_expr(AVExpr * e, const double *const_value, void *opaque) { return eval_expr(&p, e); } -double ff_parse_and_eval_expr(const char *s, const double *const_value, const char * const *const_name, - double (* const *func1)(void *, double), const char * const *func1_name, - double (* const *func2)(void *, double, double), const char * const *func2_name, +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, const char **error){ - AVExpr * e = ff_parse_expr(s, const_name, func1, func1_name, func2, func2_name, error); + AVExpr *e = ff_parse_expr(s, const_name, func1_name, func1, func2_name, func2, error); double d; if (!e) return NAN; d = ff_eval_expr(e, const_value, opaque); @@ -438,12 +440,12 @@ static const char *const_names[]={ }; int main(void){ int i; - printf("%f == 12.7\n", ff_parse_and_eval_expr("1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_values, const_names, NULL, NULL, NULL, NULL, NULL, NULL)); - printf("%f == 0.931322575\n", ff_parse_and_eval_expr("80G/80Gi", const_values, const_names, NULL, NULL, NULL, NULL, NULL, NULL)); + printf("%f == 12.7\n", ff_parse_and_eval_expr("1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_names, const_values, NULL, NULL, NULL, NULL, NULL, NULL)); + printf("%f == 0.931322575\n", ff_parse_and_eval_expr("80G/80Gi", const_names, const_values, NULL, NULL, NULL, NULL, NULL, NULL)); for(i=0; i<1050; i++){ START_TIMER - ff_parse_and_eval_expr("1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_values, const_names, NULL, NULL, NULL, NULL, NULL, NULL); + ff_parse_and_eval_expr("1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_names, const_values, NULL, NULL, NULL, NULL, NULL, NULL); STOP_TIMER("ff_parse_and_eval_expr") } return 0; diff --git a/libavcodec/eval.h b/libavcodec/eval.h index 50c16aff7c..6d8f1ce97d 100644 --- a/libavcodec/eval.h +++ b/libavcodec/eval.h @@ -33,37 +33,39 @@ typedef struct AVExpr AVExpr; * 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 func1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2 NULL terminated array of function pointers for functions which take 2 arguments * @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 func2_name NULL terminated array of zero terminated strings of func2 identifers - * @param error pointer to a char* which is set to an error message if something goes wrong * @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 error pointer to a char* which is set to an error message if something goes wrong * @param opaque a pointer which will be passed to all functions from func1 and func2 * @return the value of the expression */ -double ff_parse_and_eval_expr(const char *s, const double *const_value, const char * const *const_name, - double (* const *func1)(void *, double), const char * const *func1_name, - double (* const *func2)(void *, double, double), const char * const *func2_name, +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, const char **error); /** * Parses an expression. * * @param s expression as a zero terminated string for example "1+2^3+5*5+sin(2/3)" - * @param func1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2 NULL terminated array of function pointers for functions which take 2 arguments * @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 error pointer to a char* which is set to an error message if something goes wrong * @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, - double (* const *func1)(void *, double), const char * const *func1_name, - double (* const *func2)(void *, double, double), const char * const *func2_name, +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), const char **error); /** diff --git a/libavcodec/opt.c b/libavcodec/opt.c index f9cba05759..c32249eef6 100644 --- a/libavcodec/opt.c +++ b/libavcodec/opt.c @@ -156,7 +156,7 @@ int av_set_string3(void *obj, const char *name, const char *val, int alloc, cons buf[i]= val[i]; buf[i]=0; - d = ff_parse_and_eval_expr(buf, const_values, const_names, NULL, NULL, NULL, NULL, NULL, &error); + d = ff_parse_and_eval_expr(buf, const_names, const_values, NULL, NULL, NULL, NULL, NULL, &error); if(isnan(d)) { const AVOption *o_named= av_find_opt(obj, buf, o->unit, 0, 0); if(o_named && o_named->type == FF_OPT_TYPE_CONST) diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index e52ef1a295..1c459d8ae9 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -107,7 +107,7 @@ int ff_rate_control_init(MpegEncContext *s) }; emms_c(); - rcc->rc_eq_eval = ff_parse_expr(s->avctx->rc_eq ? s->avctx->rc_eq : "tex^qComp", const_names, func1, func1_names, NULL, NULL, &error); + rcc->rc_eq_eval = ff_parse_expr(s->avctx->rc_eq ? s->avctx->rc_eq : "tex^qComp", const_names, func1_names, func1, NULL, NULL, &error); if (!rcc->rc_eq_eval) { av_log(s->avctx, AV_LOG_ERROR, "Error parsing rc_eq \"%s\": %s\n", s->avctx->rc_eq, error? error : ""); return -1;