Mercurial > libavutil.hg
annotate internal.h @ 822:a1680eca3e52 libavutil
DECLARE_ALIGNED macro for TMS470 compiler
This compiler supports gcc-style alignment attributes for struct,
but not for global variables. For the latter, alignment can be
specified with a pragma, which does not work for struct members or
local variables. By using both pragma and attribute, one or the
other will always take effect.
Unfortunately, no means exists for aligning stack variables.
author | mru |
---|---|
date | Fri, 22 Jan 2010 03:25:25 +0000 |
parents | bcebfe1a7e80 |
children | 610de397f0d6 |
rev | line source |
---|---|
108
11be8e0d1344
Add official LGPL license headers to the files that were missing them.
diego
parents:
107
diff
changeset
|
1 /* |
11be8e0d1344
Add official LGPL license headers to the files that were missing them.
diego
parents:
107
diff
changeset
|
2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> |
11be8e0d1344
Add official LGPL license headers to the files that were missing them.
diego
parents:
107
diff
changeset
|
3 * |
116
d76a36742464
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
114
diff
changeset
|
4 * This file is part of FFmpeg. |
d76a36742464
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
114
diff
changeset
|
5 * |
d76a36742464
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
114
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:
107
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:
107
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:
114
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:
107
diff
changeset
|
10 * |
116
d76a36742464
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
114
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:
107
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:
107
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:
107
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:
107
diff
changeset
|
15 * |
11be8e0d1344
Add official LGPL license headers to the files that were missing them.
diego
parents:
107
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:
114
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:
107
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:
107
diff
changeset
|
19 */ |
11be8e0d1344
Add official LGPL license headers to the files that were missing them.
diego
parents:
107
diff
changeset
|
20 |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
21 /** |
642
70bdd5501662
Use full internal pathname in doxygen @file directives.
diego
parents:
640
diff
changeset
|
22 * @file libavutil/internal.h |
633 | 23 * common internal API header |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
24 */ |
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
25 |
567 | 26 #ifndef AVUTIL_INTERNAL_H |
27 #define AVUTIL_INTERNAL_H | |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
28 |
366 | 29 #if !defined(DEBUG) && !defined(NDEBUG) |
30 # define NDEBUG | |
31 #endif | |
32 | |
626 | 33 #include <limits.h> |
343 | 34 #include <stdint.h> |
366 | 35 #include <stddef.h> |
36 #include <assert.h> | |
639
19d5f5c17725
cosmetics: Move all #includes together at the beginning of the file.
diego
parents:
637
diff
changeset
|
37 #include "config.h" |
590
e9d89a89561a
Use AV_GCC_VERSION_AT_LEAST() to simplify gcc version checks.
cehoyos
parents:
589
diff
changeset
|
38 #include "common.h" |
640
48119878cea3
Add required header mem.h, av_malloc and friends are used.
diego
parents:
639
diff
changeset
|
39 #include "mem.h" |
604 | 40 #include "timer.h" |
343 | 41 |
374
8805bba131a9
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
366
diff
changeset
|
42 #ifndef attribute_align_arg |
742
1091b120412e
Icc 11.1 does not support attributes force_align_arg_pointer, alloc_size and cold.
cehoyos
parents:
736
diff
changeset
|
43 #if (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(4,2) |
374
8805bba131a9
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
366
diff
changeset
|
44 # define attribute_align_arg __attribute__((force_align_arg_pointer)) |
8805bba131a9
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
366
diff
changeset
|
45 #else |
8805bba131a9
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
366
diff
changeset
|
46 # define attribute_align_arg |
8805bba131a9
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
366
diff
changeset
|
47 #endif |
8805bba131a9
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
366
diff
changeset
|
48 #endif |
8805bba131a9
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
366
diff
changeset
|
49 |
154 | 50 #ifndef attribute_used |
590
e9d89a89561a
Use AV_GCC_VERSION_AT_LEAST() to simplify gcc version checks.
cehoyos
parents:
589
diff
changeset
|
51 #if AV_GCC_VERSION_AT_LEAST(3,1) |
154 | 52 # define attribute_used __attribute__((used)) |
53 #else | |
54 # define attribute_used | |
55 #endif | |
56 #endif | |
57 | |
155 | 58 #ifndef INT16_MIN |
774 | 59 #define INT16_MIN (-0x7fff - 1) |
155 | 60 #endif |
61 | |
62 #ifndef INT16_MAX | |
63 #define INT16_MAX 0x7fff | |
64 #endif | |
65 | |
66 #ifndef INT32_MIN | |
774 | 67 #define INT32_MIN (-0x7fffffff - 1) |
155 | 68 #endif |
69 | |
70 #ifndef INT32_MAX | |
71 #define INT32_MAX 0x7fffffff | |
72 #endif | |
73 | |
74 #ifndef UINT32_MAX | |
75 #define UINT32_MAX 0xffffffff | |
76 #endif | |
77 | |
78 #ifndef INT64_MIN | |
774 | 79 #define INT64_MIN (-0x7fffffffffffffffLL - 1) |
155 | 80 #endif |
81 | |
82 #ifndef INT64_MAX | |
156 | 83 #define INT64_MAX INT64_C(9223372036854775807) |
155 | 84 #endif |
85 | |
86 #ifndef UINT64_MAX | |
156 | 87 #define UINT64_MAX UINT64_C(0xFFFFFFFFFFFFFFFF) |
155 | 88 #endif |
89 | |
90 #ifndef INT_BIT | |
666 | 91 # define INT_BIT (CHAR_BIT * sizeof(int)) |
155 | 92 #endif |
93 | |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
94 #ifndef offsetof |
774 | 95 # define offsetof(T, F) ((unsigned int)((char *)&((T *)0)->F)) |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
96 #endif |
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
97 |
736
9c9a242f840c
Add LABEL_MANGLE() to export label symbols from inside asm blocks.
ramiro
parents:
703
diff
changeset
|
98 /* Use to export labels from asm. */ |
9c9a242f840c
Add LABEL_MANGLE() to export label symbols from inside asm blocks.
ramiro
parents:
703
diff
changeset
|
99 #define LABEL_MANGLE(a) EXTERN_PREFIX #a |
9c9a242f840c
Add LABEL_MANGLE() to export label symbols from inside asm blocks.
ramiro
parents:
703
diff
changeset
|
100 |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
101 // Use rip-relative addressing if compiling PIC code on x86-64. |
603 | 102 #if ARCH_X86_64 && defined(PIC) |
487
9df3dec6f840
Split MANGLE macro into LOCAL_MANGLE AND EXTERN_PREFIX parts
diego
parents:
481
diff
changeset
|
103 # define LOCAL_MANGLE(a) #a "(%%rip)" |
473 | 104 #else |
487
9df3dec6f840
Split MANGLE macro into LOCAL_MANGLE AND EXTERN_PREFIX parts
diego
parents:
481
diff
changeset
|
105 # define LOCAL_MANGLE(a) #a |
138 | 106 #endif |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
107 |
487
9df3dec6f840
Split MANGLE macro into LOCAL_MANGLE AND EXTERN_PREFIX parts
diego
parents:
481
diff
changeset
|
108 #define MANGLE(a) EXTERN_PREFIX LOCAL_MANGLE(a) |
9df3dec6f840
Split MANGLE macro into LOCAL_MANGLE AND EXTERN_PREFIX parts
diego
parents:
481
diff
changeset
|
109 |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
110 /* debug stuff */ |
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
111 |
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
112 /* dprintf macros */ |
138 | 113 #ifdef DEBUG |
285 | 114 # define dprintf(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__) |
138 | 115 #else |
285 | 116 # define dprintf(pctx, ...) |
138 | 117 #endif |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
118 |
138 | 119 #define av_abort() do { av_log(NULL, AV_LOG_ERROR, "Abort at %s:%d\n", __FILE__, __LINE__); abort(); } while (0) |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
120 |
143 | 121 /* math */ |
122 | |
432 | 123 extern const uint8_t ff_sqrt_tab[256]; |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
124 |
481
f4187c1c15a6
Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents:
478
diff
changeset
|
125 static inline av_const unsigned int ff_sqrt(unsigned int a) |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
126 { |
432 | 127 unsigned int b; |
12 | 128 |
774 | 129 if (a < 255) return (ff_sqrt_tab[a + 1] - 1) >> 4; |
130 else if (a < (1 << 12)) b = ff_sqrt_tab[a >> 4] >> 2; | |
603 | 131 #if !CONFIG_SMALL |
774 | 132 else if (a < (1 << 14)) b = ff_sqrt_tab[a >> 6] >> 1; |
133 else if (a < (1 << 16)) b = ff_sqrt_tab[a >> 8] ; | |
432 | 134 #endif |
774 | 135 else { |
136 int s = av_log2_16bit(a >> 16) >> 1; | |
137 unsigned int c = a >> (s + 2); | |
138 b = ff_sqrt_tab[c >> (s + 8)]; | |
139 b = FASTDIV(c,b) + (b << s); | |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
140 } |
432 | 141 |
774 | 142 return b - (a < b * b); |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
143 } |
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
144 |
603 | 145 #if ARCH_X86 |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
146 #define MASK_ABS(mask, level)\ |
578 | 147 __asm__ volatile(\ |
461
62530c1673a0
Use cltd instead of cdq asm mnemonic, ICC and gcc support both, but
reimar
parents:
432
diff
changeset
|
148 "cltd \n\t"\ |
13 | 149 "xorl %1, %0 \n\t"\ |
150 "subl %1, %0 \n\t"\ | |
151 : "+a" (level), "=&d" (mask)\ | |
152 ); | |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
153 #else |
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
154 #define MASK_ABS(mask, level)\ |
774 | 155 mask = level >> 31;\ |
156 level = (level ^ mask) - mask; | |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
157 #endif |
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
158 |
637 | 159 /* avoid usage of dangerous/inappropriate system functions */ |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
160 #undef malloc |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
161 #define malloc please_use_av_malloc |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
162 #undef free |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
163 #define free please_use_av_free |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
164 #undef realloc |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
165 #define realloc please_use_av_realloc |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
166 #undef time |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
167 #define time time_is_forbidden_due_to_security_issues |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
168 #undef rand |
703
b386bd0fad52
When warning about forbidden pseudo random number generation functions,
diego
parents:
675
diff
changeset
|
169 #define rand rand_is_forbidden_due_to_state_trashing_use_av_lfg_get |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
170 #undef srand |
703
b386bd0fad52
When warning about forbidden pseudo random number generation functions,
diego
parents:
675
diff
changeset
|
171 #define srand srand_is_forbidden_due_to_state_trashing_use_av_lfg_init |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
172 #undef random |
703
b386bd0fad52
When warning about forbidden pseudo random number generation functions,
diego
parents:
675
diff
changeset
|
173 #define random random_is_forbidden_due_to_state_trashing_use_av_lfg_get |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
174 #undef sprintf |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
175 #define sprintf sprintf_is_forbidden_due_to_security_issues_use_snprintf |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
176 #undef strcat |
349 | 177 #define strcat strcat_is_forbidden_due_to_security_issues_use_av_strlcat |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
178 #undef exit |
321 | 179 #define exit exit_is_forbidden |
569
165ae9e8f4fb
Remove wrong and unnecessary condition. VHOOK filters are not special
stefano
parents:
567
diff
changeset
|
180 #ifndef LIBAVFORMAT_BUILD |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
181 #undef printf |
627
d4b82de2ce47
Disambiguate the macros used to disable fprintf/printf/puts functions.
diego
parents:
626
diff
changeset
|
182 #define printf please_use_av_log_instead_of_printf |
359
b951d460bcb4
undef forbidden names before we #define them in case they are macros in libc
mru
parents:
355
diff
changeset
|
183 #undef fprintf |
627
d4b82de2ce47
Disambiguate the macros used to disable fprintf/printf/puts functions.
diego
parents:
626
diff
changeset
|
184 #define fprintf please_use_av_log_instead_of_fprintf |
431 | 185 #undef puts |
627
d4b82de2ce47
Disambiguate the macros used to disable fprintf/printf/puts functions.
diego
parents:
626
diff
changeset
|
186 #define puts please_use_av_log_instead_of_puts |
403
c22fbe7d64cf
Generate a linking error if perror() is used in libav*
lucabe
parents:
402
diff
changeset
|
187 #undef perror |
c22fbe7d64cf
Generate a linking error if perror() is used in libav*
lucabe
parents:
402
diff
changeset
|
188 #define perror please_use_av_log_instead_of_perror |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
189 #endif |
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
190 |
777
9b87c6b537bb
Rename CHECKED_ALLOC(Z) to FF_ALLOC(Z)_OR_GOTO and add context and label
ramiro
parents:
775
diff
changeset
|
191 #define FF_ALLOC_OR_GOTO(ctx, p, size, label)\ |
772 | 192 {\ |
774 | 193 p = av_malloc(size);\ |
194 if (p == NULL && (size) != 0) {\ | |
777
9b87c6b537bb
Rename CHECKED_ALLOC(Z) to FF_ALLOC(Z)_OR_GOTO and add context and label
ramiro
parents:
775
diff
changeset
|
195 av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\ |
9b87c6b537bb
Rename CHECKED_ALLOC(Z) to FF_ALLOC(Z)_OR_GOTO and add context and label
ramiro
parents:
775
diff
changeset
|
196 goto label;\ |
772 | 197 }\ |
198 } | |
199 | |
777
9b87c6b537bb
Rename CHECKED_ALLOC(Z) to FF_ALLOC(Z)_OR_GOTO and add context and label
ramiro
parents:
775
diff
changeset
|
200 #define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)\ |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
201 {\ |
774 | 202 p = av_mallocz(size);\ |
203 if (p == NULL && (size) != 0) {\ | |
777
9b87c6b537bb
Rename CHECKED_ALLOC(Z) to FF_ALLOC(Z)_OR_GOTO and add context and label
ramiro
parents:
775
diff
changeset
|
204 av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\ |
9b87c6b537bb
Rename CHECKED_ALLOC(Z) to FF_ALLOC(Z)_OR_GOTO and add context and label
ramiro
parents:
775
diff
changeset
|
205 goto label;\ |
0
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
206 }\ |
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
207 } |
ee8f44bb7c4d
libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff
changeset
|
208 |
806
757914de10e1
Add replacements for log2f(), exp2() and exp2f() for platforms that lacks it.
vitor
parents:
785
diff
changeset
|
209 #if !HAVE_EXP2 |
808
1778eea266cb
Use macros instead of inline functions to replace the following missing C99
vitor
parents:
806
diff
changeset
|
210 #undef exp2 |
1778eea266cb
Use macros instead of inline functions to replace the following missing C99
vitor
parents:
806
diff
changeset
|
211 #define exp2(x) exp((x) * 0.693147180559945) |
806
757914de10e1
Add replacements for log2f(), exp2() and exp2f() for platforms that lacks it.
vitor
parents:
785
diff
changeset
|
212 #endif /* HAVE_EXP2 */ |
757914de10e1
Add replacements for log2f(), exp2() and exp2f() for platforms that lacks it.
vitor
parents:
785
diff
changeset
|
213 |
757914de10e1
Add replacements for log2f(), exp2() and exp2f() for platforms that lacks it.
vitor
parents:
785
diff
changeset
|
214 #if !HAVE_EXP2F |
808
1778eea266cb
Use macros instead of inline functions to replace the following missing C99
vitor
parents:
806
diff
changeset
|
215 #undef exp2f |
1778eea266cb
Use macros instead of inline functions to replace the following missing C99
vitor
parents:
806
diff
changeset
|
216 #define exp2f(x) exp2(x) |
806
757914de10e1
Add replacements for log2f(), exp2() and exp2f() for platforms that lacks it.
vitor
parents:
785
diff
changeset
|
217 #endif /* HAVE_EXP2F */ |
757914de10e1
Add replacements for log2f(), exp2() and exp2f() for platforms that lacks it.
vitor
parents:
785
diff
changeset
|
218 |
603 | 219 #if !HAVE_LLRINT |
481
f4187c1c15a6
Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents:
478
diff
changeset
|
220 static av_always_inline av_const long long llrint(double x) |
411
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
221 { |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
222 return rint(x); |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
223 } |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
224 #endif /* HAVE_LLRINT */ |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
225 |
753
b27973fe5960
Add a log2 replacement for systems that haven't quite caught up with the C99
alexc
parents:
746
diff
changeset
|
226 #if !HAVE_LOG2 |
808
1778eea266cb
Use macros instead of inline functions to replace the following missing C99
vitor
parents:
806
diff
changeset
|
227 #undef log2 |
1778eea266cb
Use macros instead of inline functions to replace the following missing C99
vitor
parents:
806
diff
changeset
|
228 #define log2(x) (log(x) * 1.44269504088896340736) |
753
b27973fe5960
Add a log2 replacement for systems that haven't quite caught up with the C99
alexc
parents:
746
diff
changeset
|
229 #endif /* HAVE_LOG2 */ |
b27973fe5960
Add a log2 replacement for systems that haven't quite caught up with the C99
alexc
parents:
746
diff
changeset
|
230 |
806
757914de10e1
Add replacements for log2f(), exp2() and exp2f() for platforms that lacks it.
vitor
parents:
785
diff
changeset
|
231 #if !HAVE_LOG2F |
808
1778eea266cb
Use macros instead of inline functions to replace the following missing C99
vitor
parents:
806
diff
changeset
|
232 #undef log2f |
1778eea266cb
Use macros instead of inline functions to replace the following missing C99
vitor
parents:
806
diff
changeset
|
233 #define log2f(x) log2(x) |
806
757914de10e1
Add replacements for log2f(), exp2() and exp2f() for platforms that lacks it.
vitor
parents:
785
diff
changeset
|
234 #endif /* HAVE_LOG2F */ |
757914de10e1
Add replacements for log2f(), exp2() and exp2f() for platforms that lacks it.
vitor
parents:
785
diff
changeset
|
235 |
603 | 236 #if !HAVE_LRINT |
481
f4187c1c15a6
Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents:
478
diff
changeset
|
237 static av_always_inline av_const long int lrint(double x) |
411
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
238 { |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
239 return rint(x); |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
240 } |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
241 #endif /* HAVE_LRINT */ |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
242 |
603 | 243 #if !HAVE_LRINTF |
481
f4187c1c15a6
Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents:
478
diff
changeset
|
244 static av_always_inline av_const long int lrintf(float x) |
4
26a00aee5eac
Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents:
3
diff
changeset
|
245 { |
26a00aee5eac
Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents:
3
diff
changeset
|
246 return (int)(rint(x)); |
26a00aee5eac
Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents:
3
diff
changeset
|
247 } |
26a00aee5eac
Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents:
3
diff
changeset
|
248 #endif /* HAVE_LRINTF */ |
26a00aee5eac
Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents:
3
diff
changeset
|
249 |
603 | 250 #if !HAVE_ROUND |
481
f4187c1c15a6
Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents:
478
diff
changeset
|
251 static av_always_inline av_const double round(double x) |
411
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
252 { |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
253 return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5); |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
254 } |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
255 #endif /* HAVE_ROUND */ |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
256 |
603 | 257 #if !HAVE_ROUNDF |
481
f4187c1c15a6
Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents:
478
diff
changeset
|
258 static av_always_inline av_const float roundf(float x) |
411
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
259 { |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
260 return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5); |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
261 } |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
262 #endif /* HAVE_ROUNDF */ |
d25e027364d6
Check for the presence of llrint(), lrint(), round() and roundf()
diego
parents:
410
diff
changeset
|
263 |
603 | 264 #if !HAVE_TRUNCF |
600 | 265 static av_always_inline av_const float truncf(float x) |
266 { | |
267 return (x > 0) ? floor(x) : ceil(x); | |
268 } | |
269 #endif /* HAVE_TRUNCF */ | |
270 | |
605
5d605aafa09d
move NULL_IF_CONFIG_SMALL() definition into internal header
aurel
parents:
604
diff
changeset
|
271 /** |
636 | 272 * Returns NULL if CONFIG_SMALL is true, otherwise the argument |
273 * without modification. Used to disable the definition of strings | |
605
5d605aafa09d
move NULL_IF_CONFIG_SMALL() definition into internal header
aurel
parents:
604
diff
changeset
|
274 * (for example AVCodec long_names). |
5d605aafa09d
move NULL_IF_CONFIG_SMALL() definition into internal header
aurel
parents:
604
diff
changeset
|
275 */ |
5d605aafa09d
move NULL_IF_CONFIG_SMALL() definition into internal header
aurel
parents:
604
diff
changeset
|
276 #if CONFIG_SMALL |
5d605aafa09d
move NULL_IF_CONFIG_SMALL() definition into internal header
aurel
parents:
604
diff
changeset
|
277 # define NULL_IF_CONFIG_SMALL(x) NULL |
5d605aafa09d
move NULL_IF_CONFIG_SMALL() definition into internal header
aurel
parents:
604
diff
changeset
|
278 #else |
5d605aafa09d
move NULL_IF_CONFIG_SMALL() definition into internal header
aurel
parents:
604
diff
changeset
|
279 # define NULL_IF_CONFIG_SMALL(x) x |
5d605aafa09d
move NULL_IF_CONFIG_SMALL() definition into internal header
aurel
parents:
604
diff
changeset
|
280 #endif |
5d605aafa09d
move NULL_IF_CONFIG_SMALL() definition into internal header
aurel
parents:
604
diff
changeset
|
281 |
567 | 282 #endif /* AVUTIL_INTERNAL_H */ |