FFmpeg
|
Rational number calculation. More...
Files | |
file | rational.h |
Utilties for rational number calculation. | |
Data Structures | |
struct | AVRational |
Rational number (pair of numerator and denominator). More... | |
Functions | |
static AVRational | av_make_q (int num, int den) |
Create an AVRational. More... | |
static int | av_cmp_q (AVRational a, AVRational b) |
Compare two rationals. More... | |
static double | av_q2d (AVRational a) |
Convert an AVRational to a double . More... | |
int | av_reduce (int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max) |
Reduce a fraction. More... | |
AVRational | av_mul_q (AVRational b, AVRational c) av_const |
Multiply two rationals. More... | |
AVRational | av_div_q (AVRational b, AVRational c) av_const |
Divide one rational by another. More... | |
AVRational | av_add_q (AVRational b, AVRational c) av_const |
Add two rationals. More... | |
AVRational | av_sub_q (AVRational b, AVRational c) av_const |
Subtract one rational from another. More... | |
static av_always_inline AVRational | av_inv_q (AVRational q) |
Invert a rational. More... | |
AVRational | av_d2q (double d, int max) av_const |
Convert a double precision floating point number to a rational. More... | |
int | av_nearer_q (AVRational q, AVRational q1, AVRational q2) |
Find which of the two rationals is closer to another rational. More... | |
int | av_find_nearest_q_idx (AVRational q, const AVRational *q_list) |
Find the value in a list of rationals nearest a given reference rational. More... | |
uint32_t | av_q2intfloat (AVRational q) |
Convert an AVRational to a IEEE 32-bit float expressed in fixed-point format. More... | |
AVRational | av_gcd_q (AVRational a, AVRational b, int max_den, AVRational def) |
Return the best rational so that a and b are multiple of it. More... | |
Rational number calculation.
While rational numbers can be expressed as floating-point numbers, the conversion process is a lossy one, so are floating-point operations. On the other hand, the nature of FFmpeg demands highly accurate calculation of timestamps. This set of rational number utilities serves as a generic interface for manipulating rational numbers as pairs of numerators and denominators.
Many of the functions that operate on AVRational's have the suffix _q
, in reference to the mathematical symbol "ℚ" (Q) which denotes the set of all rational numbers.
|
inlinestatic |
Create an AVRational.
Useful for compilers that do not support compound literals.
Definition at line 71 of file rational.h.
|
inlinestatic |
Compare two rationals.
a | First rational |
b | Second rational |
a == b
a > b
a < b
INT_MIN
if one of the values is of the form 0 / 0
Definition at line 89 of file rational.h.
|
inlinestatic |
Convert an AVRational to a double
.
a | AVRational to convert |
a
in floating-point form Definition at line 104 of file rational.h.
Referenced by av_ts_make_time_string().
int av_reduce | ( | int * | dst_num, |
int * | dst_den, | ||
int64_t | num, | ||
int64_t | den, | ||
int64_t | max | ||
) |
Reduce a fraction.
This is useful for framerate calculations.
[out] | dst_num | Destination numerator |
[out] | dst_den | Destination denominator |
[in] | num | Source numerator |
[in] | den | Source denominator |
[in] | max | Maximum allowed values for dst_num & dst_den |
AVRational av_mul_q | ( | AVRational | b, |
AVRational | c | ||
) | const |
Multiply two rationals.
b | First rational |
c | Second rational |
AVRational av_div_q | ( | AVRational | b, |
AVRational | c | ||
) | const |
Divide one rational by another.
b | First rational |
c | Second rational |
AVRational av_add_q | ( | AVRational | b, |
AVRational | c | ||
) | const |
Add two rationals.
b | First rational |
c | Second rational |
AVRational av_sub_q | ( | AVRational | b, |
AVRational | c | ||
) | const |
Subtract one rational from another.
b | First rational |
c | Second rational |
|
static |
Invert a rational.
q | value |
Definition at line 159 of file rational.h.
Referenced by dec_enc(), and open_output_file().
AVRational av_d2q | ( | double | d, |
int | max | ||
) | const |
Convert a double precision floating point number to a rational.
In case of infinity, the returned value is expressed as {1, 0}
or {-1, 0}
depending on the sign.
d | double to convert |
max | Maximum allowed numerator and denominator |
d
in AVRational form Referenced by av_inv_q().
int av_nearer_q | ( | AVRational | q, |
AVRational | q1, | ||
AVRational | q2 | ||
) |
Find which of the two rationals is closer to another rational.
q | Rational to be compared against |
q1,q2 | Rationals to be tested |
q1
is nearer to q
than q2
q2
is nearer to q
than q1
Referenced by av_inv_q().
int av_find_nearest_q_idx | ( | AVRational | q, |
const AVRational * | q_list | ||
) |
Find the value in a list of rationals nearest a given reference rational.
q | Reference rational |
q_list | Array of rationals terminated by {0, 0} |
Referenced by av_inv_q().
uint32_t av_q2intfloat | ( | AVRational | q | ) |
Convert an AVRational to a IEEE 32-bit float
expressed in fixed-point format.
q | Rational to be converted |
Referenced by av_inv_q().
AVRational av_gcd_q | ( | AVRational | a, |
AVRational | b, | ||
int | max_den, | ||
AVRational | def | ||
) |
Return the best rational so that a and b are multiple of it.
If the resulting denominator is larger than max_den, return def.
Referenced by av_inv_q().