xref: /OK3568_Linux_fs/external/common_algorithm/misc/include/mp3_enc_types.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #ifndef TYPES_H
2 #define TYPES_H
3 
4 #include <stdio.h>
5 #include <time.h>
6 #include <string.h>
7 #include <ctype.h>
8 #include <stdlib.h>
9 #include <math.h>
10 
11 #define MPEG2_5 0
12 #define MPEG2   2
13 #define MPEG1   3
14 
15 #define MODE_STEREO       0
16 #define MODE_MS_STEREO    1
17 #define MODE_DUAL_CHANNEL 2
18 #define MODE_MONO         3
19 
20 #define LAYER_3 1
21 #define LAYER_2 2
22 #define LAYER_1 3
23 #define samp_per_frame  1152
24 #define samp_per_frame2 576
25 #define PI              3.14159265358979
26 #define HAN_SIZE        512
27 #define SBLIMIT         32
28 
29 #define BUFFER_SIZE  2048//2048//1384   /* output buffer size in bytes 576 bytes */
30 
31 #define FIFO_SIZE  128
32 typedef struct
33 {
34     int si_len; /* number of bytes in side info */
35     int fr_len; /* number of data bytes in frame */
36     unsigned char side[40]; /* side info max len = (288 bits / 8) + 1 which gets cleared 最初40*/
37 } fifo_t;
38 
39 #define main_size 16384   //main_size = si->resv_drain
40 
41 typedef struct
42 {
43     unsigned int i;   /* file buffer index */
44     unsigned char *b; /* buffer pointer */
45 } bs_t;
46 
47 typedef struct
48 {
49     FILE *file;
50     int  type;
51     int  layr;
52     int  mode;
53     int  bitr;
54     int  psyc;
55     int  emph;
56     int  padding;
57     long samples_per_frame;
58     long bits_per_frame;
59     long bits_per_slot;
60     long total_frames;
61     int  bitrate_index;
62     int  samplerate;
63     int  samplerate_index;
64     int crc;
65     int ext;
66     int mode_ext;
67     int copyright;
68     int original;
69     int channels;
70     int granules;
71     int resv_limit;
72     int cutoff;
73 } mpeg_t;
74 
75 typedef struct
76 {
77     char *in_buf;
78     char *out_buf;
79     mpeg_t mpeg;
80 } config_t;
81 
82 typedef struct
83 {
84     long          remainder;
85     long          bytes_per_frame;
86     long          lag;
87     int           mean_bits;
88     int           sideinfo_len;
89 } mp3_info;
90 
91 #define HUFFBITS unsigned long int
92 #define HTN     34
93 #define MXOFF   250
94 
95 struct huffcodetab
96 {
97     unsigned int xlen;    /*max. x-index+                         */
98     unsigned int ylen;    /*max. y-index+                         */
99     unsigned int linbits; /*number of linbits                     */
100     unsigned int linmax;  /*max number to be stored in linbits    */
101     HUFFBITS *table;      /*pointer to array[xlen][ylen]          */
102     unsigned char *hlen;  /*pointer to array[xlen][ylen]          */
103 };
104 
105 extern struct huffcodetab ht[HTN];/* global memory block                */
106 /* array of all huffcodtable headers    */
107 /* 0..31 Huffman code table 0..31       */
108 /* 32,33 count1-tables                  */
109 
110 /* Side information */
111 typedef struct
112 {
113     unsigned part2_3_length;
114     unsigned big_values;
115     unsigned count1;
116     unsigned global_gain;
117     unsigned table_select[3];
118     unsigned region0_count;
119     unsigned region1_count;
120     unsigned count1table_select;
121     unsigned address1;
122     unsigned address2;
123     unsigned address3;
124     int quantizerStepSize;
125     int *scalefac_band_long;
126     int cutoff;
127 } gr_info;
128 
129 typedef struct
130 {
131     int main_data_begin;
132     struct
133     {
134         struct
135         {
136             gr_info tt;
137         } ch[2];
138     } gr[2];
139     int resv_drain;
140 } L3_side_info_t;
141 
142 typedef struct
143 {
144     mp3_info info;
145     config_t config;
146     unsigned char header[4];
147 
148     fifo_t fifo[FIFO_SIZE];
149     unsigned char main_[main_size];  /* main data buffer (length always less than this)实测68*/
150     bs_t bs;
151     int l3_enc[2][2][samp_per_frame2];
152     long mdct_freq[2][2][samp_per_frame2];
153     L3_side_info_t side_info;
154     long l3_sb_sample[2][3][18][SBLIMIT];
155     int main_data_begin;
156     int wr;
157     int rd;
158     int by;
159     int bi;
160     int count;
161     int bits;
162     int off[2];
163     int *scalefac_band_long;
164     int frame_size;
165 } mp3_enc;
166 
167 /* function prototypes */
168 
169 /* bitstream.c */
170 void close_bit_stream(mp3_enc *mp3);
171 void open_bit_stream(mp3_enc *mp3);
172 
173 unsigned int L3_format_bitstream(mp3_enc *mp3, unsigned char **ppOutBuf);
174 mp3_enc *Mp3EncodeVariableInit(int samplerate, int channel, int  Bitrate);
175 void Mp3EncodeDeinit(mp3_enc *mp3);
176 /* l3loop.c */
177 
178 /* layer3.c */
179 long L3_compress(mp3_enc *mp3, int len, unsigned char **ppOutBuf);
180 
181 /* coder.c */
182 void L3_window_filter_subband(mp3_enc *mp3, unsigned long **buffer, long s[SBLIMIT],
183                               int k);
184 #if 1
185 void L3_iteration_loop(mp3_enc *mp3) ;
186 void L3_mdct_sub(mp3_enc *mp3);
187 #else
188 void L3_iteration_loop(long            mdct_freq_org[1][1][samp_per_frame2],
189                        L3_side_info_t *side_info,
190                        int             l3_enc[1][1][samp_per_frame2],
191                        int             mean_bits);
192 void L3_mdct_sub(mp3_enc *mp3, long sb_sample[2][3][18][SBLIMIT],
193                  long mdct_freq[2][2][samp_per_frame2]);
194 
195 #endif
196 /* utils.c */
197 long mul(int x, int y);
198 long muls(int x, int y);
199 long mulr(int x, int y);
200 long mulsr(int x, int y);
201 
202 #endif
203