common.h
上传用户:jxp0626
上传日期:2007-01-08
资源大小:102k
文件大小:1k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Unix_Linux

  1. #ifndef COMMON_H
  2. #define COMMON_H
  3. typedef unsigned char UINT8;
  4. typedef unsigned short UINT16;
  5. typedef unsigned int UINT32;
  6. typedef signed char INT8;
  7. typedef signed short INT16;
  8. typedef signed int INT32;
  9. /* bit I/O */
  10. struct PutBitContext;
  11. typedef void (*WriteDataFunc)(void *, UINT8 *, int);
  12. typedef struct PutBitContext {
  13.     UINT8 *buf, *buf_ptr, *buf_end;
  14.     int bit_cnt;
  15.     UINT32 bit_buf;
  16.     long long data_out_size; /* in bytes */
  17.     void *opaque;
  18.     WriteDataFunc write_data;
  19. } PutBitContext;
  20. void init_put_bits(PutBitContext *s, 
  21.                    UINT8 *buffer, int buffer_size,
  22.                    void *opaque,
  23.                    void (*write_data)(void *, UINT8 *, int));
  24. void put_bits(PutBitContext *s, int n, unsigned int value);
  25. long long get_bit_count(PutBitContext *s);
  26. void align_put_bits(PutBitContext *s);
  27. void flush_put_bits(PutBitContext *s);
  28. /* jpeg specific put_bits */
  29. void jput_bits(PutBitContext *s, int n, unsigned int value);
  30. void jflush_put_bits(PutBitContext *s);
  31. /* misc math functions */
  32. extern inline int log2(unsigned int v)
  33. {
  34.     int n;
  35.     n = 0;
  36.     if (v & 0xffff0000) {
  37.         v >>= 16;
  38.         n += 16;
  39.     }
  40.     if (v & 0xff00) {
  41.         v >>= 8;
  42.         n += 8;
  43.     }
  44.     if (v & 0xf0) {
  45.         v >>= 4;
  46.         n += 4;
  47.     }
  48.     if (v & 0xc) {
  49.         v >>= 2;
  50.         n += 2;
  51.     }
  52.     if (v & 0x2) {
  53.         n++;
  54.     }
  55.     return n;
  56. }
  57. #endif