annotate mathematics.h @ 992:a13125b5be3a libavutil

bswap: change ME to NE in macro names Other parts of FFmpeg use NE (native endian) rather than ME (machine). This makes it consistent.
author mru
date Sat, 10 Jul 2010 22:09:01 +0000
parents e34e8d654ded
children f9e8cd74a5f4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
108
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
1 /*
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
2 * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
3 *
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 108
diff changeset
4 * This file is part of FFmpeg.
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 108
diff changeset
5 *
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 108
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
108
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
8 * License as published by the Free Software Foundation; either
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 108
diff changeset
9 * version 2.1 of the License, or (at your option) any later version.
108
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
10 *
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 108
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
108
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
14 * Lesser General Public License for more details.
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
15 *
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 108
diff changeset
17 * License along with FFmpeg; if not, write to the Free Software
108
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
19 */
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 0
diff changeset
20
567
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 548
diff changeset
21 #ifndef AVUTIL_MATHEMATICS_H
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 548
diff changeset
22 #define AVUTIL_MATHEMATICS_H
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
23
468
b76b4c3a5dde Add missing stdint.h #include to headers that use it.
diego
parents: 392
diff changeset
24 #include <stdint.h>
547
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
25 #include <math.h>
873
4d9ad0ed07d0 Replace many includes of libavutil/common.h with what is actually needed
mru
parents: 845
diff changeset
26 #include "attributes.h"
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
27 #include "rational.h"
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
28
547
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
29 #ifndef M_E
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
30 #define M_E 2.7182818284590452354 /* e */
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
31 #endif
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
32 #ifndef M_LN2
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
33 #define M_LN2 0.69314718055994530942 /* log_e 2 */
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
34 #endif
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
35 #ifndef M_LN10
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
36 #define M_LN10 2.30258509299404568402 /* log_e 10 */
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
37 #endif
844
d1890ea2aa5c Replace log2f(10) with a constant
mru
parents: 830
diff changeset
38 #ifndef M_LOG2_10
845
f3cd6240dbfc More accurate value for log2(10)
mru
parents: 844
diff changeset
39 #define M_LOG2_10 3.32192809488736234787 /* log_2 10 */
844
d1890ea2aa5c Replace log2f(10) with a constant
mru
parents: 830
diff changeset
40 #endif
548
8d46104adf83 move M_PI definition along with other math definitions
aurel
parents: 547
diff changeset
41 #ifndef M_PI
8d46104adf83 move M_PI definition along with other math definitions
aurel
parents: 547
diff changeset
42 #define M_PI 3.14159265358979323846 /* pi */
8d46104adf83 move M_PI definition along with other math definitions
aurel
parents: 547
diff changeset
43 #endif
547
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
44 #ifndef M_SQRT1_2
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
45 #define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
46 #endif
897
37d97bd9f84d Add M_SQRT2 to the constants in mathematics.h.
alexc
parents: 893
diff changeset
47 #ifndef M_SQRT2
37d97bd9f84d Add M_SQRT2 to the constants in mathematics.h.
alexc
parents: 893
diff changeset
48 #define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
37d97bd9f84d Add M_SQRT2 to the constants in mathematics.h.
alexc
parents: 893
diff changeset
49 #endif
762
839b4855bb03 Define INFINITIY and NAN in mathematics.h if missing
mru
parents: 634
diff changeset
50 #ifndef NAN
839b4855bb03 Define INFINITIY and NAN in mathematics.h if missing
mru
parents: 634
diff changeset
51 #define NAN (0.0/0.0)
839b4855bb03 Define INFINITIY and NAN in mathematics.h if missing
mru
parents: 634
diff changeset
52 #endif
839b4855bb03 Define INFINITIY and NAN in mathematics.h if missing
mru
parents: 634
diff changeset
53 #ifndef INFINITY
839b4855bb03 Define INFINITIY and NAN in mathematics.h if missing
mru
parents: 634
diff changeset
54 #define INFINITY (1.0/0.0)
839b4855bb03 Define INFINITIY and NAN in mathematics.h if missing
mru
parents: 634
diff changeset
55 #endif
547
3f9f807b86a4 define some math constants so as not to depend on _XOPEN_SOURCE
aurel
parents: 481
diff changeset
56
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
57 enum AVRounding {
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 607
diff changeset
58 AV_ROUND_ZERO = 0, ///< Round toward zero.
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 607
diff changeset
59 AV_ROUND_INF = 1, ///< Round away from zero.
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 607
diff changeset
60 AV_ROUND_DOWN = 2, ///< Round toward -infinity.
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 607
diff changeset
61 AV_ROUND_UP = 3, ///< Round toward +infinity.
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 607
diff changeset
62 AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero.
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
63 };
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
64
802
485faa6e1728 Document av_gcd().
michael
parents: 762
diff changeset
65 /**
957
e34e8d654ded Fix grammar errors in documentation
mru
parents: 939
diff changeset
66 * Return the greatest common divisor of a and b.
803
e6e8b4319086 2nd try on documenting av_gcd().
michael
parents: 802
diff changeset
67 * If both a and b are 0 or either or both are <0 then behavior is
802
485faa6e1728 Document av_gcd().
michael
parents: 762
diff changeset
68 * undefined.
485faa6e1728 Document av_gcd().
michael
parents: 762
diff changeset
69 */
607
819752f80c64 export gcd function as av_gcd()
aurel
parents: 567
diff changeset
70 int64_t av_const av_gcd(int64_t a, int64_t b);
819752f80c64 export gcd function as av_gcd()
aurel
parents: 567
diff changeset
71
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
72 /**
957
e34e8d654ded Fix grammar errors in documentation
mru
parents: 939
diff changeset
73 * Rescale a 64-bit integer with rounding to nearest.
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 607
diff changeset
74 * A simple a*b/c isn't possible as it can overflow.
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
75 */
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
76 int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const;
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
77
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
78 /**
957
e34e8d654ded Fix grammar errors in documentation
mru
parents: 939
diff changeset
79 * Rescale a 64-bit integer with specified rounding.
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 607
diff changeset
80 * A simple a*b/c isn't possible as it can overflow.
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
81 */
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
82 int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_const;
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
83
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
84 /**
957
e34e8d654ded Fix grammar errors in documentation
mru
parents: 939
diff changeset
85 * Rescale a 64-bit integer by 2 rational numbers.
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
86 */
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
87 int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
88
830
a6eab70dd366 av_compare_ts()
michael
parents: 803
diff changeset
89 /**
957
e34e8d654ded Fix grammar errors in documentation
mru
parents: 939
diff changeset
90 * Compare 2 timestamps each in its own timebases.
830
a6eab70dd366 av_compare_ts()
michael
parents: 803
diff changeset
91 * The result of the function is undefined if one of the timestamps
a6eab70dd366 av_compare_ts()
michael
parents: 803
diff changeset
92 * is outside the int64_t range when represented in the others timebase.
893
76fd7478a2dc Replace @returns by @return.
benoit
parents: 873
diff changeset
93 * @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
830
a6eab70dd366 av_compare_ts()
michael
parents: 803
diff changeset
94 */
a6eab70dd366 av_compare_ts()
michael
parents: 803
diff changeset
95 int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b);
a6eab70dd366 av_compare_ts()
michael
parents: 803
diff changeset
96
933
93bd29f34e99 Add av_compare_mod()
michael
parents: 897
diff changeset
97 /**
957
e34e8d654ded Fix grammar errors in documentation
mru
parents: 939
diff changeset
98 * Compare 2 integers modulo mod.
939
1acef06f2739 Fix av_compare_mod() doxy.
stefano
parents: 933
diff changeset
99 * That is we compare integers a and b for which only the least
1acef06f2739 Fix av_compare_mod() doxy.
stefano
parents: 933
diff changeset
100 * significant log2(mod) bits are known.
1acef06f2739 Fix av_compare_mod() doxy.
stefano
parents: 933
diff changeset
101 *
933
93bd29f34e99 Add av_compare_mod()
michael
parents: 897
diff changeset
102 * @param mod must be a power of 2
939
1acef06f2739 Fix av_compare_mod() doxy.
stefano
parents: 933
diff changeset
103 * @return a negative value if a is smaller than b
1acef06f2739 Fix av_compare_mod() doxy.
stefano
parents: 933
diff changeset
104 * a positive value if a is greater than b
1acef06f2739 Fix av_compare_mod() doxy.
stefano
parents: 933
diff changeset
105 * 0 if a equals b
933
93bd29f34e99 Add av_compare_mod()
michael
parents: 897
diff changeset
106 */
93bd29f34e99 Add av_compare_mod()
michael
parents: 897
diff changeset
107 int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod);
830
a6eab70dd366 av_compare_ts()
michael
parents: 803
diff changeset
108
567
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 548
diff changeset
109 #endif /* AVUTIL_MATHEMATICS_H */