annotate ffmpeg/libavutil/internal.h @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents f445c3017523
children
rev   line source
yading@11 1 /*
yading@11 2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
yading@11 3 *
yading@11 4 * This file is part of FFmpeg.
yading@11 5 *
yading@11 6 * FFmpeg is free software; you can redistribute it and/or
yading@11 7 * modify it under the terms of the GNU Lesser General Public
yading@11 8 * License as published by the Free Software Foundation; either
yading@11 9 * version 2.1 of the License, or (at your option) any later version.
yading@11 10 *
yading@11 11 * FFmpeg is distributed in the hope that it will be useful,
yading@11 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@11 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@11 14 * Lesser General Public License for more details.
yading@11 15 *
yading@11 16 * You should have received a copy of the GNU Lesser General Public
yading@11 17 * License along with FFmpeg; if not, write to the Free Software
yading@11 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@11 19 */
yading@11 20
yading@11 21 /**
yading@11 22 * @file
yading@11 23 * common internal API header
yading@11 24 */
yading@11 25
yading@11 26 #ifndef AVUTIL_INTERNAL_H
yading@11 27 #define AVUTIL_INTERNAL_H
yading@11 28
yading@11 29 #if !defined(DEBUG) && !defined(NDEBUG)
yading@11 30 # define NDEBUG
yading@11 31 #endif
yading@11 32
yading@11 33 #include <limits.h>
yading@11 34 #include <stdint.h>
yading@11 35 #include <stddef.h>
yading@11 36 #include <assert.h>
yading@11 37 #include "config.h"
yading@11 38 #include "attributes.h"
yading@11 39 #include "timer.h"
yading@11 40 #include "cpu.h"
yading@11 41 #include "dict.h"
yading@11 42
yading@11 43 #if ARCH_X86
yading@11 44 # include "x86/emms.h"
yading@11 45 #endif
yading@11 46
yading@11 47 #ifndef emms_c
yading@11 48 # define emms_c()
yading@11 49 #endif
yading@11 50
yading@11 51 #ifndef attribute_align_arg
yading@11 52 #if ARCH_X86_32 && AV_GCC_VERSION_AT_LEAST(4,2)
yading@11 53 # define attribute_align_arg __attribute__((force_align_arg_pointer))
yading@11 54 #else
yading@11 55 # define attribute_align_arg
yading@11 56 #endif
yading@11 57 #endif
yading@11 58
yading@11 59 #if defined(_MSC_VER) && CONFIG_SHARED
yading@11 60 # define av_export __declspec(dllimport)
yading@11 61 #else
yading@11 62 # define av_export
yading@11 63 #endif
yading@11 64
yading@11 65 #ifndef INT_BIT
yading@11 66 # define INT_BIT (CHAR_BIT * sizeof(int))
yading@11 67 #endif
yading@11 68
yading@11 69 // Some broken preprocessors need a second expansion
yading@11 70 // to be forced to tokenize __VA_ARGS__
yading@11 71 #define E1(x) x
yading@11 72
yading@11 73 #define LOCAL_ALIGNED_A(a, t, v, s, o, ...) \
yading@11 74 uint8_t la_##v[sizeof(t s o) + (a)]; \
yading@11 75 t (*v) o = (void *)FFALIGN((uintptr_t)la_##v, a)
yading@11 76
yading@11 77 #define LOCAL_ALIGNED_D(a, t, v, s, o, ...) \
yading@11 78 DECLARE_ALIGNED(a, t, la_##v) s o; \
yading@11 79 t (*v) o = la_##v
yading@11 80
yading@11 81 #define LOCAL_ALIGNED(a, t, v, ...) E1(LOCAL_ALIGNED_A(a, t, v, __VA_ARGS__,,))
yading@11 82
yading@11 83 #if HAVE_LOCAL_ALIGNED_8
yading@11 84 # define LOCAL_ALIGNED_8(t, v, ...) E1(LOCAL_ALIGNED_D(8, t, v, __VA_ARGS__,,))
yading@11 85 #else
yading@11 86 # define LOCAL_ALIGNED_8(t, v, ...) LOCAL_ALIGNED(8, t, v, __VA_ARGS__)
yading@11 87 #endif
yading@11 88
yading@11 89 #if HAVE_LOCAL_ALIGNED_16
yading@11 90 # define LOCAL_ALIGNED_16(t, v, ...) E1(LOCAL_ALIGNED_D(16, t, v, __VA_ARGS__,,))
yading@11 91 #else
yading@11 92 # define LOCAL_ALIGNED_16(t, v, ...) LOCAL_ALIGNED(16, t, v, __VA_ARGS__)
yading@11 93 #endif
yading@11 94
yading@11 95 #define FF_ALLOC_OR_GOTO(ctx, p, size, label)\
yading@11 96 {\
yading@11 97 p = av_malloc(size);\
yading@11 98 if (p == NULL && (size) != 0) {\
yading@11 99 av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
yading@11 100 goto label;\
yading@11 101 }\
yading@11 102 }
yading@11 103
yading@11 104 #define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)\
yading@11 105 {\
yading@11 106 p = av_mallocz(size);\
yading@11 107 if (p == NULL && (size) != 0) {\
yading@11 108 av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
yading@11 109 goto label;\
yading@11 110 }\
yading@11 111 }
yading@11 112
yading@11 113 #include "libm.h"
yading@11 114
yading@11 115 /**
yading@11 116 * Return NULL if CONFIG_SMALL is true, otherwise the argument
yading@11 117 * without modification. Used to disable the definition of strings
yading@11 118 * (for example AVCodec long_names).
yading@11 119 */
yading@11 120 #if CONFIG_SMALL
yading@11 121 # define NULL_IF_CONFIG_SMALL(x) NULL
yading@11 122 #else
yading@11 123 # define NULL_IF_CONFIG_SMALL(x) x
yading@11 124 #endif
yading@11 125
yading@11 126 /**
yading@11 127 * Define a function with only the non-default version specified.
yading@11 128 *
yading@11 129 * On systems with ELF shared libraries, all symbols exported from
yading@11 130 * FFmpeg libraries are tagged with the name and major version of the
yading@11 131 * library to which they belong. If a function is moved from one
yading@11 132 * library to another, a wrapper must be retained in the original
yading@11 133 * location to preserve binary compatibility.
yading@11 134 *
yading@11 135 * Functions defined with this macro will never be used to resolve
yading@11 136 * symbols by the build-time linker.
yading@11 137 *
yading@11 138 * @param type return type of function
yading@11 139 * @param name name of function
yading@11 140 * @param args argument list of function
yading@11 141 * @param ver version tag to assign function
yading@11 142 */
yading@11 143 #if HAVE_SYMVER_ASM_LABEL
yading@11 144 # define FF_SYMVER(type, name, args, ver) \
yading@11 145 type ff_##name args __asm__ (EXTERN_PREFIX #name "@" ver); \
yading@11 146 type ff_##name args
yading@11 147 #elif HAVE_SYMVER_GNU_ASM
yading@11 148 # define FF_SYMVER(type, name, args, ver) \
yading@11 149 __asm__ (".symver ff_" #name "," EXTERN_PREFIX #name "@" ver); \
yading@11 150 type ff_##name args; \
yading@11 151 type ff_##name args
yading@11 152 #endif
yading@11 153
yading@11 154 /**
yading@11 155 * Return NULL if a threading library has not been enabled.
yading@11 156 * Used to disable threading functions in AVCodec definitions
yading@11 157 * when not needed.
yading@11 158 */
yading@11 159 #if HAVE_THREADS
yading@11 160 # define ONLY_IF_THREADS_ENABLED(x) x
yading@11 161 #else
yading@11 162 # define ONLY_IF_THREADS_ENABLED(x) NULL
yading@11 163 #endif
yading@11 164
yading@11 165 /**
yading@11 166 * Log a generic warning message about a missing feature.
yading@11 167 *
yading@11 168 * @param[in] avc a pointer to an arbitrary struct of which the first
yading@11 169 * field is a pointer to an AVClass struct
yading@11 170 * @param[in] msg string containing the name of the missing feature
yading@11 171 */
yading@11 172 void avpriv_report_missing_feature(void *avc,
yading@11 173 const char *msg, ...) av_printf_format(2, 3);
yading@11 174
yading@11 175 /**
yading@11 176 * Log a generic warning message about a missing feature.
yading@11 177 * Additionally request that a sample showcasing the feature be uploaded.
yading@11 178 *
yading@11 179 * @param[in] avc a pointer to an arbitrary struct of which the first field is
yading@11 180 * a pointer to an AVClass struct
yading@11 181 * @param[in] msg string containing the name of the missing feature
yading@11 182 */
yading@11 183 void avpriv_request_sample(void *avc,
yading@11 184 const char *msg, ...) av_printf_format(2, 3);
yading@11 185
yading@11 186 #endif /* AVUTIL_INTERNAL_H */