Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
576 serge 1
/*
2
	mpg123: main code of the program (not of the decoder...)
3
 
4
	copyright 1995-2006 by the mpg123 project - free software under the terms of the LGPL 2.1
5
	see COPYING and AUTHORS files in distribution or http://mpg123.de
6
	initially written by Michael Hipp
7
 
8
	mpg123 defines
9
	used source: musicout.h from mpegaudio package
10
*/
11
 
12
#ifdef __cplusplus
13
extern "C" {
14
#endif
15
 
16
#include        
17
#include        
18
#ifndef _AUDIO_H_
19
#define _AUDIO_H_
20
 
21
typedef unsigned char byte;
22
#define off_t long
23
 
24
//#define I486_OPT 1
25
 
26
#define SKIP_JUNK 1
27
# define M_PI       3.14159265358979323846
28
# define M_SQRT2	1.41421356237309504880
29
# define REAL_IS_FLOAT
30
# define NEW_DCT9
31
 
32
#ifdef REAL_IS_FLOAT
33
#  define real float
34
#  define REAL_SCANF "%f"
35
#  define REAL_PRINTF "%f"
36
#else
37
#  define real double
38
#  define REAL_SCANF "%lf"
39
#  define REAL_PRINTF "%f"
40
#endif
41
 
42
#ifndef DOUBLE_TO_REAL
43
# define DOUBLE_TO_REAL(x)     (x)
44
#endif
45
#ifndef REAL_TO_SHORT
46
# define REAL_TO_SHORT(x)      (x)
47
#endif
48
#ifndef REAL_PLUS_32767
49
# define REAL_PLUS_32767       32767.0
50
#endif
51
#ifndef REAL_MINUS_32768
52
# define REAL_MINUS_32768      -32768.0
53
#endif
54
#ifndef REAL_MUL
55
# define REAL_MUL(x, y)                ((x) * (y))
56
#endif
57
 
58
#define INLINE
59
/* AUDIOBUFSIZE = n*64 with n=1,2,3 ...  */
60
#define		AUDIOBUFSIZE		16384
61
 
62
#define         FALSE                   0
63
#define         TRUE                    1
64
 
65
#define         MAX_NAME_SIZE           81
66
#define         SBLIMIT                 32
67
#define         SCALE_BLOCK             12
68
#define         SSLIMIT                 18
69
 
70
#define         MPG_MD_STEREO           0
71
#define         MPG_MD_JOINT_STEREO     1
72
#define         MPG_MD_DUAL_CHANNEL     2
73
#define         MPG_MD_MONO             3
74
 
75
/* I suspect that 32767 would be a better idea here, but Michael put this in... */
76
#define MAXOUTBURST 32768
77
 
78
/* Pre Shift fo 16 to 8 bit converter table */
79
#define AUSHIFT (3)
80
 
81
struct bitstream_info
82
{  int bitindex;
83
    unsigned char *wordpointer;
84
};
85
extern struct bitstream_info bsi;
86
 
87
struct reader
88
{
89
    char *hFile;
90
    unsigned char *buffer;
91
    unsigned char *stream;
92
    int strpos;
93
    int strremain;
94
    int filelen;
95
    int filepos;
96
 
97
    int  (*head_read)(struct reader *,unsigned long *newhead);
98
    int  (*read_frame_body)(struct reader *,unsigned char *,int size);
99
 };
100
 
101
int parse_new_id3(struct reader *rd, unsigned long newhead);
102
 
103
struct al_table
104
{ short bits;
105
    short d;
106
};
107
 
108
struct frame {
109
    struct al_table *alloc;
110
    int (*synth)(real *,int,unsigned char *,int *);
111
    int (*synth_mono)(real *,unsigned char *,int *);
112
    int stereo; /* I _think_ 1 for mono and 2 for stereo */
113
    int jsbound;
114
    int single;
115
    int II_sblimit;
116
    int down_sample_sblimit;
117
    int lsf; /* 0: MPEG 1.0; 1: MPEG 2.0/2.5 -- both used as bool and array index! */
118
    int mpeg25;
119
    int down_sample;
120
    int header_change;
121
    int lay;
122
    int (*do_layer)(struct frame *fr,byte *pcm_out, int *pcm_size);
123
    int error_protection;
124
    int bitrate_index;
125
    int sampling_frequency;
126
    int padding;
127
    int extension;
128
    int mode;
129
    int mode_ext;
130
    int copyright;
131
    int original;
132
    int emphasis;
133
    int framesize; /* computed framesize */
134
    int vbr; /* 1 if variable bitrate was detected */
135
		unsigned long num; /* the nth frame in some stream... */
136
};
137
 
138
#if 0
139
struct parameter {
140
  int aggressive; /* renice to max. priority */
141
  int shuffle;	/* shuffle/random play */
142
  int remote;	/* remote operation */
143
  int remote_err;	/* remote operation to stderr */
144
  int outmode;	/* where to out the decoded sampels */
145
  int quiet;	/* shut up! */
146
  int xterm_title;	/* Change xterm title to song names? */
147
  long usebuffer;	/* second level buffer size */
148
  int tryresync;  /* resync stream after error */
149
  int verbose;    /* verbose level */
150
  int force_mono;
151
  int force_stereo;
152
  int force_8bit;
153
  long force_rate;
154
  int down_sample;
155
  int checkrange;
156
  long doublespeed;
157
  long halfspeed;
158
  int force_reopen;
159
  long realtime;
160
  char filename[256];
161
  long listentry; /* possibility to choose playback of one entry in playlist (0: off, > 0 : select, < 0; just show list*/
162
  int rva; /* (which) rva to do: <0: nothing, 0: radio/mix/track 1: album/audiophile */
163
  char* listname; /* name of playlist */
164
  int long_id3;
165
};
166
#endif
167
 
168
#if 0
169
struct reader {
170
  int  (*init)(struct reader *);
171
  void (*close)(struct reader *);
172
  int  (*head_read)(struct reader *,unsigned long *newhead);
173
  int  (*head_shift)(struct reader *,unsigned long *head);
174
  long  (*skip_bytes)(struct reader *,off_t len);
175
  int  (*read_frame_body)(struct reader *,unsigned char *,int size);
176
  int  (*back_bytes)(struct reader *,off_t bytes);
177
  int  (*back_frame)(struct reader *,struct frame *,long num);
178
  off_t (*tell)(struct reader *);
179
  void (*rewind)(struct reader *);
180
  off_t filelen;
181
  off_t filepos;
182
  int  filept;
183
  int  flags;
184
  unsigned char id3buf[128];
185
};
186
#endif
187
 
188
#define READER_FD_OPENED 0x1
189
#define READER_ID3TAG    0x2
190
#define READER_SEEKABLE  0x4
191
 
192
//extern void audio_flush(int, struct audio_info_struct *);
193
 
194
//extern void print_header(struct frame *);
195
//extern void print_header_compact(struct frame *);
196
//extern void print_id3_tag(unsigned char *buf);
197
 
198
//extern int split_dir_file(const char *path, char **dname, char **fname);
199
 
200
extern unsigned int   get1bit(void);
201
extern unsigned int   getbits(int);
202
extern unsigned int   getbits_fast(int);
203
//extern void           backbits(int);
204
//extern int            getbitoffset(void);
205
//extern int            getbyte(void);
206
 
207
//extern void set_pointer(long);
208
 
209
//extern unsigned char *pcm_sample;
210
//extern int pcm_point;
211
//extern int audiobufsize;
212
 
213
//extern int OutputDescriptor;
214
 
215
#ifdef VARMODESUPPORT
216
extern int varmode;
217
extern int playlimit;
218
#endif
219
 
220
struct gr_info_s {
221
      int scfsi;
222
      unsigned part2_3_length;
223
      unsigned big_values;
224
      unsigned scalefac_compress;
225
      unsigned block_type;
226
      unsigned mixed_block_flag;
227
      unsigned table_select[3];
228
      unsigned subblock_gain[3];
229
      unsigned maxband[3];
230
      unsigned maxbandl;
231
      unsigned maxb;
232
      unsigned region1start;
233
      unsigned region2start;
234
      unsigned preflag;
235
      unsigned scalefac_scale;
236
      unsigned count1table_select;
237
      real *full_gain[3];
238
      real *pow2gain;
239
};
240
 
241
struct III_sideinfo
242
{
243
  unsigned main_data_begin;
244
  unsigned private_bits;
245
  struct {
246
    struct gr_info_s gr[2];
247
  } ch[2];
248
};
249
 
250
extern int open_stream(char *,int fd);
251
extern void read_frame_init (struct frame* fr);
252
int read_frame(struct reader *rd, struct frame *fr);
253
 
254
 
255
/* why extern? */
256
void prepare_audioinfo(struct frame *fr, struct audio_info_struct *nai);
257
int play_frame(int init,struct frame *fr);
258
int do_layer1(struct frame *fr,byte *pcm_sample, int *pcm_point);
259
int do_layer2(struct frame *fr,byte *pcm_sample, int *pcm_point);
260
int do_layer3(struct frame *fr,byte *pcm_sample, int *pcm_point);
261
extern void do_equalizer(real *bandPtr,int channel);
262
 
263
#ifdef PENTIUM_OPT
264
extern int synth_1to1_pent (real *,int,unsigned char *);
265
#endif
266
extern int synth_1to1 (real *,int,unsigned char *,int *);
267
extern int synth_1to1_8bit (real *,int,unsigned char *,int *);
268
extern int synth_1to1_mono (real *,unsigned char *,int *);
269
extern int synth_1to1_mono2stereo (real *,unsigned char *,int *);
270
extern int synth_1to1_8bit_mono (real *,unsigned char *,int *);
271
extern int synth_1to1_8bit_mono2stereo (real *,unsigned char *,int *);
272
 
273
extern int synth_2to1 (real *,int,unsigned char *,int *);
274
extern int synth_2to1_8bit (real *,int,unsigned char *,int *);
275
extern int synth_2to1_mono (real *,unsigned char *,int *);
276
extern int synth_2to1_mono2stereo (real *,unsigned char *,int *);
277
extern int synth_2to1_8bit_mono (real *,unsigned char *,int *);
278
extern int synth_2to1_8bit_mono2stereo (real *,unsigned char *,int *);
279
 
280
extern int synth_4to1 (real *,int,unsigned char *,int *);
281
extern int synth_4to1_8bit (real *,int,unsigned char *,int *);
282
extern int synth_4to1_mono (real *,unsigned char *,int *);
283
extern int synth_4to1_mono2stereo (real *,unsigned char *,int *);
284
extern int synth_4to1_8bit_mono (real *,unsigned char *,int *);
285
extern int synth_4to1_8bit_mono2stereo (real *,unsigned char *,int *);
286
 
287
extern int synth_ntom (real *,int,unsigned char *,int *);
288
extern int synth_ntom_8bit (real *,int,unsigned char *,int *);
289
extern int synth_ntom_mono (real *,unsigned char *,int *);
290
extern int synth_ntom_mono2stereo (real *,unsigned char *,int *);
291
extern int synth_ntom_8bit_mono (real *,unsigned char *,int *);
292
extern int synth_ntom_8bit_mono2stereo (real *,unsigned char *,int *);
293
 
294
extern void rewindNbits(int bits);
295
extern int  hsstell(void);
296
extern void set_pointer(long);
297
extern void huffman_decoder(int ,int *);
298
extern void huffman_count1(int,int *);
299
extern void print_stat(struct frame *fr,unsigned long no,long buffsize,struct audio_info_struct *ai);
300
extern int get_songlen(struct frame *fr,int no);
301
 
302
extern void init_layer3(int);
303
extern void init_layer2(void);
304
extern void make_decode_tables(long scale);
305
extern int make_conv16to8_table(int);
306
extern void dct64(real *,real *,real *);
307
 
308
#ifdef USE_MMX
309
extern void dct64_MMX(short *a,short *b,real *c);
310
extern int synth_1to1_MMX(real *, int, short *, short *, int *);
311
#endif
312
 
313
extern int synth_ntom_set_step(long,long);
314
 
315
 
316
extern unsigned char *conv16to8;
317
extern long freqs[9];
318
extern real muls[27][64];
319
extern real decwin[512+32];
320
#ifndef USE_MMX
321
extern real *pnts[5];
322
#endif
323
 
324
extern real equalizer[2][32];
325
extern real equalizer_sum[2][32];
326
extern int equalizer_cnt;
327
 
328
extern struct audio_name audio_val2name[];
329
 
330
//extern struct parameter param;
331
 
332
/* 486 optimizations */
333
#define FIR_BUFFER_SIZE  128
334
extern void dct64_486(int *a,int *b,real *c);
335
extern int synth_1to1_486(real *bandPtr,int channel,unsigned char *out,int nb_blocks);
336
 
337
/* 3DNow! optimizations */
338
#ifdef USE_3DNOW
339
extern int getcpuflags(void);
340
extern void dct36(real *,real *,real *,real *,real *);
341
extern void dct36_3dnow(real *,real *,real *,real *,real *);
342
extern int synth_1to1_3dnow(real *,int,unsigned char *,int *);
343
#endif
344
 
345
/* avoid the SIGINT in terminal control */
346
void next_track(void);
347
extern long outscale;
348
 
349
#endif
350
 
351
void set_pointer(long backstep);
352
int __stdcall create_reader(struct reader *rd,byte *buffer, int buffsize);
353
int __stdcall init_reader(struct reader *rd, char *file);
354
int __stdcall decode_header(struct frame *fr,unsigned long newhead);
355
int __stdcall set_reader(struct reader *rd, unsigned int filepos);
356
double pow_test(double, double);
357
void * __cdecl mem_cpy(void * dst,const void * src,size_t count);
358
void init_dct();
359
void reset_mpg();
360
#ifdef __cplusplus
361
}
362
#endif