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 gurantees 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 23 2014 23:50:15 for FFmpeg by
1.8.2