算術的な式を評価する際に、Libav は内部の数式評価器を使います。 これは ‘libavutil/eval.h’ インターフェイスを通じて実装されて います。
式は1引数および2引数演算子、定数および関数を含みます。
2つの式 expr1 と expr2 を結合して別の式 "expr1;expr2" を構成することができます。 expr1 と expr2 が順に評価され、この新しい式は expr2 の値を自身の値とします。
次の2引数演算子が利用できます: +
、-
、
*
、/
、^
。
次の1引数演算子が利用できます: +
、-
。
次の関数が利用できます:
x が +/-INFINITY なら1.0、さもなくば0.0。
x が NAN なら1.0、さもなくば0.0。
式 expr の値を内部の変数に格納できます。 var は値を格納する変数を示す番号で、 0から9までの範囲の値です。 この関数は内部の変数に格納される値を返します。
番号 var を持つ内部の変数の値をロードできます。 これは以前に st(var, expr) で格納されたものです。 この関数はロードされた値を返します。
式 cond が0でない間、式 expr を評価します。 そして最後の expr の評価の値を返します。 cond がいつも false なら NAN を返します。
式 expr の値を大きくなる方向に最も近い整数に丸めます。 例えば、"ceil(1.5)" は "2.0" です。
式 expr の値を小さくなる方向に最も近い整数に丸めます。 例えば、"floor(-1.5)"はs "-2.0 です。
式 expr の値を0の方向に最も近い整数に丸めます。 例えば、"trunc(-1.5)" は "-1.0" です。
expr の平方根を計算します。これは "(expr)^.5" と 同じです。
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の累乗に対応する表示をともないます。
-24 / -80
-21 / -70
-18 / -60
-15 / -50
-12 / -40
-9 / -30
-6 / -20
-3 / -10
-2
-1
2
3 / 10
3 / 10
6 / 20
9 / 30
12 / 40
15 / 40
18 / 50
21 / 60
24 / 70