FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavutil
mathematics.h
Go to the documentation of this file.
1
/*
2
* copyright (c) 2005-2012 Michael Niedermayer <michaelni@gmx.at>
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#ifndef AVUTIL_MATHEMATICS_H
22
#define AVUTIL_MATHEMATICS_H
23
24
#include <stdint.h>
25
#include <math.h>
26
#include "
attributes.h
"
27
#include "
rational.h
"
28
#include "
intfloat.h
"
29
30
#ifndef M_E
31
#define M_E 2.7182818284590452354
/* e */
32
#endif
33
#ifndef M_LN2
34
#define M_LN2 0.69314718055994530942
/* log_e 2 */
35
#endif
36
#ifndef M_LN10
37
#define M_LN10 2.30258509299404568402
/* log_e 10 */
38
#endif
39
#ifndef M_LOG2_10
40
#define M_LOG2_10 3.32192809488736234787
/* log_2 10 */
41
#endif
42
#ifndef M_PHI
43
#define M_PHI 1.61803398874989484820
/* phi / golden ratio */
44
#endif
45
#ifndef M_PI
46
#define M_PI 3.14159265358979323846
/* pi */
47
#endif
48
#ifndef M_SQRT1_2
49
#define M_SQRT1_2 0.70710678118654752440
/* 1/sqrt(2) */
50
#endif
51
#ifndef M_SQRT2
52
#define M_SQRT2 1.41421356237309504880
/* sqrt(2) */
53
#endif
54
#ifndef NAN
55
#define NAN av_int2float(0x7fc00000)
56
#endif
57
#ifndef INFINITY
58
#define INFINITY av_int2float(0x7f800000)
59
#endif
60
61
/**
62
* @addtogroup lavu_math
63
* @{
64
*/
65
66
67
enum
AVRounding
{
68
AV_ROUND_ZERO
= 0,
///< Round toward zero.
69
AV_ROUND_INF
= 1,
///< Round away from zero.
70
AV_ROUND_DOWN
= 2,
///< Round toward -infinity.
71
AV_ROUND_UP
= 3,
///< Round toward +infinity.
72
AV_ROUND_NEAR_INF
= 5,
///< Round to nearest and halfway cases away from zero.
73
AV_ROUND_PASS_MINMAX
= 8192,
///< Flag to pass INT64_MIN/MAX through instead of rescaling, this avoids special cases for AV_NOPTS_VALUE
74
};
75
76
/**
77
* Return the greatest common divisor of a and b.
78
* If both a and b are 0 or either or both are <0 then behavior is
79
* undefined.
80
*/
81
int64_t
av_const
av_gcd
(int64_t
a
, int64_t
b
);
82
83
/**
84
* Rescale a 64-bit integer with rounding to nearest.
85
* A simple a*b/c isn't possible as it can overflow.
86
*/
87
int64_t
av_rescale
(int64_t
a
, int64_t
b
, int64_t
c
)
av_const
;
88
89
/**
90
* Rescale a 64-bit integer with specified rounding.
91
* A simple a*b/c isn't possible as it can overflow.
92
*
93
* @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is
94
* INT64_MIN or INT64_MAX then a is passed through unchanged.
95
*/
96
int64_t
av_rescale_rnd
(int64_t
a
, int64_t
b
, int64_t
c
,
enum
AVRounding
)
av_const
;
97
98
/**
99
* Rescale a 64-bit integer by 2 rational numbers.
100
*/
101
int64_t
av_rescale_q
(int64_t a,
AVRational
bq,
AVRational
cq) av_const;
102
103
/**
104
* Rescale a 64-bit integer by 2 rational numbers with specified rounding.
105
*
106
* @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is
107
* INT64_MIN or INT64_MAX then a is passed through unchanged.
108
*/
109
int64_t
av_rescale_q_rnd
(int64_t a,
AVRational
bq,
AVRational
cq,
110
enum
AVRounding
) av_const;
111
112
/**
113
* Compare 2 timestamps each in its own timebases.
114
* The result of the function is undefined if one of the timestamps
115
* is outside the int64_t range when represented in the others timebase.
116
* @return -1 if ts_a is before ts_b, 1 if ts_a is after ts_b or 0 if they represent the same position
117
*/
118
int
av_compare_ts
(int64_t ts_a,
AVRational
tb_a, int64_t ts_b,
AVRational
tb_b);
119
120
/**
121
* Compare 2 integers modulo mod.
122
* That is we compare integers a and b for which only the least
123
* significant log2(mod) bits are known.
124
*
125
* @param mod must be a power of 2
126
* @return a negative value if a is smaller than b
127
* a positive value if a is greater than b
128
* 0 if a equals b
129
*/
130
int64_t
av_compare_mod
(uint64_t a, uint64_t b, uint64_t mod);
131
132
/**
133
* Rescale a timestamp while preserving known durations.
134
*
135
* @param in_ts Input timestamp
136
* @param in_tb Input timesbase
137
* @param fs_tb Duration and *last timebase
138
* @param duration duration till the next call
139
* @param out_tb Output timesbase
140
*/
141
int64_t
av_rescale_delta
(
AVRational
in_tb, int64_t in_ts,
AVRational
fs_tb,
int
duration
, int64_t *last,
AVRational
out_tb);
142
143
/**
144
* @}
145
*/
146
147
#endif
/* AVUTIL_MATHEMATICS_H */
Generated on Wed Jul 10 2013 23:48:16 for FFmpeg by
1.8.2