26 #ifndef AVUTIL_INTERNAL_H 
   27 #define AVUTIL_INTERNAL_H 
   29 #if !defined(DEBUG) && !defined(NDEBUG) 
   55 #   define emms_c() while(0) 
   58 #ifndef attribute_align_arg 
   59 #if ARCH_X86_32 && AV_GCC_VERSION_AT_LEAST(4,2) 
   60 #    define attribute_align_arg __attribute__((force_align_arg_pointer)) 
   62 #    define attribute_align_arg 
   66 #if defined(_WIN32) && CONFIG_SHARED && !defined(BUILDING_avutil) 
   67 #    define av_export_avutil __declspec(dllimport) 
   69 #    define av_export_avutil 
   72 #if HAVE_PRAGMA_DEPRECATED 
   73 #    if defined(__ICL) || defined (__INTEL_COMPILER) 
   74 #        define FF_DISABLE_DEPRECATION_WARNINGS __pragma(warning(push)) __pragma(warning(disable:1478)) 
   75 #        define FF_ENABLE_DEPRECATION_WARNINGS  __pragma(warning(pop)) 
   76 #    elif defined(_MSC_VER) 
   77 #        define FF_DISABLE_DEPRECATION_WARNINGS __pragma(warning(push)) __pragma(warning(disable:4996)) 
   78 #        define FF_ENABLE_DEPRECATION_WARNINGS  __pragma(warning(pop)) 
   80 #        define FF_DISABLE_DEPRECATION_WARNINGS _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") 
   81 #        define FF_ENABLE_DEPRECATION_WARNINGS  _Pragma("GCC diagnostic pop") 
   84 #    define FF_DISABLE_DEPRECATION_WARNINGS 
   85 #    define FF_ENABLE_DEPRECATION_WARNINGS 
   89 #define FF_MEMORY_POISON 0x2a 
   91 #define MAKE_ACCESSORS(str, name, type, field) \ 
   92     type av_##name##_get_##field(const str *s) { return s->field; } \ 
   93     void av_##name##_set_##field(str *s, type v) { s->field = v; } 
  102 #define AV_CHECK_OFFSET(s, m, o) struct check_##o {    \ 
  103         int x_##o[offsetof(s, m) == o? 1: -1];         \ 
  106 #define LOCAL_ALIGNED_A(a, t, v, s, o, ...)             \ 
  107     uint8_t la_##v[sizeof(t s o) + (a)];                \ 
  108     t (*v) o = (void *)FFALIGN((uintptr_t)la_##v, a) 
  110 #define LOCAL_ALIGNED_D(a, t, v, s, o, ...)             \ 
  111     DECLARE_ALIGNED(a, t, la_##v) s o;                  \ 
  114 #define LOCAL_ALIGNED(a, t, v, ...) LOCAL_ALIGNED_##a(t, v, __VA_ARGS__) 
  116 #if HAVE_LOCAL_ALIGNED 
  117 #   define LOCAL_ALIGNED_4(t, v, ...) E1(LOCAL_ALIGNED_D(4, t, v, __VA_ARGS__,,)) 
  119 #   define LOCAL_ALIGNED_4(t, v, ...) E1(LOCAL_ALIGNED_A(4, t, v, __VA_ARGS__,,)) 
  122 #if HAVE_LOCAL_ALIGNED 
  123 #   define LOCAL_ALIGNED_8(t, v, ...) E1(LOCAL_ALIGNED_D(8, t, v, __VA_ARGS__,,)) 
  125 #   define LOCAL_ALIGNED_8(t, v, ...) E1(LOCAL_ALIGNED_A(8, t, v, __VA_ARGS__,,)) 
  128 #if HAVE_LOCAL_ALIGNED 
  129 #   define LOCAL_ALIGNED_16(t, v, ...) E1(LOCAL_ALIGNED_D(16, t, v, __VA_ARGS__,,)) 
  131 #   define LOCAL_ALIGNED_16(t, v, ...) E1(LOCAL_ALIGNED_A(16, t, v, __VA_ARGS__,,)) 
  134 #if HAVE_LOCAL_ALIGNED 
  135 #   define LOCAL_ALIGNED_32(t, v, ...) E1(LOCAL_ALIGNED_D(32, t, v, __VA_ARGS__,,)) 
  137 #   define LOCAL_ALIGNED_32(t, v, ...) E1(LOCAL_ALIGNED_A(32, t, v, __VA_ARGS__,,)) 
  140 #define FF_ALLOC_OR_GOTO(ctx, p, size, label)\ 
  142     p = av_malloc(size);\ 
  143     if (!(p) && (size) != 0) {\ 
  144         av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\ 
  149 #define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)\ 
  151     p = av_mallocz(size);\ 
  152     if (!(p) && (size) != 0) {\ 
  153         av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\ 
  158 #define FF_ALLOC_ARRAY_OR_GOTO(ctx, p, nelem, elsize, label)\ 
  160     p = av_malloc_array(nelem, elsize);\ 
  162         av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\ 
  167 #define FF_ALLOCZ_ARRAY_OR_GOTO(ctx, p, nelem, elsize, label)\ 
  169     p = av_mallocz_array(nelem, elsize);\ 
  171         av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\ 
  184 #   define NULL_IF_CONFIG_SMALL(x) NULL 
  186 #   define NULL_IF_CONFIG_SMALL(x) x 
  206 #if HAVE_SYMVER_ASM_LABEL 
  207 #   define FF_SYMVER(type, name, args, ver)                     \ 
  208     type ff_##name args __asm__ (EXTERN_PREFIX #name "@" ver);  \ 
  210 #elif HAVE_SYMVER_GNU_ASM 
  211 #   define FF_SYMVER(type, name, args, ver)                             \ 
  212     __asm__ (".symver ff_" #name "," EXTERN_PREFIX #name "@" ver);      \ 
  213     type ff_##name args;                                                \ 
  223 #   define ONLY_IF_THREADS_ENABLED(x) x 
  225 #   define ONLY_IF_THREADS_ENABLED(x) NULL 
  250 #include <crtversion.h> 
  251 #if defined(_VC_CRT_MAJOR_VERSION) && _VC_CRT_MAJOR_VERSION < 14 
  252 #pragma comment(linker, "/include:" EXTERN_PREFIX "avpriv_strtod") 
  253 #pragma comment(linker, "/include:" EXTERN_PREFIX "avpriv_snprintf") 
  256 #define avpriv_open ff_open 
  257 #define avpriv_tempfile ff_tempfile 
  258 #define PTRDIFF_SPECIFIER "Id" 
  259 #define SIZE_SPECIFIER "Iu" 
  261 #define PTRDIFF_SPECIFIER "td" 
  262 #define SIZE_SPECIFIER "zu" 
  266 #   define ff_dlog(ctx, ...) av_log(ctx, AV_LOG_DEBUG, __VA_ARGS__) 
  268 #   define ff_dlog(ctx, ...) do { if (0) av_log(ctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0) 
  275 #define SUINT32 int32_t 
  277 #define SUINT   unsigned 
  278 #define SUINT32 uint32_t 
  298 #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 
  299     if (amin > amax) abort();
 
  303     if (a >=  9223372036854775808.0)
 
  305     if (a <= -9223372036854775808.0)
 
  334 int avpriv_tempfile(
const char *prefix, 
char **filename, 
int log_offset, 
void *log_ctx);
 
  343     while ((
unsigned)x > (
unsigned)w) {
 
  367 #define FF_PSEUDOPAL AV_PIX_FMT_FLAG_PSEUDOPAL 
  369 #define FF_PSEUDOPAL 0 
av_warn_unused_result int avpriv_open(const char *filename, int flags,...)
A wrapper for open() setting O_CLOEXEC. 
static enum AVPixelFormat pix_fmt
Memory handling functions. 
static av_always_inline av_const int64_t ff_rint64_clip(double a, int64_t amin, int64_t amax)
Clip and convert a double value into the long long amin-amax range. 
Macro definitions for various function/variable attributes. 
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature. 
high precision timer, useful to profile code 
Utility Preprocessor macros. 
int avpriv_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx)
Wrapper to work around the lack of mkstemp() on mingw. 
Libavutil version macros. 
#define av_printf_format(fmtpos, attrpos)
int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp)
Set a dictionary value to an ISO-8601 compliant timestamp string. 
static av_always_inline av_const int avpriv_mirror(int x, int w)
Replacements for frequently missing libm functions. 
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature. 
#define av_warn_unused_result
void ff_check_pixfmt_descriptors(void)
int avpriv_set_systematic_pal2(uint32_t pal[256], enum AVPixelFormat pix_fmt)
AVPixelFormat
Pixel format.