You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
3.6KB

  1. #ifndef COMMON_H
  2. #define COMMON_H
  3. #include "../config.h"
  4. #ifndef __WINE_WINDEF16_H
  5. /* workaround for typedef conflict in MPlayer (wine typedefs) */
  6. typedef unsigned short UINT16;
  7. typedef signed short INT16;
  8. #endif
  9. typedef unsigned char UINT8;
  10. typedef unsigned int UINT32;
  11. typedef unsigned long long UINT64;
  12. typedef signed char INT8;
  13. typedef signed int INT32;
  14. typedef signed long long INT64;
  15. /* bit output */
  16. struct PutBitContext;
  17. typedef void (*WriteDataFunc)(void *, UINT8 *, int);
  18. typedef struct PutBitContext {
  19. UINT8 *buf, *buf_ptr, *buf_end;
  20. int bit_cnt;
  21. UINT32 bit_buf;
  22. long long data_out_size; /* in bytes */
  23. void *opaque;
  24. WriteDataFunc write_data;
  25. } PutBitContext;
  26. void init_put_bits(PutBitContext *s,
  27. UINT8 *buffer, int buffer_size,
  28. void *opaque,
  29. void (*write_data)(void *, UINT8 *, int));
  30. void put_bits(PutBitContext *s, int n, unsigned int value);
  31. long long get_bit_count(PutBitContext *s);
  32. void align_put_bits(PutBitContext *s);
  33. void flush_put_bits(PutBitContext *s);
  34. /* jpeg specific put_bits */
  35. void jput_bits(PutBitContext *s, int n, unsigned int value);
  36. void jflush_put_bits(PutBitContext *s);
  37. /* bit input */
  38. typedef struct GetBitContext {
  39. UINT8 *buf, *buf_ptr, *buf_end;
  40. int bit_cnt;
  41. UINT32 bit_buf;
  42. } GetBitContext;
  43. typedef struct VLC {
  44. int bits;
  45. INT16 *table_codes;
  46. INT8 *table_bits;
  47. int table_size, table_allocated;
  48. } VLC;
  49. void init_get_bits(GetBitContext *s,
  50. UINT8 *buffer, int buffer_size);
  51. unsigned int get_bits(GetBitContext *s, int n);
  52. void align_get_bits(GetBitContext *s);
  53. int init_vlc(VLC *vlc, int nb_bits, int nb_codes,
  54. const void *bits, int bits_wrap, int bits_size,
  55. const void *codes, int codes_wrap, int codes_size);
  56. void free_vlc(VLC *vlc);
  57. int get_vlc(GetBitContext *s, VLC *vlc);
  58. /* macro to go faster */
  59. /* n must be <= 24 */
  60. /* XXX: optimize buffer end test */
  61. #define SHOW_BITS(s, val, n)\
  62. {\
  63. if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
  64. bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
  65. bit_cnt += 8;\
  66. if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
  67. bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
  68. bit_cnt += 8;\
  69. if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
  70. bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
  71. bit_cnt += 8;\
  72. }\
  73. }\
  74. }\
  75. val = bit_buf >> (32 - n);\
  76. }
  77. /* SHOW_BITS with n1 >= n must be been done before */
  78. #define FLUSH_BITS(n)\
  79. {\
  80. bit_buf <<= n;\
  81. bit_cnt -= n;\
  82. }
  83. #define SAVE_BITS(s) \
  84. {\
  85. bit_cnt = (s)->bit_cnt;\
  86. bit_buf = (s)->bit_buf;\
  87. buf_ptr = (s)->buf_ptr;\
  88. }
  89. #define RESTORE_BITS(s) \
  90. {\
  91. (s)->buf_ptr = buf_ptr;\
  92. (s)->bit_buf = bit_buf;\
  93. (s)->bit_cnt = bit_cnt;\
  94. }
  95. /* define it to include statistics code (useful only for optimizing
  96. codec efficiency */
  97. //#define STATS
  98. #ifdef STATS
  99. enum {
  100. ST_UNKNOWN,
  101. ST_DC,
  102. ST_INTRA_AC,
  103. ST_INTER_AC,
  104. ST_INTRA_MB,
  105. ST_INTER_MB,
  106. ST_MV,
  107. ST_NB,
  108. };
  109. extern int st_current_index;
  110. extern unsigned int st_bit_counts[ST_NB];
  111. extern unsigned int st_out_bit_counts[ST_NB];
  112. void print_stats(void);
  113. #endif
  114. /* misc math functions */
  115. extern inline int log2(unsigned int v)
  116. {
  117. int n;
  118. n = 0;
  119. if (v & 0xffff0000) {
  120. v >>= 16;
  121. n += 16;
  122. }
  123. if (v & 0xff00) {
  124. v >>= 8;
  125. n += 8;
  126. }
  127. if (v & 0xf0) {
  128. v >>= 4;
  129. n += 4;
  130. }
  131. if (v & 0xc) {
  132. v >>= 2;
  133. n += 2;
  134. }
  135. if (v & 0x2) {
  136. n++;
  137. }
  138. return n;
  139. }
  140. /* memory */
  141. void *av_mallocz(int size);
  142. #endif