common.h
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:4k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. #ifndef _COMMON_H_
  2. #define _COMMON_H_
  3. #include <stdio.h>
  4. /* MPEG 头定义- Mode Values */
  5. #define MPG_MD_STEREO           0
  6. #define MPG_MD_JOINT_STEREO     1
  7. #define MPG_MD_DUAL_CHANNEL     2
  8. #define MPG_MD_MONO             3
  9. #define SYNC_WORD (long)0xfff
  10. #define SYNC_WORD_LENGTH 12
  11. #define ALIGNING 8
  12. #define MINIMUM 4    /* 缓冲区最小值( bytes )*/
  13. #define MAX_LENGTH 32 /* 从比特流读到词的最大长度 */
  14. #define BINARY 0 /*二进制输入文件*/
  15. #define READ_MODE 0 /*解码模式*/
  16. #define FALSE 0
  17. #define TRUE 1
  18. #define MIN(A, B) ((A) < (B) ? (A) : (B))
  19. #define SBLIMIT 32
  20. #define SSLIMIT 18
  21. #define BUFFER_SIZE 4096
  22. #define HAN_SIZE 512
  23. #define SCALE 32768
  24. #define PI 3.14159265358979
  25. #define PI64 PI/64
  26. #define PI4 PI/4
  27. /* 头信息 Structure */
  28. typedef struct {
  29.     int version;
  30.     int lay;
  31.     int error_protection;
  32.     int bitrate_index;
  33.     int sampling_frequency;
  34.     int padding;
  35.     int extension;
  36.     int mode;
  37.     int mode_ext;
  38.     int copyright;
  39.     int original;
  40.     int emphasis;
  41. } layer, *the_layer;
  42. /* Header中解释祯参数的父结构 */
  43. typedef struct {
  44.     layer       *header;        /* 头信息 */
  45.     int         actual_mode;    /* when writing IS, may forget if 0 chs */
  46.     int         stereo;         /* 1 为 mono, 2 为 stereo */
  47.     int         jsbound;        /* 立体声编码的第一个波段 */
  48.     int         sblimit;        /* 所有子带的数量 */
  49. } frame_params;
  50. typedef struct  bit_stream_struc {
  51.     FILE        *pt;            /* 比特流设备指针 */
  52.     unsigned char *buf;         /* 比特流缓冲 */
  53.     int         buf_size;       /* 比特流缓冲大小( bytes) */
  54.     long        totbit;         /* 比特流的比特计数 */
  55.     int         buf_byte_idx;   /* 指向缓冲区首字节 */
  56.     int         buf_bit_idx;    /* 指向缓冲区首字节首比特 */
  57.     int         mode;           /* 比特流打开模式(读/写)*/
  58.     int         eob;            /* 缓冲索引结束 */
  59.     int         eobs;           /* 比特流结束标志 */
  60.     char        format;
  61.     /*  rd 模式文件格式 (BINARY/ASCII) */
  62. } Bit_stream_struc;
  63. /* Layer III 附加信息 */
  64. typedef struct {
  65. unsigned main_data_begin;
  66. unsigned private_bits;
  67. struct {
  68. unsigned scfsi[4];
  69. struct gr_info_s {
  70. unsigned part2_3_length;
  71. unsigned big_values;
  72. unsigned global_gain;
  73. unsigned scalefac_compress;
  74. unsigned window_switching_flag;
  75. unsigned block_type;
  76. unsigned mixed_block_flag;
  77. unsigned table_select[3];
  78. unsigned subblock_gain[3];
  79. unsigned region0_count;
  80. unsigned region1_count;
  81. unsigned preflag;
  82. unsigned scalefac_scale;
  83. unsigned count1table_select;
  84. } gr[2];
  85. } ch[2];
  86. } III_side_info_t;
  87. typedef struct {
  88. int l[23]; /* [cb] */
  89. int s[3][13]; /* [window][cb] */
  90. } III_scalefac_t[2]; /* [ch] */
  91. FILE *OpenTableFile(char *name);
  92. void WriteHdr(frame_params *fr_ps);
  93. void *mem_alloc(unsigned long block, char *item);
  94. void alloc_buffer(Bit_stream_struc *bs, int size);
  95. void desalloc_buffer(Bit_stream_struc *bs);
  96. void open_bit_stream_r(Bit_stream_struc *bs, char *bs_filenam, int size);
  97. void close_bit_stream_r(Bit_stream_struc *bs);
  98. int end_bs(Bit_stream_struc *bs);
  99. unsigned long sstell(Bit_stream_struc *bs);
  100. void refill_buffer(Bit_stream_struc *bs);
  101. unsigned int get1bit(Bit_stream_struc *bs);
  102. unsigned long getbits(Bit_stream_struc *bs, int N);
  103. int seek_sync(Bit_stream_struc *bs, unsigned long sync, int N);
  104. int js_bound(int lay, int m_ext);
  105. void hdr_to_frps(frame_params *fr_ps);
  106. void hputbuf(unsigned int val, int N);
  107. unsigned long hsstell();
  108. unsigned long hgetbits(int N);
  109. unsigned int hget1bit();
  110. void rewindNbits(int N);
  111. void rewindNbytes(int N);
  112. #endif /*_COMMON_H_*/