diff options
Diffstat (limited to 'doc/eval.texi')
-rw-r--r-- | doc/eval.texi | 104 |
1 files changed, 100 insertions, 4 deletions
diff --git a/doc/eval.texi b/doc/eval.texi index e1fd7ee..1ea89d6 100644 --- a/doc/eval.texi +++ b/doc/eval.texi @@ -1,7 +1,7 @@ @chapter Expression Evaluation @c man begin EXPRESSION EVALUATION -When evaluating an arithmetic expression, Libav uses an internal +When evaluating an arithmetic expression, FFmpeg uses an internal formula evaluator, implemented through the @file{libavutil/eval.h} interface. @@ -21,37 +21,84 @@ The following unary operators are available: @code{+}, @code{-}. The following functions are available: @table @option @item sinh(x) +Compute hyperbolic sine of @var{x}. + @item cosh(x) +Compute hyperbolic cosine of @var{x}. + @item tanh(x) +Compute hyperbolic tangent of @var{x}. + @item sin(x) +Compute sine of @var{x}. + @item cos(x) +Compute cosine of @var{x}. + @item tan(x) +Compute tangent of @var{x}. + @item atan(x) +Compute arctangent of @var{x}. + @item asin(x) +Compute arcsine of @var{x}. + @item acos(x) +Compute arccosine of @var{x}. + @item exp(x) +Compute exponential of @var{x} (with base @code{e}, the Euler's number). + @item log(x) +Compute natural logarithm of @var{x}. + @item abs(x) +Compute absolute value of @var{x}. + @item squish(x) +Compute expression @code{1/(1 + exp(4*x))}. + @item gauss(x) +Compute Gauss function of @var{x}, corresponding to +@code{exp(-x*x/2) / sqrt(2*PI)}. + @item isinf(x) Return 1.0 if @var{x} is +/-INFINITY, 0.0 otherwise. + @item isnan(x) Return 1.0 if @var{x} is NAN, 0.0 otherwise. @item mod(x, y) +Compute the remainder of division of @var{x} by @var{y}. + @item max(x, y) +Return the maximum between @var{x} and @var{y}. + @item min(x, y) +Return the maximum between @var{x} and @var{y}. + @item eq(x, y) +Return 1 if @var{x} and @var{y} are equivalent, 0 otherwise. + @item gte(x, y) +Return 1 if @var{x} is greater than or equal to @var{y}, 0 otherwise. + @item gt(x, y) +Return 1 if @var{x} is greater than @var{y}, 0 otherwise. + @item lte(x, y) +Return 1 if @var{x} is lesser than or equal to @var{y}, 0 otherwise. + @item lt(x, y) +Return 1 if @var{x} is lesser than @var{y}, 0 otherwise. + @item st(var, expr) Allow to store the value of the expression @var{expr} in an internal variable. @var{var} specifies the number of the variable where to store the value, and it is a value ranging from 0 to 9. The function returns the value stored in the internal variable. +Note, Variables are currently not shared between expressions. @item ld(var) Allow to load the value of the internal variable with number @@ -81,21 +128,70 @@ Compute the square root of @var{expr}. This is equivalent to @item not(expr) Return 1.0 if @var{expr} is zero, 0.0 otherwise. + +@item pow(x, y) +Compute the power of @var{x} elevated @var{y}, it is equivalent to +"(@var{x})^(@var{y})". + +@item random(x) +Return a pseudo random value between 0.0 and 1.0. @var{x} is the index of the +internal variable which will be used to save the seed/state. + +@item hypot(x, y) +This function is similar to the C function with the same name; it returns +"sqrt(@var{x}*@var{x} + @var{y}*@var{y})", the length of the hypotenuse of a +right triangle with sides of length @var{x} and @var{y}, or the distance of the +point (@var{x}, @var{y}) from the origin. + +@item gcd(x, y) +Return the greatest common divisor of @var{x} and @var{y}. If both @var{x} and +@var{y} are 0 or either or both are less than zero then behavior is undefined. + +@item if(x, y) +Evaluate @var{x}, and if the result is non-zero return the result of +the evaluation of @var{y}, return 0 otherwise. + +@item ifnot(x, y) +Evaluate @var{x}, and if the result is zero return the result of the +evaluation of @var{y}, return 0 otherwise. + +@item taylor(expr, x) taylor(expr, x, id) +Evaluate a taylor series at x. +expr represents the LD(id)-th derivates of f(x) at 0. If id is not specified +then 0 is assumed. +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 root(expr, max) +Finds x where f(x)=0 in the interval 0..max. +f() must be continuous or the result is undefined. +@end table + +The following constants are available: +@table @option +@item PI +area of the unit disc, approximately 3.14 +@item E +exp(1) (Euler's number), approximately 2.718 +@item PHI +golden ratio (1+sqrt(5))/2, approximately 1.618 @end table -Note that: +Assuming that an expression is considered "true" if it has a non-zero +value, note that: @code{*} works like AND @code{+} works like OR -thus +and the construct: @example if A then B else C @end example is equivalent to @example -A*B + not(A)*C +if(A,B) + ifnot(A,C) @end example In your C code, you can extend the list of unary and binary functions, |