annotate src/ffmpeg/libavutil/internal.h @ 854:aac49941ee8f trunk

[svn] statusicon 0.3: alternative right-click menu with simple playback control commands
author giacomo
date Wed, 14 Mar 2007 07:44:00 -0700
parents 1481c3667dc9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
808
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
1 /*
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
3 *
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
4 * This file is part of FFmpeg.
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
5 *
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
8 * License as published by the Free Software Foundation; either
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
9 * version 2.1 of the License, or (at your option) any later version.
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
10 *
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
14 * Lesser General Public License for more details.
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
15 *
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
17 * License along with FFmpeg; if not, write to the Free Software
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
19 */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
20
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
21 /**
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
22 * @file internal.h
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
23 * common internal api header.
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
24 */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
25
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
26 #ifndef INTERNAL_H
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
27 #define INTERNAL_H
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
28
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
29 #if ( defined(__PIC__) || defined(__pic__) ) && ! defined(PIC)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
30 # define PIC
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
31 #endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
32
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
33 # ifndef ENODATA
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
34 # define ENODATA 61
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
35 # endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
36
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
37 #include "bswap.h"
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
38
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
39 #include <stddef.h>
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
40 #ifndef offsetof
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
41 # define offsetof(T,F) ((unsigned int)((char *)&((T *)0)->F))
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
42 #endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
43
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
44 #ifdef __MINGW32__
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
45 # ifdef _DEBUG
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
46 # define DEBUG
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
47 # endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
48
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
49 # define snprintf _snprintf
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
50 # define vsnprintf _vsnprintf
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
51
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
52 # ifdef CONFIG_WINCE
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
53 # define perror(a)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
54 # endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
55
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
56 /* __MINGW32__ end */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
57 #elif defined (CONFIG_OS2)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
58 /* OS/2 EMX */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
59
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
60 #include <float.h>
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
61
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
62 #endif /* !__MINGW32__ && CONFIG_OS2 */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
63
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
64 # ifdef USE_FASTMEMCPY
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
65 # include "libvo/fastmemcpy.h"
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
66 # endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
67
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
68 // Use rip-relative addressing if compiling PIC code on x86-64.
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
69 # if defined(__MINGW32__) || defined(__CYGWIN__) || \
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
70 defined(__OS2__) || (defined (__OpenBSD__) && !defined(__ELF__))
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
71 # if defined(ARCH_X86_64) && defined(PIC)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
72 # define MANGLE(a) "_" #a"(%%rip)"
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
73 # else
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
74 # define MANGLE(a) "_" #a
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
75 # endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
76 # else
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
77 # if defined(ARCH_X86_64) && defined(PIC)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
78 # define MANGLE(a) #a"(%%rip)"
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
79 # elif defined(CONFIG_DARWIN)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
80 # define MANGLE(a) "_" #a
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
81 # else
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
82 # define MANGLE(a) #a
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
83 # endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
84 # endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
85
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
86 /* debug stuff */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
87
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
88 # if !defined(DEBUG) && !defined(NDEBUG)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
89 # define NDEBUG
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
90 # endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
91 # include <assert.h>
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
92
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
93 /* dprintf macros */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
94 # ifdef DEBUG
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
95 # define dprintf(fmt,...) av_log(NULL, AV_LOG_DEBUG, fmt, __VA_ARGS__)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
96 # else
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
97 # define dprintf(fmt,...)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
98 # endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
99
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
100 # ifdef CONFIG_WINCE
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
101 # define abort()
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
102 # endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
103
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
104 # define av_abort() do { av_log(NULL, AV_LOG_ERROR, "Abort at %s:%d\n", __FILE__, __LINE__); abort(); } while (0)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
105
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
106 extern const uint32_t inverse[256];
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
107
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
108 #if defined(ARCH_X86) || defined(ARCH_X86_64)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
109 # define FASTDIV(a,b) \
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
110 ({\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
111 int ret,dmy;\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
112 asm volatile(\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
113 "mull %3"\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
114 :"=d"(ret),"=a"(dmy)\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
115 :"1"(a),"g"(inverse[b])\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
116 );\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
117 ret;\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
118 })
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
119 #elif defined(ARCH_ARMV4L)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
120 # define FASTDIV(a,b) \
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
121 ({\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
122 int ret,dmy;\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
123 asm volatile(\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
124 "umull %1, %0, %2, %3"\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
125 :"=&r"(ret),"=&r"(dmy)\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
126 :"r"(a),"r"(inverse[b])\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
127 );\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
128 ret;\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
129 })
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
130 #elif defined(CONFIG_FASTDIV)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
131 # define FASTDIV(a,b) ((uint32_t)((((uint64_t)a)*inverse[b])>>32))
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
132 #else
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
133 # define FASTDIV(a,b) ((a)/(b))
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
134 #endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
135
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
136 /* math */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
137 extern FF_IMPORT_ATTR const uint8_t ff_sqrt_tab[128];
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
138
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
139 static inline int ff_sqrt(int a)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
140 {
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
141 int ret=0;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
142 int s;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
143 int ret_sq=0;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
144
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
145 if(a<128) return ff_sqrt_tab[a];
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
146
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
147 for(s=15; s>=0; s--){
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
148 int b= ret_sq + (1<<(s*2)) + (ret<<s)*2;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
149 if(b<=a){
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
150 ret_sq=b;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
151 ret+= 1<<s;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
152 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
153 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
154 return ret;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
155 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
156
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
157 #if defined(ARCH_X86) || defined(ARCH_X86_64)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
158 #define MASK_ABS(mask, level)\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
159 asm volatile(\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
160 "cdq \n\t"\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
161 "xorl %1, %0 \n\t"\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
162 "subl %1, %0 \n\t"\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
163 : "+a" (level), "=&d" (mask)\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
164 );
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
165 #else
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
166 #define MASK_ABS(mask, level)\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
167 mask= level>>31;\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
168 level= (level^mask)-mask;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
169 #endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
170
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
171 #ifdef HAVE_CMOV
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
172 #define COPY3_IF_LT(x,y,a,b,c,d)\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
173 asm volatile (\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
174 "cmpl %0, %3 \n\t"\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
175 "cmovl %3, %0 \n\t"\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
176 "cmovl %4, %1 \n\t"\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
177 "cmovl %5, %2 \n\t"\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
178 : "+r" (x), "+r" (a), "+r" (c)\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
179 : "r" (y), "r" (b), "r" (d)\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
180 );
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
181 #else
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
182 #define COPY3_IF_LT(x,y,a,b,c,d)\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
183 if((y)<(x)){\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
184 (x)=(y);\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
185 (a)=(b);\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
186 (c)=(d);\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
187 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
188 #endif
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
189
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
190 #define CHECKED_ALLOCZ(p, size)\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
191 {\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
192 p= av_mallocz(size);\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
193 if(p==NULL && (size)!=0){\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
194 perror("malloc");\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
195 goto fail;\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
196 }\
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
197 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
198
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
199 #ifndef HAVE_LRINTF
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
200 /* XXX: add ISOC specific test to avoid specific BSD testing. */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
201 /* better than nothing implementation. */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
202 /* btw, rintf() is existing on fbsd too -- alex */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
203 static always_inline long int lrintf(float x)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
204 {
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
205 #ifdef __MINGW32__
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
206 # ifdef ARCH_X86
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
207 int32_t i;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
208 asm volatile(
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
209 "fistpl %0\n\t"
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
210 : "=m" (i) : "t" (x) : "st"
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
211 );
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
212 return i;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
213 # else
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
214 /* XXX: incorrect, but make it compile */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
215 return (int)(x + (x < 0 ? -0.5 : 0.5));
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
216 # endif /* ARCH_X86 */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
217 #else
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
218 return (int)(rint(x));
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
219 #endif /* __MINGW32__ */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
220 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
221 #endif /* HAVE_LRINTF */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
222
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
223 #endif /* INTERNAL_H */