FFMpeg源码浅读 —— AVRational
定义
定义于:<libavuitl/rational.h>
/**
* 有理数的定义.
*/
typedef struct AVRational{
int num; ///< Numerator
int den; ///< Denominator
} AVRational;
相关函数:
在数学的数集定义中,Q代表有理数(Rational Numbers),这就是为什么每个函数都以_q
结尾的原因。(见:参考1)
AVRational av_make_q(int num, int den)
:顾名思义int av_cmp_q(AVRational a, AVRational b)
:- 0:a等于b
- 1:a大于b
- -1:a小于b
- INT_MIN:a或b存在不合法的
0/0
double av_q2d(AVRational a)
:算出实际的数(分母会被强转为double
类型,不会出现除0异常,除0返回std::numeric_limits<double>::infinity()
)int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
:一般用于帧率计算。 求num/den的化简,输出结果保存在dst_num/dst_den,max用于限制dst_num和dst_den任何一个都不能大于它,一般用INT_MAX
AVRational av_mul_q(AVRational b, AVRational c)
:计算两个有理数相乘AVRational av_div_q(AVRational b, AVRational c)
:计算两个有理数相除AVRational av_add_q(AVRational b, AVRational c)
:计算两个有理数相加AVRational av_sub_q(AVRational b, AVRational c)
:计算两个有理数相减AVRational av_inv_q(AVRational q)
:求有理数的倒数1/qAVRational av_d2q(double d, int max)
:双精度浮点数转有理数分数表示,max限制分子分母的最大值。int av_nearer_q(AVRational q, AVRational q1, AVRational q2)
:求q1和q2与q的差值的绝对值哪个更小- 0:q1和q2离q的距离一样远
- 1:q1和q的距离更近
- -1:q2离q的距离更近
int av_find_nearest_q_idx(AVRational q, const AVRational* q_list)
:在q_list(以分母为0的节点作为链表结尾)中找出离q最近的数在q_list中的位置索引。uint32_t av_q2intfloat(AVRational q)
:转为IEEE 32-bit float
AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def)
:求最大公约数:分子的最大公约数/分母的最小公倍数