common.h
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:33k
源码类别:

Audio

开发平台:

Visual C++

  1. /**
  2.  * @file common.h
  3.  * common internal api header.
  4.  */
  5. #ifndef COMMON_H
  6. #define COMMON_H
  7. #if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
  8. #    define CONFIG_WIN32
  9. #endif
  10. //#define ALT_BITSTREAM_WRITER
  11. //#define ALIGNED_BITSTREAM_WRITER
  12. #define ALT_BITSTREAM_READER
  13. //#define LIBMPEG2_BITSTREAM_READER
  14. //#define A32_BITSTREAM_READER
  15. #define LIBMPEG2_BITSTREAM_READER_HACK //add BERO
  16. #ifndef M_PI
  17. #define M_PI    3.14159265358979323846
  18. #endif
  19. #ifdef HAVE_AV_CONFIG_H
  20. /* only include the following when compiling package */
  21. #    include "config.h"
  22. #    include <stdlib.h>
  23. #    include <stdio.h>
  24. #    include <string.h>
  25. #    include <ctype.h>
  26. #    include <limits.h>
  27. #    ifndef __BEOS__
  28. #        include <errno.h>
  29. #    else
  30. #        include "berrno.h"
  31. #    endif
  32. #    include <math.h>
  33. #    ifndef ENODATA
  34. #        define ENODATA  61
  35. #    endif
  36. #include <stddef.h>
  37. #ifndef offsetof
  38. # define offsetof(T,F) ((unsigned int)((char *)&((T *)0)->F))
  39. #endif
  40. #define AVOPTION_CODEC_BOOL(name, help, field) 
  41.     { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_BOOL }
  42. #define AVOPTION_CODEC_DOUBLE(name, help, field, minv, maxv, defval) 
  43.     { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_DOUBLE, minv, maxv, defval }
  44. #define AVOPTION_CODEC_FLAG(name, help, field, flag, defval) 
  45.     { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_FLAG, flag, 0, defval }
  46. #define AVOPTION_CODEC_INT(name, help, field, minv, maxv, defval) 
  47.     { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_INT, minv, maxv, defval }
  48. #define AVOPTION_CODEC_STRING(name, help, field, str, val) 
  49.     { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_STRING, .defval = val, .defstr = str }
  50. #define AVOPTION_CODEC_RCOVERRIDE(name, help, field) 
  51.     { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_RCOVERRIDE, .defval = 0, .defstr = NULL }
  52. #define AVOPTION_SUB(ptr) { .name = NULL, .help = (const char*)ptr }
  53. #define AVOPTION_END() AVOPTION_SUB(NULL)
  54. struct AVOption;
  55. #ifdef HAVE_MMX
  56. extern const struct AVOption avoptions_common[3 + 5];
  57. #else
  58. extern const struct AVOption avoptions_common[3];
  59. #endif
  60. extern const struct AVOption avoptions_workaround_bug[11];
  61. #endif /* HAVE_AV_CONFIG_H */
  62. /* Suppress restrict if it was not defined in config.h.  */
  63. #ifndef restrict
  64. #    define restrict
  65. #endif
  66. #ifndef always_inline
  67. #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
  68. #    define always_inline __attribute__((always_inline)) inline
  69. #else
  70. #    define always_inline inline
  71. #endif
  72. #endif
  73. #ifndef attribute_used
  74. #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
  75. #    define attribute_used __attribute__((used))
  76. #else
  77. #    define attribute_used
  78. #endif
  79. #endif
  80. #ifndef EMULATE_INTTYPES
  81. //#   include <inttypes.h>
  82. #   include "inttypes.h"
  83. #else
  84.     typedef signed char  int8_t;
  85.     typedef signed short int16_t;
  86.     typedef signed int   int32_t;
  87.     typedef unsigned char  uint8_t;
  88.     typedef unsigned short uint16_t;
  89.     typedef unsigned int   uint32_t;
  90. #   ifdef CONFIG_WIN32
  91.         typedef signed __int64   int64_t;
  92.         typedef unsigned __int64 uint64_t;
  93. #   else /* other OS */
  94.         typedef signed long long   int64_t;
  95.         typedef unsigned long long uint64_t;
  96. #   endif /* other OS */
  97. #endif /* HAVE_INTTYPES_H */
  98. /* buf and buf_end must be present and used by every alternative writer. */
  99. //typedef struct PutBitContext {
  100. //#ifdef ALT_BITSTREAM_WRITER
  101. //    uint8_t *buf, *buf_end;
  102. //    int index;
  103. //#else
  104. //    uint32_t bit_buf;
  105. //    int bit_left;
  106. //    uint8_t *buf, *buf_ptr, *buf_end;
  107. //#endif
  108. //} PutBitContext;
  109. #ifndef INT64_MAX
  110. #define INT64_MAX int64_t_C(9223372036854775807)
  111. #endif
  112. #ifndef UINT64_MAX
  113. #define UINT64_MAX uint64_t_C(0xFFFFFFFFFFFFFFFF)
  114. #endif
  115. #ifdef EMULATE_FAST_INT
  116. /* note that we don't emulate 64bit ints */
  117. typedef signed char int_fast8_t;
  118. typedef signed int  int_fast16_t;
  119. typedef signed int  int_fast32_t;
  120. typedef unsigned char uint_fast8_t;
  121. typedef unsigned int  uint_fast16_t;
  122. typedef unsigned int  uint_fast32_t;
  123. #endif
  124. #ifndef INT_BIT
  125. #    if INT_MAX != 2147483647
  126. #        define INT_BIT 64
  127. #    else
  128. #        define INT_BIT 32
  129. #    endif
  130. #endif
  131. #if defined(CONFIG_OS2) || defined(CONFIG_SUNOS)
  132. static inline float floorf(float f) { 
  133.     return floor(f); 
  134. }
  135. #endif
  136. #ifdef CONFIG_WIN32
  137. /* windows */
  138. #    if !defined(__MINGW32__) && !defined(__CYGWIN__)
  139. #        define int64_t_C(c)     (c ## i64)
  140. #        define uint64_t_C(c)    (c ## i64)
  141. #    ifdef HAVE_AV_CONFIG_H
  142. #            define inline __inline
  143. #    endif
  144. #    else
  145. #        define int64_t_C(c)     (c ## LL)
  146. #        define uint64_t_C(c)    (c ## ULL)
  147. #    endif /* __MINGW32__ */
  148. #    ifdef HAVE_AV_CONFIG_H
  149. #        ifdef _DEBUG
  150. #            define DEBUG
  151. #        endif
  152. #        define snprintf _snprintf
  153. #        define vsnprintf _vsnprintf
  154. #    endif
  155. /* CONFIG_WIN32 end */
  156. #elif defined (CONFIG_OS2)
  157. /* OS/2 EMX */
  158. #ifndef int64_t_C
  159. #define int64_t_C(c)     (c ## LL)
  160. #define uint64_t_C(c)    (c ## ULL)
  161. #endif
  162. #ifdef HAVE_AV_CONFIG_H
  163. #ifdef USE_FASTMEMCPY
  164. #include "fastmemcpy.h"
  165. #endif
  166. #include <float.h>
  167. #endif /* HAVE_AV_CONFIG_H */
  168. /* CONFIG_OS2 end */
  169. #else
  170. /* unix */
  171. #ifndef int64_t_C
  172. #define int64_t_C(c)     (c ## LL)
  173. #define uint64_t_C(c)    (c ## ULL)
  174. #endif
  175. #ifdef HAVE_AV_CONFIG_H
  176. #        ifdef USE_FASTMEMCPY
  177. #            include "fastmemcpy.h"
  178. #        endif
  179. #    endif /* HAVE_AV_CONFIG_H */
  180. #endif /* !CONFIG_WIN32 && !CONFIG_OS2 */
  181. #ifdef HAVE_AV_CONFIG_H
  182. #    include "bswap.h"
  183. #    if defined(__MINGW32__) || defined(__CYGWIN__) || 
  184.         defined(__OS2__) || (defined (__OpenBSD__) && !defined(__ELF__))
  185. #        define MANGLE(a) "_" #a
  186. #    else
  187. #        define MANGLE(a) #a
  188. #    endif
  189. /* debug stuff */
  190. //DS by ty for comp. release on 20060516
  191. //#    ifndef DEBUG
  192. //#        define NDEBUG
  193. //#    endif
  194. //DE by ty for comp. release on 20060516
  195. #    include <assert.h>
  196. /* dprintf macros */
  197. #    if defined(CONFIG_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
  198. inline void dprintf(const char* fmt,...) {}
  199. #    else
  200. #        ifdef DEBUG
  201. #            define dprintf(fmt,...) av_log(NULL, AV_LOG_DEBUG, fmt, __VA_ARGS__)
  202. #        else
  203. #            define dprintf(fmt,...)
  204. #        endif
  205. #    endif /* !CONFIG_WIN32 */
  206. #    define av_abort()      do { av_log(NULL, AV_LOG_ERROR, "Abort at %s:%dn", __FILE__, __LINE__); abort(); } while (0)
  207. //rounded divison & shift
  208. #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
  209. /* assume b>0 */
  210. #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
  211. #define ABS(a) ((a) >= 0 ? (a) : (-(a)))
  212. #define FFMAX(a,b) ((a) > (b) ? (a) : (b))
  213. #define FFMIN(a,b) ((a) > (b) ? (b) : (a))
  214. extern const uint32_t inverse[256];
  215. #ifdef ARCH_X86
  216. #    define FASTDIV(a,b) 
  217.     ({
  218.         int ret,dmy;
  219.         asm volatile(
  220.             "mull %3"
  221.             :"=d"(ret),"=a"(dmy)
  222.             :"1"(a),"g"(inverse[b])
  223.             );
  224.         ret;
  225.     })
  226. #elif defined(CONFIG_FASTDIV)
  227. #    define FASTDIV(a,b)   ((uint32_t)((((uint64_t)a)*inverse[b])>>32))
  228. #else
  229. #    define FASTDIV(a,b)   ((a)/(b))
  230. #endif
  231.  
  232. #ifdef ARCH_X86
  233. // avoid +32 for shift optimization (gcc should do that ...)
  234. static inline  int32_t NEG_SSR32( int32_t a, int8_t s){
  235.     asm ("sarl %1, %0nt"
  236.          : "+r" (a)
  237.          : "ic" ((uint8_t)(-s))
  238.     );
  239.     return a;
  240. }
  241. static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
  242.     asm ("shrl %1, %0nt"
  243.          : "+r" (a)
  244.          : "ic" ((uint8_t)(-s))
  245.     );
  246.     return a;
  247. }
  248. #else
  249. #    define NEG_SSR32(a,s) ((( int32_t)(a))>>(32-(s)))
  250. #    define NEG_USR32(a,s) (((uint32_t)(a))>>(32-(s)))
  251. #endif
  252. /* bit output */
  253. /* buf and buf_end must be present and used by every alternative writer. */
  254. typedef struct PutBitContext {
  255. #ifdef ALT_BITSTREAM_WRITER
  256.     uint8_t *buf, *buf_end;
  257.     int index;
  258. #else
  259.     uint32_t bit_buf;
  260.     int bit_left;
  261.     uint8_t *buf, *buf_ptr, *buf_end;
  262. #endif
  263. } PutBitContext;
  264. static inline void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
  265. {
  266.     s->buf = buffer;
  267.     s->buf_end = s->buf + buffer_size;
  268. #ifdef ALT_BITSTREAM_WRITER
  269.     s->index=0;
  270.     ((uint32_t*)(s->buf))[0]=0;
  271. //    memset(buffer, 0, buffer_size);
  272. #else
  273.     s->buf_ptr = s->buf;
  274.     s->bit_left=32;
  275.     s->bit_buf=0;
  276. #endif
  277. }
  278. /* return the number of bits output */
  279. static inline int put_bits_count(PutBitContext *s)
  280. {
  281. #ifdef ALT_BITSTREAM_WRITER
  282.     return s->index;
  283. #else
  284.     return (s->buf_ptr - s->buf) * 8 + 32 - s->bit_left;
  285. #endif
  286. }
  287. /* pad the end of the output stream with zeros */
  288. static inline void flush_put_bits(PutBitContext *s)
  289. {
  290. #ifdef ALT_BITSTREAM_WRITER
  291.     align_put_bits(s);
  292. #else
  293.     s->bit_buf<<= s->bit_left;
  294.     while (s->bit_left < 32) {
  295.         /* XXX: should test end of buffer */
  296.         *s->buf_ptr++=s->bit_buf >> 24;
  297.         s->bit_buf<<=8;
  298.         s->bit_left+=8;
  299.     }
  300.     s->bit_left=32;
  301.     s->bit_buf=0;
  302. #endif
  303. }
  304. void align_put_bits(PutBitContext *s);
  305. void put_string(PutBitContext * pbc, char *s, int put_zero);
  306. /* bit input */
  307. /* buffer, buffer_end and size_in_bits must be present and used by every reader */
  308. typedef struct GetBitContext {
  309.     const uint8_t *buffer, *buffer_end;
  310. #ifdef ALT_BITSTREAM_READER
  311.     int index;
  312. #elif defined LIBMPEG2_BITSTREAM_READER
  313.     uint8_t *buffer_ptr;
  314.     uint32_t cache;
  315.     int bit_count;
  316. #elif defined A32_BITSTREAM_READER
  317.     uint32_t *buffer_ptr;
  318.     uint32_t cache0;
  319.     uint32_t cache1;
  320.     int bit_count;
  321. #endif
  322.     int size_in_bits;
  323. } GetBitContext;
  324. #define VLC_TYPE int16_t
  325. typedef struct VLC {
  326.     int bits;
  327.     VLC_TYPE (*table)[2]; ///< code, bits
  328.     int table_size, table_allocated;
  329. } VLC;
  330. typedef struct RL_VLC_ELEM {
  331.     int16_t level;
  332.     int8_t len;
  333.     uint8_t run;
  334. } RL_VLC_ELEM;
  335. #ifdef ARCH_SPARC
  336. #define UNALIGNED_STORES_ARE_BAD
  337. #endif
  338. /* used to avoid missaligned exceptions on some archs (alpha, ...) */
  339. #ifdef ARCH_X86
  340. #    define unaligned32(a) (*(uint32_t*)(a))
  341. #else
  342. #    ifdef __GNUC__
  343. static inline uint32_t unaligned32(const void *v) {
  344.     struct Unaligned {
  345. uint32_t i;
  346.     } __attribute__((packed));
  347.     return ((const struct Unaligned *) v)->i;
  348. }
  349. #    elif defined(__DECC)
  350. static inline uint32_t unaligned32(const void *v) {
  351.     return *(const __unaligned uint32_t *) v;
  352. }
  353. #    else
  354. static inline uint32_t unaligned32(const void *v) {
  355.     return *(const uint32_t *) v;
  356. }
  357. #    endif
  358. #endif //!ARCH_X86
  359. #ifndef ALT_BITSTREAM_WRITER
  360. static inline void put_bits(PutBitContext *s, int n, unsigned int value)
  361. {
  362.     unsigned int bit_buf;
  363.     int bit_left;
  364. #ifdef STATS
  365.     st_out_bit_counts[st_current_index] += n;
  366. #endif
  367.     //    printf("put_bits=%d %xn", n, value);
  368.     assert(n == 32 || value < (1U << n));
  369.     
  370.     bit_buf = s->bit_buf;
  371.     bit_left = s->bit_left;
  372.     //    printf("n=%d value=%x cnt=%d buf=%xn", n, value, bit_cnt, bit_buf);
  373.     /* XXX: optimize */
  374.     if (n < bit_left) {
  375.         bit_buf = (bit_buf<<n) | value;
  376.         bit_left-=n;
  377.     } else {
  378. bit_buf<<=bit_left;
  379.         bit_buf |= value >> (n - bit_left);
  380. #ifdef UNALIGNED_STORES_ARE_BAD
  381.         if (3 & (intptr_t) s->buf_ptr) {
  382.             s->buf_ptr[0] = bit_buf >> 24;
  383.             s->buf_ptr[1] = bit_buf >> 16;
  384.             s->buf_ptr[2] = bit_buf >>  8;
  385.             s->buf_ptr[3] = bit_buf      ;
  386.         } else
  387. #endif
  388.         *(uint32_t *)s->buf_ptr = be2me_32(bit_buf);
  389.         //printf("bitbuf = %08xn", bit_buf);
  390.         s->buf_ptr+=4;
  391. bit_left+=32 - n;
  392.         bit_buf = value;
  393.     }
  394.     s->bit_buf = bit_buf;
  395.     s->bit_left = bit_left;
  396. }
  397. #endif
  398. #ifdef ALT_BITSTREAM_WRITER
  399. static inline void put_bits(PutBitContext *s, int n, unsigned int value)
  400. {
  401. #    ifdef ALIGNED_BITSTREAM_WRITER
  402. #        ifdef ARCH_X86
  403.     asm volatile(
  404. "movl %0, %%ecx nt"
  405. "xorl %%eax, %%eax nt"
  406. "shrdl %%cl, %1, %%eax nt"
  407. "shrl %%cl, %1 nt"
  408. "movl %0, %%ecx nt"
  409. "shrl $3, %%ecx nt"
  410. "andl $0xFFFFFFFC, %%ecx nt"
  411. "bswapl %1 nt"
  412. "orl %1, (%2, %%ecx) nt"
  413. "bswapl %%eax nt"
  414. "addl %3, %0 nt"
  415. "movl %%eax, 4(%2, %%ecx) nt"
  416. : "=&r" (s->index), "=&r" (value)
  417. : "r" (s->buf), "r" (n), "0" (s->index), "1" (value<<(-n))
  418. : "%eax", "%ecx"
  419.     );
  420. #        else
  421.     int index= s->index;
  422.     uint32_t *ptr= ((uint32_t *)s->buf)+(index>>5);
  423.     
  424.     value<<= 32-n; 
  425.     
  426.     ptr[0] |= be2me_32(value>>(index&31));
  427.     ptr[1]  = be2me_32(value<<(32-(index&31)));
  428. //if(n>24) printf("%d %dn", n, value);
  429.     index+= n;
  430.     s->index= index;
  431. #        endif
  432. #    else //ALIGNED_BITSTREAM_WRITER
  433. #        ifdef ARCH_X86
  434.     asm volatile(
  435. "movl $7, %%ecx nt"
  436. "andl %0, %%ecx nt"
  437. "addl %3, %%ecx nt"
  438. "negl %%ecx nt"
  439. "shll %%cl, %1 nt"
  440. "bswapl %1 nt"
  441. "movl %0, %%ecx nt"
  442. "shrl $3, %%ecx nt"
  443. "orl %1, (%%ecx, %2) nt"
  444. "addl %3, %0 nt"
  445. "movl $0, 4(%%ecx, %2) nt"
  446. : "=&r" (s->index), "=&r" (value)
  447. : "r" (s->buf), "r" (n), "0" (s->index), "1" (value)
  448. : "%ecx"
  449.     );
  450. #        else
  451.     int index= s->index;
  452.     uint32_t *ptr= (uint32_t*)(((uint8_t *)s->buf)+(index>>3));
  453.     
  454.     ptr[0] |= be2me_32(value<<(32-n-(index&7) ));
  455.     ptr[1] = 0;
  456. //if(n>24) printf("%d %dn", n, value);
  457.     index+= n;
  458.     s->index= index;
  459. #        endif
  460. #    endif //!ALIGNED_BITSTREAM_WRITER
  461. }
  462. #endif
  463. static inline uint8_t* pbBufPtr(PutBitContext *s)
  464. {
  465. #ifdef ALT_BITSTREAM_WRITER
  466. return s->buf + (s->index>>3);
  467. #else
  468. return s->buf_ptr;
  469. #endif
  470. }
  471. /**
  472.  *
  473.  * PutBitContext must be flushed & aligned to a byte boundary before calling this.
  474.  */
  475. static inline void skip_put_bytes(PutBitContext *s, int n){
  476.         assert((put_bits_count(s)&7)==0);
  477. #ifdef ALT_BITSTREAM_WRITER
  478.         FIXME may need some cleaning of the buffer
  479. s->index += n<<3;
  480. #else
  481.         assert(s->bit_left==32);
  482. s->buf_ptr += n;
  483. #endif    
  484. }
  485. /**
  486.  * Changes the end of the buffer.
  487.  */
  488. static inline void set_put_bits_buffer_size(PutBitContext *s, int size){
  489.     s->buf_end= s->buf + size;
  490. }
  491. /* Bitstream reader API docs:
  492. name
  493.     abritary name which is used as prefix for the internal variables
  494. gb
  495.     getbitcontext
  496. OPEN_READER(name, gb)
  497.     loads gb into local variables
  498. CLOSE_READER(name, gb)
  499.     stores local vars in gb
  500. UPDATE_CACHE(name, gb)
  501.     refills the internal cache from the bitstream
  502.     after this call at least MIN_CACHE_BITS will be available,
  503. GET_CACHE(name, gb)
  504.     will output the contents of the internal cache, next bit is MSB of 32 or 64 bit (FIXME 64bit)
  505. SHOW_UBITS(name, gb, num)
  506.     will return the nest num bits
  507. SHOW_SBITS(name, gb, num)
  508.     will return the nest num bits and do sign extension
  509. SKIP_BITS(name, gb, num)
  510.     will skip over the next num bits
  511.     note, this is equinvalent to SKIP_CACHE; SKIP_COUNTER
  512. SKIP_CACHE(name, gb, num)
  513.     will remove the next num bits from the cache (note SKIP_COUNTER MUST be called before UPDATE_CACHE / CLOSE_READER)
  514. SKIP_COUNTER(name, gb, num)
  515.     will increment the internal bit counter (see SKIP_CACHE & SKIP_BITS)
  516. LAST_SKIP_CACHE(name, gb, num)
  517.     will remove the next num bits from the cache if it is needed for UPDATE_CACHE otherwise it will do nothing
  518. LAST_SKIP_BITS(name, gb, num)
  519.     is equinvalent to SKIP_LAST_CACHE; SKIP_COUNTER
  520. for examples see get_bits, show_bits, skip_bits, get_vlc
  521. */
  522. static inline int unaligned32_be(const void *v)
  523. {
  524. #ifdef CONFIG_ALIGN
  525. const uint8_t *p=v;
  526. return (((p[0]<<8) | p[1])<<16) | (p[2]<<8) | (p[3]);
  527. #else
  528. return be2me_32( unaligned32(v)); //original
  529. #endif
  530. }
  531. #ifdef ALT_BITSTREAM_READER
  532. #   define MIN_CACHE_BITS 25
  533. #   define OPEN_READER(name, gb)
  534.         int name##_index= (gb)->index;
  535.         int name##_cache= 0;
  536. #   define CLOSE_READER(name, gb)
  537.         (gb)->index= name##_index;
  538. #   define UPDATE_CACHE(name, gb)
  539.         name##_cache= unaligned32_be( ((uint8_t *)(gb)->buffer)+(name##_index>>3) ) << (name##_index&0x07);
  540. #   define SKIP_CACHE(name, gb, num)
  541.         name##_cache <<= (num);
  542. // FIXME name?
  543. #   define SKIP_COUNTER(name, gb, num)
  544.         name##_index += (num);
  545. #   define SKIP_BITS(name, gb, num)
  546.         {
  547.             SKIP_CACHE(name, gb, num)
  548.             SKIP_COUNTER(name, gb, num)
  549.         }
  550. #   define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num)
  551. #   define LAST_SKIP_CACHE(name, gb, num) ;
  552. #   define SHOW_UBITS(name, gb, num)
  553.         NEG_USR32(name##_cache, num)
  554. #   define SHOW_SBITS(name, gb, num)
  555.         NEG_SSR32(name##_cache, num)
  556. #   define GET_CACHE(name, gb)
  557.         ((uint32_t)name##_cache)
  558. static inline int get_bits_count(GetBitContext *s){
  559.     return s->index;
  560. }
  561. #elif defined LIBMPEG2_BITSTREAM_READER
  562. //libmpeg2 like reader
  563. #   define MIN_CACHE_BITS 17
  564. #   define OPEN_READER(name, gb)
  565.         int name##_bit_count=(gb)->bit_count;
  566.         int name##_cache= (gb)->cache;
  567.         uint8_t * name##_buffer_ptr=(gb)->buffer_ptr;
  568. #   define CLOSE_READER(name, gb)
  569.         (gb)->bit_count= name##_bit_count;
  570.         (gb)->cache= name##_cache;
  571.         (gb)->buffer_ptr= name##_buffer_ptr;
  572. #ifdef LIBMPEG2_BITSTREAM_READER_HACK
  573. #   define UPDATE_CACHE(name, gb)
  574.     if(name##_bit_count >= 0){
  575.         name##_cache+= (int)be2me_16(*(uint16_t*)name##_buffer_ptr) << name##_bit_count;
  576.         ((uint16_t*)name##_buffer_ptr)++;
  577.         name##_bit_count-= 16;
  578.     }
  579. #else
  580. #   define UPDATE_CACHE(name, gb)
  581.     if(name##_bit_count >= 0){
  582.         name##_cache+= ((name##_buffer_ptr[0]<<8) + name##_buffer_ptr[1]) << name##_bit_count;
  583.         name##_buffer_ptr+=2;
  584.         name##_bit_count-= 16;
  585.     }
  586. #endif
  587. #   define SKIP_CACHE(name, gb, num)
  588.         name##_cache <<= (num);
  589. #   define SKIP_COUNTER(name, gb, num)
  590.         name##_bit_count += (num);
  591. #   define SKIP_BITS(name, gb, num)
  592.         {
  593.             SKIP_CACHE(name, gb, num)
  594.             SKIP_COUNTER(name, gb, num)
  595.         }
  596. #   define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num)
  597. #   define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num)
  598. #   define SHOW_UBITS(name, gb, num)
  599.         NEG_USR32(name##_cache, num)
  600. #   define SHOW_SBITS(name, gb, num)
  601.         NEG_SSR32(name##_cache, num)
  602. #   define GET_CACHE(name, gb)
  603.         ((uint32_t)name##_cache)
  604. static inline int get_bits_count(GetBitContext *s){
  605.     return (s->buffer_ptr - s->buffer)*8 - 16 + s->bit_count;
  606. }
  607. #elif defined A32_BITSTREAM_READER
  608. #   define MIN_CACHE_BITS 32
  609. #   define OPEN_READER(name, gb)
  610.         int name##_bit_count=(gb)->bit_count;
  611.         uint32_t name##_cache0= (gb)->cache0;
  612.         uint32_t name##_cache1= (gb)->cache1;
  613.         uint32_t * name##_buffer_ptr=(gb)->buffer_ptr;
  614. #   define CLOSE_READER(name, gb)
  615.         (gb)->bit_count= name##_bit_count;
  616.         (gb)->cache0= name##_cache0;
  617.         (gb)->cache1= name##_cache1;
  618.         (gb)->buffer_ptr= name##_buffer_ptr;
  619. #   define UPDATE_CACHE(name, gb)
  620.     if(name##_bit_count > 0){
  621.         const uint32_t next= be2me_32( *name##_buffer_ptr );
  622.         name##_cache0 |= NEG_USR32(next,name##_bit_count);
  623.         name##_cache1 |= next<<name##_bit_count;
  624.         name##_buffer_ptr++;
  625.         name##_bit_count-= 32;
  626.     }
  627. #ifdef ARCH_X86
  628. #   define SKIP_CACHE(name, gb, num)
  629.         asm(
  630.             "shldl %2, %1, %0 nt"
  631.             "shll %2, %1 nt"
  632.             : "+r" (name##_cache0), "+r" (name##_cache1)
  633.             : "Ic" ((uint8_t)num)
  634.            );
  635. #else
  636. #   define SKIP_CACHE(name, gb, num)
  637.         name##_cache0 <<= (num);
  638.         name##_cache0 |= NEG_USR32(name##_cache1,num);
  639.         name##_cache1 <<= (num);
  640. #endif
  641. #   define SKIP_COUNTER(name, gb, num)
  642.         name##_bit_count += (num);
  643. #   define SKIP_BITS(name, gb, num)
  644.         {
  645.             SKIP_CACHE(name, gb, num)
  646.             SKIP_COUNTER(name, gb, num)
  647.         }
  648. #   define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num)
  649. #   define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num)
  650. #   define SHOW_UBITS(name, gb, num)
  651.         NEG_USR32(name##_cache0, num)
  652. #   define SHOW_SBITS(name, gb, num)
  653.         NEG_SSR32(name##_cache0, num)
  654. #   define GET_CACHE(name, gb)
  655.         (name##_cache0)
  656. static inline int get_bits_count(GetBitContext *s){
  657.     return ((uint8_t*)s->buffer_ptr - s->buffer)*8 - 32 + s->bit_count;
  658. }
  659. #endif
  660. /**
  661.  * read mpeg1 dc style vlc (sign bit + mantisse with no MSB).
  662.  * if MSB not set it is negative 
  663.  * @param n length in bits
  664.  * @author BERO  
  665.  */
  666. static inline int get_xbits(GetBitContext *s, int n){
  667.     register int tmp;
  668.     register int32_t cache;
  669.     OPEN_READER(re, s)
  670.     UPDATE_CACHE(re, s)
  671.     cache = GET_CACHE(re,s);
  672.     if ((int32_t)cache<0) { //MSB=1
  673.         tmp = NEG_USR32(cache,n);
  674.     } else {
  675.     //   tmp = (-1<<n) | NEG_USR32(cache,n) + 1; mpeg12.c algo
  676.     //   tmp = - (NEG_USR32(cache,n) ^ ((1 << n) - 1)); h263.c algo
  677.         tmp = - NEG_USR32(~cache,n);
  678.     }
  679.     LAST_SKIP_BITS(re, s, n)
  680.     CLOSE_READER(re, s)
  681.     return tmp;
  682. }
  683. static inline int get_sbits(GetBitContext *s, int n){
  684.     register int tmp;
  685.     OPEN_READER(re, s)
  686.     UPDATE_CACHE(re, s)
  687.     tmp= SHOW_SBITS(re, s, n);
  688.     LAST_SKIP_BITS(re, s, n)
  689.     CLOSE_READER(re, s)
  690.     return tmp;
  691. }
  692. /**
  693.  * reads 0-17 bits.
  694.  * Note, the alt bitstream reader can read upto 25 bits, but the libmpeg2 reader cant
  695.  */
  696. static inline unsigned int get_bits(GetBitContext *s, int n){
  697.     register int tmp;
  698.     OPEN_READER(re, s)
  699.     UPDATE_CACHE(re, s)
  700.     tmp= SHOW_UBITS(re, s, n);
  701.     LAST_SKIP_BITS(re, s, n)
  702.     CLOSE_READER(re, s)
  703.     return tmp;
  704. }
  705. unsigned int get_bits_long(GetBitContext *s, int n);
  706. /**
  707.  * shows 0-17 bits.
  708.  * Note, the alt bitstream reader can read upto 25 bits, but the libmpeg2 reader cant
  709.  */
  710. static inline unsigned int show_bits(GetBitContext *s, int n){
  711.     register int tmp;
  712.     OPEN_READER(re, s)
  713.     UPDATE_CACHE(re, s)
  714.     tmp= SHOW_UBITS(re, s, n);
  715. //    CLOSE_READER(re, s)
  716.     return tmp;
  717. }
  718. unsigned int show_bits_long(GetBitContext *s, int n);
  719. static inline void skip_bits(GetBitContext *s, int n){
  720.  //Note gcc seems to optimize this to s->index+=n for the ALT_READER :))
  721.     OPEN_READER(re, s)
  722.     UPDATE_CACHE(re, s)
  723.     LAST_SKIP_BITS(re, s, n)
  724.     CLOSE_READER(re, s)
  725. }
  726. static inline unsigned int get_bits1(GetBitContext *s){
  727. #ifdef ALT_BITSTREAM_READER
  728.     int index= s->index;
  729.     uint8_t result= s->buffer[ index>>3 ];
  730.     result<<= (index&0x07);
  731.     result>>= 8 - 1;
  732.     index++;
  733.     s->index= index;
  734.     return result;
  735. #else
  736.     return get_bits(s, 1);
  737. #endif
  738. }
  739. static inline unsigned int show_bits1(GetBitContext *s){
  740.     return show_bits(s, 1);
  741. }
  742. static inline void skip_bits1(GetBitContext *s){
  743.     skip_bits(s, 1);
  744. }
  745. /**
  746.  * init GetBitContext.
  747.  * @param buffer bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE bytes larger then the actual read bits
  748.  * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end
  749.  * @param bit_size the size of the buffer in bits
  750.  */
  751. static inline void init_get_bits(GetBitContext *s,
  752.                    const uint8_t *buffer, int bit_size)
  753. {
  754.     const int buffer_size= (bit_size+7)>>3;
  755.     s->buffer= buffer;
  756.     s->size_in_bits= bit_size;
  757.     s->buffer_end= buffer + buffer_size;
  758. #ifdef ALT_BITSTREAM_READER
  759.     s->index=0;
  760. #elif defined LIBMPEG2_BITSTREAM_READER
  761. #ifdef LIBMPEG2_BITSTREAM_READER_HACK
  762.   if ((int)buffer&1) {
  763.      /* word alignment */
  764.     s->cache = (*buffer++)<<24;
  765.     s->buffer_ptr = buffer;
  766.     s->bit_count = 16-8;
  767.   } else
  768. #endif
  769.   {
  770.     s->buffer_ptr = buffer;
  771.     s->bit_count = 16;
  772.     s->cache = 0;
  773.   }
  774. #elif defined A32_BITSTREAM_READER
  775.     s->buffer_ptr = (uint32_t*)buffer;
  776.     s->bit_count = 32;
  777.     s->cache0 = 0;
  778.     s->cache1 = 0;
  779. #endif
  780.     {
  781.         OPEN_READER(re, s)
  782.         UPDATE_CACHE(re, s)
  783.         UPDATE_CACHE(re, s)
  784.         CLOSE_READER(re, s)
  785.     }
  786. #ifdef A32_BITSTREAM_READER
  787.     s->cache1 = 0;
  788. #endif
  789. }
  790. int check_marker(GetBitContext *s, const char *msg);
  791. void align_get_bits(GetBitContext *s);
  792. int init_vlc(VLC *vlc, int nb_bits, int nb_codes,
  793.              const void *bits, int bits_wrap, int bits_size,
  794.              const void *codes, int codes_wrap, int codes_size);
  795. void free_vlc(VLC *vlc);
  796. /**
  797.  *
  798.  * if the vlc code is invalid and max_depth=1 than no bits will be removed
  799.  * if the vlc code is invalid and max_depth>1 than the number of bits removed
  800.  * is undefined
  801.  */
  802. #define GET_VLC(code, name, gb, table, bits, max_depth)
  803. {
  804.     int n, index, nb_bits;
  805.     index= SHOW_UBITS(name, gb, bits);
  806.     code = table[index][0];
  807.     n    = table[index][1];
  808.     if(max_depth > 1 && n < 0){
  809.         LAST_SKIP_BITS(name, gb, bits)
  810.         UPDATE_CACHE(name, gb)
  811.         nb_bits = -n;
  812.         index= SHOW_UBITS(name, gb, nb_bits) + code;
  813.         code = table[index][0];
  814.         n    = table[index][1];
  815.         if(max_depth > 2 && n < 0){
  816.             LAST_SKIP_BITS(name, gb, nb_bits)
  817.             UPDATE_CACHE(name, gb)
  818.             nb_bits = -n;
  819.             index= SHOW_UBITS(name, gb, nb_bits) + code;
  820.             code = table[index][0];
  821.             n    = table[index][1];
  822.         }
  823.     }
  824.     SKIP_BITS(name, gb, n)
  825. }
  826. #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth)
  827. {
  828.     int n, index, nb_bits;
  829.     index= SHOW_UBITS(name, gb, bits);
  830.     level = table[index].level;
  831.     n     = table[index].len;
  832.     if(max_depth > 1 && n < 0){
  833.         LAST_SKIP_BITS(name, gb, bits)
  834.         UPDATE_CACHE(name, gb)
  835.         nb_bits = -n;
  836.         index= SHOW_UBITS(name, gb, nb_bits) + level;
  837.         level = table[index].level;
  838.         n     = table[index].len;
  839.     }
  840.     run= table[index].run;
  841.     SKIP_BITS(name, gb, n)
  842. }
  843. // deprecated, dont use get_vlc for new code, use get_vlc2 instead or use GET_VLC directly
  844. static inline int get_vlc(GetBitContext *s, VLC *vlc)
  845. {
  846.     int code;
  847.     VLC_TYPE (*table)[2]= vlc->table;
  848.     
  849.     OPEN_READER(re, s)
  850.     UPDATE_CACHE(re, s)
  851.     GET_VLC(code, re, s, table, vlc->bits, 3)    
  852.     CLOSE_READER(re, s)
  853.     return code;
  854. }
  855. /**
  856.  * parses a vlc code, faster then get_vlc()
  857.  * @param bits is the number of bits which will be read at once, must be 
  858.  *             identical to nb_bits in init_vlc()
  859.  * @param max_depth is the number of times bits bits must be readed to completly
  860.  *                  read the longest vlc code 
  861.  *                  = (max_vlc_length + bits - 1) / bits
  862.  */
  863. static always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2],
  864.                                   int bits, int max_depth)
  865. {
  866.     int code;
  867.     
  868.     OPEN_READER(re, s)
  869.     UPDATE_CACHE(re, s)
  870.     GET_VLC(code, re, s, table, bits, max_depth)
  871.     CLOSE_READER(re, s)
  872.     return code;
  873. }
  874. //#define TRACE
  875. #ifdef TRACE
  876. static inline void print_bin(int bits, int n){
  877.     int i;
  878.     
  879.     for(i=n-1; i>=0; i--){
  880.         printf("%d", (bits>>i)&1);
  881.     }
  882.     for(i=n; i<24; i++)
  883.         printf(" ");
  884. }
  885. static inline int get_bits_trace(GetBitContext *s, int n, char *file, char *func, int line){
  886.     int r= get_bits(s, n);
  887.     
  888.     print_bin(r, n);
  889.     printf("%5d %2d %3d bit @%5d in %s %s:%dn", r, n, r, get_bits_count(s)-n, file, func, line);
  890.     return r;
  891. }
  892. static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], int bits, int max_depth, char *file, char *func, int line){
  893.     int show= show_bits(s, 24);
  894.     int pos= get_bits_count(s);
  895.     int r= get_vlc2(s, table, bits, max_depth);
  896.     int len= get_bits_count(s) - pos;
  897.     int bits2= show>>(24-len);
  898.     
  899.     print_bin(bits2, len);
  900.     
  901.     printf("%5d %2d %3d vlc @%5d in %s %s:%dn", bits2, len, r, pos, file, func, line);
  902.     return r;
  903. }
  904. static inline int get_xbits_trace(GetBitContext *s, int n, char *file, char *func, int line){
  905.     int show= show_bits(s, n);
  906.     int r= get_xbits(s, n);
  907.     
  908.     print_bin(show, n);
  909.     printf("%5d %2d %3d xbt @%5d in %s %s:%dn", show, n, r, get_bits_count(s)-n, file, func, line);
  910.     return r;
  911. }
  912. #define get_bits(s, n)  get_bits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  913. #define get_bits1(s)    get_bits_trace(s, 1, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  914. #define get_xbits(s, n) get_xbits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  915. #define get_vlc(s, vlc)            get_vlc_trace(s, (vlc)->table, (vlc)->bits, 3, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  916. #define get_vlc2(s, tab, bits, max) get_vlc_trace(s, tab, bits, max, __FILE__, __PRETTY_FUNCTION__, __LINE__)
  917. #define tprintf(...) av_log(NULL, AV_LOG_DEBUG, __VA_ARGS__)
  918. #else //TRACE
  919. //#define tprintf(...) {} //Del by ty
  920. #define tprintf( ) {} //Del by ty
  921. #endif
  922. /* define it to include statistics code (useful only for optimizing
  923.    codec efficiency */
  924. //#define STATS
  925. #ifdef STATS
  926. enum {
  927.     ST_UNKNOWN,
  928.     ST_DC,
  929.     ST_INTRA_AC,
  930.     ST_INTER_AC,
  931.     ST_INTRA_MB,
  932.     ST_INTER_MB,
  933.     ST_MV,
  934.     ST_NB,
  935. };
  936. extern int st_current_index;
  937. extern unsigned int st_bit_counts[ST_NB];
  938. extern unsigned int st_out_bit_counts[ST_NB];
  939. void print_stats(void);
  940. #endif
  941. /* misc math functions */
  942. extern const uint8_t ff_log2_tab[256];
  943. static inline int av_log2(unsigned int v)
  944. {
  945.     int n;
  946.     n = 0;
  947.     if (v & 0xffff0000) {
  948.         v >>= 16;
  949.         n += 16;
  950.     }
  951.     if (v & 0xff00) {
  952.         v >>= 8;
  953.         n += 8;
  954.     }
  955.     n += ff_log2_tab[v];
  956.     return n;
  957. }
  958. static inline int av_log2_16bit(unsigned int v)
  959. {
  960.     int n;
  961.     n = 0;
  962.     if (v & 0xff00) {
  963.         v >>= 8;
  964.         n += 8;
  965.     }
  966.     n += ff_log2_tab[v];
  967.     return n;
  968. }
  969. /* median of 3 */
  970. static inline int mid_pred(int a, int b, int c)
  971. {
  972. #if 0
  973.     int t= (a-b)&((a-b)>>31);
  974.     a-=t;
  975.     b+=t;
  976.     b-= (b-c)&((b-c)>>31);
  977.     b+= (a-b)&((a-b)>>31);
  978.     return b;
  979. #else
  980.     if(a>b){
  981.         if(c>b){
  982.             if(c>a) b=a;
  983.             else    b=c;
  984.         }
  985.     }else{
  986.         if(b>c){
  987.             if(c>a) b=c;
  988.             else    b=a;
  989.         }
  990.     }
  991.     return b;
  992. #endif
  993. }
  994. static inline int clip(int a, int amin, int amax)
  995. {
  996.     if (a < amin)
  997.         return amin;
  998.     else if (a > amax)
  999.         return amax;
  1000.     else
  1001.         return a;
  1002. }
  1003. static inline int clip_uint8(int a)
  1004. {
  1005.     if (a&(~255)) return (-a)>>31;
  1006.     else          return a;
  1007. }
  1008. /* math */
  1009. extern const uint8_t ff_sqrt_tab[128];
  1010. int64_t ff_gcd(int64_t a, int64_t b);
  1011. static inline int ff_sqrt(int a)
  1012. {
  1013.     int ret=0;
  1014.     int s;
  1015.     int ret_sq=0;
  1016.     
  1017.     if(a<128) return ff_sqrt_tab[a];
  1018.     
  1019.     for(s=15; s>=0; s--){
  1020.         int b= ret_sq + (1<<(s*2)) + (ret<<s)*2;
  1021.         if(b<=a){
  1022.             ret_sq=b;
  1023.             ret+= 1<<s;
  1024.         }
  1025.     }
  1026.     return ret;
  1027. }
  1028. /**
  1029.  * converts fourcc string to int
  1030.  */
  1031. static inline int ff_get_fourcc(const char *s){
  1032.     assert( strlen(s)==4 );
  1033.     return (s[0]) + (s[1]<<8) + (s[2]<<16) + (s[3]<<24);
  1034. }
  1035. #define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24))
  1036. #define MKBETAG(a,b,c,d) (d | (c << 8) | (b << 16) | (a << 24))
  1037. #ifdef ARCH_X86
  1038. #define MASK_ABS(mask, level)
  1039.             asm volatile(
  1040. "cdq nt"
  1041. "xorl %1, %0 nt"
  1042. "subl %1, %0 nt"
  1043. : "+a" (level), "=&d" (mask)
  1044.     );
  1045. #else
  1046. #define MASK_ABS(mask, level)
  1047.             mask= level>>31;
  1048.             level= (level^mask)-mask;
  1049. #endif
  1050. #if __CPU__ >= 686 && !defined(RUNTIME_CPUDETECT)
  1051. #define COPY3_IF_LT(x,y,a,b,c,d)
  1052. asm volatile (
  1053.     "cmpl %0, %3 nt"
  1054.     "cmovl %3, %0 nt"
  1055.     "cmovl %4, %1 nt"
  1056.     "cmovl %5, %2 nt"
  1057.     : "+r" (x), "+r" (a), "+r" (c)
  1058.     : "r" (y), "r" (b), "r" (d)
  1059. );
  1060. #else
  1061. #define COPY3_IF_LT(x,y,a,b,c,d)
  1062. if((y)<(x)){
  1063.      (x)=(y);
  1064.      (a)=(b);
  1065.      (c)=(d);
  1066. }
  1067. #endif
  1068. #ifdef ARCH_X86
  1069. static inline long long rdtsc()
  1070. {
  1071. long long l;
  1072. asm volatile( "rdtscnt"
  1073. : "=A" (l)
  1074. );
  1075. return l;
  1076. }
  1077. #define START_TIMER 
  1078. uint64_t tend;
  1079. uint64_t tstart= rdtsc();
  1080. #define STOP_TIMER(id) 
  1081. tend= rdtsc();
  1082. {
  1083.   static uint64_t tsum=0;
  1084.   static int tcount=0;
  1085.   static int tskip_count=0;
  1086.   if(tcount<2 || tend - tstart < 8*tsum/tcount){
  1087.       tsum+= tend - tstart;
  1088.       tcount++;
  1089.   }else
  1090.       tskip_count++;
  1091.   if(256*256*256*64%(tcount+tskip_count)==0){
  1092.       av_log(NULL, AV_LOG_DEBUG, "%Ld dezicycles in %s, %d runs, %d skipsn", tsum*10/tcount, id, tcount, tskip_count);
  1093.   }
  1094. }
  1095. #endif
  1096. #define CLAMP_TO_8BIT(d) ((d > 0xff) ? 0xff : (d < 0) ? 0 : d)
  1097. /* avoid usage of various functions */
  1098. #define malloc please_use_av_malloc
  1099. //#define free please_use_av_free
  1100. #define realloc please_use_av_realloc
  1101. #define time time_is_forbidden_due_to_security_issues
  1102. //#define rand rand_is_forbidden_due_to_state_trashing //Del by ty
  1103. #define srand srand_is_forbidden_due_to_state_trashing
  1104. #if !(defined(LIBAVFORMAT_BUILD) || defined(_FRAMEHOOK_H))
  1105. //#define printf please_use_av_log //Del by ty
  1106. //#define fprintf please_use_av_log //Del by ty
  1107. #endif
  1108. #define CHECKED_ALLOCZ(p, size)
  1109. {
  1110.     p= av_mallocz(size);
  1111.     if(p==NULL && (size)!=0){
  1112.         perror("malloc");
  1113.         goto fail;
  1114.     }
  1115. }
  1116. #endif /* HAVE_AV_CONFIG_H */
  1117. #endif /* COMMON_H */