bitstream.h
上传用户:lctgjx
上传日期:2022-06-04
资源大小:8887k
文件大小:28k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  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.  * @file bitstream.h
  22.  * bitstream api header.
  23.  */
  24. #ifndef FFMPEG_BITSTREAM_H
  25. #define FFMPEG_BITSTREAM_H
  26. #include <stdlib.h>
  27. #include <assert.h>
  28. #include "bswap.h"
  29. #include "common.h"
  30. #include "intreadwrite.h"
  31. #include "log.h"
  32. #if defined(ALT_BITSTREAM_READER_LE) && !defined(ALT_BITSTREAM_READER)
  33. #   define ALT_BITSTREAM_READER
  34. #endif
  35. //#define ALT_BITSTREAM_WRITER
  36. //#define ALIGNED_BITSTREAM_WRITER
  37. #if !defined(LIBMPEG2_BITSTREAM_READER) && !defined(A32_BITSTREAM_READER) && !defined(ALT_BITSTREAM_READER)
  38. #   ifdef ARCH_ARMV4L
  39. #       define A32_BITSTREAM_READER
  40. #   else
  41. #       define ALT_BITSTREAM_READER
  42. //#define LIBMPEG2_BITSTREAM_READER
  43. //#define A32_BITSTREAM_READER
  44. #   endif
  45. #endif
  46. #define LIBMPEG2_BITSTREAM_READER_HACK //add BERO
  47. extern const uint8_t ff_reverse[256];
  48. #if defined(ARCH_X86)
  49. // avoid +32 for shift optimization (gcc should do that ...)
  50. static inline  int32_t NEG_SSR32( int32_t a, int8_t s){
  51.     asm ("sarl %1, %0nt"
  52.          : "+r" (a)
  53.          : "ic" ((uint8_t)(-s))
  54.     );
  55.     return a;
  56. }
  57. static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
  58.     asm ("shrl %1, %0nt"
  59.          : "+r" (a)
  60.          : "ic" ((uint8_t)(-s))
  61.     );
  62.     return a;
  63. }
  64. #else
  65. #    define NEG_SSR32(a,s) ((( int32_t)(a))>>(32-(s)))
  66. #    define NEG_USR32(a,s) (((uint32_t)(a))>>(32-(s)))
  67. #endif
  68. /* bit output */
  69. /* buf and buf_end must be present and used by every alternative writer. */
  70. typedef struct PutBitContext {
  71. #ifdef ALT_BITSTREAM_WRITER
  72.     uint8_t *buf, *buf_end;
  73.     int index;
  74. #else
  75.     uint32_t bit_buf;
  76.     int bit_left;
  77.     uint8_t *buf, *buf_ptr, *buf_end;
  78. #endif
  79. } PutBitContext;
  80. static inline void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
  81. {
  82.     if(buffer_size < 0) {
  83.         buffer_size = 0;
  84.         buffer = NULL;
  85.     }
  86.     s->buf = buffer;
  87.     s->buf_end = s->buf + buffer_size;
  88. #ifdef ALT_BITSTREAM_WRITER
  89.     s->index=0;
  90.     ((uint32_t*)(s->buf))[0]=0;
  91. //    memset(buffer, 0, buffer_size);
  92. #else
  93.     s->buf_ptr = s->buf;
  94.     s->bit_left=32;
  95.     s->bit_buf=0;
  96. #endif
  97. }
  98. /* return the number of bits output */
  99. static inline int put_bits_count(PutBitContext *s)
  100. {
  101. #ifdef ALT_BITSTREAM_WRITER
  102.     return s->index;
  103. #else
  104.     return (s->buf_ptr - s->buf) * 8 + 32 - s->bit_left;
  105. #endif
  106. }
  107. /* pad the end of the output stream with zeros */
  108. static inline void flush_put_bits(PutBitContext *s)
  109. {
  110. #ifdef ALT_BITSTREAM_WRITER
  111.     align_put_bits(s);
  112. #else
  113.     s->bit_buf<<= s->bit_left;
  114.     while (s->bit_left < 32) {
  115.         /* XXX: should test end of buffer */
  116.         *s->buf_ptr++=s->bit_buf >> 24;
  117.         s->bit_buf<<=8;
  118.         s->bit_left+=8;
  119.     }
  120.     s->bit_left=32;
  121.     s->bit_buf=0;
  122. #endif
  123. }
  124. void align_put_bits(PutBitContext *s);
  125. void ff_put_string(PutBitContext * pbc, const char *s, int put_zero);
  126. void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length);
  127. /* bit input */
  128. /* buffer, buffer_end and size_in_bits must be present and used by every reader */
  129. typedef struct GetBitContext {
  130.     const uint8_t *buffer, *buffer_end;
  131. #ifdef ALT_BITSTREAM_READER
  132.     int index;
  133. #elif defined LIBMPEG2_BITSTREAM_READER
  134.     uint8_t *buffer_ptr;
  135.     uint32_t cache;
  136.     int bit_count;
  137. #elif defined A32_BITSTREAM_READER
  138.     uint32_t *buffer_ptr;
  139.     uint32_t cache0;
  140.     uint32_t cache1;
  141.     int bit_count;
  142. #endif
  143.     int size_in_bits;
  144. } GetBitContext;
  145. #define VLC_TYPE int16_t
  146. typedef struct VLC {
  147.     int bits;
  148.     VLC_TYPE (*table)[2]; ///< code, bits
  149.     int table_size, table_allocated;
  150. } VLC;
  151. typedef struct RL_VLC_ELEM {
  152.     int16_t level;
  153.     int8_t len;
  154.     uint8_t run;
  155. } RL_VLC_ELEM;
  156. #if defined(ARCH_SPARC) || defined(ARCH_ARMV4L) || defined(ARCH_MIPS) || defined(ARCH_BFIN)
  157. #define UNALIGNED_STORES_ARE_BAD
  158. #endif
  159. /* used to avoid misaligned exceptions on some archs (alpha, ...) */
  160. #if defined(ARCH_X86)
  161. #    define unaligned16(a) (*(const uint16_t*)(a))
  162. #    define unaligned32(a) (*(const uint32_t*)(a))
  163. #    define unaligned64(a) (*(const uint64_t*)(a))
  164. #else
  165. #    ifdef __GNUC__
  166. #    define unaligned(x)                                
  167. static inline uint##x##_t unaligned##x(const void *v) { 
  168.     struct Unaligned {                                  
  169.         uint##x##_t i;                                  
  170.     } __attribute__((packed));                          
  171.                                                         
  172.     return ((const struct Unaligned *) v)->i;           
  173. }
  174. #    elif defined(__DECC)
  175. #    define unaligned(x)                                        
  176. static inline uint##x##_t unaligned##x(const void *v) {         
  177.     return *(const __unaligned uint##x##_t *) v;                
  178. }
  179. #    else
  180. #    define unaligned(x)                                        
  181. static inline uint##x##_t unaligned##x(const void *v) {         
  182.     return *(const uint##x##_t *) v;                            
  183. }
  184. #    endif
  185. unaligned(16)
  186. unaligned(32)
  187. unaligned(64)
  188. #undef unaligned
  189. #endif /* defined(ARCH_X86) */
  190. #ifndef ALT_BITSTREAM_WRITER
  191. static inline void put_bits(PutBitContext *s, int n, unsigned int value)
  192. {
  193.     unsigned int bit_buf;
  194.     int bit_left;
  195.     //    printf("put_bits=%d %xn", n, value);
  196.     assert(n == 32 || value < (1U << n));
  197.     bit_buf = s->bit_buf;
  198.     bit_left = s->bit_left;
  199.     //    printf("n=%d value=%x cnt=%d buf=%xn", n, value, bit_cnt, bit_buf);
  200.     /* XXX: optimize */
  201.     if (n < bit_left) {
  202.         bit_buf = (bit_buf<<n) | value;
  203.         bit_left-=n;
  204.     } else {
  205.         bit_buf<<=bit_left;
  206.         bit_buf |= value >> (n - bit_left);
  207. #ifdef UNALIGNED_STORES_ARE_BAD
  208.         if (3 & (intptr_t) s->buf_ptr) {
  209.             s->buf_ptr[0] = bit_buf >> 24;
  210.             s->buf_ptr[1] = bit_buf >> 16;
  211.             s->buf_ptr[2] = bit_buf >>  8;
  212.             s->buf_ptr[3] = bit_buf      ;
  213.         } else
  214. #endif
  215.         *(uint32_t *)s->buf_ptr = be2me_32(bit_buf);
  216.         //printf("bitbuf = %08xn", bit_buf);
  217.         s->buf_ptr+=4;
  218.         bit_left+=32 - n;
  219.         bit_buf = value;
  220.     }
  221.     s->bit_buf = bit_buf;
  222.     s->bit_left = bit_left;
  223. }
  224. #endif
  225. #ifdef ALT_BITSTREAM_WRITER
  226. static inline void put_bits(PutBitContext *s, int n, unsigned int value)
  227. {
  228. #    ifdef ALIGNED_BITSTREAM_WRITER
  229. #        if defined(ARCH_X86)
  230.     asm volatile(
  231.         "movl %0, %%ecx                 nt"
  232.         "xorl %%eax, %%eax              nt"
  233.         "shrdl %%cl, %1, %%eax          nt"
  234.         "shrl %%cl, %1                  nt"
  235.         "movl %0, %%ecx                 nt"
  236.         "shrl $3, %%ecx                 nt"
  237.         "andl $0xFFFFFFFC, %%ecx        nt"
  238.         "bswapl %1                      nt"
  239.         "orl %1, (%2, %%ecx)            nt"
  240.         "bswapl %%eax                   nt"
  241.         "addl %3, %0                    nt"
  242.         "movl %%eax, 4(%2, %%ecx)       nt"
  243.         : "=&r" (s->index), "=&r" (value)
  244.         : "r" (s->buf), "r" (n), "0" (s->index), "1" (value<<(-n))
  245.         : "%eax", "%ecx"
  246.     );
  247. #        else
  248.     int index= s->index;
  249.     uint32_t *ptr= ((uint32_t *)s->buf)+(index>>5);
  250.     value<<= 32-n;
  251.     ptr[0] |= be2me_32(value>>(index&31));
  252.     ptr[1]  = be2me_32(value<<(32-(index&31)));
  253. //if(n>24) printf("%d %dn", n, value);
  254.     index+= n;
  255.     s->index= index;
  256. #        endif
  257. #    else //ALIGNED_BITSTREAM_WRITER
  258. #        if defined(ARCH_X86)
  259.     asm volatile(
  260.         "movl $7, %%ecx                 nt"
  261.         "andl %0, %%ecx                 nt"
  262.         "addl %3, %%ecx                 nt"
  263.         "negl %%ecx                     nt"
  264.         "shll %%cl, %1                  nt"
  265.         "bswapl %1                      nt"
  266.         "movl %0, %%ecx                 nt"
  267.         "shrl $3, %%ecx                 nt"
  268.         "orl %1, (%%ecx, %2)            nt"
  269.         "addl %3, %0                    nt"
  270.         "movl $0, 4(%%ecx, %2)          nt"
  271.         : "=&r" (s->index), "=&r" (value)
  272.         : "r" (s->buf), "r" (n), "0" (s->index), "1" (value)
  273.         : "%ecx"
  274.     );
  275. #        else
  276.     int index= s->index;
  277.     uint32_t *ptr= (uint32_t*)(((uint8_t *)s->buf)+(index>>3));
  278.     ptr[0] |= be2me_32(value<<(32-n-(index&7) ));
  279.     ptr[1] = 0;
  280. //if(n>24) printf("%d %dn", n, value);
  281.     index+= n;
  282.     s->index= index;
  283. #        endif
  284. #    endif //!ALIGNED_BITSTREAM_WRITER
  285. }
  286. #endif
  287. static inline uint8_t* pbBufPtr(PutBitContext *s)
  288. {
  289. #ifdef ALT_BITSTREAM_WRITER
  290.         return s->buf + (s->index>>3);
  291. #else
  292.         return s->buf_ptr;
  293. #endif
  294. }
  295. /**
  296.  *
  297.  * PutBitContext must be flushed & aligned to a byte boundary before calling this.
  298.  */
  299. static inline void skip_put_bytes(PutBitContext *s, int n){
  300.         assert((put_bits_count(s)&7)==0);
  301. #ifdef ALT_BITSTREAM_WRITER
  302.         FIXME may need some cleaning of the buffer
  303.         s->index += n<<3;
  304. #else
  305.         assert(s->bit_left==32);
  306.         s->buf_ptr += n;
  307. #endif
  308. }
  309. /**
  310.  * Skips the given number of bits.
  311.  * Must only be used if the actual values in the bitstream do not matter.
  312.  */
  313. static inline void skip_put_bits(PutBitContext *s, int n){
  314. #ifdef ALT_BITSTREAM_WRITER
  315.     s->index += n;
  316. #else
  317.     s->bit_left -= n;
  318.     s->buf_ptr-= s->bit_left>>5;
  319.     s->bit_left &= 31;
  320. #endif
  321. }
  322. /**
  323.  * Changes the end of the buffer.
  324.  */
  325. static inline void set_put_bits_buffer_size(PutBitContext *s, int size){
  326.     s->buf_end= s->buf + size;
  327. }
  328. /* Bitstream reader API docs:
  329. name
  330.     abritary name which is used as prefix for the internal variables
  331. gb
  332.     getbitcontext
  333. OPEN_READER(name, gb)
  334.     loads gb into local variables
  335. CLOSE_READER(name, gb)
  336.     stores local vars in gb
  337. UPDATE_CACHE(name, gb)
  338.     refills the internal cache from the bitstream
  339.     after this call at least MIN_CACHE_BITS will be available,
  340. GET_CACHE(name, gb)
  341.     will output the contents of the internal cache, next bit is MSB of 32 or 64 bit (FIXME 64bit)
  342. SHOW_UBITS(name, gb, num)
  343.     will return the next num bits
  344. SHOW_SBITS(name, gb, num)
  345.     will return the next num bits and do sign extension
  346. SKIP_BITS(name, gb, num)
  347.     will skip over the next num bits
  348.     note, this is equivalent to SKIP_CACHE; SKIP_COUNTER
  349. SKIP_CACHE(name, gb, num)
  350.     will remove the next num bits from the cache (note SKIP_COUNTER MUST be called before UPDATE_CACHE / CLOSE_READER)
  351. SKIP_COUNTER(name, gb, num)
  352.     will increment the internal bit counter (see SKIP_CACHE & SKIP_BITS)
  353. LAST_SKIP_CACHE(name, gb, num)
  354.     will remove the next num bits from the cache if it is needed for UPDATE_CACHE otherwise it will do nothing
  355. LAST_SKIP_BITS(name, gb, num)
  356.     is equivalent to SKIP_LAST_CACHE; SKIP_COUNTER
  357. for examples see get_bits, show_bits, skip_bits, get_vlc
  358. */
  359. #ifdef ALT_BITSTREAM_READER
  360. #   define MIN_CACHE_BITS 25
  361. #   define OPEN_READER(name, gb)
  362.         int name##_index= (gb)->index;
  363.         int name##_cache= 0;
  364. #   define CLOSE_READER(name, gb)
  365.         (gb)->index= name##_index;
  366. # ifdef ALT_BITSTREAM_READER_LE
  367. #   define UPDATE_CACHE(name, gb)
  368.         name##_cache= AV_RL32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) >> (name##_index&0x07);
  369. #   define SKIP_CACHE(name, gb, num)
  370.         name##_cache >>= (num);
  371. # else
  372. #   define UPDATE_CACHE(name, gb)
  373.         name##_cache= AV_RB32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) << (name##_index&0x07);
  374. #   define SKIP_CACHE(name, gb, num)
  375.         name##_cache <<= (num);
  376. # endif
  377. // FIXME name?
  378. #   define SKIP_COUNTER(name, gb, num)
  379.         name##_index += (num);
  380. #   define SKIP_BITS(name, gb, num)
  381.         {
  382.             SKIP_CACHE(name, gb, num)
  383.             SKIP_COUNTER(name, gb, num)
  384.         }
  385. #   define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num)
  386. #   define LAST_SKIP_CACHE(name, gb, num) ;
  387. # ifdef ALT_BITSTREAM_READER_LE
  388. #   define SHOW_UBITS(name, gb, num)
  389.         ((name##_cache) & (NEG_USR32(0xffffffff,num)))
  390. #   define SHOW_SBITS(name, gb, num)
  391.         NEG_SSR32((name##_cache)<<(32-(num)), num)
  392. # else
  393. #   define SHOW_UBITS(name, gb, num)
  394.         NEG_USR32(name##_cache, num)
  395. #   define SHOW_SBITS(name, gb, num)
  396.         NEG_SSR32(name##_cache, num)
  397. # endif
  398. #   define GET_CACHE(name, gb)
  399.         ((uint32_t)name##_cache)
  400. static inline int get_bits_count(GetBitContext *s){
  401.     return s->index;
  402. }
  403. static inline void skip_bits_long(GetBitContext *s, int n){
  404.     s->index += n;
  405. }
  406. #elif defined LIBMPEG2_BITSTREAM_READER
  407. //libmpeg2 like reader
  408. #   define MIN_CACHE_BITS 17
  409. #   define OPEN_READER(name, gb)
  410.         int name##_bit_count=(gb)->bit_count;
  411.         int name##_cache= (gb)->cache;
  412.         uint8_t * name##_buffer_ptr=(gb)->buffer_ptr;
  413. #   define CLOSE_READER(name, gb)
  414.         (gb)->bit_count= name##_bit_count;
  415.         (gb)->cache= name##_cache;
  416.         (gb)->buffer_ptr= name##_buffer_ptr;
  417. #ifdef LIBMPEG2_BITSTREAM_READER_HACK
  418. #   define UPDATE_CACHE(name, gb)
  419.     if(name##_bit_count >= 0){
  420.         name##_cache+= (int)be2me_16(*(uint16_t*)name##_buffer_ptr) << name##_bit_count;
  421.         name##_buffer_ptr += 2;
  422.         name##_bit_count-= 16;
  423.     }
  424. #else
  425. #   define UPDATE_CACHE(name, gb)
  426.     if(name##_bit_count >= 0){
  427.         name##_cache+= ((name##_buffer_ptr[0]<<8) + name##_buffer_ptr[1]) << name##_bit_count;
  428.         name##_buffer_ptr+=2;
  429.         name##_bit_count-= 16;
  430.     }
  431. #endif
  432. #   define SKIP_CACHE(name, gb, num)
  433.         name##_cache <<= (num);
  434. #   define SKIP_COUNTER(name, gb, num)
  435.         name##_bit_count += (num);
  436. #   define SKIP_BITS(name, gb, num)
  437.         {
  438.             SKIP_CACHE(name, gb, num)
  439.             SKIP_COUNTER(name, gb, num)
  440.         }
  441. #   define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num)
  442. #   define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num)
  443. #   define SHOW_UBITS(name, gb, num)
  444.         NEG_USR32(name##_cache, num)
  445. #   define SHOW_SBITS(name, gb, num)
  446.         NEG_SSR32(name##_cache, num)
  447. #   define GET_CACHE(name, gb)
  448.         ((uint32_t)name##_cache)
  449. static inline int get_bits_count(GetBitContext *s){
  450.     return (s->buffer_ptr - s->buffer)*8 - 16 + s->bit_count;
  451. }
  452. static inline void skip_bits_long(GetBitContext *s, int n){
  453.     OPEN_READER(re, s)
  454.     re_bit_count += n;
  455.     re_buffer_ptr += 2*(re_bit_count>>4);
  456.     re_bit_count &= 15;
  457.     re_cache = ((re_buffer_ptr[-2]<<8) + re_buffer_ptr[-1]) << (16+re_bit_count);
  458.     UPDATE_CACHE(re, s)
  459.     CLOSE_READER(re, s)
  460. }
  461. #elif defined A32_BITSTREAM_READER
  462. #   define MIN_CACHE_BITS 32
  463. #   define OPEN_READER(name, gb)
  464.         int name##_bit_count=(gb)->bit_count;
  465.         uint32_t name##_cache0= (gb)->cache0;
  466.         uint32_t name##_cache1= (gb)->cache1;
  467.         uint32_t * name##_buffer_ptr=(gb)->buffer_ptr;
  468. #   define CLOSE_READER(name, gb)
  469.         (gb)->bit_count= name##_bit_count;
  470.         (gb)->cache0= name##_cache0;
  471.         (gb)->cache1= name##_cache1;
  472.         (gb)->buffer_ptr= name##_buffer_ptr;
  473. #   define UPDATE_CACHE(name, gb)
  474.     if(name##_bit_count > 0){
  475.         const uint32_t next= be2me_32( *name##_buffer_ptr );
  476.         name##_cache0 |= NEG_USR32(next,name##_bit_count);
  477.         name##_cache1 |= next<<name##_bit_count;
  478.         name##_buffer_ptr++;
  479.         name##_bit_count-= 32;
  480.     }
  481. #if defined(ARCH_X86)
  482. #   define SKIP_CACHE(name, gb, num)
  483.         asm(
  484.             "shldl %2, %1, %0          nt"
  485.             "shll %2, %1               nt"
  486.             : "+r" (name##_cache0), "+r" (name##_cache1)
  487.             : "Ic" ((uint8_t)(num))
  488.            );
  489. #else
  490. #   define SKIP_CACHE(name, gb, num)
  491.         name##_cache0 <<= (num);
  492.         name##_cache0 |= NEG_USR32(name##_cache1,num);
  493.         name##_cache1 <<= (num);
  494. #endif
  495. #   define SKIP_COUNTER(name, gb, num)
  496.         name##_bit_count += (num);
  497. #   define SKIP_BITS(name, gb, num)
  498.         {
  499.             SKIP_CACHE(name, gb, num)
  500.             SKIP_COUNTER(name, gb, num)
  501.         }
  502. #   define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num)
  503. #   define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num)
  504. #   define SHOW_UBITS(name, gb, num)
  505.         NEG_USR32(name##_cache0, num)
  506. #   define SHOW_SBITS(name, gb, num)
  507.         NEG_SSR32(name##_cache0, num)
  508. #   define GET_CACHE(name, gb)
  509.         (name##_cache0)
  510. static inline int get_bits_count(GetBitContext *s){
  511.     return ((uint8_t*)s->buffer_ptr - s->buffer)*8 - 32 + s->bit_count;
  512. }
  513. static inline void skip_bits_long(GetBitContext *s, int n){
  514.     OPEN_READER(re, s)
  515.     re_bit_count += n;
  516.     re_buffer_ptr += re_bit_count>>5;
  517.     re_bit_count &= 31;
  518.     re_cache0 = be2me_32( re_buffer_ptr[-1] ) << re_bit_count;
  519.     re_cache1 = 0;
  520.     UPDATE_CACHE(re, s)
  521.     CLOSE_READER(re, s)
  522. }
  523. #endif
  524. /**
  525.  * read mpeg1 dc style vlc (sign bit + mantisse with no MSB).
  526.  * if MSB not set it is negative
  527.  * @param n length in bits
  528.  * @author BERO
  529.  */
  530. static inline int get_xbits(GetBitContext *s, int n){
  531.     register int sign;
  532.     register int32_t cache;
  533.     OPEN_READER(re, s)
  534.     UPDATE_CACHE(re, s)
  535.     cache = GET_CACHE(re,s);
  536.     sign=(~cache)>>31;
  537.     LAST_SKIP_BITS(re, s, n)
  538.     CLOSE_READER(re, s)
  539.     return (NEG_USR32(sign ^ cache, n) ^ sign) - sign;
  540. }
  541. static inline int get_sbits(GetBitContext *s, int n){
  542.     register int tmp;
  543.     OPEN_READER(re, s)
  544.     UPDATE_CACHE(re, s)
  545.     tmp= SHOW_SBITS(re, s, n);
  546.     LAST_SKIP_BITS(re, s, n)
  547.     CLOSE_READER(re, s)
  548.     return tmp;
  549. }
  550. /**
  551.  * reads 1-17 bits.
  552.  * Note, the alt bitstream reader can read up to 25 bits, but the libmpeg2 reader can't
  553.  */
  554. static inline unsigned int get_bits(GetBitContext *s, int n){
  555.     register int tmp;
  556.     OPEN_READER(re, s)
  557.     UPDATE_CACHE(re, s)
  558.     tmp= SHOW_UBITS(re, s, n);
  559.     LAST_SKIP_BITS(re, s, n)
  560.     CLOSE_READER(re, s)
  561.     return tmp;
  562. }
  563. /**
  564.  * shows 1-17 bits.
  565.  * Note, the alt bitstream reader can read up to 25 bits, but the libmpeg2 reader can't
  566.  */
  567. static inline unsigned int show_bits(GetBitContext *s, int n){
  568.     register int tmp;
  569.     OPEN_READER(re, s)
  570.     UPDATE_CACHE(re, s)
  571.     tmp= SHOW_UBITS(re, s, n);
  572. //    CLOSE_READER(re, s)
  573.     return tmp;
  574. }
  575. static inline void skip_bits(GetBitContext *s, int n){
  576.  //Note gcc seems to optimize this to s->index+=n for the ALT_READER :))
  577.     OPEN_READER(re, s)
  578.     UPDATE_CACHE(re, s)
  579.     LAST_SKIP_BITS(re, s, n)
  580.     CLOSE_READER(re, s)
  581. }
  582. static inline unsigned int get_bits1(GetBitContext *s){
  583. #ifdef ALT_BITSTREAM_READER
  584.     int index= s->index;
  585.     uint8_t result= s->buffer[ index>>3 ];
  586. #ifdef ALT_BITSTREAM_READER_LE
  587.     result>>= (index&0x07);
  588.     result&= 1;
  589. #else
  590.     result<<= (index&0x07);
  591.     result>>= 8 - 1;
  592. #endif
  593.     index++;
  594.     s->index= index;
  595.     return result;
  596. #else
  597.     return get_bits(s, 1);
  598. #endif
  599. }
  600. static inline unsigned int show_bits1(GetBitContext *s){
  601.     return show_bits(s, 1);
  602. }
  603. static inline void skip_bits1(GetBitContext *s){
  604.     skip_bits(s, 1);
  605. }
  606. /**
  607.  * reads 0-32 bits.
  608.  */
  609. static inline unsigned int get_bits_long(GetBitContext *s, int n){
  610.     if(n<=17) return get_bits(s, n);
  611.     else{
  612. #ifdef ALT_BITSTREAM_READER_LE
  613.         int ret= get_bits(s, 16);
  614.         return ret | (get_bits(s, n-16) << 16);
  615. #else
  616.         int ret= get_bits(s, 16) << (n-16);
  617.         return ret | get_bits(s, n-16);
  618. #endif
  619.     }
  620. }
  621. /**
  622.  * shows 0-32 bits.
  623.  */
  624. static inline unsigned int show_bits_long(GetBitContext *s, int n){
  625.     if(n<=17) return show_bits(s, n);
  626.     else{
  627.         GetBitContext gb= *s;
  628.         int ret= get_bits_long(s, n);
  629.         *s= gb;
  630.         return ret;
  631.     }
  632. }
  633. static inline int check_marker(GetBitContext *s, const char *msg)
  634. {
  635.     int bit= get_bits1(s);
  636.     if(!bit)
  637.         av_log(NULL, AV_LOG_INFO, "Marker bit missing %sn", msg);
  638.     return bit;
  639. }
  640. /**
  641.  * init GetBitContext.
  642.  * @param buffer bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE bytes larger then the actual read bits
  643.  * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end
  644.  * @param bit_size the size of the buffer in bits
  645.  */
  646. static inline void init_get_bits(GetBitContext *s,
  647.                    const uint8_t *buffer, int bit_size)
  648. {
  649.     int buffer_size= (bit_size+7)>>3;
  650.     if(buffer_size < 0 || bit_size < 0) {
  651.         buffer_size = bit_size = 0;
  652.         buffer = NULL;
  653.     }
  654.     s->buffer= buffer;
  655.     s->size_in_bits= bit_size;
  656.     s->buffer_end= buffer + buffer_size;
  657. #ifdef ALT_BITSTREAM_READER
  658.     s->index=0;
  659. #elif defined LIBMPEG2_BITSTREAM_READER
  660.     s->buffer_ptr = (uint8_t*)((intptr_t)buffer&(~1));
  661.     s->bit_count = 16 + 8*((intptr_t)buffer&1);
  662.     skip_bits_long(s, 0);
  663. #elif defined A32_BITSTREAM_READER
  664.     s->buffer_ptr = (uint32_t*)((intptr_t)buffer&(~3));
  665.     s->bit_count = 32 + 8*((intptr_t)buffer&3);
  666.     skip_bits_long(s, 0);
  667. #endif
  668. }
  669. static inline void align_get_bits(GetBitContext *s)
  670. {
  671.     int n= (-get_bits_count(s)) & 7;
  672.     if(n) skip_bits(s, n);
  673. }
  674. #define init_vlc(vlc, nb_bits, nb_codes,
  675.                  bits, bits_wrap, bits_size,
  676.                  codes, codes_wrap, codes_size,
  677.                  flags)
  678.         init_vlc_sparse(vlc, nb_bits, nb_codes,
  679.                  bits, bits_wrap, bits_size,
  680.                  codes, codes_wrap, codes_size,
  681.                  NULL, 0, 0, flags)
  682. int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes,
  683.              const void *bits, int bits_wrap, int bits_size,
  684.              const void *codes, int codes_wrap, int codes_size,
  685.              const void *symbols, int symbols_wrap, int symbols_size,
  686.              int flags);
  687. #define INIT_VLC_USE_STATIC 1 ///< VERY strongly deprecated and forbidden
  688. #define INIT_VLC_LE         2
  689. #define INIT_VLC_USE_NEW_STATIC 4
  690. void free_vlc(VLC *vlc);
  691. #define INIT_VLC_STATIC(vlc, bits, a,b,c,d,e,f,g, static_size)
  692. {
  693.     static VLC_TYPE table[static_size][2];
  694.     (vlc)->table= table;
  695.     (vlc)->table_allocated= static_size;
  696.     init_vlc(vlc, bits, a,b,c,d,e,f,g, INIT_VLC_USE_NEW_STATIC);
  697. }
  698. /**
  699.  *
  700.  * if the vlc code is invalid and max_depth=1 than no bits will be removed
  701.  * if the vlc code is invalid and max_depth>1 than the number of bits removed
  702.  * is undefined
  703.  */
  704. #define GET_VLC(code, name, gb, table, bits, max_depth)
  705. {
  706.     int n, index, nb_bits;
  707.     index= SHOW_UBITS(name, gb, bits);
  708.     code = table[index][0];
  709.     n    = table[index][1];
  710.     if(max_depth > 1 && n < 0){
  711.         LAST_SKIP_BITS(name, gb, bits)
  712.         UPDATE_CACHE(name, gb)
  713.         nb_bits = -n;
  714.         index= SHOW_UBITS(name, gb, nb_bits) + code;
  715.         code = table[index][0];
  716.         n    = table[index][1];
  717.         if(max_depth > 2 && n < 0){
  718.             LAST_SKIP_BITS(name, gb, nb_bits)
  719.             UPDATE_CACHE(name, gb)
  720.             nb_bits = -n;
  721.             index= SHOW_UBITS(name, gb, nb_bits) + code;
  722.             code = table[index][0];
  723.             n    = table[index][1];
  724.         }
  725.     }
  726.     SKIP_BITS(name, gb, n)
  727. }
  728. #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)
  729. {
  730.     int n, index, nb_bits;
  731.     index= SHOW_UBITS(name, gb, bits);
  732.     level = table[index].level;
  733.     n     = table[index].len;
  734.     if(max_depth > 1 && n < 0){
  735.         SKIP_BITS(name, gb, bits)
  736.         if(need_update){
  737.             UPDATE_CACHE(name, gb)
  738.         }
  739.         nb_bits = -n;
  740.         index= SHOW_UBITS(name, gb, nb_bits) + level;
  741.         level = table[index].level;
  742.         n     = table[index].len;
  743.     }
  744.     run= table[index].run;
  745.     SKIP_BITS(name, gb, n)
  746. }
  747. /**
  748.  * parses a vlc code, faster then get_vlc()
  749.  * @param bits is the number of bits which will be read at once, must be
  750.  *             identical to nb_bits in init_vlc()
  751.  * @param max_depth is the number of times bits bits must be read to completely
  752.  *                  read the longest vlc code
  753.  *                  = (max_vlc_length + bits - 1) / bits
  754.  */
  755. static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2],
  756.                                   int bits, int max_depth)
  757. {
  758.     int code;
  759.     OPEN_READER(re, s)
  760.     UPDATE_CACHE(re, s)
  761.     GET_VLC(code, re, s, table, bits, max_depth)
  762.     CLOSE_READER(re, s)
  763.     return code;
  764. }
  765. //#define TRACE
  766. #ifdef TRACE
  767. static inline void print_bin(int bits, int n){
  768.     int i;
  769.     for(i=n-1; i>=0; i--){
  770.         av_log(NULL, AV_LOG_DEBUG, "%d", (bits>>i)&1);
  771.     }
  772.     for(i=n; i<24; i++)
  773.         av_log(NULL, AV_LOG_DEBUG, " ");
  774. }
  775. static inline int get_bits_trace(GetBitContext *s, int n, char *file, const char *func, int line){
  776.     int r= get_bits(s, n);
  777.     print_bin(r, n);
  778.     av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d bit @%5d in %s %s:%dn", r, n, r, get_bits_count(s)-n, file, func, line);
  779.     return r;
  780. }
  781. static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], int bits, int max_depth, char *file, const char *func, int line){
  782.     int show= show_bits(s, 24);
  783.     int pos= get_bits_count(s);
  784.     int r= get_vlc2(s, table, bits, max_depth);
  785.     int len= get_bits_count(s) - pos;
  786.     int bits2= show>>(24-len);
  787.     print_bin(bits2, len);
  788.     av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d vlc @%5d in %s %s:%dn", bits2, len, r, pos, file, func, line);
  789.     return r;
  790. }
  791. static inline int get_xbits_trace(GetBitContext *s, int n, char *file, const char *func, int line){
  792.     int show= show_bits(s, n);
  793.     int r= get_xbits(s, n);
  794.     print_bin(show, n);
  795.     av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d xbt @%5d in %s %s:%dn", show, n, r, get_bits_count(s)-n, file, func, line);
  796.     return r;
  797. }
  798. //#define get_bits(s, n)  get_bits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  799. //#define get_bits1(s)    get_bits_trace(s, 1, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  800. //#define get_xbits(s, n) get_xbits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  801. //#define get_vlc(s, vlc)            get_vlc_trace(s, (vlc)->table, (vlc)->bits, 3, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  802. //#define get_vlc2(s, tab, bits, max) get_vlc_trace(s, tab, bits, max, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  803. #define __PRETTY_FUNCTION__ "TEST_FUNCTION_NAME"
  804. #define get_bits(s, n)  get_bits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  805. #define get_bits1(s)    get_bits_trace(s, 1, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  806. #define get_xbits(s, n) get_xbits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  807. #define get_vlc(s, vlc)            get_vlc_trace(s, (vlc)->table, (vlc)->bits, 3, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  808. #define get_vlc2(s, tab, bits, max) get_vlc_trace(s, tab, bits, max, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  809. //#define tprintf(p, ...) av_log(p, AV_LOG_DEBUG, __VA_ARGS__)
  810. static void tprintf(void *p,const char *fmt, ...)
  811. {
  812. char buf[250];
  813. va_list maker;
  814. va_start(maker,fmt);
  815. sprintf(buf, fmt,maker);
  816. // va_end(maker);
  817. av_vlog(p,AV_LOG_DEBUG,fmt, maker);
  818. va_end(maker);
  819. }
  820. #else //TRACE
  821. //#define tprintf(p, ...) {}
  822. #define tprintf() 
  823. #endif
  824. static inline int decode012(GetBitContext *gb){
  825.     int n;
  826.     n = get_bits1(gb);
  827.     if (n == 0)
  828.         return 0;
  829.     else
  830.         return get_bits1(gb) + 1;
  831. }
  832. static inline int decode210(GetBitContext *gb){
  833.     if (get_bits1(gb))
  834.         return 0;
  835.     else
  836.         return 2 - get_bits1(gb);
  837. }
  838. #endif /* FFMPEG_BITSTREAM_H */