Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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. #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 */
  228.