FFmpeg 5.1.4
Modules | Enumerations | Functions
Mathematics

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

Modules

 Colorspace Utility
 
 AVRational
 Rational number calculation.
 

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

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.

Enumeration Type Documentation

◆ AVRounding

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
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.
@ AV_ROUND_PASS_MINMAX
Flag telling rescaling functions to pass INT64_MIN/MAX through unchanged, avoiding special cases for ...
Definition: mathematics.h:108
@ AV_ROUND_UP
Round toward +infinity.
Definition: mathematics.h:83
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:248

Definition at line 79 of file mathematics.h.

Function Documentation

◆ av_gcd()

int64_t av_const av_gcd ( int64_t  a,
int64_t  b 
)

Compute the greatest common divisor of two integer operands.

Parameters
a,bOperands
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.

◆ av_rescale()

int64_t av_rescale ( int64_t  a,
int64_t  b,
int64_t  c 
) const

Rescale a 64-bit integer with rounding to nearest.

The operation is mathematically equivalent to a * b / c, but writing that directly can overflow.

This function is equivalent to av_rescale_rnd() with AV_ROUND_NEAR_INF.

See also
av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd()

◆ av_rescale_rnd()

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. If the result is not representable then INT64_MIN is returned.

See also
av_rescale(), av_rescale_q(), av_rescale_q_rnd()
Examples
muxing.c, and resampling_audio.c.

Referenced by main(), and write_audio_frame().

◆ av_rescale_q()

int64_t av_rescale_q ( int64_t  a,
AVRational  bq,
AVRational  cq 
) const

Rescale a 64-bit integer by 2 rational numbers.

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

This function is equivalent to av_rescale_q_rnd() with AV_ROUND_NEAR_INF.

See also
av_rescale(), av_rescale_rnd(), av_rescale_q_rnd()
Examples
filtering_video.c, and muxing.c.

Referenced by display_frame(), and write_audio_frame().

◆ av_rescale_q_rnd()

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.

See also
av_rescale(), av_rescale_rnd(), av_rescale_q()

◆ av_compare_ts()

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.
Examples
muxing.c.

Referenced by get_audio_frame(), get_video_frame(), and main().

◆ av_compare_mod()

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)
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.
Parameters
a,bOperands
modDivisor; 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

◆ av_rescale_delta()

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_tbInput time base
[in]in_tsInput timestamp
[in]fs_tbDuration time base; typically this is finer-grained (greater) than in_tb and out_tb
[in]durationDuration till the next call to this function (i.e. duration of the current packet/frame)
[in,out]lastPointer to a timestamp expressed in terms of fs_tb, acting as a state variable
[in]out_tbOutput timebase
Returns
Timestamp expressed in terms of out_tb
Note
In the context of this function, "duration" is in term of samples, not seconds.

◆ av_add_stable()

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]tsInput timestamp
[in]ts_tbInput timestamp time base
[in]incValue to be added
[in]inc_tbTime base of inc