FFmpeg  4.3
common.h
Go to the documentation of this file.
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 and external API header
24  */
25 
26 #ifndef AVUTIL_COMMON_H
27 #define AVUTIL_COMMON_H
28 
29 #if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C)
30 #error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS
31 #endif
32 
33 #include <errno.h>
34 #include <inttypes.h>
35 #include <limits.h>
36 #include <math.h>
37 #include <stdint.h>
38 #include <stdio.h>
39 #include <stdlib.h>
40 #include <string.h>
41 
42 #include "attributes.h"
43 #include "macros.h"
44 #include "version.h"
45 #include "libavutil/avconfig.h"
46 
47 #if AV_HAVE_BIGENDIAN
48 # define AV_NE(be, le) (be)
49 #else
50 # define AV_NE(be, le) (le)
51 #endif
52 
53 //rounded division & shift
54 #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
55 /* assume b>0 */
56 #define ROUNDED_DIV(a,b) (((a)>=0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
57 /* Fast a/(1<<b) rounded toward +inf. Assume a>=0 and b>=0 */
58 #define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \
59  : ((a) + (1<<(b)) - 1) >> (b))
60 /* Backwards compat. */
61 #define FF_CEIL_RSHIFT AV_CEIL_RSHIFT
62 
63 #define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b))
64 #define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b))
65 
66 /**
67  * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they
68  * are not representable as absolute values of their type. This is the same
69  * as with *abs()
70  * @see FFNABS()
71  */
72 #define FFABS(a) ((a) >= 0 ? (a) : (-(a)))
73 #define FFSIGN(a) ((a) > 0 ? 1 : -1)
74 
75 /**
76  * Negative Absolute value.
77  * this works for all integers of all types.
78  * As with many macros, this evaluates its argument twice, it thus must not have
79  * a sideeffect, that is FFNABS(x++) has undefined behavior.
80  */
81 #define FFNABS(a) ((a) <= 0 ? (a) : (-(a)))
82 
83 /**
84  * Comparator.
85  * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0
86  * if x == y. This is useful for instance in a qsort comparator callback.
87  * Furthermore, compilers are able to optimize this to branchless code, and
88  * there is no risk of overflow with signed types.
89  * As with many macros, this evaluates its argument multiple times, it thus
90  * must not have a side-effect.
91  */
92 #define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y)))
93 
94 #define FFMAX(a,b) ((a) > (b) ? (a) : (b))
95 #define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c)
96 #define FFMIN(a,b) ((a) > (b) ? (b) : (a))
97 #define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c)
98 
99 #define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
100 #define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))
101 
102 /* misc math functions */
103 
104 #ifdef HAVE_AV_CONFIG_H
105 # include "config.h"
106 # include "intmath.h"
107 #endif
108 
109 /* Pull in unguarded fallback defines at the end of this file. */
110 #include "common.h"
111 
112 #ifndef av_log2
113 av_const int av_log2(unsigned v);
114 #endif
115 
116 #ifndef av_log2_16bit
117 av_const int av_log2_16bit(unsigned v);
118 #endif
119 
120 /**
121  * Clip a signed integer value into the amin-amax range.
122  * @param a value to clip
123  * @param amin minimum value of the clip range
124  * @param amax maximum value of the clip range
125  * @return clipped value
126  */
127 static av_always_inline av_const int av_clip_c(int a, int amin, int amax)
128 {
129 #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
130  if (amin > amax) abort();
131 #endif
132  if (a < amin) return amin;
133  else if (a > amax) return amax;
134  else return a;
135 }
136 
137 /**
138  * Clip a signed 64bit integer value into the amin-amax range.
139  * @param a value to clip
140  * @param amin minimum value of the clip range
141  * @param amax maximum value of the clip range
142  * @return clipped value
143  */
144 static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax)
145 {
146 #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
147  if (amin > amax) abort();
148 #endif
149  if (a < amin) return amin;
150  else if (a > amax) return amax;
151  else return a;
152 }
153 
154 /**
155  * Clip a signed integer value into the 0-255 range.
156  * @param a value to clip
157  * @return clipped value
158  */
160 {
161  if (a&(~0xFF)) return (~a)>>31;
162  else return a;
163 }
164 
165 /**
166  * Clip a signed integer value into the -128,127 range.
167  * @param a value to clip
168  * @return clipped value
169  */
171 {
172  if ((a+0x80U) & ~0xFF) return (a>>31) ^ 0x7F;
173  else return a;
174 }
175 
176 /**
177  * Clip a signed integer value into the 0-65535 range.
178  * @param a value to clip
179  * @return clipped value
180  */
182 {
183  if (a&(~0xFFFF)) return (~a)>>31;
184  else return a;
185 }
186 
187 /**
188  * Clip a signed integer value into the -32768,32767 range.
189  * @param a value to clip
190  * @return clipped value
191  */
193 {
194  if ((a+0x8000U) & ~0xFFFF) return (a>>31) ^ 0x7FFF;
195  else return a;
196 }
197 
198 /**
199  * Clip a signed 64-bit integer value into the -2147483648,2147483647 range.
200  * @param a value to clip
201  * @return clipped value
202  */
204 {
205  if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF);
206  else return (int32_t)a;
207 }
208 
209 /**
210  * Clip a signed integer into the -(2^p),(2^p-1) range.
211  * @param a value to clip
212  * @param p bit position to clip at
213  * @return clipped value
214  */
216 {
217  if (((unsigned)a + (1 << p)) & ~((2 << p) - 1))
218  return (a >> 31) ^ ((1 << p) - 1);
219  else
220  return a;
221 }
222 
223 /**
224  * Clip a signed integer to an unsigned power of two range.
225  * @param a value to clip
226  * @param p bit position to clip at
227  * @return clipped value
228  */
229 static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
230 {
231  if (a & ~((1<<p) - 1)) return (~a) >> 31 & ((1<<p) - 1);
232  else return a;
233 }
234 
235 /**
236  * Clear high bits from an unsigned integer starting with specific bit position
237  * @param a value to clip
238  * @param p bit position to clip at
239  * @return clipped value
240  */
241 static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p)
242 {
243  return a & ((1U << p) - 1);
244 }
245 
246 /**
247  * Add two signed 32-bit values with saturation.
248  *
249  * @param a one value
250  * @param b another value
251  * @return sum with signed saturation
252  */
253 static av_always_inline int av_sat_add32_c(int a, int b)
254 {
255  return av_clipl_int32((int64_t)a + b);
256 }
257 
258 /**
259  * Add a doubled value to another value with saturation at both stages.
260  *
261  * @param a first value
262  * @param b value doubled and added to a
263  * @return sum sat(a + sat(2*b)) with signed saturation
264  */
265 static av_always_inline int av_sat_dadd32_c(int a, int b)
266 {
267  return av_sat_add32(a, av_sat_add32(b, b));
268 }
269 
270 /**
271  * Subtract two signed 32-bit values with saturation.
272  *
273  * @param a one value
274  * @param b another value
275  * @return difference with signed saturation
276  */
277 static av_always_inline int av_sat_sub32_c(int a, int b)
278 {
279  return av_clipl_int32((int64_t)a - b);
280 }
281 
282 /**
283  * Subtract a doubled value from another value with saturation at both stages.
284  *
285  * @param a first value
286  * @param b value doubled and subtracted from a
287  * @return difference sat(a - sat(2*b)) with signed saturation
288  */
289 static av_always_inline int av_sat_dsub32_c(int a, int b)
290 {
291  return av_sat_sub32(a, av_sat_add32(b, b));
292 }
293 
294 /**
295  * Add two signed 64-bit values with saturation.
296  *
297  * @param a one value
298  * @param b another value
299  * @return sum with signed saturation
300  */
301 static av_always_inline int64_t av_sat_add64_c(int64_t a, int64_t b) {
302 #if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_add_overflow)
303  int64_t tmp;
304  return !__builtin_add_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN);
305 #else
306  if (b >= 0 && a >= INT64_MAX - b)
307  return INT64_MAX;
308  if (b <= 0 && a <= INT64_MIN - b)
309  return INT64_MIN;
310  return a + b;
311 #endif
312 }
313 
314 /**
315  * Subtract two signed 64-bit values with saturation.
316  *
317  * @param a one value
318  * @param b another value
319  * @return difference with signed saturation
320  */
321 static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) {
322 #if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_sub_overflow)
323  int64_t tmp;
324  return !__builtin_sub_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN);
325 #else
326  if (b <= 0 && a >= INT64_MAX + b)
327  return INT64_MAX;
328  if (b >= 0 && a <= INT64_MIN + b)
329  return INT64_MIN;
330  return a - b;
331 #endif
332 }
333 
334 /**
335  * Clip a float value into the amin-amax range.
336  * @param a value to clip
337  * @param amin minimum value of the clip range
338  * @param amax maximum value of the clip range
339  * @return clipped value
340  */
341 static av_always_inline av_const float av_clipf_c(float a, float amin, float amax)
342 {
343 #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
344  if (amin > amax) abort();
345 #endif
346  if (a < amin) return amin;
347  else if (a > amax) return amax;
348  else return a;
349 }
350 
351 /**
352  * Clip a double value into the amin-amax range.
353  * @param a value to clip
354  * @param amin minimum value of the clip range
355  * @param amax maximum value of the clip range
356  * @return clipped value
357  */
358 static av_always_inline av_const double av_clipd_c(double a, double amin, double amax)
359 {
360 #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
361  if (amin > amax) abort();
362 #endif
363  if (a < amin) return amin;
364  else if (a > amax) return amax;
365  else return a;
366 }
367 
368 /** Compute ceil(log2(x)).
369  * @param x value used to compute ceil(log2(x))
370  * @return computed ceiling of log2(x)
371  */
373 {
374  return av_log2((x - 1) << 1);
375 }
376 
377 /**
378  * Count number of bits set to one in x
379  * @param x value to count bits of
380  * @return the number of bits set to one in x
381  */
383 {
384  x -= (x >> 1) & 0x55555555;
385  x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
386  x = (x + (x >> 4)) & 0x0F0F0F0F;
387  x += x >> 8;
388  return (x + (x >> 16)) & 0x3F;
389 }
390 
391 /**
392  * Count number of bits set to one in x
393  * @param x value to count bits of
394  * @return the number of bits set to one in x
395  */
397 {
398  return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32));
399 }
400 
401 static av_always_inline av_const int av_parity_c(uint32_t v)
402 {
403  return av_popcount(v) & 1;
404 }
405 
406 #define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
407 #define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24))
408 
409 /**
410  * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
411  *
412  * @param val Output value, must be an lvalue of type uint32_t.
413  * @param GET_BYTE Expression reading one byte from the input.
414  * Evaluated up to 7 times (4 for the currently
415  * assigned Unicode range). With a memory buffer
416  * input, this could be *ptr++, or if you want to make sure
417  * that *ptr stops at the end of a NULL terminated string then
418  * *ptr ? *ptr++ : 0
419  * @param ERROR Expression to be evaluated on invalid input,
420  * typically a goto statement.
421  *
422  * @warning ERROR should not contain a loop control statement which
423  * could interact with the internal while loop, and should force an
424  * exit from the macro code (e.g. through a goto or a return) in order
425  * to prevent undefined results.
426  */
427 #define GET_UTF8(val, GET_BYTE, ERROR)\
428  val= (GET_BYTE);\
429  {\
430  uint32_t top = (val & 128) >> 1;\
431  if ((val & 0xc0) == 0x80 || val >= 0xFE)\
432  {ERROR}\
433  while (val & top) {\
434  unsigned int tmp = (GET_BYTE) - 128;\
435  if(tmp>>6)\
436  {ERROR}\
437  val= (val<<6) + tmp;\
438  top <<= 5;\
439  }\
440  val &= (top << 1) - 1;\
441  }
442 
443 /**
444  * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form.
445  *
446  * @param val Output value, must be an lvalue of type uint32_t.
447  * @param GET_16BIT Expression returning two bytes of UTF-16 data converted
448  * to native byte order. Evaluated one or two times.
449  * @param ERROR Expression to be evaluated on invalid input,
450  * typically a goto statement.
451  */
452 #define GET_UTF16(val, GET_16BIT, ERROR)\
453  val = (GET_16BIT);\
454  {\
455  unsigned int hi = val - 0xD800;\
456  if (hi < 0x800) {\
457  val = (GET_16BIT) - 0xDC00;\
458  if (val > 0x3FFU || hi > 0x3FFU)\
459  {ERROR}\
460  val += (hi<<10) + 0x10000;\
461  }\
462  }\
463 
464 /**
465  * @def PUT_UTF8(val, tmp, PUT_BYTE)
466  * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
467  * @param val is an input-only argument and should be of type uint32_t. It holds
468  * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If
469  * val is given as a function it is executed only once.
470  * @param tmp is a temporary variable and should be of type uint8_t. It
471  * represents an intermediate value during conversion that is to be
472  * output by PUT_BYTE.
473  * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination.
474  * It could be a function or a statement, and uses tmp as the input byte.
475  * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be
476  * executed up to 4 times for values in the valid UTF-8 range and up to
477  * 7 times in the general case, depending on the length of the converted
478  * Unicode character.
479  */
480 #define PUT_UTF8(val, tmp, PUT_BYTE)\
481  {\
482  int bytes, shift;\
483  uint32_t in = val;\
484  if (in < 0x80) {\
485  tmp = in;\
486  PUT_BYTE\
487  } else {\
488  bytes = (av_log2(in) + 4) / 5;\
489  shift = (bytes - 1) * 6;\
490  tmp = (256 - (256 >> bytes)) | (in >> shift);\
491  PUT_BYTE\
492  while (shift >= 6) {\
493  shift -= 6;\
494  tmp = 0x80 | ((in >> shift) & 0x3f);\
495  PUT_BYTE\
496  }\
497  }\
498  }
499 
500 /**
501  * @def PUT_UTF16(val, tmp, PUT_16BIT)
502  * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes).
503  * @param val is an input-only argument and should be of type uint32_t. It holds
504  * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If
505  * val is given as a function it is executed only once.
506  * @param tmp is a temporary variable and should be of type uint16_t. It
507  * represents an intermediate value during conversion that is to be
508  * output by PUT_16BIT.
509  * @param PUT_16BIT writes the converted UTF-16 data to any proper destination
510  * in desired endianness. It could be a function or a statement, and uses tmp
511  * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;"
512  * PUT_BYTE will be executed 1 or 2 times depending on input character.
513  */
514 #define PUT_UTF16(val, tmp, PUT_16BIT)\
515  {\
516  uint32_t in = val;\
517  if (in < 0x10000) {\
518  tmp = in;\
519  PUT_16BIT\
520  } else {\
521  tmp = 0xD800 | ((in - 0x10000) >> 10);\
522  PUT_16BIT\
523  tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\
524  PUT_16BIT\
525  }\
526  }\
527 
528 
529 
530 #include "mem.h"
531 
532 #ifdef HAVE_AV_CONFIG_H
533 # include "internal.h"
534 #endif /* HAVE_AV_CONFIG_H */
535 
536 #endif /* AVUTIL_COMMON_H */
537 
538 /*
539  * The following definitions are outside the multiple inclusion guard
540  * to ensure they are immediately available in intmath.h.
541  */
542 
543 #ifndef av_ceil_log2
544 # define av_ceil_log2 av_ceil_log2_c
545 #endif
546 #ifndef av_clip
547 # define av_clip av_clip_c
548 #endif
549 #ifndef av_clip64
550 # define av_clip64 av_clip64_c
551 #endif
552 #ifndef av_clip_uint8
553 # define av_clip_uint8 av_clip_uint8_c
554 #endif
555 #ifndef av_clip_int8
556 # define av_clip_int8 av_clip_int8_c
557 #endif
558 #ifndef av_clip_uint16
559 # define av_clip_uint16 av_clip_uint16_c
560 #endif
561 #ifndef av_clip_int16
562 # define av_clip_int16 av_clip_int16_c
563 #endif
564 #ifndef av_clipl_int32
565 # define av_clipl_int32 av_clipl_int32_c
566 #endif
567 #ifndef av_clip_intp2
568 # define av_clip_intp2 av_clip_intp2_c
569 #endif
570 #ifndef av_clip_uintp2
571 # define av_clip_uintp2 av_clip_uintp2_c
572 #endif
573 #ifndef av_mod_uintp2
574 # define av_mod_uintp2 av_mod_uintp2_c
575 #endif
576 #ifndef av_sat_add32
577 # define av_sat_add32 av_sat_add32_c
578 #endif
579 #ifndef av_sat_dadd32
580 # define av_sat_dadd32 av_sat_dadd32_c
581 #endif
582 #ifndef av_sat_sub32
583 # define av_sat_sub32 av_sat_sub32_c
584 #endif
585 #ifndef av_sat_dsub32
586 # define av_sat_dsub32 av_sat_dsub32_c
587 #endif
588 #ifndef av_sat_add64
589 # define av_sat_add64 av_sat_add64_c
590 #endif
591 #ifndef av_sat_sub64
592 # define av_sat_sub64 av_sat_sub64_c
593 #endif
594 #ifndef av_clipf
595 # define av_clipf av_clipf_c
596 #endif
597 #ifndef av_clipd
598 # define av_clipd av_clipd_c
599 #endif
600 #ifndef av_popcount
601 # define av_popcount av_popcount_c
602 #endif
603 #ifndef av_popcount64
604 # define av_popcount64 av_popcount64_c
605 #endif
606 #ifndef av_parity
607 # define av_parity av_parity_c
608 #endif
av_mod_uintp2_c
static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p)
Clear high bits from an unsigned integer starting with specific bit position.
Definition: common.h:241
av_log2_16bit
av_const int av_log2_16bit(unsigned v)
Definition: intmath.c:31
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:26
av_clip_uintp2_c
static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
Clip a signed integer to an unsigned power of two range.
Definition: common.h:229
av_sat_sub32_c
static av_always_inline int av_sat_sub32_c(int a, int b)
Subtract two signed 32-bit values with saturation.
Definition: common.h:277
av_const
#define av_const
Definition: attributes.h:84
b
#define b
Definition: input.c:41
av_clip_uint16_c
static av_always_inline av_const uint16_t av_clip_uint16_c(int a)
Clip a signed integer value into the 0-65535 range.
Definition: common.h:181
av_clip_uint8_c
static av_always_inline av_const uint8_t av_clip_uint8_c(int a)
Clip a signed integer value into the 0-255 range.
Definition: common.h:159
av_sat_dadd32_c
static av_always_inline int av_sat_dadd32_c(int a, int b)
Add a doubled value to another value with saturation at both stages.
Definition: common.h:265
av_clip64_c
static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax)
Clip a signed 64bit integer value into the amin-amax range.
Definition: common.h:144
avconfig.h
U
#define U(x)
Definition: vp56_arith.h:37
macros.h
x
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
Definition: fate.txt:150
limits.h
int32_t
int32_t
Definition: audio_convert.c:194
av_clipf_c
static av_always_inline av_const float av_clipf_c(float a, float amin, float amax)
Clip a float value into the amin-amax range.
Definition: common.h:341
av_clipd_c
static av_always_inline av_const double av_clipd_c(double a, double amin, double amax)
Clip a double value into the amin-amax range.
Definition: common.h:358
av_clip_intp2_c
static av_always_inline av_const int av_clip_intp2_c(int a, int p)
Clip a signed integer into the -(2^p),(2^p-1) range.
Definition: common.h:215
av_clip_c
static av_always_inline av_const int av_clip_c(int a, int amin, int amax)
Clip a signed integer value into the amin-amax range.
Definition: common.h:127
av_log2
av_const int av_log2(unsigned v)
Definition: intmath.c:26
a
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
Definition: undefined.txt:41
attributes.h
common.h
av_clipl_int32_c
static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
Clip a signed 64-bit integer value into the -2147483648,2147483647 range.
Definition: common.h:203
av_always_inline
#define av_always_inline
Definition: attributes.h:49
av_popcount_c
static av_always_inline av_const int av_popcount_c(uint32_t x)
Count number of bits set to one in x.
Definition: common.h:382
uint8_t
uint8_t
Definition: audio_convert.c:194
av_sat_add32_c
static av_always_inline int av_sat_add32_c(int a, int b)
Add two signed 32-bit values with saturation.
Definition: common.h:253
version.h
av_popcount64_c
static av_always_inline av_const int av_popcount64_c(uint64_t x)
Count number of bits set to one in x.
Definition: common.h:396
config.h
mem.h
av_sat_add64_c
static av_always_inline int64_t av_sat_add64_c(int64_t a, int64_t b)
Add two signed 64-bit values with saturation.
Definition: common.h:301
av_clip_int16_c
static av_always_inline av_const int16_t av_clip_int16_c(int a)
Clip a signed integer value into the -32768,32767 range.
Definition: common.h:192
av_sat_sub64_c
static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b)
Subtract two signed 64-bit values with saturation.
Definition: common.h:321
av_sat_dsub32_c
static av_always_inline int av_sat_dsub32_c(int a, int b)
Subtract a doubled value from another value with saturation at both stages.
Definition: common.h:289
av_parity_c
static av_always_inline av_const int av_parity_c(uint32_t v)
Definition: common.h:401
av_ceil_log2_c
static av_always_inline av_const int av_ceil_log2_c(int x)
Compute ceil(log2(x)).
Definition: common.h:372
av_clip_int8_c
static av_always_inline av_const int8_t av_clip_int8_c(int a)
Clip a signed integer value into the -128,127 range.
Definition: common.h:170