Loading

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_denmax用于限制dst_numdst_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/q
  • AVRational 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):求最大公约数:分子的最大公约数/分母的最小公倍数

参考

  1. Common Number Sets
  2. Binary GCD algorithm
posted @ 2021-02-22 12:10  Suiyek  阅读(804)  评论(0编辑  收藏  举报