FFmpeg
Mathematics

Mathematical utilities for working with timestamp and time base. More...

## Modules

AVRational
Rational number calculation.

## Macros

#define ff_ctz   ff_ctz_c

#define ff_ctzll   ff_ctzll_c

#define ff_clz   ff_clz_c

#define av_parity   __builtin_parity

## Enumerations

enum  AVRounding {
AV_ROUND_ZERO = 0, AV_ROUND_INF = 1, AV_ROUND_DOWN = 2, AV_ROUND_UP = 3,
AV_ROUND_NEAR_INF = 5, AV_ROUND_PASS_MINMAX = 8192
}
Rounding methods. More...

## Functions

static av_always_inline av_const int ff_ctz_c (int v)
Trailing zero bit count. More...

static av_always_inline av_const int ff_ctzll_c (long long v)

static av_always_inline av_const unsigned ff_clz_c (unsigned x)

int64_t av_const av_gcd (int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands. More...

int64_t av_rescale (int64_t a, int64_t b, int64_t c) av_const
Rescale a 64-bit integer with rounding to nearest. More...

int64_t av_rescale_rnd (int64_t a, int64_t b, int64_t c, enum AVRounding rnd) av_const
Rescale a 64-bit integer with specified rounding. More...

int64_t av_rescale_q (int64_t a, AVRational bq, AVRational cq) av_const
Rescale a 64-bit integer by 2 rational numbers. More...

int64_t av_rescale_q_rnd (int64_t a, AVRational bq, AVRational cq, enum AVRounding rnd) av_const
Rescale a 64-bit integer by 2 rational numbers with specified rounding. More...

int av_compare_ts (int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b)
Compare two timestamps each in its own time base. More...

int64_t av_compare_mod (uint64_t a, uint64_t b, uint64_t mod)
Compare the remainders of two integer operands divided by a common divisor. More...

int64_t av_rescale_delta (AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb)
Rescale a timestamp while preserving known durations. More...

int64_t av_add_stable (AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc)
Add a value to a timestamp. More...

## Detailed Description

Mathematical utilities for working with timestamp and time base.

## Macro Definition Documentation

 #define ff_ctz   ff_ctz_c

Definition at line 106 of file intmath.h.

 #define ff_ctzll   ff_ctzll_c

Definition at line 126 of file intmath.h.

Referenced by av_gcd(), and ffat_get_channel_id().

 #define ff_clz   ff_clz_c

Definition at line 142 of file intmath.h.

 #define av_parity   __builtin_parity

Definition at line 158 of file intmath.h.

Referenced by check_vanc_parity_checksum(), decode_frame(), and validate_cc_data_pair().

## Enumeration Type Documentation

 enum AVRounding

Rounding methods.

Enumerator
AV_ROUND_ZERO

Round toward zero.

AV_ROUND_INF

Round away from zero.

AV_ROUND_DOWN

Round toward -infinity.

AV_ROUND_UP

Round toward +infinity.

AV_ROUND_NEAR_INF

Round to nearest and halfway cases away from zero.

AV_ROUND_PASS_MINMAX

Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through unchanged, avoiding special cases for AV_NOPTS_VALUE.

Unlike other values of the enumeration AVRounding, this value is a bitmask that must be used in conjunction with another value of the enumeration through a bitwise OR, in order to set behavior for normal cases.

// Rescaling 3:
// Calculating 3 * 1 / 2
// 3 / 2 is rounded up to 2
// => 2
// Rescaling AV_NOPTS_VALUE:
// AV_NOPTS_VALUE == INT64_MIN
// AV_NOPTS_VALUE is passed through
// => AV_NOPTS_VALUE

Definition at line 79 of file mathematics.h.

## Function Documentation

 static av_always_inline av_const int ff_ctz_c ( int v )
static

Trailing zero bit count.

Parameters
 v input value. If v is 0, the result is undefined.
Returns
the number of trailing 0-bits

Definition at line 115 of file intmath.h.

 static av_always_inline av_const int ff_ctzll_c ( long long v )
static

Definition at line 129 of file intmath.h.

 static av_always_inline av_const unsigned ff_clz_c ( unsigned x )
static

Definition at line 143 of file intmath.h.

 int64_t av_const av_gcd ( int64_t a, int64_t b )

Compute the greatest common divisor of two integer operands.

Parameters
 a,b Operands
Returns
GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; if a == 0 and b == 0, returns 0.

Definition at line 37 of file mathematics.c.

 int64_t av_rescale ( int64_t a, int64_t b, int64_t c ) const
 int64_t av_rescale_rnd ( int64_t a, int64_t b, int64_t c, enum AVRounding rnd ) const

Rescale a 64-bit integer with specified rounding.

The operation is mathematically equivalent to `a * b / c`, but writing that directly can overflow, and does not support different rounding methods.

av_rescale(), av_rescale_q(), av_rescale_q_rnd()

Definition at line 58 of file mathematics.c.

 int64_t av_rescale_q_rnd ( int64_t a, AVRational bq, AVRational cq, enum AVRounding rnd ) const

Rescale a 64-bit integer by 2 rational numbers with specified rounding.

The operation is mathematically equivalent to `a * bq / cq`.

av_rescale(), av_rescale_rnd(), av_rescale_q()

Definition at line 134 of file mathematics.c.

 int av_compare_ts ( int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b )

Compare two timestamps each in its own time base.

Returns
One of the following values:
• -1 if `ts_a` is before `ts_b`
• 1 if `ts_a` is after `ts_b`
• 0 if they represent the same position
Warning
The result of the function is undefined if one of the timestamps is outside the `int64_t` range when represented in the other's timebase.

Definition at line 147 of file mathematics.c.

 int64_t av_compare_mod ( uint64_t a, uint64_t b, uint64_t mod )

Compare the remainders of two integer operands divided by a common divisor.

In other words, compare the least significant `log2(mod)` bits of integers `a` and `b`.

av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10 (0x1) < 0x02 % 0x10 (0x2)
av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02)
Parameters
 a,b Operands mod Divisor; must be a power of 2
Returns
• a negative value if `a % mod < b % mod`
• a positive value if `a % mod > b % mod`
• zero if `a % mod == b % mod`

Definition at line 160 of file mathematics.c.

 int64_t av_rescale_delta ( AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t * last, AVRational out_tb )

Rescale a timestamp while preserving known durations.

This function is designed to be called per audio packet to scale the input timestamp to a different time base. Compared to a simple av_rescale_q() call, this function is robust against possible inconsistent frame durations.

The `last` parameter is a state variable that must be preserved for all subsequent calls for the same stream. For the first call, `*last` should be initialized to AV_NOPTS_VALUE.

Parameters
 [in] in_tb Input time base [in] in_ts Input timestamp [in] fs_tb Duration time base; typically this is finer-grained (greater) than `in_tb` and `out_tb` [in] duration Duration till the next call to this function (i.e. duration of the current packet/frame) [in,out] last Pointer to a timestamp expressed in terms of `fs_tb`, acting as a state variable [in] out_tb Output timebase
Returns
Timestamp expressed in terms of `out_tb`
Note
In the context of this function, "duration" is in term of samples, not seconds.

Definition at line 168 of file mathematics.c.

Referenced by decode_audio(), and do_streamcopy().

 int64_t av_add_stable ( AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc )

Add a value to a timestamp.

This function guarantees that when the same value is repeatly added that no accumulation of rounding errors occurs.

Parameters
 [in] ts Input timestamp [in] ts_tb Input timestamp time base [in] inc Value to be added [in] inc_tb Time base of `inc`

Definition at line 191 of file mathematics.c.

Referenced by compute_pkt_fields(), and main().