summaryrefslogtreecommitdiff
path: root/doc/eval.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/eval.texi')
-rw-r--r--doc/eval.texi104
1 files changed, 100 insertions, 4 deletions
diff --git a/doc/eval.texi b/doc/eval.texi
index e1fd7ee484..1ea89d6755 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,