~ubuntu-branches/ubuntu/oneiric/libav/oneiric

« back to all changes in this revision

Viewing changes to libavutil/internal.h

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2011-03-20 12:09:31 UTC
  • Revision ID: james.westby@ubuntu.com-20110320120931-nfhi9tiok27gxhw1
Tags: upstream-0.6.2
ImportĀ upstreamĀ versionĀ 0.6.2

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
 
23
 * common internal API header
 
24
 */
 
25
 
 
26
#ifndef AVUTIL_INTERNAL_H
 
27
#define AVUTIL_INTERNAL_H
 
28
 
 
29
#if !defined(DEBUG) && !defined(NDEBUG)
 
30
#    define NDEBUG
 
31
#endif
 
32
 
 
33
#include <limits.h>
 
34
#include <stdint.h>
 
35
#include <stddef.h>
 
36
#include <assert.h>
 
37
#include "config.h"
 
38
#include "attributes.h"
 
39
#include "timer.h"
 
40
 
 
41
#ifndef attribute_align_arg
 
42
#if (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(4,2)
 
43
#    define attribute_align_arg __attribute__((force_align_arg_pointer))
 
44
#else
 
45
#    define attribute_align_arg
 
46
#endif
 
47
#endif
 
48
 
 
49
#ifndef attribute_used
 
50
#if AV_GCC_VERSION_AT_LEAST(3,1)
 
51
#    define attribute_used __attribute__((used))
 
52
#else
 
53
#    define attribute_used
 
54
#endif
 
55
#endif
 
56
 
 
57
#ifndef av_alias
 
58
#if HAVE_ATTRIBUTE_MAY_ALIAS && (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(3,3)
 
59
#   define av_alias __attribute__((may_alias))
 
60
#else
 
61
#   define av_alias
 
62
#endif
 
63
#endif
 
64
 
 
65
#ifndef INT16_MIN
 
66
#define INT16_MIN       (-0x7fff - 1)
 
67
#endif
 
68
 
 
69
#ifndef INT16_MAX
 
70
#define INT16_MAX       0x7fff
 
71
#endif
 
72
 
 
73
#ifndef INT32_MIN
 
74
#define INT32_MIN       (-0x7fffffff - 1)
 
75
#endif
 
76
 
 
77
#ifndef INT32_MAX
 
78
#define INT32_MAX       0x7fffffff
 
79
#endif
 
80
 
 
81
#ifndef UINT32_MAX
 
82
#define UINT32_MAX      0xffffffff
 
83
#endif
 
84
 
 
85
#ifndef INT64_MIN
 
86
#define INT64_MIN       (-0x7fffffffffffffffLL - 1)
 
87
#endif
 
88
 
 
89
#ifndef INT64_MAX
 
90
#define INT64_MAX INT64_C(9223372036854775807)
 
91
#endif
 
92
 
 
93
#ifndef UINT64_MAX
 
94
#define UINT64_MAX UINT64_C(0xFFFFFFFFFFFFFFFF)
 
95
#endif
 
96
 
 
97
#ifndef INT_BIT
 
98
#    define INT_BIT (CHAR_BIT * sizeof(int))
 
99
#endif
 
100
 
 
101
#ifndef offsetof
 
102
#    define offsetof(T, F) ((unsigned int)((char *)&((T *)0)->F))
 
103
#endif
 
104
 
 
105
/* Use to export labels from asm. */
 
106
#define LABEL_MANGLE(a) EXTERN_PREFIX #a
 
107
 
 
108
// Use rip-relative addressing if compiling PIC code on x86-64.
 
109
#if ARCH_X86_64 && defined(PIC)
 
110
#    define LOCAL_MANGLE(a) #a "(%%rip)"
 
111
#else
 
112
#    define LOCAL_MANGLE(a) #a
 
113
#endif
 
114
 
 
115
#define MANGLE(a) EXTERN_PREFIX LOCAL_MANGLE(a)
 
116
 
 
117
/* debug stuff */
 
118
 
 
119
/* dprintf macros */
 
120
#ifdef DEBUG
 
121
#    define dprintf(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__)
 
122
#else
 
123
#    define dprintf(pctx, ...)
 
124
#endif
 
125
 
 
126
#define av_abort()      do { av_log(NULL, AV_LOG_ERROR, "Abort at %s:%d\n", __FILE__, __LINE__); abort(); } while (0)
 
127
 
 
128
/* math */
 
129
 
 
130
#if ARCH_X86
 
131
#define MASK_ABS(mask, level)\
 
132
            __asm__ volatile(\
 
133
                "cltd                   \n\t"\
 
134
                "xorl %1, %0            \n\t"\
 
135
                "subl %1, %0            \n\t"\
 
136
                : "+a" (level), "=&d" (mask)\
 
137
            );
 
138
#else
 
139
#define MASK_ABS(mask, level)\
 
140
            mask  = level >> 31;\
 
141
            level = (level ^ mask) - mask;
 
142
#endif
 
143
 
 
144
/* avoid usage of dangerous/inappropriate system functions */
 
145
#undef  malloc
 
146
#define malloc please_use_av_malloc
 
147
#undef  free
 
148
#define free please_use_av_free
 
149
#undef  realloc
 
150
#define realloc please_use_av_realloc
 
151
#undef  time
 
152
#define time time_is_forbidden_due_to_security_issues
 
153
#undef  rand
 
154
#define rand rand_is_forbidden_due_to_state_trashing_use_av_lfg_get
 
155
#undef  srand
 
156
#define srand srand_is_forbidden_due_to_state_trashing_use_av_lfg_init
 
157
#undef  random
 
158
#define random random_is_forbidden_due_to_state_trashing_use_av_lfg_get
 
159
#undef  sprintf
 
160
#define sprintf sprintf_is_forbidden_due_to_security_issues_use_snprintf
 
161
#undef  strcat
 
162
#define strcat strcat_is_forbidden_due_to_security_issues_use_av_strlcat
 
163
#undef  exit
 
164
#define exit exit_is_forbidden
 
165
#ifndef LIBAVFORMAT_BUILD
 
166
#undef  printf
 
167
#define printf please_use_av_log_instead_of_printf
 
168
#undef  fprintf
 
169
#define fprintf please_use_av_log_instead_of_fprintf
 
170
#undef  puts
 
171
#define puts please_use_av_log_instead_of_puts
 
172
#undef  perror
 
173
#define perror please_use_av_log_instead_of_perror
 
174
#endif
 
175
 
 
176
#define FF_ALLOC_OR_GOTO(ctx, p, size, label)\
 
177
{\
 
178
    p = av_malloc(size);\
 
179
    if (p == NULL && (size) != 0) {\
 
180
        av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
 
181
        goto label;\
 
182
    }\
 
183
}
 
184
 
 
185
#define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)\
 
186
{\
 
187
    p = av_mallocz(size);\
 
188
    if (p == NULL && (size) != 0) {\
 
189
        av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
 
190
        goto label;\
 
191
    }\
 
192
}
 
193
 
 
194
#include "libm.h"
 
195
 
 
196
/**
 
197
 * Returns NULL if CONFIG_SMALL is true, otherwise the argument
 
198
 * without modification. Used to disable the definition of strings
 
199
 * (for example AVCodec long_names).
 
200
 */
 
201
#if CONFIG_SMALL
 
202
#   define NULL_IF_CONFIG_SMALL(x) NULL
 
203
#else
 
204
#   define NULL_IF_CONFIG_SMALL(x) x
 
205
#endif
 
206
 
 
207
#if HAVE_SYMVER_ASM_LABEL
 
208
#   define FF_SYMVER(type, name, args, ver)                     \
 
209
    type ff_##name args __asm__ (EXTERN_PREFIX #name "@" ver);  \
 
210
    type ff_##name args
 
211
#elif HAVE_SYMVER_GNU_ASM
 
212
#   define FF_SYMVER(type, name, args, ver)                             \
 
213
    __asm__ (".symver ff_" #name "," EXTERN_PREFIX #name "@" ver);      \
 
214
    type ff_##name args;                                                \
 
215
    type ff_##name args
 
216
#endif
 
217
 
 
218
#endif /* AVUTIL_INTERNAL_H */