summaryrefslogtreecommitdiff
path: root/libavutil
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-10-08 03:08:18 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-10-08 03:13:21 +0200
commit8fd56f7b121262e3305dfee57737f0ad45b3c6ff (patch)
treecfdce9aaaec99a220d318de1d68ab4b4d20112e5 /libavutil
parent74f77eb048913ad764537f79fd954d2db3f7fd55 (diff)
eval: make variables persistent so they can be used between evaluations.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavutil')
-rw-r--r--libavutil/eval.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libavutil/eval.c b/libavutil/eval.c
index 7ddb1f83c0..1ec56946d8 100644
--- a/libavutil/eval.c
+++ b/libavutil/eval.c
@@ -44,7 +44,7 @@ typedef struct Parser {
int log_offset;
void *log_ctx;
#define VARS 10
- double var[VARS];
+ double *var;
} Parser;
static const AVClass class = { "Eval", av_default_item_name, NULL, LIBAVUTIL_VERSION_INT, offsetof(Parser,log_offset), offsetof(Parser,log_ctx) };
@@ -136,6 +136,7 @@ struct AVExpr {
double (*func2)(void *, double, double);
} a;
struct AVExpr *param[2];
+ double *var;
};
static double eval_expr(Parser *p, AVExpr *e)
@@ -190,6 +191,7 @@ void av_expr_free(AVExpr *e)
if (!e) return;
av_expr_free(e->param[0]);
av_expr_free(e->param[1]);
+ av_freep(&e->var);
av_freep(&e);
}
@@ -510,6 +512,7 @@ int av_expr_parse(AVExpr **expr, const char *s,
ret = AVERROR(EINVAL);
goto end;
}
+ e->var= av_mallocz(sizeof(double) *VARS);
*expr = e;
end:
av_free(w);
@@ -519,6 +522,7 @@ end:
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque)
{
Parser p = { 0 };
+ p.var= e->var;
p.const_values = const_values;
p.opaque = opaque;