get_bits.h
Go to the documentation of this file.
1 /*
2  * copyright (c) 2004 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  * bitstream reader API header.
24  */
25 
26 #ifndef AVCODEC_GET_BITS_H
27 #define AVCODEC_GET_BITS_H
28 
29 #include <stdint.h>
30 
31 #include "libavutil/common.h"
32 #include "libavutil/intreadwrite.h"
33 #include "libavutil/log.h"
34 #include "libavutil/avassert.h"
35 #include "mathops.h"
36 
37 /*
38  * Safe bitstream reading:
39  * optionally, the get_bits API can check to ensure that we
40  * don't read past input buffer boundaries. This is protected
41  * with CONFIG_SAFE_BITSTREAM_READER at the global level, and
42  * then below that with UNCHECKED_BITSTREAM_READER at the per-
43  * decoder level. This means that decoders that check internally
44  * can "#define UNCHECKED_BITSTREAM_READER 1" to disable
45  * overread checks.
46  * Boundary checking causes a minor performance penalty so for
47  * applications that won't want/need this, it can be disabled
48  * globally using "#define CONFIG_SAFE_BITSTREAM_READER 0".
49  */
50 #ifndef UNCHECKED_BITSTREAM_READER
51 #define UNCHECKED_BITSTREAM_READER !CONFIG_SAFE_BITSTREAM_READER
52 #endif
53 
54 typedef struct GetBitContext {
56  int index;
60 
61 #define VLC_TYPE int16_t
62 
63 typedef struct VLC {
64  int bits;
65  VLC_TYPE (*table)[2]; ///< code, bits
66  int table_size, table_allocated;
67 } VLC;
68 
69 typedef struct RL_VLC_ELEM {
70  int16_t level;
71  int8_t len;
73 } RL_VLC_ELEM;
74 
75 /* Bitstream reader API docs:
76  * name
77  * arbitrary name which is used as prefix for the internal variables
78  *
79  * gb
80  * getbitcontext
81  *
82  * OPEN_READER(name, gb)
83  * load gb into local variables
84  *
85  * CLOSE_READER(name, gb)
86  * store local vars in gb
87  *
88  * UPDATE_CACHE(name, gb)
89  * Refill the internal cache from the bitstream.
90  * After this call at least MIN_CACHE_BITS will be available.
91  *
92  * GET_CACHE(name, gb)
93  * Will output the contents of the internal cache,
94  * next bit is MSB of 32 or 64 bit (FIXME 64bit).
95  *
96  * SHOW_UBITS(name, gb, num)
97  * Will return the next num bits.
98  *
99  * SHOW_SBITS(name, gb, num)
100  * Will return the next num bits and do sign extension.
101  *
102  * SKIP_BITS(name, gb, num)
103  * Will skip over the next num bits.
104  * Note, this is equivalent to SKIP_CACHE; SKIP_COUNTER.
105  *
106  * SKIP_CACHE(name, gb, num)
107  * Will remove the next num bits from the cache (note SKIP_COUNTER
108  * MUST be called before UPDATE_CACHE / CLOSE_READER).
109  *
110  * SKIP_COUNTER(name, gb, num)
111  * Will increment the internal bit counter (see SKIP_CACHE & SKIP_BITS).
112  *
113  * LAST_SKIP_BITS(name, gb, num)
114  * Like SKIP_BITS, to be used if next call is UPDATE_CACHE or CLOSE_READER.
115  *
116  * For examples see get_bits, show_bits, skip_bits, get_vlc.
117  */
118 
119 #ifdef LONG_BITSTREAM_READER
120 # define MIN_CACHE_BITS 32
121 #else
122 # define MIN_CACHE_BITS 25
123 #endif
124 
125 #if UNCHECKED_BITSTREAM_READER
126 #define OPEN_READER(name, gb) \
127  unsigned int name ## _index = (gb)->index; \
128  unsigned int av_unused name ## _cache
129 
130 #define HAVE_BITS_REMAINING(name, gb) 1
131 #else
132 #define OPEN_READER(name, gb) \
133  unsigned int name ## _index = (gb)->index; \
134  unsigned int av_unused name ## _cache = 0; \
135  unsigned int av_unused name ## _size_plus8 = (gb)->size_in_bits_plus8
136 
137 #define HAVE_BITS_REMAINING(name, gb) name ## _index < name ## _size_plus8
138 #endif
139 
140 #define CLOSE_READER(name, gb) (gb)->index = name ## _index
141 
142 #ifdef BITSTREAM_READER_LE
143 
144 # ifdef LONG_BITSTREAM_READER
145 # define UPDATE_CACHE(name, gb) name ## _cache = \
146  AV_RL64((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7)
147 # else
148 # define UPDATE_CACHE(name, gb) name ## _cache = \
149  AV_RL32((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7)
150 # endif
151 
152 # define SKIP_CACHE(name, gb, num) name ## _cache >>= (num)
153 
154 #else
155 
156 # ifdef LONG_BITSTREAM_READER
157 # define UPDATE_CACHE(name, gb) name ## _cache = \
158  AV_RB64((gb)->buffer + (name ## _index >> 3)) >> (32 - (name ## _index & 7))
159 # else
160 # define UPDATE_CACHE(name, gb) name ## _cache = \
161  AV_RB32((gb)->buffer + (name ## _index >> 3)) << (name ## _index & 7)
162 # endif
163 
164 # define SKIP_CACHE(name, gb, num) name ## _cache <<= (num)
165 
166 #endif
167 
168 #if UNCHECKED_BITSTREAM_READER
169 # define SKIP_COUNTER(name, gb, num) name ## _index += (num)
170 #else
171 # define SKIP_COUNTER(name, gb, num) \
172  name ## _index = FFMIN(name ## _size_plus8, name ## _index + (num))
173 #endif
174 
175 #define SKIP_BITS(name, gb, num) \
176  do { \
177  SKIP_CACHE(name, gb, num); \
178  SKIP_COUNTER(name, gb, num); \
179  } while (0)
180 
181 #define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num)
182 
183 #ifdef BITSTREAM_READER_LE
184 # define SHOW_UBITS(name, gb, num) zero_extend(name ## _cache, num)
185 # define SHOW_SBITS(name, gb, num) sign_extend(name ## _cache, num)
186 #else
187 # define SHOW_UBITS(name, gb, num) NEG_USR32(name ## _cache, num)
188 # define SHOW_SBITS(name, gb, num) NEG_SSR32(name ## _cache, num)
189 #endif
190 
191 #define GET_CACHE(name, gb) ((uint32_t) name ## _cache)
192 
193 static inline int get_bits_count(const GetBitContext *s)
194 {
195  return s->index;
196 }
197 
198 static inline void skip_bits_long(GetBitContext *s, int n)
199 {
200 #if UNCHECKED_BITSTREAM_READER
201  s->index += n;
202 #else
203  s->index += av_clip(n, -s->index, s->size_in_bits_plus8 - s->index);
204 #endif
205 }
206 
207 /**
208  * read mpeg1 dc style vlc (sign bit + mantisse with no MSB).
209  * if MSB not set it is negative
210  * @param n length in bits
211  */
212 static inline int get_xbits(GetBitContext *s, int n)
213 {
214  register int sign;
215  register int32_t cache;
216  OPEN_READER(re, s);
217  UPDATE_CACHE(re, s);
218  cache = GET_CACHE(re, s);
219  sign = ~cache >> 31;
220  LAST_SKIP_BITS(re, s, n);
221  CLOSE_READER(re, s);
222  return (NEG_USR32(sign ^ cache, n) ^ sign) - sign;
223 }
224 
225 static inline int get_sbits(GetBitContext *s, int n)
226 {
227  register int tmp;
228  OPEN_READER(re, s);
229  av_assert2(n>0 && n<=25);
230  UPDATE_CACHE(re, s);
231  tmp = SHOW_SBITS(re, s, n);
232  LAST_SKIP_BITS(re, s, n);
233  CLOSE_READER(re, s);
234  return tmp;
235 }
236 
237 /**
238  * Read 1-25 bits.
239  */
240 static inline unsigned int get_bits(GetBitContext *s, int n)
241 {
242  register int tmp;
243  OPEN_READER(re, s);
244  av_assert2(n>0 && n<=25);
245  UPDATE_CACHE(re, s);
246  tmp = SHOW_UBITS(re, s, n);
247  LAST_SKIP_BITS(re, s, n);
248  CLOSE_READER(re, s);
249  return tmp;
250 }
251 
252 /**
253  * Show 1-25 bits.
254  */
255 static inline unsigned int show_bits(GetBitContext *s, int n)
256 {
257  register int tmp;
258  OPEN_READER(re, s);
259  av_assert2(n>0 && n<=25);
260  UPDATE_CACHE(re, s);
261  tmp = SHOW_UBITS(re, s, n);
262  return tmp;
263 }
264 
265 static inline void skip_bits(GetBitContext *s, int n)
266 {
267  OPEN_READER(re, s);
268  UPDATE_CACHE(re, s);
269  LAST_SKIP_BITS(re, s, n);
270  CLOSE_READER(re, s);
271 }
272 
273 static inline unsigned int get_bits1(GetBitContext *s)
274 {
275  unsigned int index = s->index;
276  uint8_t result = s->buffer[index >> 3];
277 #ifdef BITSTREAM_READER_LE
278  result >>= index & 7;
279  result &= 1;
280 #else
281  result <<= index & 7;
282  result >>= 8 - 1;
283 #endif
284 #if !UNCHECKED_BITSTREAM_READER
285  if (s->index < s->size_in_bits_plus8)
286 #endif
287  index++;
288  s->index = index;
289 
290  return result;
291 }
292 
293 static inline unsigned int show_bits1(GetBitContext *s)
294 {
295  return show_bits(s, 1);
296 }
297 
298 static inline void skip_bits1(GetBitContext *s)
299 {
300  skip_bits(s, 1);
301 }
302 
303 /**
304  * Read 0-32 bits.
305  */
306 static inline unsigned int get_bits_long(GetBitContext *s, int n)
307 {
308  if (!n) {
309  return 0;
310  } else if (n <= MIN_CACHE_BITS) {
311  return get_bits(s, n);
312  } else {
313 #ifdef BITSTREAM_READER_LE
314  unsigned ret = get_bits(s, 16);
315  return ret | (get_bits(s, n - 16) << 16);
316 #else
317  unsigned ret = get_bits(s, 16) << (n - 16);
318  return ret | get_bits(s, n - 16);
319 #endif
320  }
321 }
322 
323 /**
324  * Read 0-64 bits.
325  */
326 static inline uint64_t get_bits64(GetBitContext *s, int n)
327 {
328  if (n <= 32) {
329  return get_bits_long(s, n);
330  } else {
331 #ifdef BITSTREAM_READER_LE
332  uint64_t ret = get_bits_long(s, 32);
333  return ret | (uint64_t) get_bits_long(s, n - 32) << 32;
334 #else
335  uint64_t ret = (uint64_t) get_bits_long(s, n - 32) << 32;
336  return ret | get_bits_long(s, 32);
337 #endif
338  }
339 }
340 
341 /**
342  * Read 0-32 bits as a signed integer.
343  */
344 static inline int get_sbits_long(GetBitContext *s, int n)
345 {
346  return sign_extend(get_bits_long(s, n), n);
347 }
348 
349 /**
350  * Show 0-32 bits.
351  */
352 static inline unsigned int show_bits_long(GetBitContext *s, int n)
353 {
354  if (n <= MIN_CACHE_BITS) {
355  return show_bits(s, n);
356  } else {
357  GetBitContext gb = *s;
358  return get_bits_long(&gb, n);
359  }
360 }
361 
362 static inline int check_marker(GetBitContext *s, const char *msg)
363 {
364  int bit = get_bits1(s);
365  if (!bit)
366  av_log(NULL, AV_LOG_INFO, "Marker bit missing %s\n", msg);
367 
368  return bit;
369 }
370 
371 /**
372  * Initialize GetBitContext.
373  * @param buffer bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE bytes
374  * larger than the actual read bits because some optimized bitstream
375  * readers read 32 or 64 bit at once and could read over the end
376  * @param bit_size the size of the buffer in bits
377  * @return 0 on success, AVERROR_INVALIDDATA if the buffer_size would overflow.
378  */
379 static inline int init_get_bits(GetBitContext *s, const uint8_t *buffer,
380  int bit_size)
381 {
382  int buffer_size;
383  int ret = 0;
384 
385  if (bit_size >= INT_MAX - 7 || bit_size < 0 || !buffer) {
386  buffer_size = bit_size = 0;
387  buffer = NULL;
388  ret = AVERROR_INVALIDDATA;
389  }
390 
391  buffer_size = (bit_size + 7) >> 3;
392 
393  s->buffer = buffer;
394  s->size_in_bits = bit_size;
395  s->size_in_bits_plus8 = bit_size + 8;
396  s->buffer_end = buffer + buffer_size;
397  s->index = 0;
398 
399  return ret;
400 }
401 
402 /**
403  * Initialize GetBitContext.
404  * @param buffer bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE bytes
405  * larger than the actual read bits because some optimized bitstream
406  * readers read 32 or 64 bit at once and could read over the end
407  * @param byte_size the size of the buffer in bytes
408  * @return 0 on success, AVERROR_INVALIDDATA if the buffer_size would overflow.
409  */
410 static inline int init_get_bits8(GetBitContext *s, const uint8_t *buffer,
411  int byte_size)
412 {
413  if (byte_size > INT_MAX / 8 || byte_size < 0)
414  byte_size = -1;
415  return init_get_bits(s, buffer, byte_size * 8);
416 }
417 
418 static inline const uint8_t *align_get_bits(GetBitContext *s)
419 {
420  int n = -get_bits_count(s) & 7;
421  if (n)
422  skip_bits(s, n);
423  return s->buffer + (s->index >> 3);
424 }
425 
426 #define init_vlc(vlc, nb_bits, nb_codes, \
427  bits, bits_wrap, bits_size, \
428  codes, codes_wrap, codes_size, \
429  flags) \
430  ff_init_vlc_sparse(vlc, nb_bits, nb_codes, \
431  bits, bits_wrap, bits_size, \
432  codes, codes_wrap, codes_size, \
433  NULL, 0, 0, flags)
434 
435 int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes,
436  const void *bits, int bits_wrap, int bits_size,
437  const void *codes, int codes_wrap, int codes_size,
438  const void *symbols, int symbols_wrap, int symbols_size,
439  int flags);
440 void ff_free_vlc(VLC *vlc);
441 
442 #define INIT_VLC_LE 2
443 #define INIT_VLC_USE_NEW_STATIC 4
444 
445 #define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \
446  do { \
447  static VLC_TYPE table[static_size][2]; \
448  (vlc)->table = table; \
449  (vlc)->table_allocated = static_size; \
450  init_vlc(vlc, bits, a, b, c, d, e, f, g, INIT_VLC_USE_NEW_STATIC); \
451  } while (0)
452 
453 /**
454  * If the vlc code is invalid and max_depth=1, then no bits will be removed.
455  * If the vlc code is invalid and max_depth>1, then the number of bits removed
456  * is undefined.
457  */
458 #define GET_VLC(code, name, gb, table, bits, max_depth) \
459  do { \
460  int n, nb_bits; \
461  unsigned int index; \
462  \
463  index = SHOW_UBITS(name, gb, bits); \
464  code = table[index][0]; \
465  n = table[index][1]; \
466  \
467  if (max_depth > 1 && n < 0) { \
468  LAST_SKIP_BITS(name, gb, bits); \
469  UPDATE_CACHE(name, gb); \
470  \
471  nb_bits = -n; \
472  \
473  index = SHOW_UBITS(name, gb, nb_bits) + code; \
474  code = table[index][0]; \
475  n = table[index][1]; \
476  if (max_depth > 2 && n < 0) { \
477  LAST_SKIP_BITS(name, gb, nb_bits); \
478  UPDATE_CACHE(name, gb); \
479  \
480  nb_bits = -n; \
481  \
482  index = SHOW_UBITS(name, gb, nb_bits) + code; \
483  code = table[index][0]; \
484  n = table[index][1]; \
485  } \
486  } \
487  SKIP_BITS(name, gb, n); \
488  } while (0)
489 
490 #define GET_RL_VLC(level, run, name, gb, table, bits, \
491  max_depth, need_update) \
492  do { \
493  int n, nb_bits; \
494  unsigned int index; \
495  \
496  index = SHOW_UBITS(name, gb, bits); \
497  level = table[index].level; \
498  n = table[index].len; \
499  \
500  if (max_depth > 1 && n < 0) { \
501  SKIP_BITS(name, gb, bits); \
502  if (need_update) { \
503  UPDATE_CACHE(name, gb); \
504  } \
505  \
506  nb_bits = -n; \
507  \
508  index = SHOW_UBITS(name, gb, nb_bits) + level; \
509  level = table[index].level; \
510  n = table[index].len; \
511  } \
512  run = table[index].run; \
513  SKIP_BITS(name, gb, n); \
514  } while (0)
515 
516 /**
517  * Parse a vlc code.
518  * @param bits is the number of bits which will be read at once, must be
519  * identical to nb_bits in init_vlc()
520  * @param max_depth is the number of times bits bits must be read to completely
521  * read the longest vlc code
522  * = (max_vlc_length + bits - 1) / bits
523  */
525  int bits, int max_depth)
526 {
527  int code;
528 
529  OPEN_READER(re, s);
530  UPDATE_CACHE(re, s);
531 
532  GET_VLC(code, re, s, table, bits, max_depth);
533 
534  CLOSE_READER(re, s);
535 
536  return code;
537 }
538 
539 static inline int decode012(GetBitContext *gb)
540 {
541  int n;
542  n = get_bits1(gb);
543  if (n == 0)
544  return 0;
545  else
546  return get_bits1(gb) + 1;
547 }
548 
549 static inline int decode210(GetBitContext *gb)
550 {
551  if (get_bits1(gb))
552  return 0;
553  else
554  return 2 - get_bits1(gb);
555 }
556 
557 static inline int get_bits_left(GetBitContext *gb)
558 {
559  return gb->size_in_bits - get_bits_count(gb);
560 }
561 
562 //#define TRACE
563 
564 #ifdef TRACE
565 static inline void print_bin(int bits, int n)
566 {
567  int i;
568 
569  for (i = n - 1; i >= 0; i--)
570  av_log(NULL, AV_LOG_DEBUG, "%d", (bits >> i) & 1);
571  for (i = n; i < 24; i++)
572  av_log(NULL, AV_LOG_DEBUG, " ");
573 }
574 
575 static inline int get_bits_trace(GetBitContext *s, int n, const char *file,
576  const char *func, int line)
577 {
578  int r = get_bits(s, n);
579 
580  print_bin(r, n);
581  av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d bit @%5d in %s %s:%d\n",
582  r, n, r, get_bits_count(s) - n, file, func, line);
583 
584  return r;
585 }
586 
587 static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2],
588  int bits, int max_depth, const char *file,
589  const char *func, int line)
590 {
591  int show = show_bits(s, 24);
592  int pos = get_bits_count(s);
593  int r = get_vlc2(s, table, bits, max_depth);
594  int len = get_bits_count(s) - pos;
595  int bits2 = show >> (24 - len);
596 
597  print_bin(bits2, len);
598 
599  av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d vlc @%5d in %s %s:%d\n",
600  bits2, len, r, pos, file, func, line);
601 
602  return r;
603 }
604 
605 static inline int get_xbits_trace(GetBitContext *s, int n, const char *file,
606  const char *func, int line)
607 {
608  int show = show_bits(s, n);
609  int r = get_xbits(s, n);
610 
611  print_bin(show, n);
612  av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d xbt @%5d in %s %s:%d\n",
613  show, n, r, get_bits_count(s) - n, file, func, line);
614 
615  return r;
616 }
617 
618 #define get_bits(s, n) get_bits_trace(s , n, __FILE__, __PRETTY_FUNCTION__, __LINE__)
619 #define get_bits1(s) get_bits_trace(s, 1, __FILE__, __PRETTY_FUNCTION__, __LINE__)
620 #define get_xbits(s, n) get_xbits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__)
621 
622 #define get_vlc(s, vlc) get_vlc_trace(s, (vlc)->table, (vlc)->bits, 3, __FILE__, __PRETTY_FUNCTION__, __LINE__)
623 #define get_vlc2(s, tab, bits, max) get_vlc_trace(s, tab, bits, max, __FILE__, __PRETTY_FUNCTION__, __LINE__)
624 
625 #define tprintf(p, ...) av_log(p, AV_LOG_DEBUG, __VA_ARGS__)
626 
627 #else //TRACE
628 #define tprintf(p, ...) { }
629 #endif
630 
631 #endif /* AVCODEC_GET_BITS_H */
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
Definition: get_bits.h:352
static unsigned int show_bits1(GetBitContext *s)
Definition: get_bits.h:293
struct GetBitContext GetBitContext
int table_size
Definition: get_bits.h:66
const char * s
Definition: avisynth_c.h:668
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
static void skip_bits_long(GetBitContext *s, int n)
Definition: get_bits.h:198
struct VLC VLC
const uint8_t * buffer
Definition: get_bits.h:55
#define VLC_TYPE
Definition: get_bits.h:61
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:225
static int get_sbits_long(GetBitContext *s, int n)
Read 0-32 bits as a signed integer.
Definition: get_bits.h:344
uint8_t bits
Definition: crc.c:216
uint8_t
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition: avassert.h:63
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:193
static const uint8_t bits2[81]
Definition: aactab.c:118
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:557
static uint64_t get_bits64(GetBitContext *s, int n)
Read 0-64 bits.
Definition: get_bits.h:326
struct RL_VLC_ELEM RL_VLC_ELEM
#define UPDATE_CACHE(name, gb)
Definition: get_bits.h:160
void ff_free_vlc(VLC *vlc)
Definition: bitstream.c:344
static const struct endianess table[]
const char * r
Definition: vf_curves.c:94
Definition: graph2dot.c:48
simple assert() macros that are a bit more flexible than ISO C assert().
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
#define CLOSE_READER(name, gb)
Definition: get_bits.h:140
int8_t len
Definition: get_bits.h:71
static int check_marker(GetBitContext *s, const char *msg)
Definition: get_bits.h:362
Definition: get_bits.h:63
int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
Definition: bitstream.c:262
ret
Definition: avfilter.c:821
#define NEG_USR32(a, s)
Definition: mathops.h:159
FFmpeg Automated Testing Environment ************************************Table of Contents *****************FFmpeg Automated Testing Environment Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server 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 file
Definition: fate.txt:34
int size_in_bits
Definition: get_bits.h:57
int32_t
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:255
#define LAST_SKIP_BITS(name, gb, num)
Definition: get_bits.h:181
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:524
#define GET_VLC(code, name, gb, table, bits, max_depth)
If the vlc code is invalid and max_depth=1, then no bits will be removed.
Definition: get_bits.h:458
#define SHOW_UBITS(name, gb, num)
Definition: get_bits.h:187
static int decode210(GetBitContext *gb)
Definition: get_bits.h:549
int bits
Definition: get_bits.h:64
NULL
Definition: eval.c:55
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
int size_in_bits_plus8
Definition: get_bits.h:58
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:410
static int get_xbits(GetBitContext *s, int n)
read mpeg1 dc style vlc (sign bit + mantisse with no MSB).
Definition: get_bits.h:212
#define OPEN_READER(name, gb)
Definition: get_bits.h:126
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:273
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:298
int(* func)(AVBPrint *dst, const char *in, const char *arg)
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:265
synthesis window for stochastic i
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:379
#define GET_CACHE(name, gb)
Definition: get_bits.h:191
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:306
#define MIN_CACHE_BITS
Definition: get_bits.h:122
static av_const int sign_extend(int val, unsigned bits)
Definition: mathops.h:123
static int flags
Definition: cpu.c:23
uint8_t run
Definition: get_bits.h:72
#define SHOW_SBITS(name, gb, num)
Definition: get_bits.h:188
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:162
common internal and external API header
const uint8_t * buffer_end
Definition: get_bits.h:55
float re
Definition: fft-test.c:64
int len
static int decode012(GetBitContext *gb)
Definition: get_bits.h:539
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:418
int16_t level
Definition: get_bits.h:70
#define AV_LOG_INFO
Definition: log.h:156
#define av_always_inline
Definition: attributes.h:41