Go to the documentation of this file.
26 #ifndef AVUTIL_INTERNAL_H
27 #define AVUTIL_INTERNAL_H
29 #if !defined(DEBUG) && !defined(NDEBUG)
55 # define emms_c() do {} 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
AVPixelFormat
Pixel format.
int avpriv_set_systematic_pal2(uint32_t pal[256], enum AVPixelFormat pix_fmt)
FFmpeg Automated Testing Environment ************************************Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server Uploading new samples to the fate suite FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg’s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg’s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass ‘ target exec’ to ‘configure’ or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script ‘tests fate sh’ from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at ‘doc fate_config sh template’ Create a configuration that suits your based on the configuration template The ‘slot’ configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern ‘ARCH OS COMPILER COMPILER VERSION’ The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the ‘fate_recv’ variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration it may help to try out the ‘ssh’ command with one or more ‘ v’ options You should get detailed output concerning your SSH configuration and the authentication process The only thing left is to automate the execution of the fate sh script and the synchronisation of the samples directory Uploading new samples to the fate suite *****************************************If you need a sample uploaded send a mail to samples request This is for developers who have an account on the fate suite server If you upload new please make sure they are as small as space on each network bandwidth and so on benefit from smaller test cases Also keep in mind older checkouts use existing sample that means in practice generally do not remove or overwrite files as it likely would break older checkouts or releases Also all needed samples for a commit should be ideally before the push If you need an account for frequently uploading samples or you wish to help others by doing that send a mail to ffmpeg devel rsync vauL Duo x
int avpriv_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx)
Wrapper to work around the lack of mkstemp() on mingw.
static enum AVPixelFormat pix_fmt
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
#define av_printf_format(fmtpos, attrpos)
static av_always_inline av_const int avpriv_mirror(int x, int w)
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp)
Set a dictionary value to an ISO-8601 compliant timestamp string.
void ff_check_pixfmt_descriptors(void)
#define av_warn_unused_result
FFmpeg Automated Testing Environment ************************************Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server Uploading new samples to the fate suite FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg’s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg’s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass ‘ target exec’ to ‘configure’ or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script ‘tests fate sh’ from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at ‘doc fate_config sh template’ Create a configuration that suits your based on the configuration template The ‘slot’ configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern ‘ARCH OS COMPILER COMPILER VERSION’ The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the ‘fate_recv’ variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration it may help to try out the ‘ssh’ command with one or more ‘ v’ options You should get detailed output concerning your SSH configuration and the authentication process The only thing left is to automate the execution of the fate sh script and the synchronisation of the samples directory Uploading new samples to the fate suite *****************************************If you need a sample uploaded send a mail to samples request This is for developers who have an account on the fate suite server If you upload new please make sure they are as small as space on each network bandwidth and so on benefit from smaller test cases Also keep in mind older checkouts use existing sample that means in practice generally do not remove or overwrite files as it likely would break older checkouts or releases Also all needed samples for a commit should be ideally before the push If you need an account for frequently uploading samples or you wish to help others by doing that send a mail to ffmpeg devel rsync vauL Duo ug o o w
#define flags(name, subs,...)
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.
av_warn_unused_result int avpriv_open(const char *filename, int flags,...)
A wrapper for open() setting O_CLOEXEC.