~ubuntu-branches/ubuntu/hoary/kdemultimedia/hoary

« back to all changes in this revision

Viewing changes to mpg123_artsplugin/mpg123/mpg123.h

  • Committer: Bazaar Package Importer
  • Author(s): Martin Schulze
  • Date: 2003-01-22 15:00:51 UTC
  • Revision ID: james.westby@ubuntu.com-20030122150051-uihwkdoxf15mi1tn
Tags: upstream-2.2.2
ImportĀ upstreamĀ versionĀ 2.2.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * mpg123 defines 
 
3
 * used source: musicout.h from mpegaudio package
 
4
 */
 
5
 
 
6
#include        <stdio.h>
 
7
#include        <string.h>
 
8
#include        <signal.h>
 
9
 
 
10
#ifndef WIN32
 
11
#include        <sys/signal.h>
 
12
#include        <unistd.h>
 
13
#endif
 
14
 
 
15
#include        <math.h>
 
16
 
 
17
typedef unsigned char byte;
 
18
 
 
19
#ifdef OS2
 
20
#include <float.h>
 
21
#endif
 
22
 
 
23
#define MPG123_REMOTE
 
24
#ifdef HPUX
 
25
#define random rand
 
26
#define srandom srand
 
27
#endif
 
28
 
 
29
#define FRONTEND_NONE     0
 
30
#define FRONTEND_SAJBER   1
 
31
#define FRONTEND_TK3PLAY  2
 
32
#define FRONTEND_GENERIC  3
 
33
 
 
34
#define SKIP_JUNK 1
 
35
 
 
36
#ifdef _WIN32   /* Win32 Additions By Tony Million */
 
37
# undef WIN32
 
38
# define WIN32
 
39
 
 
40
# define M_PI       3.14159265358979323846
 
41
# define M_SQRT2        1.41421356237309504880
 
42
# define REAL_IS_FLOAT
 
43
# define NEW_DCT9
 
44
 
 
45
# define random rand
 
46
# define srandom srand
 
47
 
 
48
# define SIGUSR1 0
 
49
# define SIGCONT 0
 
50
# define SIGSTOP 0
 
51
 
 
52
# undef MPG123_REMOTE           /* Get rid of this stuff for Win32 */
 
53
#endif
 
54
 
 
55
#include "xfermem.h"
 
56
 
 
57
#ifdef SUNOS
 
58
#define memmove(dst,src,size) bcopy(src,dst,size)
 
59
#endif
 
60
 
 
61
#ifdef REAL_IS_FLOAT
 
62
#  define real float
 
63
#elif defined(REAL_IS_LONG_DOUBLE)
 
64
#  define real long double
 
65
#elif defined(REAL_IS_FIXED)
 
66
# define real long
 
67
 
 
68
# define REAL_RADIX             15
 
69
# define REAL_FACTOR            (32.0 * 1024.0)
 
70
 
 
71
# define REAL_PLUS_32767        ( 32767 << REAL_RADIX )
 
72
# define REAL_MINUS_32768       ( -32768 << REAL_RADIX )
 
73
 
 
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)
 
77
 
 
78
#else
 
79
#  define real double
 
80
#endif
 
81
 
 
82
#ifndef DOUBLE_TO_REAL
 
83
# define DOUBLE_TO_REAL(x)      (x)
 
84
#endif
 
85
#ifndef REAL_TO_SHORT
 
86
# define REAL_TO_SHORT(x)       (x)
 
87
#endif
 
88
#ifndef REAL_PLUS_32767
 
89
# define REAL_PLUS_32767        32767.0
 
90
#endif
 
91
#ifndef REAL_MINUS_32768
 
92
# define REAL_MINUS_32768       -32768.0
 
93
#endif
 
94
#ifndef REAL_MUL
 
95
# define REAL_MUL(x, y)         ((x) * (y))
 
96
#endif
 
97
 
 
98
#ifdef __GNUC__
 
99
#define INLINE inline
 
100
#else
 
101
#define INLINE
 
102
#endif
 
103
 
 
104
#include "audio.h"
 
105
 
 
106
/* AUDIOBUFSIZE = n*64 with n=1,2,3 ...  */
 
107
#define         AUDIOBUFSIZE            16384
 
108
 
 
109
#define         FALSE                   0
 
110
#define         TRUE                    1
 
111
 
 
112
#define         MAX_NAME_SIZE           81
 
113
#define         SBLIMIT                 32
 
114
#define         SCALE_BLOCK             12
 
115
#define         SSLIMIT                 18
 
116
 
 
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
 
121
 
 
122
/* #define MAXFRAMESIZE 1792 */
 
123
#define MAXFRAMESIZE 4096
 
124
#define HDRCMPMASK 0xfffffd00
 
125
 
 
126
#define MAXOUTBURST 32768
 
127
 
 
128
/* Pre Shift fo 16 to 8 bit converter table */
 
129
#define AUSHIFT (3)
 
130
 
 
131
 
 
132
struct al_table 
 
133
{
 
134
  short bits;
 
135
  short d;
 
136
};
 
137
 
 
138
struct frame {
 
139
    struct al_table *alloc;
 
140
    int (*synth)(real *,int,unsigned char *,int *);
 
141
    int (*synth_mono)(real *,unsigned char *,int *);
 
142
#ifdef USE_3DNOW
 
143
    void (*dct36)(real *,real *,real *,real *,real *);
 
144
#endif
 
145
    int stereo;
 
146
    int jsbound;
 
147
    int single;
 
148
    int II_sblimit;
 
149
    int down_sample_sblimit;
 
150
    int lsf;
 
151
    int mpeg25;
 
152
    int down_sample;
 
153
    int header_change;
 
154
    int lay;
 
155
    int error_protection;
 
156
    int bitrate_index;
 
157
    int sampling_frequency;
 
158
    int padding;
 
159
    int extension;
 
160
    int mode;
 
161
    int mode_ext;
 
162
    int copyright;
 
163
    int original;
 
164
    int emphasis;
 
165
    int framesize; /* computed framesize */
 
166
    int padsize;   /* */
 
167
 
 
168
    int sideInfoSize; /* Layer3 sideInfo Header size */
 
169
 
 
170
    /* FIXME: move this to another place */
 
171
    unsigned long firsthead;
 
172
    unsigned long thishead;
 
173
    int freeformatsize;
 
174
};
 
175
 
 
176
#define VBR_TOC_SIZE        100
 
177
 
 
178
#define VBR_FRAMES_FLAG     0x0001
 
179
#define VBR_BYTES_FLAG      0x0002
 
180
#define VBR_TOC_FLAG        0x0004
 
181
#define VBR_SCALE_FLAG      0x0008
 
182
 
 
183
struct vbrHeader {
 
184
        unsigned long flags;
 
185
        unsigned long frames;
 
186
        unsigned long bytes;
 
187
        unsigned long scale;
 
188
        unsigned char toc[100];
 
189
};
 
190
 
 
191
struct parameter {
 
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 */
 
201
#ifdef TERM_CONTROL
 
202
    int term_ctrl;
 
203
#endif
 
204
    int force_mono;
 
205
    int force_stereo;
 
206
    int force_8bit;
 
207
    long force_rate;
 
208
    double pitch;
 
209
    int down_sample;
 
210
    int checkrange;
 
211
    long doublespeed;
 
212
    long halfspeed;
 
213
    int force_reopen;
 
214
    int stat_3dnow; /* automatic/force/force-off 3DNow! optimized code */
 
215
    int test_3dnow;
 
216
    int realtime;
 
217
    char filename[256];
 
218
    char *esdserver;
 
219
    char *equalfile;
 
220
    int  enable_equalizer;
 
221
    long outscale;
 
222
    long startFrame;
 
223
    int print_version;
 
224
};
 
225
 
 
226
struct bitstream_info {
 
227
  int bitindex;
 
228
  unsigned char *wordpointer;
 
229
};
 
230
 
 
231
struct mpstr {
 
232
  int bsize;
 
233
  int framesize;
 
234
  int fsizeold;
 
235
  struct frame fr;
 
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];
 
239
  int  hybrid_blc[2];
 
240
  unsigned long header;
 
241
  int bsnum;
 
242
  real synth_buffs[2][2][0x110];
 
243
  int  synth_bo;
 
244
 
 
245
  struct bitstream_info bsi;
 
246
};
 
247
 
 
248
extern struct bitstream_info bsi;
 
249
 
 
250
struct reader {
 
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 *);
 
261
  long filelen;
 
262
  long filepos;
 
263
  int  filept;
 
264
  int  flags;
 
265
  unsigned char id3buf[128];
 
266
  
 
267
  unsigned char *backbuf;
 
268
  int mark;
 
269
  int bufpos,bufstart,bufend;
 
270
  int bufsize;
 
271
};
 
272
#define READER_FD_OPENED 0x1
 
273
#define READER_ID3TAG    0x2
 
274
 
 
275
extern struct reader *rd,readers[];
 
276
 
 
277
extern int halfspeed;
 
278
extern int buffer_fd[2];
 
279
extern txfermem *buffermem;
 
280
extern char *prgName, *prgVersion;
 
281
 
 
282
#ifndef NOXFERMEM
 
283
extern void buffer_loop(struct audio_info_struct *ai,sigset_t *oldsigset);
 
284
#endif
 
285
 
 
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);
 
289
 
 
290
 
 
291
/* ------ Declarations from "httpget.c" ------ */
 
292
 
 
293
extern char *proxyurl;
 
294
extern unsigned long proxyip;
 
295
extern int http_open (const char *url);
 
296
extern char *httpauth;
 
297
 
 
298
/* ------ Declarations from "common.c" ------ */
 
299
 
 
300
int sync_stream(struct reader *rds,struct frame *fr,int flags,int *skipped);
 
301
 
 
302
extern void audio_flush(int, struct audio_info_struct *);
 
303
extern void (*catchsignal(int signum, void(*handler)()))();
 
304
 
 
305
extern void print_header(struct frame *);
 
306
extern void print_header_compact(struct frame *);
 
307
extern void print_id3_tag(unsigned char *buf);
 
308
 
 
309
extern int split_dir_file(const char *path, char **dname, char **fname);
 
310
 
 
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 *);
 
317
 
 
318
extern void set_pointer(int,long);
 
319
 
 
320
extern unsigned char *pcm_sample;
 
321
extern int pcm_point;
 
322
extern int audiobufsize;
 
323
 
 
324
extern int OutputDescriptor;
 
325
 
 
326
struct gr_info_s {
 
327
      int scfsi;
 
328
      unsigned part2_3_length;
 
329
      unsigned big_values;
 
330
      unsigned scalefac_compress;
 
331
      unsigned block_type;
 
332
      unsigned mixed_block_flag;
 
333
      unsigned table_select[3];
 
334
      unsigned subblock_gain[3];
 
335
      unsigned maxband[3];
 
336
      unsigned maxbandl;
 
337
      unsigned maxb;
 
338
      unsigned region1start;
 
339
      unsigned region2start;
 
340
      unsigned preflag;
 
341
      unsigned scalefac_scale;
 
342
      unsigned count1table_select;
 
343
      real *full_gain[3];
 
344
      real *pow2gain;
 
345
};
 
346
 
 
347
struct III_sideinfo
 
348
{
 
349
  unsigned main_data_begin;
 
350
  unsigned private_bits;
 
351
  struct {
 
352
    struct gr_info_s gr[2];
 
353
  } ch[2];
 
354
};
 
355
 
 
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);
 
364
 
 
365
#ifdef PENTIUM_OPT
 
366
extern int synth_1to1_pent (real *,int,unsigned char *);
 
367
#endif
 
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 *);
 
374
 
 
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 *);
 
381
 
 
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 *);
 
388
 
 
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 *);
 
395
 
 
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);
 
402
 
 
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 *);
 
408
 
 
409
#ifdef USE_MMX
 
410
extern void dct64_MMX(short *a,short *b,real *c);
 
411
extern int synth_1to1_MMX(real *, int, short *, short *, int *);
 
412
#endif
 
413
 
 
414
extern void synth_ntom_set_step(long,long);
 
415
 
 
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);
 
419
 
 
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);
 
427
 
 
428
extern int au_open(struct audio_info_struct *ai, char *aufilename);
 
429
extern int au_close(void);
 
430
 
 
431
extern int cdr_open(struct audio_info_struct *ai, char *cdrfilename);
 
432
extern int cdr_close(void);
 
433
 
 
434
extern int getVBRHeader(struct vbrHeader *head,unsigned char *buf, 
 
435
        struct frame *fr);
 
436
 
 
437
 
 
438
extern unsigned char *conv16to8;
 
439
extern long freqs[9];
 
440
extern real muls[27][64];
 
441
extern real decwin[512+32];
 
442
#ifndef USE_MMX
 
443
extern real *pnts[5];
 
444
#endif
 
445
 
 
446
extern real equalizer[2][32];
 
447
extern real equalizer_sum[2][32];
 
448
extern int equalizer_cnt;
 
449
 
 
450
extern struct audio_name audio_val2name[];
 
451
 
 
452
extern struct parameter param;
 
453
 
 
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);
 
458
 
 
459
/* 3DNow! optimizations */
 
460
#ifdef USE_3DNOW
 
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 *);
 
465
#endif