~ubuntu-branches/ubuntu/jaunty/xvidcap/jaunty-proposed

« back to all changes in this revision

Viewing changes to ffmpeg/libavutil/internal.h

  • Committer: Bazaar Package Importer
  • Author(s): John Dong
  • Date: 2008-02-25 15:47:12 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20080225154712-qvr11ekcea4c9ry8
Tags: 1.1.6-0.1ubuntu1
* Merge from debian-multimedia (LP: #120003), Ubuntu Changes:
 - For ffmpeg-related build-deps, remove cvs from package names.
 - Standards-Version 3.7.3
 - Maintainer Spec

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
 
3
 *
 
4
 * This file is part of FFmpeg.
 
5
 *
 
6
 * FFmpeg is free software; you can redistribute it and/or
 
7
 * modify it under the terms of the GNU Lesser General Public
 
8
 * License as published by the Free Software Foundation; either
 
9
 * version 2.1 of the License, or (at your option) any later version.
 
10
 *
 
11
 * FFmpeg is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
14
 * Lesser General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU Lesser General Public
 
17
 * License along with FFmpeg; if not, write to the Free Software
 
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
19
 */
 
20
 
 
21
/**
 
22
 * @file internal.h
 
23
 * common internal api header.
 
24
 */
 
25
 
 
26
#ifndef INTERNAL_H
 
27
#define INTERNAL_H
 
28
 
 
29
#ifndef attribute_used
 
30
#if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
 
31
#    define attribute_used __attribute__((used))
 
32
#else
 
33
#    define attribute_used
 
34
#endif
 
35
#endif
 
36
 
 
37
#ifndef attribute_unused
 
38
#if defined(__GNUC__)
 
39
#    define attribute_unused __attribute__((unused))
 
40
#else
 
41
#    define attribute_unused
 
42
#endif
 
43
#endif
 
44
 
 
45
#ifndef M_PI
 
46
#define M_PI    3.14159265358979323846
 
47
#endif
 
48
 
 
49
#ifndef INT16_MIN
 
50
#define INT16_MIN       (-0x7fff-1)
 
51
#endif
 
52
 
 
53
#ifndef INT16_MAX
 
54
#define INT16_MAX       0x7fff
 
55
#endif
 
56
 
 
57
#ifndef INT32_MIN
 
58
#define INT32_MIN       (-0x7fffffff-1)
 
59
#endif
 
60
 
 
61
#ifndef INT32_MAX
 
62
#define INT32_MAX       0x7fffffff
 
63
#endif
 
64
 
 
65
#ifndef UINT32_MAX
 
66
#define UINT32_MAX      0xffffffff
 
67
#endif
 
68
 
 
69
#ifndef INT64_MIN
 
70
#define INT64_MIN       (-0x7fffffffffffffffLL-1)
 
71
#endif
 
72
 
 
73
#ifndef INT64_MAX
 
74
#define INT64_MAX INT64_C(9223372036854775807)
 
75
#endif
 
76
 
 
77
#ifndef UINT64_MAX
 
78
#define UINT64_MAX UINT64_C(0xFFFFFFFFFFFFFFFF)
 
79
#endif
 
80
 
 
81
#ifndef INT_BIT
 
82
#    if INT_MAX != 2147483647
 
83
#        define INT_BIT 64
 
84
#    else
 
85
#        define INT_BIT 32
 
86
#    endif
 
87
#endif
 
88
 
 
89
#if ( defined(__PIC__) || defined(__pic__) ) && ! defined(PIC)
 
90
#    define PIC
 
91
#endif
 
92
 
 
93
#include "intreadwrite.h"
 
94
#include "bswap.h"
 
95
 
 
96
#include <stddef.h>
 
97
#ifndef offsetof
 
98
#    define offsetof(T,F) ((unsigned int)((char *)&((T *)0)->F))
 
99
#endif
 
100
 
 
101
#ifdef __MINGW32__
 
102
#    ifdef _DEBUG
 
103
#        define DEBUG
 
104
#    endif
 
105
 
 
106
#    define snprintf _snprintf
 
107
#    define vsnprintf _vsnprintf
 
108
 
 
109
#    ifdef CONFIG_WINCE
 
110
#        define perror(a)
 
111
#        define abort()
 
112
#    endif
 
113
 
 
114
/* __MINGW32__ end */
 
115
#elif defined (CONFIG_OS2)
 
116
/* OS/2 EMX */
 
117
 
 
118
#    include <float.h>
 
119
 
 
120
#endif /* !__MINGW32__ && CONFIG_OS2 */
 
121
 
 
122
#ifdef USE_FASTMEMCPY
 
123
#    include "libvo/fastmemcpy.h"
 
124
#endif
 
125
 
 
126
// Use rip-relative addressing if compiling PIC code on x86-64.
 
127
#if defined(__MINGW32__) || defined(__CYGWIN__) || \
 
128
    defined(__OS2__) || (defined (__OpenBSD__) && !defined(__ELF__))
 
129
#    if defined(ARCH_X86_64) && defined(PIC)
 
130
#        define MANGLE(a) "_" #a"(%%rip)"
 
131
#    else
 
132
#        define MANGLE(a) "_" #a
 
133
#    endif
 
134
#else
 
135
#    if defined(ARCH_X86_64) && defined(PIC)
 
136
#        define MANGLE(a) #a"(%%rip)"
 
137
#    elif defined(CONFIG_DARWIN)
 
138
#        define MANGLE(a) "_" #a
 
139
#    else
 
140
#        define MANGLE(a) #a
 
141
#    endif
 
142
#endif
 
143
 
 
144
/* debug stuff */
 
145
 
 
146
#if !defined(DEBUG) && !defined(NDEBUG)
 
147
#    define NDEBUG
 
148
#endif
 
149
#include <assert.h>
 
150
 
 
151
/* dprintf macros */
 
152
#ifdef DEBUG
 
153
#    define dprintf(fmt,...) av_log(NULL, AV_LOG_DEBUG, fmt, __VA_ARGS__)
 
154
#else
 
155
#    define dprintf(fmt,...)
 
156
#endif
 
157
 
 
158
#define av_abort()      do { av_log(NULL, AV_LOG_ERROR, "Abort at %s:%d\n", __FILE__, __LINE__); abort(); } while (0)
 
159
 
 
160
/* math */
 
161
 
 
162
extern const uint32_t ff_inverse[256];
 
163
 
 
164
#if defined(ARCH_X86)
 
165
#    define FASTDIV(a,b) \
 
166
    ({\
 
167
        int ret,dmy;\
 
168
        asm volatile(\
 
169
            "mull %3"\
 
170
            :"=d"(ret),"=a"(dmy)\
 
171
            :"1"(a),"g"(ff_inverse[b])\
 
172
            );\
 
173
        ret;\
 
174
    })
 
175
#elif defined(ARCH_ARMV4L)
 
176
#    define FASTDIV(a,b) \
 
177
    ({\
 
178
        int ret,dmy;\
 
179
        asm volatile(\
 
180
            "umull %1, %0, %2, %3"\
 
181
            :"=&r"(ret),"=&r"(dmy)\
 
182
            :"r"(a),"r"(ff_inverse[b])\
 
183
            );\
 
184
        ret;\
 
185
    })
 
186
#elif defined(CONFIG_FASTDIV)
 
187
#    define FASTDIV(a,b)   ((uint32_t)((((uint64_t)a)*ff_inverse[b])>>32))
 
188
#else
 
189
#    define FASTDIV(a,b)   ((a)/(b))
 
190
#endif
 
191
 
 
192
extern const uint8_t ff_sqrt_tab[128];
 
193
 
 
194
static inline int ff_sqrt(int a)
 
195
{
 
196
    int ret=0;
 
197
    int s;
 
198
    int ret_sq=0;
 
199
 
 
200
    if(a<128) return ff_sqrt_tab[a];
 
201
 
 
202
    for(s=15; s>=0; s--){
 
203
        int b= ret_sq + (1<<(s*2)) + (ret<<s)*2;
 
204
        if(b<=a){
 
205
            ret_sq=b;
 
206
            ret+= 1<<s;
 
207
        }
 
208
    }
 
209
    return ret;
 
210
}
 
211
 
 
212
#if defined(ARCH_X86)
 
213
#define MASK_ABS(mask, level)\
 
214
            asm volatile(\
 
215
                "cdq                    \n\t"\
 
216
                "xorl %1, %0            \n\t"\
 
217
                "subl %1, %0            \n\t"\
 
218
                : "+a" (level), "=&d" (mask)\
 
219
            );
 
220
#else
 
221
#define MASK_ABS(mask, level)\
 
222
            mask= level>>31;\
 
223
            level= (level^mask)-mask;
 
224
#endif
 
225
 
 
226
#ifdef HAVE_CMOV
 
227
#define COPY3_IF_LT(x,y,a,b,c,d)\
 
228
asm volatile (\
 
229
    "cmpl %0, %3        \n\t"\
 
230
    "cmovl %3, %0       \n\t"\
 
231
    "cmovl %4, %1       \n\t"\
 
232
    "cmovl %5, %2       \n\t"\
 
233
    : "+r" (x), "+r" (a), "+r" (c)\
 
234
    : "r" (y), "r" (b), "r" (d)\
 
235
);
 
236
#else
 
237
#define COPY3_IF_LT(x,y,a,b,c,d)\
 
238
if((y)<(x)){\
 
239
     (x)=(y);\
 
240
     (a)=(b);\
 
241
     (c)=(d);\
 
242
}
 
243
#endif
 
244
 
 
245
/* avoid usage of various functions */
 
246
#define malloc please_use_av_malloc
 
247
#define free please_use_av_free
 
248
#define realloc please_use_av_realloc
 
249
#define time time_is_forbidden_due_to_security_issues
 
250
#define rand rand_is_forbidden_due_to_state_trashing
 
251
#define srand srand_is_forbidden_due_to_state_trashing
 
252
#define sprintf sprintf_is_forbidden_due_to_security_issues_use_snprintf
 
253
#define strcat strcat_is_forbidden_due_to_security_issues_use_pstrcat
 
254
#if !(defined(LIBAVFORMAT_BUILD) || defined(_FRAMEHOOK_H))
 
255
#define printf please_use_av_log
 
256
#define fprintf please_use_av_log
 
257
#endif
 
258
 
 
259
#define CHECKED_ALLOCZ(p, size)\
 
260
{\
 
261
    p= av_mallocz(size);\
 
262
    if(p==NULL && (size)!=0){\
 
263
        perror("malloc");\
 
264
        goto fail;\
 
265
    }\
 
266
}
 
267
 
 
268
#ifndef HAVE_LRINTF
 
269
/* XXX: add ISOC specific test to avoid specific BSD testing. */
 
270
/* better than nothing implementation. */
 
271
/* btw, rintf() is existing on fbsd too -- alex */
 
272
static av_always_inline long int lrintf(float x)
 
273
{
 
274
#ifdef __MINGW32__
 
275
#  ifdef ARCH_X86_32
 
276
    int32_t i;
 
277
    asm volatile(
 
278
        "fistpl %0\n\t"
 
279
        : "=m" (i) : "t" (x) : "st"
 
280
    );
 
281
    return i;
 
282
#  else
 
283
    /* XXX: incorrect, but make it compile */
 
284
    return (int)(x + (x < 0 ? -0.5 : 0.5));
 
285
#  endif /* ARCH_X86_32 */
 
286
#else
 
287
    return (int)(rint(x));
 
288
#endif /* __MINGW32__ */
 
289
}
 
290
#endif /* HAVE_LRINTF */
 
291
 
 
292
#endif /* INTERNAL_H */