36 int64_t num, int64_t den, int64_t max)
39 int sign = (num < 0) ^ (den < 0);
43 num =
FFABS(num) / gcd;
44 den =
FFABS(den) / gcd;
46 if (num <= max && den <= max) {
52 uint64_t x = num / den;
53 int64_t next_den = num - den * x;
54 int64_t a2n = x * a1.num + a0.
num;
55 int64_t a2d = x * a1.den + a0.
den;
57 if (a2n > max || a2d > max) {
58 if (a1.num) x = (max - a0.
num) / a1.num;
59 if (a1.den) x =
FFMIN(x, (max - a0.
den) / a1.den);
61 if (den * (2 * x * a1.den + a0.
den) > num * a1.den)
73 *dst_num = sign ? -a1.num : a1.num;
83 b.
den * (int64_t) c.
den, INT_MAX);
96 b.
den * (int64_t) c.
den, INT_MAX);
108 #define LOG2 0.69314718055994530941723212145817656807550013436025
115 exponent =
FFMAX( (
int)(log(fabs(d) + 1e-20)/
LOG2), 0);
116 den = 1LL << (61 - exponent);
125 int64_t
a = q1.
num * (int64_t)q2.
den + q2.
num * (int64_t)q1.
den;
126 int64_t
b = 2 * (int64_t)q1.
den * q2.
den;
139 int i, nearest_q_idx = 0;
140 for (i = 0; q_list[i].
den; i++)
141 if (
av_nearer_q(q, q_list[i], q_list[nearest_q_idx]) > 0)
144 return nearest_q_idx;
int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_const
Rescale a 64-bit integer with specified rounding.
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
simple assert() macros that are a bit more flexible than ISO C assert().
static av_always_inline av_const int isnan(float x)
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
AVRational av_add_q(AVRational b, AVRational c)
Add two rationals.
int av_nearer_q(AVRational q, AVRational q1, AVRational q2)
AVRational av_div_q(AVRational b, AVRational c)
Divide one rational by another.
int64_t av_const av_gcd(int64_t a, int64_t b)
Return the greatest common divisor of a and b.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
AVRational av_sub_q(AVRational b, AVRational c)
Subtract one rational from another.
AVRational av_d2q(double d, int max)
Convert a double precision floating point number to a rational.
int av_find_nearest_q_idx(AVRational q, const AVRational *q_list)
Find the nearest value in q_list to q.
if(ac->has_optimized_func)
rational number numerator/denominator
static av_always_inline av_const int isinf(float x)
common internal and external API header
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.