mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
Change the order of parameters for ff_eval_expr() and
ff_parse_and_eval_expr(), place the names for constants/functions before the corresponding values. This looks more readable, as the user is expected to know the names before the values. Originally committed as revision 23149 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
ec1d1afc09
commit
edd259f92f
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 52
|
#define LIBAVCODEC_VERSION_MAJOR 52
|
||||||
#define LIBAVCODEC_VERSION_MINOR 67
|
#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, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
LIBAVCODEC_VERSION_MINOR, \
|
LIBAVCODEC_VERSION_MINOR, \
|
||||||
|
@ -369,9 +369,10 @@ static int verify_expr(AVExpr * e) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AVExpr *ff_parse_expr(const char *s, const char * const *const_name,
|
AVExpr *ff_parse_expr(const char *s,
|
||||||
double (* const *func1)(void *, double), const char * const *func1_name,
|
const char * const *const_name,
|
||||||
double (* const *func2)(void *, double, double), const char * const *func2_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){
|
const char **error){
|
||||||
Parser p;
|
Parser p;
|
||||||
AVExpr *e = NULL;
|
AVExpr *e = NULL;
|
||||||
@ -412,11 +413,12 @@ double ff_eval_expr(AVExpr * e, const double *const_value, void *opaque) {
|
|||||||
return eval_expr(&p, e);
|
return eval_expr(&p, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
double ff_parse_and_eval_expr(const char *s, const double *const_value, const char * const *const_name,
|
double ff_parse_and_eval_expr(const char *s,
|
||||||
double (* const *func1)(void *, double), const char * const *func1_name,
|
const char * const *const_name, const double *const_value,
|
||||||
double (* const *func2)(void *, double, double), const char * const *func2_name,
|
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){
|
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;
|
double d;
|
||||||
if (!e) return NAN;
|
if (!e) return NAN;
|
||||||
d = ff_eval_expr(e, const_value, opaque);
|
d = ff_eval_expr(e, const_value, opaque);
|
||||||
@ -438,12 +440,12 @@ static const char *const_names[]={
|
|||||||
};
|
};
|
||||||
int main(void){
|
int main(void){
|
||||||
int i;
|
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 == 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_values, const_names, 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++){
|
for(i=0; i<1050; i++){
|
||||||
START_TIMER
|
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")
|
STOP_TIMER("ff_parse_and_eval_expr")
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -33,37 +33,39 @@ typedef struct AVExpr AVExpr;
|
|||||||
* Note, this is significantly slower than ff_eval_expr().
|
* 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 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 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 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
|
* @param opaque a pointer which will be passed to all functions from func1 and func2
|
||||||
* @return the value of the expression
|
* @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 ff_parse_and_eval_expr(const char *s,
|
||||||
double (* const *func1)(void *, double), const char * const *func1_name,
|
const char * const *const_name, const double *const_value,
|
||||||
double (* const *func2)(void *, double, double), const char * const *func2_name,
|
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);
|
void *opaque, const char **error);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses an expression.
|
* Parses an expression.
|
||||||
*
|
*
|
||||||
* @param s expression as a zero terminated string for example "1+2^3+5*5+sin(2/3)"
|
* @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 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_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_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 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
|
* @return AVExpr which must be freed with ff_free_expr() by the user when it is not needed anymore
|
||||||
* NULL if anything went wrong
|
* NULL if anything went wrong
|
||||||
*/
|
*/
|
||||||
AVExpr *ff_parse_expr(const char *s, const char * const *const_name,
|
AVExpr *ff_parse_expr(const char *s,
|
||||||
double (* const *func1)(void *, double), const char * const *func1_name,
|
const char * const *const_name,
|
||||||
double (* const *func2)(void *, double, double), const char * const *func2_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);
|
const char **error);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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]= val[i];
|
||||||
buf[i]=0;
|
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)) {
|
if(isnan(d)) {
|
||||||
const AVOption *o_named= av_find_opt(obj, buf, o->unit, 0, 0);
|
const AVOption *o_named= av_find_opt(obj, buf, o->unit, 0, 0);
|
||||||
if(o_named && o_named->type == FF_OPT_TYPE_CONST)
|
if(o_named && o_named->type == FF_OPT_TYPE_CONST)
|
||||||
|
@ -107,7 +107,7 @@ int ff_rate_control_init(MpegEncContext *s)
|
|||||||
};
|
};
|
||||||
emms_c();
|
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) {
|
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 : "");
|
av_log(s->avctx, AV_LOG_ERROR, "Error parsing rc_eq \"%s\": %s\n", s->avctx->rc_eq, error? error : "");
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user