FFMPEG学习【libavutil】:Mathematics:AVRational

xiaoxiao2021-02-28  131

Rationnal数的计算。

虽然rational数字可以表示为浮点数,但是转换过程是一个有损的,浮点操作也是如此。另一方面,FFmpeg的性质要求精确地计算时间戳。这组有理数实用程序充当了一个通用接口,用于操作有理数作为数字和分母的一对。

在AVRational的许多函数中都有后缀q,这是指数学符号“”(q),它表示所有有理数的集合。

一、数据结构

struct   AVRational{ int num; int den; }

二、函数

static AVRational  av_make_q (int num, int den) 创建AVRationnal。

对不支持复合文字的编译器有用。

注意:返回值并没有减少。

static int  av_cmp_q (AVRational a, AVRational b) 比较两个rational。

参数:a:第一个有理数

   b:第二个有理数

返回:下列值的其中一个

    0如果a==b

    1如果a>b

     -1如果a<b

     INT_MIN如果其中一个值事0/0

static double  av_q2d (AVRational a) 将AVRationnal转换为double。

参数:a:用来转换的AVRationnal。

返回:一个浮点形式。

int  av_reduce (int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max) 减少一部分。

这对于framerate的计算很有用。

参数:dst_num:目的分子

   dst_den:目的分母

   num:源分子

   den:源分母

   max:最大允许dst_num&dst_den的值

返回:如果操作正确,返回1,否则返回0、

AVRational  av_mul_q (AVRational b, AVRational c) av_const 两个rationnal相乘。

参数:b:第一个有理数

   c:第二个有理数

返回:b*c

AVRational  av_div_q (AVRational b, AVRational c) av_const 使用一个rationnal除以另一个。

参数:b:第一个有理数

   c:第二个有理数

返回:b/c

AVRational  av_add_q (AVRational b, AVRational c) av_const 把两个 rationnal相加。

参数:b:第一个有理数

  c:第二个有理数

返回:b+c

AVRational  av_add_q (AVRational b, AVRational c) av_const 使用rationnal减去另外一个。

参数:b:第一个有理数

   c:第二个有理数

返回:b-c

static av_always_inline AVRational  av_inv_q (AVRational q) 反转一个rationnal。

参数:q:值

返回:1/q

AVRational  av_d2q (double d, int max) av_const 将双精度浮点数转换为一个rational。

在无穷大的情况下,返回的值被表示为1、0或-1,这取决于符号。

参数:d:双转换

   max:最大允许的分子和分母

返回:d AVRationnal形式

int  av_nearer_q (AVRational q, AVRational q1, AVRational q2) 找出两个rationnal中那个更接近rantional。

参数:q:理性的加以比较值

   q1,q2:用来测试的有理数

返回:下列值得一个

    1如果Q1接近Q而不是Q2

    -1如果Q2比Q值接近Q值1

    0如果它们有相同的距离

int  av_find_nearest_q_idx (AVRational q, const AVRational *q_list) 在一个给定的参考rational的最接近的rational的列表中找到它的值。

参数:q:参考有理数

   q_list:有理数的终止{0, 0}阵

返回:数组中最近值的索引

uint32_t  av_q2intfloat (AVRational q) 将AVRational转换为以固定点格式表示的IEEE 32位浮点数。

参数:q:用来转换的有理数

返回:等效浮点值,表示为无符号32位整数。

注意:返回值是平台独立的。

转载请注明原文地址: https://www.6miu.com/read-49718.html

最新回复(0)