1 式の評価

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

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

2つの式 expr1expr2 を結合して別の式 "expr1;expr2" を構成することができます。 expr1expr2 が順に評価され、この新しい式は 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