3
* used source: musicout.h from mpegaudio package
11
#include <sys/signal.h>
17
typedef unsigned char byte;
29
#define FRONTEND_NONE 0
30
#define FRONTEND_SAJBER 1
31
#define FRONTEND_TK3PLAY 2
32
#define FRONTEND_GENERIC 3
36
#ifdef _WIN32 /* Win32 Additions By Tony Million */
40
# define M_PI 3.14159265358979323846
41
# define M_SQRT2 1.41421356237309504880
42
# define REAL_IS_FLOAT
46
# define srandom srand
52
# undef MPG123_REMOTE /* Get rid of this stuff for Win32 */
58
#define memmove(dst,src,size) bcopy(src,dst,size)
63
#elif defined(REAL_IS_LONG_DOUBLE)
64
# define real long double
65
#elif defined(REAL_IS_FIXED)
68
# define REAL_RADIX 15
69
# define REAL_FACTOR (32.0 * 1024.0)
71
# define REAL_PLUS_32767 ( 32767 << REAL_RADIX )
72
# define REAL_MINUS_32768 ( -32768 << REAL_RADIX )
74
# define DOUBLE_TO_REAL(x) ((int)((x) * REAL_FACTOR))
75
# define REAL_TO_SHORT(x) ((x) >> REAL_RADIX)
76
# define REAL_MUL(x, y) (((long long)(x) * (long long)(y)) >> REAL_RADIX)
82
#ifndef DOUBLE_TO_REAL
83
# define DOUBLE_TO_REAL(x) (x)
86
# define REAL_TO_SHORT(x) (x)
88
#ifndef REAL_PLUS_32767
89
# define REAL_PLUS_32767 32767.0
91
#ifndef REAL_MINUS_32768
92
# define REAL_MINUS_32768 -32768.0
95
# define REAL_MUL(x, y) ((x) * (y))
106
/* AUDIOBUFSIZE = n*64 with n=1,2,3 ... */
107
#define AUDIOBUFSIZE 16384
112
#define MAX_NAME_SIZE 81
114
#define SCALE_BLOCK 12
117
#define MPG_MD_STEREO 0
118
#define MPG_MD_JOINT_STEREO 1
119
#define MPG_MD_DUAL_CHANNEL 2
120
#define MPG_MD_MONO 3
122
/* #define MAXFRAMESIZE 1792 */
123
#define MAXFRAMESIZE 4096
124
#define HDRCMPMASK 0xfffffd00
126
#define MAXOUTBURST 32768
128
/* Pre Shift fo 16 to 8 bit converter table */
139
struct al_table *alloc;
140
int (*synth)(real *,int,unsigned char *,int *);
141
int (*synth_mono)(real *,unsigned char *,int *);
143
void (*dct36)(real *,real *,real *,real *,real *);
149
int down_sample_sblimit;
155
int error_protection;
157
int sampling_frequency;
165
int framesize; /* computed framesize */
168
int sideInfoSize; /* Layer3 sideInfo Header size */
170
/* FIXME: move this to another place */
171
unsigned long firsthead;
172
unsigned long thishead;
176
#define VBR_TOC_SIZE 100
178
#define VBR_FRAMES_FLAG 0x0001
179
#define VBR_BYTES_FLAG 0x0002
180
#define VBR_TOC_FLAG 0x0004
181
#define VBR_SCALE_FLAG 0x0008
185
unsigned long frames;
188
unsigned char toc[100];
192
int aggressive; /* renice to max. priority */
193
int shuffle; /* shuffle/random play */
194
int remote; /* remote operation */
195
int outmode; /* where to out the decoded sampels */
196
int quiet; /* shut up! */
197
int xterm_title; /* print filename in xterm title */
198
long usebuffer; /* second level buffer size */
199
int tryresync; /* resync stream after error */
200
int verbose; /* verbose level */
214
int stat_3dnow; /* automatic/force/force-off 3DNow! optimized code */
220
int enable_equalizer;
226
struct bitstream_info {
228
unsigned char *wordpointer;
236
/* int (*do_layer)(struct mpstr *,struct frame *fr,int,struct audio_info_struct *); */
237
unsigned char bsspace[2][MAXFRAMESIZE+512]; /* MAXFRAMESIZE */
238
real hybrid_block[2][2][SBLIMIT*SSLIMIT];
240
unsigned long header;
242
real synth_buffs[2][2][0x110];
245
struct bitstream_info bsi;
248
extern struct bitstream_info bsi;
251
int (*init)(struct reader *);
252
void (*close)(struct reader *);
253
int (*head_read)(struct reader *,unsigned long *newhead);
254
int (*head_shift)(struct reader *,unsigned long *head);
255
int (*skip_bytes)(struct reader *,int len);
256
int (*read_frame_body)(struct reader *,unsigned char *,int size);
257
int (*back_bytes)(struct reader *,int bytes);
258
int (*back_frame)(struct reader *,struct frame *,int num);
259
long (*tell)(struct reader *);
260
void (*rewind)(struct reader *);
265
unsigned char id3buf[128];
267
unsigned char *backbuf;
269
int bufpos,bufstart,bufend;
272
#define READER_FD_OPENED 0x1
273
#define READER_ID3TAG 0x2
275
extern struct reader *rd,readers[];
277
extern int halfspeed;
278
extern int buffer_fd[2];
279
extern txfermem *buffermem;
280
extern char *prgName, *prgVersion;
283
extern void buffer_loop(struct audio_info_struct *ai,sigset_t *oldsigset);
286
extern void readers_pushback_header(struct reader *rds,unsigned long aLong);
287
extern void readers_mark_pos(struct reader *rds);
288
extern void readers_goto_mark(struct reader *rds);
291
/* ------ Declarations from "httpget.c" ------ */
293
extern char *proxyurl;
294
extern unsigned long proxyip;
295
extern int http_open (const char *url);
296
extern char *httpauth;
298
/* ------ Declarations from "common.c" ------ */
300
int sync_stream(struct reader *rds,struct frame *fr,int flags,int *skipped);
302
extern void audio_flush(int, struct audio_info_struct *);
303
extern void (*catchsignal(int signum, void(*handler)()))();
305
extern void print_header(struct frame *);
306
extern void print_header_compact(struct frame *);
307
extern void print_id3_tag(unsigned char *buf);
309
extern int split_dir_file(const char *path, char **dname, char **fname);
311
extern unsigned int get1bit(struct bitstream_info *);
312
extern unsigned int getbits(struct bitstream_info *,int);
313
extern unsigned int getbits_fast(struct bitstream_info *,int);
314
extern void backbits(struct bitstream_info *,int);
315
extern int getbitoffset(struct bitstream_info *);
316
extern int getbyte(struct bitstream_info *);
318
extern void set_pointer(int,long);
320
extern unsigned char *pcm_sample;
321
extern int pcm_point;
322
extern int audiobufsize;
324
extern int OutputDescriptor;
328
unsigned part2_3_length;
330
unsigned scalefac_compress;
332
unsigned mixed_block_flag;
333
unsigned table_select[3];
334
unsigned subblock_gain[3];
338
unsigned region1start;
339
unsigned region2start;
341
unsigned scalefac_scale;
342
unsigned count1table_select;
349
unsigned main_data_begin;
350
unsigned private_bits;
352
struct gr_info_s gr[2];
356
extern struct reader *open_stream(const char *,int fd);
357
extern void read_frame_init (struct frame *fr);
358
extern int read_frame(struct reader *rd,struct frame *fr);
359
extern int play_frame(struct mpstr *mp,int init,struct frame *fr);
360
extern int do_layer3(struct mpstr *mp,struct frame *fr,int,struct audio_info_struct *);
361
extern int do_layer2(struct mpstr *mp,struct frame *fr,int,struct audio_info_struct *);
362
extern int do_layer1(struct mpstr *mp,struct frame *fr,int,struct audio_info_struct *);
363
extern void do_equalizer(real *bandPtr,int channel);
366
extern int synth_1to1_pent (real *,int,unsigned char *);
368
extern int synth_1to1 (real *,int,unsigned char *,int *);
369
extern int synth_1to1_8bit (real *,int,unsigned char *,int *);
370
extern int synth_1to1_mono (real *,unsigned char *,int *);
371
extern int synth_1to1_mono2stereo (real *,unsigned char *,int *);
372
extern int synth_1to1_8bit_mono (real *,unsigned char *,int *);
373
extern int synth_1to1_8bit_mono2stereo (real *,unsigned char *,int *);
375
extern int synth_2to1 (real *,int,unsigned char *,int *);
376
extern int synth_2to1_8bit (real *,int,unsigned char *,int *);
377
extern int synth_2to1_mono (real *,unsigned char *,int *);
378
extern int synth_2to1_mono2stereo (real *,unsigned char *,int *);
379
extern int synth_2to1_8bit_mono (real *,unsigned char *,int *);
380
extern int synth_2to1_8bit_mono2stereo (real *,unsigned char *,int *);
382
extern int synth_4to1 (real *,int,unsigned char *,int *);
383
extern int synth_4to1_8bit (real *,int,unsigned char *,int *);
384
extern int synth_4to1_mono (real *,unsigned char *,int *);
385
extern int synth_4to1_mono2stereo (real *,unsigned char *,int *);
386
extern int synth_4to1_8bit_mono (real *,unsigned char *,int *);
387
extern int synth_4to1_8bit_mono2stereo (real *,unsigned char *,int *);
389
extern int synth_ntom (real *,int,unsigned char *,int *);
390
extern int synth_ntom_8bit (real *,int,unsigned char *,int *);
391
extern int synth_ntom_mono (real *,unsigned char *,int *);
392
extern int synth_ntom_mono2stereo (real *,unsigned char *,int *);
393
extern int synth_ntom_8bit_mono (real *,unsigned char *,int *);
394
extern int synth_ntom_8bit_mono2stereo (real *,unsigned char *,int *);
396
extern void rewindNbits(int bits);
397
extern int hsstell(void);
398
extern void huffman_decoder(int ,int *);
399
extern void huffman_count1(int,int *);
400
extern void print_stat(struct reader *rd,struct frame *fr,int no,long buffsize,struct audio_info_struct *ai);
401
extern int get_songlen(struct reader *rd,struct frame *fr,int no);
403
extern void init_layer3(int);
404
extern void init_layer2(void);
405
extern void make_decode_tables(long scale);
406
extern void make_conv16to8_table(int);
407
extern void dct64(real *,real *,real *);
410
extern void dct64_MMX(short *a,short *b,real *c);
411
extern int synth_1to1_MMX(real *, int, short *, short *, int *);
414
extern void synth_ntom_set_step(long,long);
416
extern void control_generic(struct mpstr *,struct frame *fr);
417
extern void control_sajber(struct mpstr *,struct frame *fr);
418
extern void control_tk3play(struct mpstr *,struct frame *fr);
420
extern int cdr_open(struct audio_info_struct *ai, char *ame);
421
extern int au_open(struct audio_info_struct *ai, char *name);
422
extern int wav_open(struct audio_info_struct *ai, char *wavfilename);
423
extern int wav_write(unsigned char *buf,int len);
424
extern int cdr_close(void);
425
extern int au_close(void);
426
extern int wav_close(void);
428
extern int au_open(struct audio_info_struct *ai, char *aufilename);
429
extern int au_close(void);
431
extern int cdr_open(struct audio_info_struct *ai, char *cdrfilename);
432
extern int cdr_close(void);
434
extern int getVBRHeader(struct vbrHeader *head,unsigned char *buf,
438
extern unsigned char *conv16to8;
439
extern long freqs[9];
440
extern real muls[27][64];
441
extern real decwin[512+32];
443
extern real *pnts[5];
446
extern real equalizer[2][32];
447
extern real equalizer_sum[2][32];
448
extern int equalizer_cnt;
450
extern struct audio_name audio_val2name[];
452
extern struct parameter param;
454
/* 486 optimizations */
455
#define FIR_BUFFER_SIZE 128
456
extern void dct64_486(int *a,int *b,real *c);
457
extern int synth_1to1_486(real *bandPtr,int channel,unsigned char *out,int nb_blocks);
459
/* 3DNow! optimizations */
461
extern int getcpuflags(void);
462
extern void dct36(real *,real *,real *,real *,real *);
463
extern void dct36_3dnow(real *,real *,real *,real *,real *);
464
extern int synth_1to1_3dnow(real *,int,unsigned char *,int *);