FFmpeg
AVRational

file  rational.h

## 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...

## Detailed Description

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.

## ◆ av_make_q()

 static AVRational av_make_q ( int num, int den )
inlinestatic

## ◆ av_cmp_q()

 static int av_cmp_q ( AVRational a, AVRational b )
inlinestatic

Compare two rationals.

Parameters
 a First rational b Second rational
Returns
One of the following values:
• 0 if `a == b`
• 1 if `a > b`
• -1 if `a < b`
• `INT_MIN` if one of the values is of the form `0 / 0`

Definition at line 89 of file rational.h.

## ◆ av_reduce()

 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.

Parameters
 [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`
Returns
1 if the operation is exact, 0 otherwise

Definition at line 35 of file rational.c.

## ◆ av_mul_q()

 AVRational av_mul_q ( AVRational b, AVRational c ) const

Multiply two rationals.

Parameters
 b First rational c Second rational
Returns
b*c

Definition at line 80 of file rational.c.

## ◆ av_div_q()

 AVRational av_div_q ( AVRational b, AVRational c ) const

Divide one rational by another.

Parameters
 b First rational c Second rational
Returns
b/c

Definition at line 88 of file rational.c.

 AVRational av_add_q ( AVRational b, AVRational c ) const

Parameters
 b First rational c Second rational
Returns
b+c

Definition at line 93 of file rational.c.

## ◆ av_sub_q()

 AVRational av_sub_q ( AVRational b, AVRational c ) const

Subtract one rational from another.

Parameters
 b First rational c Second rational
Returns
b-c

Definition at line 101 of file rational.c.

## ◆ av_d2q()

 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.

In general rational numbers with |num| <= 1<<26 && |den| <= 1<<26 can be recovered exactly from their double representation. (no exceptions were found within 1B random ones)

Parameters
 d `double` to convert max Maximum allowed numerator and denominator
Returns
`d` in AVRational form
av_q2d()

Definition at line 106 of file rational.c.

## ◆ av_nearer_q()

 int av_nearer_q ( AVRational q, AVRational q1, AVRational q2 )

Find which of the two rationals is closer to another rational.

Parameters
 q Rational to be compared against q1 Rational to be tested q2 Rational to be tested
Returns
One of the following values:
• 1 if `q1` is nearer to `q` than `q2`
• -1 if `q2` is nearer to `q` than `q1`
• 0 if they have the same distance

Definition at line 127 of file rational.c.

Referenced by av_find_nearest_q_idx().

## ◆ av_find_nearest_q_idx()

 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.

Parameters
 q Reference rational q_list Array of rationals terminated by `{0, 0}`
Returns
Index of the nearest value found in the array

Definition at line 142 of file rational.c.

Referenced by choose_out_timebase().

## ◆ av_q2intfloat()

 uint32_t av_q2intfloat ( AVRational q )

Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point format.

Parameters
 q Rational to be converted
Returns
Equivalent floating-point value, expressed as an unsigned 32-bit integer.
Note
The returned value is platform-indepedant.

Definition at line 152 of file rational.c.

Referenced by ircam_write_header(), and main().

## ◆ av_gcd_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.

Definition at line 186 of file rational.c.

Referenced by config_output(), ff_framesync_configure(), and libplacebo_config_output().