| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -27,6 +27,7 @@ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define AVCODEC_GET_BITS_H | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include <stdint.h> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "libavutil/common.h" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "libavutil/intreadwrite.h" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "libavutil/log.h" | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -72,46 +73,48 @@ typedef struct RL_VLC_ELEM { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} RL_VLC_ELEM; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/* Bitstream reader API docs: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			name | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    arbitrary name which is used as prefix for the internal variables | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			gb | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    getbitcontext | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			OPEN_READER(name, gb) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    load gb into local variables | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			CLOSE_READER(name, gb) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    store local vars in gb | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			UPDATE_CACHE(name, gb) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    refill the internal cache from the bitstream | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    after this call at least MIN_CACHE_BITS will be available, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			GET_CACHE(name, gb) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    will output the contents of the internal cache, next bit is MSB of 32 or 64 bit (FIXME 64bit) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			SHOW_UBITS(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    will return the next num bits | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			SHOW_SBITS(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    will return the next num bits and do sign extension | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			SKIP_BITS(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    will skip over the next num bits | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    note, this is equivalent to SKIP_CACHE; SKIP_COUNTER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			SKIP_CACHE(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    will remove the next num bits from the cache (note SKIP_COUNTER MUST be called before UPDATE_CACHE / CLOSE_READER) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			SKIP_COUNTER(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    will increment the internal bit counter (see SKIP_CACHE & SKIP_BITS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			LAST_SKIP_BITS(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    like SKIP_BITS, to be used if next call is UPDATE_CACHE or CLOSE_READER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			for examples see get_bits, show_bits, skip_bits, get_vlc | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			*/ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * name | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   arbitrary name which is used as prefix for the internal variables | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * gb | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   getbitcontext | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * OPEN_READER(name, gb) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   load gb into local variables | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * CLOSE_READER(name, gb) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   store local vars in gb | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * UPDATE_CACHE(name, gb) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   Refill the internal cache from the bitstream. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   After this call at least MIN_CACHE_BITS will be available. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * GET_CACHE(name, gb) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   Will output the contents of the internal cache, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   next bit is MSB of 32 or 64 bit (FIXME 64bit). | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * SHOW_UBITS(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   Will return the next num bits. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * SHOW_SBITS(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   Will return the next num bits and do sign extension. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * SKIP_BITS(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   Will skip over the next num bits. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   Note, this is equivalent to SKIP_CACHE; SKIP_COUNTER. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * SKIP_CACHE(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   Will remove the next num bits from the cache (note SKIP_COUNTER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   MUST be called before UPDATE_CACHE / CLOSE_READER). | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * SKIP_COUNTER(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   Will increment the internal bit counter (see SKIP_CACHE & SKIP_BITS). | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * LAST_SKIP_BITS(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 *   Like SKIP_BITS, to be used if next call is UPDATE_CACHE or CLOSE_READER. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * For examples see get_bits, show_bits, skip_bits, get_vlc. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#ifdef LONG_BITSTREAM_READER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define MIN_CACHE_BITS 32 | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -121,57 +124,56 @@ for examples see get_bits, show_bits, skip_bits, get_vlc | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if UNCHECKED_BITSTREAM_READER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define OPEN_READER(name, gb)                   \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    unsigned int name##_index = (gb)->index;    \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    av_unused unsigned int name##_cache | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    unsigned int name ## _index = (gb)->index;  \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    unsigned int av_unused name ## _cache | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define HAVE_BITS_REMAINING(name, gb) 1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define OPEN_READER(name, gb)                   \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    unsigned int name##_index = (gb)->index;    \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    unsigned int av_unused name##_cache = 0;    \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    unsigned int av_unused name##_size_plus8 =  \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                (gb)->size_in_bits_plus8 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    unsigned int name ## _index = (gb)->index;  \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    unsigned int av_unused name ## _cache = 0;  \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    unsigned int av_unused name ## _size_plus8 = (gb)->size_in_bits_plus8 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define HAVE_BITS_REMAINING(name, gb)           \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    name##_index < name##_size_plus8 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define HAVE_BITS_REMAINING(name, gb) name ## _index < name ## _size_plus8 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define CLOSE_READER(name, gb) (gb)->index = name##_index | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define CLOSE_READER(name, gb) (gb)->index = name ## _index | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#ifdef BITSTREAM_READER_LE | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# ifdef LONG_BITSTREAM_READER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define UPDATE_CACHE(name, gb) name##_cache = \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        AV_RL64((gb)->buffer + (name##_index >> 3)) >> (name##_index & 7) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define UPDATE_CACHE(name, gb) name ## _cache = \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        AV_RL64((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define UPDATE_CACHE(name, gb) name##_cache = \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        AV_RL32((gb)->buffer + (name##_index >> 3)) >> (name##_index & 7) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define UPDATE_CACHE(name, gb) name ## _cache = \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        AV_RL32((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# define SKIP_CACHE(name, gb, num) name##_cache >>= (num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# define SKIP_CACHE(name, gb, num) name ## _cache >>= (num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# ifdef LONG_BITSTREAM_READER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define UPDATE_CACHE(name, gb) name##_cache = \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        AV_RB64((gb)->buffer + (name##_index >> 3)) >> (32 - (name##_index & 7)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define UPDATE_CACHE(name, gb) name ## _cache = \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        AV_RB64((gb)->buffer + (name ## _index >> 3)) >> (32 - (name ## _index & 7)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define UPDATE_CACHE(name, gb) name##_cache = \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        AV_RB32((gb)->buffer + (name##_index >> 3)) << (name##_index & 7) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define UPDATE_CACHE(name, gb) name ## _cache = \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        AV_RB32((gb)->buffer + (name ## _index >> 3)) << (name ## _index & 7) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# define SKIP_CACHE(name, gb, num) name##_cache <<= (num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# define SKIP_CACHE(name, gb, num) name ## _cache <<= (num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if UNCHECKED_BITSTREAM_READER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SKIP_COUNTER(name, gb, num) name##_index += (num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SKIP_COUNTER(name, gb, num) name ## _index += (num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SKIP_COUNTER(name, gb, num) \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    name##_index = FFMIN(name##_size_plus8, name##_index + (num)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    name ## _index = FFMIN(name ## _size_plus8, name ## _index + (num)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define SKIP_BITS(name, gb, num) do {           \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define SKIP_BITS(name, gb, num)                \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    do {                                        \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        SKIP_CACHE(name, gb, num);              \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        SKIP_COUNTER(name, gb, num);            \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } while (0) | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -179,21 +181,22 @@ for examples see get_bits, show_bits, skip_bits, get_vlc | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#ifdef BITSTREAM_READER_LE | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SHOW_UBITS(name, gb, num) zero_extend(name##_cache, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SHOW_SBITS(name, gb, num) sign_extend(name##_cache, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SHOW_UBITS(name, gb, num) zero_extend(name ## _cache, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SHOW_SBITS(name, gb, num) sign_extend(name ## _cache, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SHOW_UBITS(name, gb, num) NEG_USR32(name##_cache, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SHOW_SBITS(name, gb, num) NEG_SSR32(name##_cache, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SHOW_UBITS(name, gb, num) NEG_USR32(name ## _cache, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#   define SHOW_SBITS(name, gb, num) NEG_SSR32(name ## _cache, num) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define GET_CACHE(name, gb) ((uint32_t)name##_cache) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define GET_CACHE(name, gb) ((uint32_t) name ## _cache) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static inline int get_bits_count(const GetBitContext *s) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return s->index; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static inline void skip_bits_long(GetBitContext *s, int n){ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static inline void skip_bits_long(GetBitContext *s, int n) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if UNCHECKED_BITSTREAM_READER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->index += n; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -213,7 +216,7 @@ static inline int get_xbits(GetBitContext *s, int n) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    OPEN_READER(re, s); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    UPDATE_CACHE(re, s); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    cache = GET_CACHE(re, s); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sign = ~cache >> 31; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sign  = ~cache >> 31; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    LAST_SKIP_BITS(re, s, n); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    CLOSE_READER(re, s); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return (NEG_USR32(sign ^ cache, n) ^ sign) - sign; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -270,10 +273,10 @@ static inline void skip_bits(GetBitContext *s, int n) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static inline unsigned int get_bits1(GetBitContext *s) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    unsigned int index = s->index; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint8_t result = s->buffer[index>>3]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint8_t result     = s->buffer[index >> 3]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#ifdef BITSTREAM_READER_LE | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result >>= index & 7; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result &= 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result  &= 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result <<= index & 7; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result >>= 8 - 1; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -304,15 +307,15 @@ static inline unsigned int get_bits_long(GetBitContext *s, int n) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (!n) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } else if (n <= MIN_CACHE_BITS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } else if (n <= MIN_CACHE_BITS) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return get_bits(s, n); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#ifdef BITSTREAM_READER_LE | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        unsigned ret = get_bits(s, 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return ret | (get_bits(s, n-16) << 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return ret | (get_bits(s, n - 16) << 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        unsigned ret = get_bits(s, 16) << (n-16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return ret | get_bits(s, n-16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        unsigned ret = get_bits(s, 16) << (n - 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return ret | get_bits(s, n - 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -327,9 +330,9 @@ static inline uint64_t get_bits64(GetBitContext *s, int n) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#ifdef BITSTREAM_READER_LE | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        uint64_t ret = get_bits_long(s, 32); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return ret | (uint64_t)get_bits_long(s, n - 32) << 32; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return ret | (uint64_t) get_bits_long(s, n - 32) << 32; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        uint64_t ret = (uint64_t)get_bits_long(s, n - 32) << 32; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        uint64_t ret = (uint64_t) get_bits_long(s, n - 32) << 32; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return ret | get_bits_long(s, 32); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -348,9 +351,9 @@ static inline int get_sbits_long(GetBitContext *s, int n) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static inline unsigned int show_bits_long(GetBitContext *s, int n) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (n <= MIN_CACHE_BITS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (n <= MIN_CACHE_BITS) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return show_bits(s, n); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        GetBitContext gb = *s; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return get_bits_long(&gb, n); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -381,17 +384,18 @@ static inline int init_get_bits(GetBitContext *s, const uint8_t *buffer, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (bit_size >= INT_MAX - 7 || bit_size < 0 || !buffer) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        buffer_size = bit_size = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        buffer = NULL; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ret = AVERROR_INVALIDDATA; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        buffer      = NULL; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ret         = AVERROR_INVALIDDATA; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    buffer_size = (bit_size + 7) >> 3; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->buffer       = buffer; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->size_in_bits = bit_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->buffer             = buffer; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->size_in_bits       = bit_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->size_in_bits_plus8 = bit_size + 8; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->buffer_end   = buffer + buffer_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->index        = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->buffer_end         = buffer + buffer_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->index              = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return ret; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -414,34 +418,36 @@ static inline int init_get_bits8(GetBitContext *s, const uint8_t *buffer, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static inline void align_get_bits(GetBitContext *s) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int n = -get_bits_count(s) & 7; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (n) skip_bits(s, n); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (n) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        skip_bits(s, n); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define init_vlc(vlc, nb_bits, nb_codes,                \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                 bits, bits_wrap, bits_size,            \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                 codes, codes_wrap, codes_size,         \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                 flags)                                 \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ff_init_vlc_sparse(vlc, nb_bits, nb_codes,         \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                           bits, bits_wrap, bits_size,     \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                           codes, codes_wrap, codes_size,  \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                           NULL, 0, 0, flags) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    ff_init_vlc_sparse(vlc, nb_bits, nb_codes,          \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                       bits, bits_wrap, bits_size,      \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                       codes, codes_wrap, codes_size,   \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                       NULL, 0, 0, flags) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			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); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define INIT_VLC_LE         2 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define INIT_VLC_USE_NEW_STATIC 4 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                       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); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void ff_free_vlc(VLC *vlc); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define INIT_VLC_STATIC(vlc, bits, a,b,c,d,e,f,g, static_size) do {     \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        static VLC_TYPE table[static_size][2];                          \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        (vlc)->table = table;                                           \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        (vlc)->table_allocated = static_size;                           \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        init_vlc(vlc, bits, a,b,c,d,e,f,g, INIT_VLC_USE_NEW_STATIC);    \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } while (0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define INIT_VLC_LE             2 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define INIT_VLC_USE_NEW_STATIC 4 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)       \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    do {                                                                   \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        static VLC_TYPE table[static_size][2];                             \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        (vlc)->table           = table;                                    \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        (vlc)->table_allocated = static_size;                              \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        init_vlc(vlc, bits, a, b, c, d, e, f, g, INIT_VLC_USE_NEW_STATIC); \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } while (0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/** | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * If the vlc code is invalid and max_depth=1, then no bits will be removed. | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -480,32 +486,32 @@ void ff_free_vlc(VLC *vlc); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        SKIP_BITS(name, gb, n);                                 \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } while (0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update) \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    do {                                                                \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        int n, nb_bits;                                                 \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        unsigned int index;                                             \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                        \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        index = SHOW_UBITS(name, gb, bits);                             \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        level = table[index].level;                                     \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        n     = table[index].len;                                       \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                        \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (max_depth > 1 && n < 0) {                                   \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            SKIP_BITS(name, gb, bits);                                  \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (need_update) {                                          \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                UPDATE_CACHE(name, gb);                                 \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            }                                                           \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                        \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            nb_bits = -n;                                               \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                        \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            index = SHOW_UBITS(name, gb, nb_bits) + level;              \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            level = table[index].level;                                 \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            n     = table[index].len;                                   \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }                                                               \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        run = table[index].run;                                         \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        SKIP_BITS(name, gb, n);                                         \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define GET_RL_VLC(level, run, name, gb, table, bits,           \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                   max_depth, need_update)                      \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    do {                                                        \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        int n, nb_bits;                                         \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        unsigned int index;                                     \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        index = SHOW_UBITS(name, gb, bits);                     \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        level = table[index].level;                             \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        n     = table[index].len;                               \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (max_depth > 1 && n < 0) {                           \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            SKIP_BITS(name, gb, bits);                          \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (need_update) {                                  \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                UPDATE_CACHE(name, gb);                         \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            }                                                   \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            nb_bits = -n;                                       \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            index = SHOW_UBITS(name, gb, nb_bits) + level;      \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            level = table[index].level;                         \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            n     = table[index].len;                           \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }                                                       \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        run = table[index].run;                                 \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        SKIP_BITS(name, gb, n);                                 \ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } while (0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/** | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * Parse a vlc code. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * @param bits is the number of bits which will be read at once, must be | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -525,6 +531,7 @@ static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    GET_VLC(code, re, s, table, bits, max_depth); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    CLOSE_READER(re, s); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return code; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -558,9 +565,8 @@ static inline void print_bin(int bits, int n) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int i; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    for (i = n-1; i >= 0; i--) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_log(NULL, AV_LOG_DEBUG, "%d", (bits>>i)&1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    for (i = n - 1; i >= 0; i--) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_log(NULL, AV_LOG_DEBUG, "%d", (bits >> i) & 1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    for (i = n; i < 24; i++) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_log(NULL, AV_LOG_DEBUG, " "); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -572,9 +578,11 @@ static inline int get_bits_trace(GetBitContext *s, int n, const char *file, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    print_bin(r, n); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d bit @%5d in %s %s:%d\n", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			           r, n, r, get_bits_count(s)-n, file, func, line); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			           r, n, r, get_bits_count(s) - n, file, func, line); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return r; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                int bits, int max_depth, const char *file, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                const char *func, int line) | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -583,14 +591,16 @@ static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int pos   = get_bits_count(s); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int r     = get_vlc2(s, table, bits, max_depth); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int len   = get_bits_count(s) - pos; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int bits2 = show >> (24-len); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int bits2 = show >> (24 - len); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    print_bin(bits2, len); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d vlc @%5d in %s %s:%d\n", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			           bits2, len, r, pos, file, func, line); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return r; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static inline int get_xbits_trace(GetBitContext *s, int n, const char *file, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                  const char *func, int line) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -599,20 +609,22 @@ static inline int get_xbits_trace(GetBitContext *s, int n, const char *file, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    print_bin(show, n); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d xbt @%5d in %s %s:%d\n", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			           show, n, r, get_bits_count(s)-n, file, func, line); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			           show, n, r, get_bits_count(s) - n, file, func, line); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return r; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define get_bits(s, n)  get_bits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define get_bits1(s)    get_bits_trace(s, 1, __FILE__, __PRETTY_FUNCTION__, __LINE__) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define get_bits(s, n)  get_bits_trace(s , n, __FILE__, __PRETTY_FUNCTION__, __LINE__) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define get_bits1(s)    get_bits_trace(s,  1, __FILE__, __PRETTY_FUNCTION__, __LINE__) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define get_xbits(s, n) get_xbits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define get_vlc(s, vlc)            get_vlc_trace(s, (vlc)->table, (vlc)->bits, 3, __FILE__, __PRETTY_FUNCTION__, __LINE__) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define get_vlc2(s, tab, bits, max) get_vlc_trace(s, tab, bits, max, __FILE__, __PRETTY_FUNCTION__, __LINE__) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define get_vlc(s, vlc)             get_vlc_trace(s, (vlc)->table, (vlc)->bits,   3, __FILE__, __PRETTY_FUNCTION__, __LINE__) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define get_vlc2(s, tab, bits, max) get_vlc_trace(s,          tab,        bits, max, __FILE__, __PRETTY_FUNCTION__, __LINE__) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define tprintf(p, ...) av_log(p, AV_LOG_DEBUG, __VA_ARGS__) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else //TRACE | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define tprintf(p, ...) {} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define tprintf(p, ...) { } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif /* AVCODEC_GET_BITS_H */ |