types.h
上传用户:shenggui01
上传日期:2022-01-16
资源大小:54k
文件大小:4k
源码类别:

mpeg/mp3

开发平台:

C/C++

  1. #ifndef TYPES_H
  2. #define TYPES_H
  3. #include <stdio.h>
  4. #include <time.h>
  5. #include <string.h>
  6. #include <ctype.h>
  7. #include <stdlib.h>
  8. #include <math.h>
  9. #define MPEG2_5 0
  10. #define MPEG2   2
  11. #define MPEG1   3
  12. #define MODE_STEREO       0
  13. #define MODE_MS_STEREO    1
  14. #define MODE_DUAL_CHANNEL 2
  15. #define MODE_MONO         3
  16. #define LAYER_3 1
  17. #define LAYER_2 2
  18. #define LAYER_1 3
  19. #define samp_per_frame  1152
  20. #define samp_per_frame2 576
  21. #define PI              3.14159265358979
  22. #define HAN_SIZE        512
  23. #define SBLIMIT         32
  24. typedef struct {
  25.     FILE *file;
  26.     int  type;
  27.     int  channels;
  28.     int  bits;
  29.     long samplerate;
  30.     long total_samples;
  31.     long length;
  32. } wave_t;
  33. typedef struct {
  34.     FILE *file;
  35.     int  type;
  36.     int  layr;
  37.     int  mode;
  38.     int  bitr;
  39.     int  psyc;
  40.     int  emph;
  41.     int  padding;
  42.     long samples_per_frame;
  43.     long bits_per_frame;
  44.     long bits_per_slot;
  45.     long total_frames;
  46.     int  bitrate_index;
  47.     int  samplerate_index;
  48.     int crc;
  49.     int ext;
  50.     int mode_ext;
  51.     int copyright;
  52.     int original;
  53.     int channels;
  54.     int granules;
  55.     int resv_limit;
  56. } mpeg_t;
  57. typedef struct {
  58.     time_t start_time;
  59.     char* infile;
  60.     wave_t wave;
  61.     char* outfile;
  62.     mpeg_t mpeg;
  63. } config_t;
  64. extern config_t config;
  65. #define HUFFBITS unsigned long int
  66. #define HTN     34
  67. #define MXOFF   250
  68. struct huffcodetab {
  69.   unsigned int xlen;    /*max. x-index+                         */
  70.   unsigned int ylen;    /*max. y-index+                         */
  71.   unsigned int linbits; /*number of linbits                     */
  72.   unsigned int linmax;  /*max number to be stored in linbits    */
  73.   HUFFBITS *table;      /*pointer to array[xlen][ylen]          */
  74.   unsigned char *hlen;  /*pointer to array[xlen][ylen]          */
  75. };
  76. extern struct huffcodetab ht[HTN];/* global memory block                */
  77.                                 /* array of all huffcodtable headers    */
  78.                                 /* 0..31 Huffman code table 0..31       */
  79.                                 /* 32,33 count1-tables                  */
  80. /* Side information */
  81. typedef struct {
  82.         unsigned part2_3_length;
  83.         unsigned big_values;
  84.         unsigned count1;
  85.         unsigned global_gain;
  86.         unsigned table_select[3];
  87.         unsigned region0_count;
  88.         unsigned region1_count;
  89.         unsigned count1table_select;
  90.         unsigned address1;
  91.         unsigned address2;
  92.         unsigned address3;
  93.         int quantizerStepSize;
  94. } gr_info;
  95. typedef struct {
  96.   int main_data_begin;
  97.   struct
  98.   {
  99.     struct
  100.     {
  101.       gr_info tt;
  102.     } ch[2];
  103.   } gr[2];
  104.   int resv_drain;
  105. } L3_side_info_t;
  106. /* function prototypes */
  107. void error(char* s);
  108. /* bitstream.c */
  109. void open_bit_stream(char *bs_filenam);
  110. void close_bit_stream(void);
  111. void L3_format_bitstream(int l3_enc[2][2][samp_per_frame2],
  112.                          L3_side_info_t  *l3_side);
  113. /* l3loop.c */
  114. void L3_iteration_loop(long            mdct_freq_org[2][2][samp_per_frame2],
  115.                        L3_side_info_t *side_info,
  116.                        int             l3_enc[2][2][samp_per_frame2],
  117.                        int             mean_bits);
  118. /* layer3.c */
  119. void L3_compress(void);
  120. /* wave.c */
  121. void wave_open(int raw, int mono_from_stereo);
  122. unsigned long int *wave_get(void);
  123. void wave_close(void);
  124. /* coder.c */
  125. void L3_window_filter_subband(unsigned long **buffer, long s[SBLIMIT],
  126.                  int k);
  127. void L3_mdct_sub(long sb_sample[2][3][18][SBLIMIT],
  128.                  long mdct_freq[2][2][samp_per_frame2]);
  129. /* utils.c */
  130. long mul(int x, int y);
  131. long muls(int x, int y);
  132. long mulr(int x, int y);
  133. long mulsr(int x, int y);
  134. #endif