diff --git a/doc/eval.texi b/doc/eval.texi index 1ea89d675580e3e705335746b410df33bbb306c5..a1faff6e1624b326cb9034cf5cbc0697e7096806 100644 --- a/doc/eval.texi +++ b/doc/eval.texi @@ -163,6 +163,9 @@ note, when you have the derivatives at y instead of 0 taylor(expr, x-y) can be used When the series does not converge the results are undefined. +@item time(0) +The the current (wallclock) time in seconds + @item root(expr, max) Finds x where f(x)=0 in the interval 0..max. f() must be continuous or the result is undefined. diff --git a/libavutil/eval.c b/libavutil/eval.c index 6687b646f5a9b15c3135833b36eca8e0f521f7b7..6ea7504ff1b2f4f3401413274dccfe462297d46f 100644 --- a/libavutil/eval.c +++ b/libavutil/eval.c @@ -32,6 +32,7 @@ #include "eval.h" #include "log.h" #include "mathematics.h" +#include "time.h" typedef struct Parser { const AVClass *class; @@ -156,6 +157,11 @@ struct AVExpr { double *var; }; +static double etime(double v) +{ + return av_gettime() * 0.000001; +} + static double eval_expr(Parser *p, AVExpr *e) { switch (e->type) { @@ -377,6 +383,7 @@ static int parse_primary(AVExpr **e, Parser *p) else if (strmatch(next, "exp" )) d->a.func0 = exp; else if (strmatch(next, "log" )) d->a.func0 = log; else if (strmatch(next, "abs" )) d->a.func0 = fabs; + else if (strmatch(next, "time" )) d->a.func0 = etime; else if (strmatch(next, "squish")) d->type = e_squish; else if (strmatch(next, "gauss" )) d->type = e_gauss; else if (strmatch(next, "mod" )) d->type = e_mod; diff --git a/libavutil/version.h b/libavutil/version.h index c0c8fcad2eb08ee9e749df702ce55f09726a615b..6fb794357e7d655af160daae3bb304a645a9825f 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -76,7 +76,7 @@ #define LIBAVUTIL_VERSION_MAJOR 52 #define LIBAVUTIL_VERSION_MINOR 15 -#define LIBAVUTIL_VERSION_MICRO 100 +#define LIBAVUTIL_VERSION_MICRO 101 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \