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
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: 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
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 627
diff changeset
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
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 549
diff changeset
26 #ifndef AVUTIL_INTERNAL_H
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 549
diff changeset
27 #define AVUTIL_INTERNAL_H
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
28
366
4d3f4347b718 move #include of system headers to top of file
mru
parents: 365
diff changeset
29 #if !defined(DEBUG) && !defined(NDEBUG)
4d3f4347b718 move #include of system headers to top of file
mru
parents: 365
diff changeset
30 # define NDEBUG
4d3f4347b718 move #include of system headers to top of file
mru
parents: 365
diff changeset
31 #endif
4d3f4347b718 move #include of system headers to top of file
mru
parents: 365
diff changeset
32
626
667697e17feb Add required limits.h header.
diego
parents: 625
diff changeset
33 #include <limits.h>
343
f21d1907d47c include all prerequisites in header files
mru
parents: 340
diff changeset
34 #include <stdint.h>
366
4d3f4347b718 move #include of system headers to top of file
mru
parents: 365
diff changeset
35 #include <stddef.h>
4d3f4347b718 move #include of system headers to top of file
mru
parents: 365
diff changeset
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
3c748945c2ad move timer related code in a new timer.h file
aurel
parents: 603
diff changeset
40 #include "timer.h"
343
f21d1907d47c include all prerequisites in header files
mru
parents: 340
diff changeset
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
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
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
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
52 # define attribute_used __attribute__((used))
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
53 #else
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
54 # define attribute_used
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
55 #endif
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
56 #endif
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
57
155
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
58 #ifndef INT16_MIN
774
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
59 #define INT16_MIN (-0x7fff - 1)
155
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
60 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
61
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
62 #ifndef INT16_MAX
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
63 #define INT16_MAX 0x7fff
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
64 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
65
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
66 #ifndef INT32_MIN
774
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
67 #define INT32_MIN (-0x7fffffff - 1)
155
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
68 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
69
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
70 #ifndef INT32_MAX
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
71 #define INT32_MAX 0x7fffffff
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
72 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
73
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
74 #ifndef UINT32_MAX
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
75 #define UINT32_MAX 0xffffffff
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
76 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
77
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
78 #ifndef INT64_MIN
774
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
79 #define INT64_MIN (-0x7fffffffffffffffLL - 1)
155
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
80 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
81
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
82 #ifndef INT64_MAX
156
69e5b350225c use the standard INT64_C() macro for 64-bit constants
mru
parents: 155
diff changeset
83 #define INT64_MAX INT64_C(9223372036854775807)
155
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
84 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
85
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
86 #ifndef UINT64_MAX
156
69e5b350225c use the standard INT64_C() macro for 64-bit constants
mru
parents: 155
diff changeset
87 #define UINT64_MAX UINT64_C(0xFFFFFFFFFFFFFFFF)
155
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
88 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
89
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
90 #ifndef INT_BIT
666
86393a769260 Correct, portable definition of INT_BIT
mru
parents: 642
diff changeset
91 # define INT_BIT (CHAR_BIT * sizeof(int))
155
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
92 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
93
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
94 #ifndef offsetof
774
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
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
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 600
diff changeset
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
e841859035a6 Simplify MANGLE macro preprocessor condition checks.
diego
parents: 472
diff changeset
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
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
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
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
113 #ifdef DEBUG
285
c529dbdea4f7 Give context to dprintf
mbardiaux
parents: 283
diff changeset
114 # define dprintf(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__)
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
115 #else
285
c529dbdea4f7 Give context to dprintf
mbardiaux
parents: 283
diff changeset
116 # define dprintf(pctx, ...)
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
117 #endif
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
118
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
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
bec4c3d175da move comment
mru
parents: 139
diff changeset
121 /* math */
bec4c3d175da move comment
mru
parents: 139
diff changeset
122
432
dcb08e8f3b2e Faster ff_sqrt()
michael
parents: 431
diff changeset
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
dcb08e8f3b2e Faster ff_sqrt()
michael
parents: 431
diff changeset
127 unsigned int b;
12
ce8f9f4390c3 COSMETICS: Remove all trailing whitespace.
diego
parents: 11
diff changeset
128
774
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
129 if (a < 255) return (ff_sqrt_tab[a + 1] - 1) >> 4;
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
130 else if (a < (1 << 12)) b = ff_sqrt_tab[a >> 4] >> 2;
603
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 600
diff changeset
131 #if !CONFIG_SMALL
774
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
132 else if (a < (1 << 14)) b = ff_sqrt_tab[a >> 6] >> 1;
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
133 else if (a < (1 << 16)) b = ff_sqrt_tab[a >> 8] ;
432
dcb08e8f3b2e Faster ff_sqrt()
michael
parents: 431
diff changeset
134 #endif
774
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
135 else {
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
136 int s = av_log2_16bit(a >> 16) >> 1;
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
137 unsigned int c = a >> (s + 2);
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
138 b = ff_sqrt_tab[c >> (s + 8)];
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
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
dcb08e8f3b2e Faster ff_sqrt()
michael
parents: 431
diff changeset
141
774
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
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
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 600
diff changeset
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
b20a4eb68876 Convert asm keyword into __asm__.
flameeyes
parents: 569
diff changeset
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
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
149 "xorl %1, %0 \n\t"\
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
150 "subl %1, %0 \n\t"\
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
151 : "+a" (level), "=&d" (mask)\
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
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
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
155 mask = level >> 31;\
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
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
683a6dbdd2b2 spelling/grammar/consistency review part III
diego
parents: 636
diff changeset
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
bba4d248d13a more av_strl* adjustments
reimar
parents: 343
diff changeset
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
39cdbea1a8f1 prevent exit missuse
michael
parents: 285
diff changeset
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
fa6c031f2a57 Disallow puts(), av_log() should be used instead.
diego
parents: 411
diff changeset
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
988be4b2fd0c Add CHECKED_ALLOC macro.
ramiro
parents: 753
diff changeset
192 {\
774
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
193 p = av_malloc(size);\
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
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
988be4b2fd0c Add CHECKED_ALLOC macro.
ramiro
parents: 753
diff changeset
197 }\
988be4b2fd0c Add CHECKED_ALLOC macro.
ramiro
parents: 753
diff changeset
198 }
988be4b2fd0c Add CHECKED_ALLOC macro.
ramiro
parents: 753
diff changeset
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
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
202 p = av_mallocz(size);\
1896cda0ecfc whitespace cosmetics, prettyprinting
diego
parents: 772
diff changeset
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
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 600
diff changeset
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
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 600
diff changeset
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
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 600
diff changeset
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
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 600
diff changeset
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
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 600
diff changeset
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
880c6441f56a Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 600
diff changeset
264 #if !HAVE_TRUNCF
600
198d4fd6541d Add truncf() replacement function.
ramiro
parents: 598
diff changeset
265 static av_always_inline av_const float truncf(float x)
198d4fd6541d Add truncf() replacement function.
ramiro
parents: 598
diff changeset
266 {
198d4fd6541d Add truncf() replacement function.
ramiro
parents: 598
diff changeset
267 return (x > 0) ? floor(x) : ceil(x);
198d4fd6541d Add truncf() replacement function.
ramiro
parents: 598
diff changeset
268 }
198d4fd6541d Add truncf() replacement function.
ramiro
parents: 598
diff changeset
269 #endif /* HAVE_TRUNCF */
198d4fd6541d Add truncf() replacement function.
ramiro
parents: 598
diff changeset
270
605
5d605aafa09d move NULL_IF_CONFIG_SMALL() definition into internal header
aurel
parents: 604
diff changeset
271 /**
636
c04808220c83 spelling/grammar/consistency review part II
diego
parents: 633
diff changeset
272 * Returns NULL if CONFIG_SMALL is true, otherwise the argument
c04808220c83 spelling/grammar/consistency review part II
diego
parents: 633
diff changeset
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
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 549
diff changeset
282 #endif /* AVUTIL_INTERNAL_H */