式の評価
****

算術的な式を評価する際に、Libav は内部の数式評価器を使います。これは libavutil/eval.h インターフェイスを通じて実装されています。

式は1引数および2引数演算子、定数および関数を含みます。

2つの式 EXPR1 と EXPR2 を結合して別の式 "EXPR1;EXPR2" を構成することができます。 EXPR1 と EXPR2 が順に評価され、この新しい式は EXPR2 の値を自身の値とします。

次の2引数演算子が利用できます: +、-、 *、/、^。

次の1引数演算子が利用できます: +、-。

次の関数が利用できます:

sinh(x)

cosh(x)

tanh(x)

sin(x)

cos(x)

tan(x)

atan(x)

asin(x)

acos(x)

exp(x)

log(x)

abs(x)

squish(x)

gauss(x)

isinf(x)
     X が +/-INFINITY なら1.0、さもなくば0.0。

isnan(x)
     X が NAN なら1.0、さもなくば0.0。

mod(x, y)

max(x, y)

min(x, y)

eq(x, y)

gte(x, y)

gt(x, y)

lte(x, y)

lt(x, y)

st(var, expr)
     式 EXPR の値を内部の変数に格納できます。 VAR は値を格納する変数を示す番号で、 0から9までの範囲の値です。この関数は内部の変数に格納される値を返します。

ld(var)
     番号 VAR を持つ内部の変数の値をロードできます。これは以前に st(VAR, EXPR) で格納されたものです。この関数はロードされた値を返します。

while(cond, expr)
     式 COND が0でない間、式 EXPR を評価します。そして最後の EXPR の評価の値を返します。 COND がいつも false なら NAN を返します。

ceil(expr)
     式 EXPR の値を大きくなる方向に最も近い整数に丸めます。例えば、"ceil(1.5)" は "2.0" です。

floor(expr)
     式 EXPR の値を小さくなる方向に最も近い整数に丸めます。例えば、"floor(-1.5)"はs "-2.0 です。

trunc(expr)
     式 EXPR の値を0の方向に最も近い整数に丸めます。例えば、"trunc(-1.5)" は "-1.0" です。

sqrt(expr)
     EXPR の平方根を計算します。これは "(EXPR)^.5" と同じです。

not(expr)
     EXPR が0なら1.0、さもなくば0.0を返します。

以下の点に注意してください:

* は AND のように動作します

+ は OR のように動作します

したがって

     A ならば B、さもなくば C

は次と同値です:

     A*B + not(A)*C

C のコードでは、1引数および2引数関数の一覧を広げることができ、解読される定数を定義することができるので、それらを式で利用することができます。

評価器はまた International System number postfix を解読します。 'i' が postfix の直後に追加されると、10の累乗の代わりに2の累乗が用いられます。'B' postfix によって8倍になり、他の postfix の直後または単独で利用できます。これによって例えば 'KB'、'MiB'、'G' および 'B' が postfix として許されます。

以下は利用できる International System postfix の一覧で、 10の累乗および2の累乗に対応する表示をともないます。

y
     -24 / -80

z
     -21 / -70

a
     -18 / -60

f
     -15 / -50

p
     -12 / -40

n
     -9 / -30

u
     -6 / -20

m
     -3 / -10

c
     -2

d
     -1

h
     2

k
     3 / 10

K
     3 / 10

M
     6 / 20

G
     9 / 30

T
     12 / 40

P
     15 / 40

E
     18 / 50

Z
     21 / 60

Y
     24 / 70