Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/*
2
 * copyright (c) 2006 Michael Niedermayer 
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 
34
#include 
35
#include 
36
#include 
37
#include "config.h"
38
#include "attributes.h"
39
#include "timer.h"
40
#include "cpu.h"
41
#include "dict.h"
42
#include "version.h"
43
 
44
#if ARCH_X86
45
#   include "x86/emms.h"
46
#endif
47
 
48
#ifndef emms_c
49
#   define emms_c()
50
#endif
51
 
52
#ifndef attribute_align_arg
53
#if ARCH_X86_32 && AV_GCC_VERSION_AT_LEAST(4,2)
54
#    define attribute_align_arg __attribute__((force_align_arg_pointer))
55
#else
56
#    define attribute_align_arg
57
#endif
58
#endif
59
 
60
#if defined(_MSC_VER) && CONFIG_SHARED
61
#    define av_export __declspec(dllimport)
62
#else
63
#    define av_export
64
#endif
65
 
66
#if HAVE_PRAGMA_DEPRECATED
67
#    if defined(__ICL) || defined (__INTEL_COMPILER)
68
#        define FF_DISABLE_DEPRECATION_WARNINGS __pragma(warning(push)) __pragma(warning(disable:1478))
69
#        define FF_ENABLE_DEPRECATION_WARNINGS  __pragma(warning(pop))
70
#    elif defined(_MSC_VER)
71
#        define FF_DISABLE_DEPRECATION_WARNINGS __pragma(warning(push)) __pragma(warning(disable:4996))
72
#        define FF_ENABLE_DEPRECATION_WARNINGS  __pragma(warning(pop))
73
#    else
74
#        define FF_DISABLE_DEPRECATION_WARNINGS _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
75
#        define FF_ENABLE_DEPRECATION_WARNINGS  _Pragma("GCC diagnostic warning \"-Wdeprecated-declarations\"")
76
#    endif
77
#else
78
#    define FF_DISABLE_DEPRECATION_WARNINGS
79
#    define FF_ENABLE_DEPRECATION_WARNINGS
80
#endif
81
 
82
#ifndef INT_BIT
83
#    define INT_BIT (CHAR_BIT * sizeof(int))
84
#endif
85
 
86
#define FF_MEMORY_POISON 0x2a
87
 
88
#define MAKE_ACCESSORS(str, name, type, field) \
89
    type av_##name##_get_##field(const str *s) { return s->field; } \
90
    void av_##name##_set_##field(str *s, type v) { s->field = v; }
91
 
92
// Some broken preprocessors need a second expansion
93
// to be forced to tokenize __VA_ARGS__
94
#define E1(x) x
95
 
96
#define LOCAL_ALIGNED_A(a, t, v, s, o, ...)             \
97
    uint8_t la_##v[sizeof(t s o) + (a)];                \
98
    t (*v) o = (void *)FFALIGN((uintptr_t)la_##v, a)
99
 
100
#define LOCAL_ALIGNED_D(a, t, v, s, o, ...)             \
101
    DECLARE_ALIGNED(a, t, la_##v) s o;                  \
102
    t (*v) o = la_##v
103
 
104
#define LOCAL_ALIGNED(a, t, v, ...) E1(LOCAL_ALIGNED_A(a, t, v, __VA_ARGS__,,))
105
 
106
#if HAVE_LOCAL_ALIGNED_8
107
#   define LOCAL_ALIGNED_8(t, v, ...) E1(LOCAL_ALIGNED_D(8, t, v, __VA_ARGS__,,))
108
#else
109
#   define LOCAL_ALIGNED_8(t, v, ...) LOCAL_ALIGNED(8, t, v, __VA_ARGS__)
110
#endif
111
 
112
#if HAVE_LOCAL_ALIGNED_16
113
#   define LOCAL_ALIGNED_16(t, v, ...) E1(LOCAL_ALIGNED_D(16, t, v, __VA_ARGS__,,))
114
#else
115
#   define LOCAL_ALIGNED_16(t, v, ...) LOCAL_ALIGNED(16, t, v, __VA_ARGS__)
116
#endif
117
 
118
#define FF_ALLOC_OR_GOTO(ctx, p, size, label)\
119
{\
120
    p = av_malloc(size);\
121
    if (p == NULL && (size) != 0) {\
122
        av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
123
        goto label;\
124
    }\
125
}
126
 
127
#define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)\
128
{\
129
    p = av_mallocz(size);\
130
    if (p == NULL && (size) != 0) {\
131
        av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
132
        goto label;\
133
    }\
134
}
135
 
136
#include "libm.h"
137
 
138
#if defined(_MSC_VER)
139
#pragma comment(linker, "/include:"EXTERN_PREFIX"avpriv_strtod")
140
#pragma comment(linker, "/include:"EXTERN_PREFIX"avpriv_snprintf")
141
#endif
142
 
143
/**
144
 * Return NULL if CONFIG_SMALL is true, otherwise the argument
145
 * without modification. Used to disable the definition of strings
146
 * (for example AVCodec long_names).
147
 */
148
#if CONFIG_SMALL
149
#   define NULL_IF_CONFIG_SMALL(x) NULL
150
#else
151
#   define NULL_IF_CONFIG_SMALL(x) x
152
#endif
153
 
154
/**
155
 * Define a function with only the non-default version specified.
156
 *
157
 * On systems with ELF shared libraries, all symbols exported from
158
 * FFmpeg libraries are tagged with the name and major version of the
159
 * library to which they belong.  If a function is moved from one
160
 * library to another, a wrapper must be retained in the original
161
 * location to preserve binary compatibility.
162
 *
163
 * Functions defined with this macro will never be used to resolve
164
 * symbols by the build-time linker.
165
 *
166
 * @param type return type of function
167
 * @param name name of function
168
 * @param args argument list of function
169
 * @param ver  version tag to assign function
170
 */
171
#if HAVE_SYMVER_ASM_LABEL
172
#   define FF_SYMVER(type, name, args, ver)                     \
173
    type ff_##name args __asm__ (EXTERN_PREFIX #name "@" ver);  \
174
    type ff_##name args
175
#elif HAVE_SYMVER_GNU_ASM
176
#   define FF_SYMVER(type, name, args, ver)                             \
177
    __asm__ (".symver ff_" #name "," EXTERN_PREFIX #name "@" ver);      \
178
    type ff_##name args;                                                \
179
    type ff_##name args
180
#endif
181
 
182
/**
183
 * Return NULL if a threading library has not been enabled.
184
 * Used to disable threading functions in AVCodec definitions
185
 * when not needed.
186
 */
187
#if HAVE_THREADS
188
#   define ONLY_IF_THREADS_ENABLED(x) x
189
#else
190
#   define ONLY_IF_THREADS_ENABLED(x) NULL
191
#endif
192
 
193
/**
194
 * Log a generic warning message about a missing feature.
195
 *
196
 * @param[in] avc a pointer to an arbitrary struct of which the first
197
 *                field is a pointer to an AVClass struct
198
 * @param[in] msg string containing the name of the missing feature
199
 */
200
void avpriv_report_missing_feature(void *avc,
201
                                   const char *msg, ...) av_printf_format(2, 3);
202
 
203
/**
204
 * Log a generic warning message about a missing feature.
205
 * Additionally request that a sample showcasing the feature be uploaded.
206
 *
207
 * @param[in] avc a pointer to an arbitrary struct of which the first field is
208
 *                a pointer to an AVClass struct
209
 * @param[in] msg string containing the name of the missing feature
210
 */
211
void avpriv_request_sample(void *avc,
212
                           const char *msg, ...) av_printf_format(2, 3);
213
 
214
#if HAVE_MSVCRT
215
#define avpriv_open ff_open
216
#endif
217
 
218
/**
219
 * A wrapper for open() setting O_CLOEXEC.
220
 */
221
int avpriv_open(const char *filename, int flags, ...);
222
 
223
#if FF_API_GET_CHANNEL_LAYOUT_COMPAT
224
uint64_t ff_get_channel_layout(const char *name, int compat);
225
#endif
226
 
227
#endif /* AVUTIL_INTERNAL_H */