61static av_int128
gcd128(av_int128
a, av_int128
b)
85 const uint64_t gcd =
gcd_u64(n, d);
91 if (!((n | d) >> 63)) {
93 if (num_sign ^ den_sign)
151 if (num_sign ^ den_sign)
158 return x >= -INT32_MAX && x <= INT32_MAX;
169 const int sign = (
num < 0) ^ (den < 0);
170 uint64_t n =
num < 0 ? -(uint64_t)
num :
num;
171 uint64_t d = den < 0 ? -(uint64_t) den : den;
172 const uint64_t gcd =
gcd_u64(n, d);
191 test = (p > q) - (p < q);
199 return (
a.den < 0) ^ (
b.den < 0) ? -
test :
test;
200 else if (
b.den &&
a.den)
202 else if (
a.num &&
b.num)
203 return (
a.num >> 63) - (
b.num >> 63);
common internal and external API header
static av_always_inline AVRational64 ff_inv_q64(AVRational64 q)
Invert a 64-bit rational.
AVRational64 ff_mul_q64(AVRational64 b, AVRational64 c)
Multiply two 64-bit rationals.
AVRational64 ff_sub_q64(AVRational64 b, AVRational64 c)
Subtract one 64-bit rational from another.
AVRational64 ff_div_q64(AVRational64 b, AVRational64 c)
Divide one 64-bit rational by another.
AVRational64 ff_add_q64(AVRational64 b, AVRational64 c)
Add two 64-bit rationals.
int ff_cmp_q64(AVRational64 a, AVRational64 b)
Compare two 64-bit rationals.
128-bit integers, falling back to integer.h if necessary
static av_always_inline av_uint128 av_to128u(uint64_t a)
static int zero(InterplayACMContext *s, unsigned ind, unsigned col)
Macro definitions for various function/variable attributes.
#define FFSWAP(type, a, b)
static av_always_inline int fits31_q(AVRational64 b, AVRational64 c)
static av_always_inline int fits31(int64_t x)
static AVRational64 reduce64_fast(int64_t num, int64_t den)
static av_always_inline uint64_t high64(av_int128 a)
static AVRational64 reduce64(av_int128 num, av_int128 den)
static av_int128 gcd128(av_int128 a, av_int128 b)
static av_always_inline uint64_t gcd_u64(uint64_t a, uint64_t b)
64-bit extension of AVRational.
64-bit Rational number (pair of numerator and denominator).