annotate internal.h @ 374:8805bba131a9 libavutil

Add attribute that forces alignment of stack to functions that need it. Necessary for systems that don't align by default to 16 bytes, required by some SSE instructions. Requires GCC >= 4.2. Based on patch by Gal Chardon.
author ramiro
date Mon, 13 Aug 2007 15:28:29 +0000
parents 4d3f4347b718
children 5a85ad617615
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 /**
80
624fc3ad183a Split common.h in two parts, purely internal stuff (internal.h) and things
reimar
parents: 75
diff changeset
22 * @file internal.h
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
23 * common internal api header.
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
80
624fc3ad183a Split common.h in two parts, purely internal stuff (internal.h) and things
reimar
parents: 75
diff changeset
26 #ifndef INTERNAL_H
624fc3ad183a Split common.h in two parts, purely internal stuff (internal.h) and things
reimar
parents: 75
diff changeset
27 #define 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
343
f21d1907d47c include all prerequisites in header files
mru
parents: 340
diff changeset
33 #include <stdint.h>
366
4d3f4347b718 move #include of system headers to top of file
mru
parents: 365
diff changeset
34 #include <stddef.h>
4d3f4347b718 move #include of system headers to top of file
mru
parents: 365
diff changeset
35 #include <assert.h>
343
f21d1907d47c include all prerequisites in header files
mru
parents: 340
diff changeset
36
374
8805bba131a9 Add attribute that forces alignment of stack to functions that need it.
ramiro
parents: 366
diff changeset
37 #ifndef attribute_align_arg
8805bba131a9 Add attribute that forces alignment of stack to functions that need it.
ramiro
parents: 366
diff changeset
38 #if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__>1)
8805bba131a9 Add attribute that forces alignment of stack to functions that need it.
ramiro
parents: 366
diff changeset
39 # 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
40 #else
8805bba131a9 Add attribute that forces alignment of stack to functions that need it.
ramiro
parents: 366
diff changeset
41 # define attribute_align_arg
8805bba131a9 Add attribute that forces alignment of stack to functions that need it.
ramiro
parents: 366
diff changeset
42 #endif
8805bba131a9 Add attribute that forces alignment of stack to functions that need it.
ramiro
parents: 366
diff changeset
43 #endif
8805bba131a9 Add attribute that forces alignment of stack to functions that need it.
ramiro
parents: 366
diff changeset
44
154
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
45 #ifndef attribute_used
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
46 #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
47 # define attribute_used __attribute__((used))
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
48 #else
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
49 # define attribute_used
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
50 #endif
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
51 #endif
b94a48efd763 move some __attribute__ macros to internal.h
mru
parents: 152
diff changeset
52
155
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
53 #ifndef M_PI
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
54 #define M_PI 3.14159265358979323846
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
55 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
56
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
57 #ifndef INT16_MIN
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
58 #define INT16_MIN (-0x7fff-1)
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
59 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
60
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
61 #ifndef INT16_MAX
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
62 #define INT16_MAX 0x7fff
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
63 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
64
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
65 #ifndef INT32_MIN
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
66 #define INT32_MIN (-0x7fffffff-1)
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
67 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
68
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
69 #ifndef INT32_MAX
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
70 #define INT32_MAX 0x7fffffff
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
71 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
72
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
73 #ifndef UINT32_MAX
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
74 #define UINT32_MAX 0xffffffff
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
75 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
76
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
77 #ifndef INT64_MIN
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
78 #define INT64_MIN (-0x7fffffffffffffffLL-1)
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
79 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
80
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
81 #ifndef INT64_MAX
156
69e5b350225c use the standard INT64_C() macro for 64-bit constants
mru
parents: 155
diff changeset
82 #define INT64_MAX INT64_C(9223372036854775807)
155
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
83 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
84
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
85 #ifndef UINT64_MAX
156
69e5b350225c use the standard INT64_C() macro for 64-bit constants
mru
parents: 155
diff changeset
86 #define UINT64_MAX UINT64_C(0xFFFFFFFFFFFFFFFF)
155
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
87 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
88
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
89 #ifndef INT_BIT
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
90 # if INT_MAX != 2147483647
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
91 # define INT_BIT 64
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
92 # else
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
93 # define INT_BIT 32
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
94 # endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
95 #endif
5d849a1c0d4d move more macros to internal.h
mru
parents: 154
diff changeset
96
57
4d00c7c7d07d Make ffmpeg better support pic - from Diego Petten <flameeyes@gentoo.org>
lu_zero
parents: 55
diff changeset
97 #if ( defined(__PIC__) || defined(__pic__) ) && ! defined(PIC)
4d00c7c7d07d Make ffmpeg better support pic - from Diego Petten <flameeyes@gentoo.org>
lu_zero
parents: 55
diff changeset
98 # define PIC
4d00c7c7d07d Make ffmpeg better support pic - from Diego Petten <flameeyes@gentoo.org>
lu_zero
parents: 55
diff changeset
99 #endif
4d00c7c7d07d Make ffmpeg better support pic - from Diego Petten <flameeyes@gentoo.org>
lu_zero
parents: 55
diff changeset
100
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents: 143
diff changeset
101 #include "intreadwrite.h"
89
59433f391f2d do not include bswap.h in common.h for external programs, since the former
reimar
parents: 80
diff changeset
102 #include "bswap.h"
59433f391f2d do not include bswap.h in common.h for external programs, since the former
reimar
parents: 80
diff changeset
103
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
104 #ifndef offsetof
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
105 # 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
106 #endif
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
107
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
108 #ifdef USE_FASTMEMCPY
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
109 # include "libvo/fastmemcpy.h"
340
ae8a3be2db3b Part of MPlayer patch:
reimar
parents: 339
diff changeset
110 # define memcpy(a,b,c) fast_memcpy(a,b,c)
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
111 #endif
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
112
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
113 // Use rip-relative addressing if compiling PIC code on x86-64.
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
114 #if defined(__MINGW32__) || defined(__CYGWIN__) || \
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
115 defined(__OS2__) || (defined (__OpenBSD__) && !defined(__ELF__))
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
116 # if defined(ARCH_X86_64) && defined(PIC)
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
117 # define MANGLE(a) "_" #a"(%%rip)"
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
118 # else
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
119 # define MANGLE(a) "_" #a
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
120 # endif
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
121 #else
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
122 # if defined(ARCH_X86_64) && defined(PIC)
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
123 # define MANGLE(a) #a"(%%rip)"
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
124 # elif defined(CONFIG_DARWIN)
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
125 # define MANGLE(a) "_" #a
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
126 # else
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
127 # define MANGLE(a) #a
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
128 # endif
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
129 #endif
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
130
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
131 /* debug stuff */
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
132
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
133 /* dprintf macros */
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
134 #ifdef DEBUG
285
c529dbdea4f7 Give context to dprintf
mbardiaux
parents: 283
diff changeset
135 # define dprintf(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__)
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
136 #else
285
c529dbdea4f7 Give context to dprintf
mbardiaux
parents: 283
diff changeset
137 # define dprintf(pctx, ...)
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
138 #endif
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
139
138
e8767b5a5fdb indentation
mru
parents: 134
diff changeset
140 #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
141
143
bec4c3d175da move comment
mru
parents: 139
diff changeset
142 /* math */
bec4c3d175da move comment
mru
parents: 139
diff changeset
143
134
c47a9bfc9437 rename inverse -> ff_inverse
mru
parents: 125
diff changeset
144 extern const uint32_t ff_inverse[256];
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
145
125
172cf2494db7 Use common define for x86_32 and x86_64.
diego
parents: 124
diff changeset
146 #if defined(ARCH_X86)
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
147 # define FASTDIV(a,b) \
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
148 ({\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
149 int ret,dmy;\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
150 asm volatile(\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
151 "mull %3"\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
152 :"=d"(ret),"=a"(dmy)\
134
c47a9bfc9437 rename inverse -> ff_inverse
mru
parents: 125
diff changeset
153 :"1"(a),"g"(ff_inverse[b])\
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
154 );\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
155 ret;\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
156 })
114
37779851c665 add FASTDIV macro for ARM. Reported speed-up on MPEG-4 decoding: 1.8%
gpoirier
parents: 108
diff changeset
157 #elif defined(ARCH_ARMV4L)
37779851c665 add FASTDIV macro for ARM. Reported speed-up on MPEG-4 decoding: 1.8%
gpoirier
parents: 108
diff changeset
158 # define FASTDIV(a,b) \
37779851c665 add FASTDIV macro for ARM. Reported speed-up on MPEG-4 decoding: 1.8%
gpoirier
parents: 108
diff changeset
159 ({\
37779851c665 add FASTDIV macro for ARM. Reported speed-up on MPEG-4 decoding: 1.8%
gpoirier
parents: 108
diff changeset
160 int ret,dmy;\
37779851c665 add FASTDIV macro for ARM. Reported speed-up on MPEG-4 decoding: 1.8%
gpoirier
parents: 108
diff changeset
161 asm volatile(\
37779851c665 add FASTDIV macro for ARM. Reported speed-up on MPEG-4 decoding: 1.8%
gpoirier
parents: 108
diff changeset
162 "umull %1, %0, %2, %3"\
37779851c665 add FASTDIV macro for ARM. Reported speed-up on MPEG-4 decoding: 1.8%
gpoirier
parents: 108
diff changeset
163 :"=&r"(ret),"=&r"(dmy)\
134
c47a9bfc9437 rename inverse -> ff_inverse
mru
parents: 125
diff changeset
164 :"r"(a),"r"(ff_inverse[b])\
114
37779851c665 add FASTDIV macro for ARM. Reported speed-up on MPEG-4 decoding: 1.8%
gpoirier
parents: 108
diff changeset
165 );\
37779851c665 add FASTDIV macro for ARM. Reported speed-up on MPEG-4 decoding: 1.8%
gpoirier
parents: 108
diff changeset
166 ret;\
37779851c665 add FASTDIV macro for ARM. Reported speed-up on MPEG-4 decoding: 1.8%
gpoirier
parents: 108
diff changeset
167 })
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
168 #elif defined(CONFIG_FASTDIV)
134
c47a9bfc9437 rename inverse -> ff_inverse
mru
parents: 125
diff changeset
169 # define FASTDIV(a,b) ((uint32_t)((((uint64_t)a)*ff_inverse[b])>>32))
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
170 #else
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
171 # define FASTDIV(a,b) ((a)/(b))
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
172 #endif
12
ce8f9f4390c3 COSMETICS: Remove all trailing whitespace.
diego
parents: 11
diff changeset
173
157
d96dae9bdcaa fix mingw shared build, and get rid of FF_IMPORT_ATTR
mru
parents: 156
diff changeset
174 extern const uint8_t ff_sqrt_tab[128];
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
175
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
176 static inline int ff_sqrt(int a)
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
177 {
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
178 int ret=0;
334
d4ccc9609aa9 reduce number of shifts
michael
parents: 333
diff changeset
179 int s, b;
12
ce8f9f4390c3 COSMETICS: Remove all trailing whitespace.
diego
parents: 11
diff changeset
180
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
181 if(a<128) return ff_sqrt_tab[a];
12
ce8f9f4390c3 COSMETICS: Remove all trailing whitespace.
diego
parents: 11
diff changeset
182
334
d4ccc9609aa9 reduce number of shifts
michael
parents: 333
diff changeset
183 for(s=30; s>=0; s-=2){
d4ccc9609aa9 reduce number of shifts
michael
parents: 333
diff changeset
184 ret+=ret;
d4ccc9609aa9 reduce number of shifts
michael
parents: 333
diff changeset
185 b= (1+2*ret)<<s;
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
186 if(b<=a){
333
893380ba2425 simplify
michael
parents: 324
diff changeset
187 a-=b;
334
d4ccc9609aa9 reduce number of shifts
michael
parents: 333
diff changeset
188 ret++;
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
189 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
190 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
191 return ret;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
192 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
193
125
172cf2494db7 Use common define for x86_32 and x86_64.
diego
parents: 124
diff changeset
194 #if defined(ARCH_X86)
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
195 #define MASK_ABS(mask, level)\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
196 asm volatile(\
13
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
197 "cdq \n\t"\
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
198 "xorl %1, %0 \n\t"\
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
199 "subl %1, %0 \n\t"\
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
200 : "+a" (level), "=&d" (mask)\
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
201 );
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
202 #else
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
203 #define MASK_ABS(mask, level)\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
204 mask= level>>31;\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
205 level= (level^mask)-mask;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
206 #endif
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
207
121
69714d5e1561 Protect code that uses CMOV instructions with HAVE_CMOV,
gpoirier
parents: 116
diff changeset
208 #ifdef HAVE_CMOV
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
209 #define COPY3_IF_LT(x,y,a,b,c,d)\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
210 asm volatile (\
13
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
211 "cmpl %0, %3 \n\t"\
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
212 "cmovl %3, %0 \n\t"\
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
213 "cmovl %4, %1 \n\t"\
aedb6bd881b9 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 12
diff changeset
214 "cmovl %5, %2 \n\t"\
323
0e5545f9a454 Add first and second output to earlyclobbers in COPY3_IF_LT macro.
diego
parents: 321
diff changeset
215 : "+&r" (x), "+&r" (a), "+r" (c)\
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
216 : "r" (y), "r" (b), "r" (d)\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
217 );
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
218 #else
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
219 #define COPY3_IF_LT(x,y,a,b,c,d)\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
220 if((y)<(x)){\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
221 (x)=(y);\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
222 (a)=(b);\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
223 (c)=(d);\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
224 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
225 #endif
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
226
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
227 /* avoid usage of various functions */
359
b951d460bcb4 undef forbidden names before we #define them in case they are macros in libc
mru
parents: 355
diff changeset
228 #undef malloc
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
229 #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
230 #undef free
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
231 #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
232 #undef realloc
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
233 #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
234 #undef time
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
235 #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
236 #undef rand
355
74b190a612c3 Make error message more helpful and forbid random()
vitor
parents: 353
diff changeset
237 #define rand rand_is_forbidden_due_to_state_trashing_use_av_random
359
b951d460bcb4 undef forbidden names before we #define them in case they are macros in libc
mru
parents: 355
diff changeset
238 #undef srand
355
74b190a612c3 Make error message more helpful and forbid random()
vitor
parents: 353
diff changeset
239 #define srand srand_is_forbidden_due_to_state_trashing_use_av_init_random
359
b951d460bcb4 undef forbidden names before we #define them in case they are macros in libc
mru
parents: 355
diff changeset
240 #undef random
355
74b190a612c3 Make error message more helpful and forbid random()
vitor
parents: 353
diff changeset
241 #define random random_is_forbidden_due_to_state_trashing_use_av_random
359
b951d460bcb4 undef forbidden names before we #define them in case they are macros in libc
mru
parents: 355
diff changeset
242 #undef sprintf
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
243 #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
244 #undef strcat
349
bba4d248d13a more av_strl* adjustments
reimar
parents: 343
diff changeset
245 #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
246 #undef exit
321
39cdbea1a8f1 prevent exit missuse
michael
parents: 285
diff changeset
247 #define exit exit_is_forbidden
353
05c01c4c1ca9 Remove leading underscores from specifiers, they are reserved.
diego
parents: 349
diff changeset
248 #if !(defined(LIBAVFORMAT_BUILD) || defined(FRAMEHOOK_H))
359
b951d460bcb4 undef forbidden names before we #define them in case they are macros in libc
mru
parents: 355
diff changeset
249 #undef printf
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
250 #define printf please_use_av_log
359
b951d460bcb4 undef forbidden names before we #define them in case they are macros in libc
mru
parents: 355
diff changeset
251 #undef fprintf
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
252 #define fprintf please_use_av_log
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
253 #endif
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
254
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
255 #define CHECKED_ALLOCZ(p, size)\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
256 {\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
257 p= av_mallocz(size);\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
258 if(p==NULL && (size)!=0){\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
259 perror("malloc");\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
260 goto fail;\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
261 }\
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
262 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
263
4
26a00aee5eac Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents: 3
diff changeset
264 #ifndef HAVE_LRINTF
26a00aee5eac Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents: 3
diff changeset
265 /* XXX: add ISOC specific test to avoid specific BSD testing. */
26a00aee5eac Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents: 3
diff changeset
266 /* better than nothing implementation. */
26a00aee5eac Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents: 3
diff changeset
267 /* btw, rintf() is existing on fbsd too -- alex */
159
039198e96ee2 rename always_inline to av_always_inline and move to common.h
mru
parents: 157
diff changeset
268 static av_always_inline long int lrintf(float x)
4
26a00aee5eac Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents: 3
diff changeset
269 {
26a00aee5eac Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents: 3
diff changeset
270 return (int)(rint(x));
26a00aee5eac Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents: 3
diff changeset
271 }
26a00aee5eac Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents: 3
diff changeset
272 #endif /* HAVE_LRINTF */
26a00aee5eac Move lrintf implementation from libavcodec/dsputil.h to libavutil/common.h
diego
parents: 3
diff changeset
273
80
624fc3ad183a Split common.h in two parts, purely internal stuff (internal.h) and things
reimar
parents: 75
diff changeset
274 #endif /* INTERNAL_H */