2
* copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
4
* This file is part of FFmpeg.
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.
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.
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
23
* common internal API header
26
#ifndef AVUTIL_INTERNAL_H
27
#define AVUTIL_INTERNAL_H
29
#if !defined(DEBUG) && !defined(NDEBUG)
38
#include "attributes.h"
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))
45
# define attribute_align_arg
49
#ifndef attribute_used
50
#if AV_GCC_VERSION_AT_LEAST(3,1)
51
# define attribute_used __attribute__((used))
53
# define attribute_used
58
#if HAVE_ATTRIBUTE_MAY_ALIAS && (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(3,3)
59
# define av_alias __attribute__((may_alias))
66
#define INT16_MIN (-0x7fff - 1)
70
#define INT16_MAX 0x7fff
74
#define INT32_MIN (-0x7fffffff - 1)
78
#define INT32_MAX 0x7fffffff
82
#define UINT32_MAX 0xffffffff
86
#define INT64_MIN (-0x7fffffffffffffffLL - 1)
90
#define INT64_MAX INT64_C(9223372036854775807)
94
#define UINT64_MAX UINT64_C(0xFFFFFFFFFFFFFFFF)
98
# define INT_BIT (CHAR_BIT * sizeof(int))
102
# define offsetof(T, F) ((unsigned int)((char *)&((T *)0)->F))
105
/* Use to export labels from asm. */
106
#define LABEL_MANGLE(a) EXTERN_PREFIX #a
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)"
112
# define LOCAL_MANGLE(a) #a
115
#define MANGLE(a) EXTERN_PREFIX LOCAL_MANGLE(a)
121
# define dprintf(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__)
123
# define dprintf(pctx, ...)
126
#define av_abort() do { av_log(NULL, AV_LOG_ERROR, "Abort at %s:%d\n", __FILE__, __LINE__); abort(); } while (0)
131
#define MASK_ABS(mask, level)\
136
: "+a" (level), "=&d" (mask)\
139
#define MASK_ABS(mask, level)\
141
level = (level ^ mask) - mask;
144
/* avoid usage of dangerous/inappropriate system functions */
146
#define malloc please_use_av_malloc
148
#define free please_use_av_free
150
#define realloc please_use_av_realloc
152
#define time time_is_forbidden_due_to_security_issues
154
#define rand rand_is_forbidden_due_to_state_trashing_use_av_lfg_get
156
#define srand srand_is_forbidden_due_to_state_trashing_use_av_lfg_init
158
#define random random_is_forbidden_due_to_state_trashing_use_av_lfg_get
160
#define sprintf sprintf_is_forbidden_due_to_security_issues_use_snprintf
162
#define strcat strcat_is_forbidden_due_to_security_issues_use_av_strlcat
164
#define exit exit_is_forbidden
165
#ifndef LIBAVFORMAT_BUILD
167
#define printf please_use_av_log_instead_of_printf
169
#define fprintf please_use_av_log_instead_of_fprintf
171
#define puts please_use_av_log_instead_of_puts
173
#define perror please_use_av_log_instead_of_perror
176
#define FF_ALLOC_OR_GOTO(ctx, p, size, label)\
178
p = av_malloc(size);\
179
if (p == NULL && (size) != 0) {\
180
av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
185
#define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)\
187
p = av_mallocz(size);\
188
if (p == NULL && (size) != 0) {\
189
av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
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).
202
# define NULL_IF_CONFIG_SMALL(x) NULL
204
# define NULL_IF_CONFIG_SMALL(x) x
207
#if HAVE_SYMVER_ASM_LABEL
208
# define FF_SYMVER(type, name, args, ver) \
209
type ff_##name args __asm__ (EXTERN_PREFIX #name "@" ver); \
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; \
218
#endif /* AVUTIL_INTERNAL_H */