157 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| @chapter Expression Evaluation
 | |
| @c man begin EXPRESSION EVALUATION
 | |
| 
 | |
| When evaluating an arithmetic expression, Libav uses an internal
 | |
| formula evaluator, implemented through the @file{libavutil/eval.h}
 | |
| interface.
 | |
| 
 | |
| An expression may contain unary, binary operators, constants, and
 | |
| functions.
 | |
| 
 | |
| Two expressions @var{expr1} and @var{expr2} can be combined to form
 | |
| another expression "@var{expr1};@var{expr2}".
 | |
| @var{expr1} and @var{expr2} are evaluated in turn, and the new
 | |
| expression evaluates to the value of @var{expr2}.
 | |
| 
 | |
| The following binary operators are available: @code{+}, @code{-},
 | |
| @code{*}, @code{/}, @code{^}.
 | |
| 
 | |
| The following unary operators are available: @code{+}, @code{-}.
 | |
| 
 | |
| The following functions are available:
 | |
| @table @option
 | |
| @item sinh(x)
 | |
| @item cosh(x)
 | |
| @item tanh(x)
 | |
| @item sin(x)
 | |
| @item cos(x)
 | |
| @item tan(x)
 | |
| @item atan(x)
 | |
| @item asin(x)
 | |
| @item acos(x)
 | |
| @item exp(x)
 | |
| @item log(x)
 | |
| @item abs(x)
 | |
| @item squish(x)
 | |
| @item gauss(x)
 | |
| @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)
 | |
| @item max(x, y)
 | |
| @item min(x, y)
 | |
| @item eq(x, y)
 | |
| @item gte(x, y)
 | |
| @item gt(x, y)
 | |
| @item lte(x, y)
 | |
| @item lt(x, y)
 | |
| @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.
 | |
| 
 | |
| @item ld(var)
 | |
| Allow to load the value of the internal variable with number
 | |
| @var{var}, which was previously stored with st(@var{var}, @var{expr}).
 | |
| The function returns the loaded value.
 | |
| 
 | |
| @item while(cond, expr)
 | |
| Evaluate expression @var{expr} while the expression @var{cond} is
 | |
| non-zero, and returns the value of the last @var{expr} evaluation, or
 | |
| NAN if @var{cond} was always false.
 | |
| 
 | |
| @item ceil(expr)
 | |
| Round the value of expression @var{expr} upwards to the nearest
 | |
| integer. For example, "ceil(1.5)" is "2.0".
 | |
| 
 | |
| @item floor(expr)
 | |
| Round the value of expression @var{expr} downwards to the nearest
 | |
| integer. For example, "floor(-1.5)" is "-2.0".
 | |
| 
 | |
| @item trunc(expr)
 | |
| Round the value of expression @var{expr} towards zero to the nearest
 | |
| integer. For example, "trunc(-1.5)" is "-1.0".
 | |
| 
 | |
| @item sqrt(expr)
 | |
| Compute the square root of @var{expr}. This is equivalent to
 | |
| "(@var{expr})^.5".
 | |
| 
 | |
| @item not(expr)
 | |
| Return 1.0 if @var{expr} is zero, 0.0 otherwise.
 | |
| @end table
 | |
| 
 | |
| Note that:
 | |
| 
 | |
| @code{*} works like AND
 | |
| 
 | |
| @code{+} works like OR
 | |
| 
 | |
| thus
 | |
| @example
 | |
| if A then B else C
 | |
| @end example
 | |
| is equivalent to
 | |
| @example
 | |
| A*B + not(A)*C
 | |
| @end example
 | |
| 
 | |
| In your C code, you can extend the list of unary and binary functions,
 | |
| and define recognized constants, so that they are available for your
 | |
| expressions.
 | |
| 
 | |
| The evaluator also recognizes the International System number
 | |
| postfixes. If 'i' is appended after the postfix, powers of 2 are used
 | |
| instead of powers of 10. The 'B' postfix multiplies the value for 8,
 | |
| and can be appended after another postfix or used alone. This allows
 | |
| using for example 'KB', 'MiB', 'G' and 'B' as postfix.
 | |
| 
 | |
| Follows the list of available International System postfixes, with
 | |
| indication of the corresponding powers of 10 and of 2.
 | |
| @table @option
 | |
| @item y
 | |
| -24 / -80
 | |
| @item z
 | |
| -21 / -70
 | |
| @item a
 | |
| -18 / -60
 | |
| @item f
 | |
| -15 / -50
 | |
| @item p
 | |
| -12 / -40
 | |
| @item n
 | |
| -9 / -30
 | |
| @item u
 | |
| -6 / -20
 | |
| @item m
 | |
| -3 / -10
 | |
| @item c
 | |
| -2
 | |
| @item d
 | |
| -1
 | |
| @item h
 | |
| 2
 | |
| @item k
 | |
| 3 / 10
 | |
| @item K
 | |
| 3 / 10
 | |
| @item M
 | |
| 6 / 20
 | |
| @item G
 | |
| 9 / 30
 | |
| @item T
 | |
| 12 / 40
 | |
| @item P
 | |
| 15 / 40
 | |
| @item E
 | |
| 18 / 50
 | |
| @item Z
 | |
| 21 / 60
 | |
| @item Y
 | |
| 24 / 70
 | |
| @end table
 | |
| 
 | |
| @c man end
 |