1 式の評価

算術的な式を評価する際に、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