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_PI_2
49
#define M_PI_2 1.57079632679489661923
/* pi/2 */
50
#endif
51
#ifndef M_SQRT1_2
52
#define M_SQRT1_2 0.70710678118654752440
/* 1/sqrt(2) */
53
#endif
54
#ifndef M_SQRT2
55
#define M_SQRT2 1.41421356237309504880
/* sqrt(2) */
56
#endif
57
#ifndef NAN
58
#define NAN av_int2float(0x7fc00000)
59
#endif
60
#ifndef INFINITY
61
#define INFINITY av_int2float(0x7f800000)
62
#endif
63
64
/**
65
* @addtogroup lavu_math
66
* @{
67
*/
68
69
70
enum
AVRounding
{
71
AV_ROUND_ZERO
= 0,
///< Round toward zero.
72
AV_ROUND_INF
= 1,
///< Round away from zero.
73
AV_ROUND_DOWN
= 2,
///< Round toward -infinity.
74
AV_ROUND_UP
= 3,
///< Round toward +infinity.
75
AV_ROUND_NEAR_INF
= 5,
///< Round to nearest and halfway cases away from zero.
76
AV_ROUND_PASS_MINMAX
= 8192,
///< Flag to pass INT64_MIN/MAX through instead of rescaling, this avoids special cases for AV_NOPTS_VALUE
77
};
78
79
/**
80
* Return the greatest common divisor of a and b.
81
* If both a and b are 0 or either or both are <0 then behavior is
82
* undefined.
83
*/
84
int64_t
av_const
av_gcd
(int64_t
a
, int64_t
b
);
85
86
/**
87
* Rescale a 64-bit integer with rounding to nearest.
88
* A simple a*b/c isn't possible as it can overflow.
89
*/
90
int64_t
av_rescale
(int64_t
a
, int64_t
b
, int64_t
c
)
av_const
;
91
92
/**
93
* Rescale a 64-bit integer with specified rounding.
94
* A simple a*b/c isn't possible as it can overflow.
95
*
96
* @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is
97
* INT64_MIN or INT64_MAX then a is passed through unchanged.
98
*/
99
int64_t
av_rescale_rnd
(int64_t
a
, int64_t
b
, int64_t
c
,
enum
AVRounding
)
av_const
;
100
101
/**
102
* Rescale a 64-bit integer by 2 rational numbers.
103
*/
104
int64_t
av_rescale_q
(int64_t a,
AVRational
bq,
AVRational
cq) av_const;
105
106
/**
107
* Rescale a 64-bit integer by 2 rational numbers with specified rounding.
108
*
109
* @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is
110
* INT64_MIN or INT64_MAX then a is passed through unchanged.
111
*/
112
int64_t
av_rescale_q_rnd
(int64_t a,
AVRational
bq,
AVRational
cq,
113
enum
AVRounding
) av_const;
114
115
/**
116
* Compare 2 timestamps each in its own timebases.
117
* The result of the function is undefined if one of the timestamps
118
* is outside the int64_t range when represented in the others timebase.
119
* @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
120
*/
121
int
av_compare_ts
(int64_t ts_a,
AVRational
tb_a, int64_t ts_b,
AVRational
tb_b);
122
123
/**
124
* Compare 2 integers modulo mod.
125
* That is we compare integers a and b for which only the least
126
* significant log2(mod) bits are known.
127
*
128
* @param mod must be a power of 2
129
* @return a negative value if a is smaller than b
130
* a positive value if a is greater than b
131
* 0 if a equals b
132
*/
133
int64_t
av_compare_mod
(uint64_t a, uint64_t b, uint64_t mod);
134
135
/**
136
* Rescale a timestamp while preserving known durations.
137
*
138
* @param in_ts Input timestamp
139
* @param in_tb Input timebase
140
* @param fs_tb Duration and *last timebase
141
* @param duration duration till the next call
142
* @param out_tb Output timebase
143
*/
144
int64_t
av_rescale_delta
(
AVRational
in_tb, int64_t in_ts,
AVRational
fs_tb,
int
duration
, int64_t *last,
AVRational
out_tb);
145
146
/**
147
* Add a value to a timestamp.
148
*
149
* This function guarantees that when the same value is repeatly added that
150
* no accumulation of rounding errors occurs.
151
*
152
* @param ts Input timestamp
153
* @param ts_tb Input timestamp timebase
154
* @param inc value to add to ts
155
* @param inc_tb inc timebase
156
*/
157
int64_t
av_add_stable
(
AVRational
ts_tb, int64_t ts,
AVRational
inc_tb, int64_t inc);
158
159
160
/**
161
* @}
162
*/
163
164
#endif
/* AVUTIL_MATHEMATICS_H */
Generated on Sun Mar 8 2015 02:35:14 for FFmpeg by
1.8.2