ffmpeg文档08-表达式计算/求值

8 表达式计算/求值

在计算表达式时,ffmpeg通过libavutil/eval.h接口调用内部计算器进行计算。

表达式可以包含一元运算符、运算符、常数和函数

两个表达式expr1expr2可以组合起来成为"expr1;expr2" ,两个表达式都会被计算,但是新表达式(组合起来的)值实为表达式expr2的值。

表达式支持的二元运算符有:+-*,/,^

一元运算符:+,-

以及下面的函数:

  • abs(x)

    返回x的绝对值.

  • acos(x)

    计算x反余弦 .

  • asin(x)

    计算x的反正弦.

  • atan(x)

    计算x反正切.

  • between(x, min, max)

    判断min<=x<=max是否成立,成立返回1,否则返回0.

  • bitand(x, y)
  • bitor(x, y)

    返回x和y按位与/或的值

    注意计算是作为整数的,转换为整数和转换回浮点数都会损伤精度。这可能造成意外结果(通常2^53和更大的数)

  • ceil(expr)

    返回大于expr的最接近整数,例如"ceil(1.5)" 返回"2.0".

  • clip(x, min, max)

    Return the value of x clipped between min and max.

  • cos(x)

    计算x的余弦.

  • cosh(x)

    计算x的双余弦.

  • eq(x, y)

    如果x==y返回1,否则为0 otherwise.

  • exp(x)

    计算指数x,(底数为e,即计算欧拉数(Euler’s number))

  • floor(expr)

    返回不大于expr的整数,例如 "floor(-1.5)" 为 "-2.0".

  • gauss(x)

    计算x的高斯(Gauss )函数值,即计算(-xx/2) / sqrt(2PI).

  • gcd(x, y)

    返回x和y的最大公约数,如果x和y为0或者任意数小于0则行为未定义。

  • gt(x, y)

    返回判断x>y的结果,符合则为1,否则为0

  • gte(x, y)

    返回判断x>=y的结果,符合则为1,否则为0

  • hypot(x, y)

    这个和C语言中的函数有相同名字和功能,相当于计算"sqrt(xx + yy)",是求长为x,宽为y的斜边长度(勾股定理)

  • if(x, y)

    判断x值,如果x值为非0,则返回y,否则返回0

  • if(x, y, z)

    判断x值,如果x值为非0,则返回y,否则返回z.

  • ifnot(x, y)

    判断x值,如果x值为0,则返回y,否则返回0

  • ifnot(x, y, z)

    判断x值,如果x值为0,则返回y,否则返回z.

  • isinf(x)

    如果x值是正负无穷则返回1.0.否则返回0.0

  • isnan(x)

    如果x是NAN则返回1.0,否则返回0.0

  • ld(var)

    加载预订的内部变量var对应值,其中值是利用st(var, expr)存储的

  • log(x)

    计算x的自然对数值

  • lt(x, y)

    返回x<y判断式值,符合为1,否则为0

  • lte(x, y)

    返回x<=y判断式值,符合为1,否则为0

  • max(x, y)

    返回x和y中的更大的值

  • min(x, y)

    返回x和y中的更小的值

  • mod(x, y)

    计算x%y

  • not(expr)

    如果expr==0则返回1,否则返回0

  • pow(x, y)

    计算"(x)^(y)".

  • print(t)
  • print(t, l)

    以日志层次l打印t,如果l没有定义则采用当前默认日志层次,返回打印内容。

  • random(x)

    返回一个0.0-1.0间的随机数,x是一个随机数种子。

  • root(expr, max)

    对于不同的输入计算表达式expr的值,直到max输入值。即依次取ld(x),x的值为0..max,把ld(x)值作为参数计算expr值

    表达式expr必须是一个连续函数,否则结果不定。

    ld(0)被用作expr表达式的参数,所以表达式可以依据不同的值计算多次。

  • sin(x)

    计算x的正弦

  • sinh(x)

    计算x的双曲正弦

  • sqrt(expr)

    计算x的平方根。相当于 "(expr)^.5".

  • squish(x)

    计算 1/(1 + exp(4*x)).

  • st(var, expr)

    对var变量在内部存储一个expr值,供以后使用,var范围为0-9.注意这些变量当前不能在表达式间共享

  • tan(x)

    返回x的正切.

  • tanh(x)

    计算x的双曲正切

  • taylor(expr, x)
  • taylor(expr, x, id)

    计算泰勒(Taylor)级数值。给出表达式(ld(id))在0阶的导数函数,即taylor(expr,x)=taylor(expr,x,0)

    如果级数不收敛,则结果是不确定的。

    ld(id)用来表示expr的导数阶,这意味着对给定的表达式,输入不同的值可以通过ld(id)进行多次计算。这里我们假定不是预设的0阶。

    注意当你用一个Y值替代默认的0时,相当于计算 taylor(expr, x-y)

  • time(0)

    返回当前时间,单位为秒

  • trunc(expr)

    返回expr最接近的(向0)整数,如"trunc(-1.5)" 值为 "-1.0".

  • while(cond, expr)

    当cond不为0时循环执行expr,直至cond为0

有如下一些常量:

  • PI

    单位圆周长与直径比,约3.14

  • E

    exp(1)计算值 (Euler’s 欧拉数),约2.718

  • PHI

    黄金分割比,(1+sqrt(5))/2计算值,约1.618

以及布尔运算,其中非0值表示"true"(真),以及运算符:

  • * 表示 AND 与操作
  • + 表示 OR 或操作

例如:
要表示 if (A AND B) then C

等效于if(A*B,C)

如果你了解C语言代码,其所有的一元和二元以及定义的常数均可用于表达式。

表达式也支持国际标准的单位前/后缀(定义),例如i附加在数值后,表示这个数值是基于1024而不是1000计算幂的,"B"表示"Byte",并可以附加一个单位前缀或者当地使用,例如允许KBMiBGB作为单位后缀。

下面的列表就是当前遵循的国际体系前缀列表,并给出了对应2的整10次方值:

y

10^-24 / 2^-80

z

10^-21 / 2^-70

a

10^-18 / 2^-60

f

10^-15 / 2^-50

p

10^-12 / 2^-40

n

10^-9 / 2^-30

u

10^-6 / 2^-20

m

10^-3 / 2^-10

c

10^-2

d

10^-1

h

10^2

k

10^3 / 2^10

K

10^3 / 2^10

M

10^6 / 2^20

G

10^9 / 2^30

T

10^12 / 2^40

P

10^15 / 2^40

E

10^18 / 2^50

Z

10^21 / 2^60

Y

10^24 / 2^70
时间: 2024-08-04 03:40:42

ffmpeg文档08-表达式计算/求值的相关文章

爪哇国新游记之二十二----算术表达式计算求值

代码: import java.util.ArrayList; import java.util.List; // 辅助类 class Item{ String value; boolean isNumber; public Item(String value,boolean isNumber){ this.value=value; this.isNumber=isNumber; } public Item(char c,boolean isNumber){ this.value=String.

前缀表达式的求值

前面发了中缀表达式和后缀表达式的求值方法,在这儿,前缀表达式也差不多 #include<iostream> #include<stack> #include<string> using namespace std; int judge(char popx,char x); int func(string String,int *i); int calculate(int x,int y,char str); int main() { int n,i; string a;

广工 数据结构 表达式类型求值(上)

一.  需求分析 一个表达式和一棵树之间存在自然的对应关系,实现以下操作: (1)以字符序列的形式输入语法正确的后缀表达式并构造表达式. (2)可实现对应原表达式的加.减.乘.除四则混合运算. (3)运算数可以是整数.实数或变量,若是变量,可对变量赋值,以求得对应原表达式的值. (4)可以求表达式的中缀和后缀序列,还可以求所建立的二叉树的深度. [测试数据] 1)分别输入0:a; -91; 2 4 +; 1.5 a uuu / *; 2  11 + 3 ^并输出. 2)每当输入一个表达式后,对其

广工 数据结构 表达式类型求值(下)

设计和调试分析 1.      在建立二叉树时,要遵循一个原则,那就是运算符做为分支结点,操作数做为叶子结点,利用栈进行操作.当遇到操作数是,无论是变量还是实数或整数,都将入栈.当遇到运算符号时,把栈顶的两个元素弹出来进行运算,然后再把运算结果放入栈中.如果你输入的是正确的后缀表达式,那么,最终要建立的那棵树就是栈中唯一的一个元素.与此同时,也可以用这个结果来作为判断用户输入的表达式是否为正确的后缀表达式,当最后的栈中出现多于一棵二叉树时,说明此表达式不是正确的后缀表达式. 2.      二叉

(华为机试)双向链表实现字符串条件表达式的求值

描述: 给定一个以字符串形式表示的算术表达式,计算该表达式的值. 表达式支持如下运算:"+.-.*./",其中"*"和"/"的优先级要高于"+"和"-": 不需要考虑括号,且表达式之间没有空格: 例如:对于表达式"3-2+15*2",该表达式值为31. 运行时间限制: 60 Sec 内存限制: 256 MByte 输入: 加减乘除四则运算表达式,长度不超过1024字节,运算式中不含有括号

ffmpeg文档43-开发者

43 开发者 是FFmpeg的开发者 关于作者的详细信息,可以观看项目(git://source.ffmpeg.org/ffmpeg)的Git历史,或者项目中目录中使用命令git log了解,或者浏览在线的源码(http://source.ffmpeg.org) 源代码树中维护者文件(MAINTAINERS)列出了特定组件的维护人员 另本文档英文版本由makeinfo于2015年6月16日生成 汉化翻译补充说明 由xdsnet(xdsnet at gmail dot com)在2015年6月16

C语言对表达式的求值顺序不是明确规定的

讨论区看到的 WA来自那些递归下降求解的代码. 第一种情况,使用|| 和 &&: 例如s为所给串 int getval() { switch(s[c_s++]) { case 'p': return (value & (1 << 0))? 1:0; case 'q': return (value & (1 << 1))? 1:0; case 'r': return (value & (1 << 2))? 1:0; case 's'

简单算术表达式的求值程序

题目: 写一个三则运算(加减乘)表达式的求值程序,为了简化,规定数字只有一位,表达式内没有空格,但允许有括号.满足四则运算的结合性和优先级. 解答: 这是一道编译原理题,题目的要求把词法分析简单化了,只做语法分析.一般使用递归下降法求解. 首先写出BNF(包括结合性和优先权). exp → exp addop term | t e r m addop → + | - term → term mulop factor | f a c t o r mulop → * factor → ( exp )

ffmpeg文档16-音频编码器

16 音频编码器 介绍当前可用的音频编码器 aac AAC(Advanced Audio Coding )编码器 当前原生(内置)编码器还处于实验阶段,而且只能支持AAC-LC(低复杂度AAC).要使用这个编码器,必须选择 ‘experimental’或者'lower' 因为当前还处于实验期,所以很多意外可能发生.如果需要一个更稳定的AAC编码器,参考libvo-aacenc,然而它也有一些负面报告. aac选项 b 设置码率,单位是bits/s,是自动恒定比特率(CBR)模式的码率 q 设置为