diff options
Diffstat (limited to 'codecs/mp3/include/mhead.h')
-rwxr-xr-x | codecs/mp3/include/mhead.h | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/codecs/mp3/include/mhead.h b/codecs/mp3/include/mhead.h new file mode 100755 index 000000000..06b43efb1 --- /dev/null +++ b/codecs/mp3/include/mhead.h @@ -0,0 +1,299 @@ +/*____________________________________________________________________________ + + FreeAmp - The Free MP3 Player + + MP3 Decoder originally Copyright (C) 1995-1997 Xing Technology + Corp. http://www.xingtech.com + + Portions Copyright (C) 1998 EMusic.com + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id$ +____________________________________________________________________________*/ + +/* portable copy of eco\mhead.h */ +/* mpeg audio header */ + +typedef struct +{ + int sync; /* 1 if valid sync */ + int id; + int option; + int prot; + int br_index; + int sr_index; + int pad; + int private_bit; + int mode; + int mode_ext; + int cr; + int original; + int emphasis; +} +MPEG_HEAD; + +/* portable mpeg audio decoder, decoder functions */ +typedef struct +{ + int in_bytes; + int out_bytes; +} +IN_OUT; + + +typedef struct +{ + int channels; + int outvalues; + long samprate; + int bits; + int framebytes; + int type; +} +DEC_INFO; + +typedef IN_OUT(*AUDIO_DECODE_ROUTINE) (void *mv, unsigned char *bs, signed short *pcm); +typedef IN_OUT(*DECODE_FUNCTION) (void *mv, unsigned char *bs, unsigned char *pcm); + +struct _mpeg; + +typedef struct _mpeg MPEG; + +typedef void (*SBT_FUNCTION_F) (MPEG *m, float *sample, short *pcm, int n); + +/* main data bit buffer */ +#define NBUF (8*1024) +#define BUF_TRIGGER (NBUF-1500) + +typedef void (*XFORM_FUNCTION) (void *mv, void *pcm, int igr); + +struct _mpeg +{ + struct { + float look_c_value[18]; /* built by init */ + unsigned char *bs_ptr; + unsigned long bitbuf; + int bits; + long bitval; + int outbytes; + int framebytes; + int outvalues; + int pad; + int stereo_sb; + DEC_INFO decinfo; /* global for Layer III */ + int max_sb; + int nsb_limit; + int first_pass; + int first_pass_L1; + int bit_skip; + int nbat[4]; + int bat[4][16]; + int ballo[64]; /* set by unpack_ba */ + unsigned int samp_dispatch[66]; /* set by unpack_ba */ + float c_value[64]; /* set by unpack_ba */ + unsigned int sf_dispatch[66]; /* set by unpack_ba */ + float sf_table[64]; + float cs_factor[3][64]; + float *sample; /* global for use by Later 3 */ + signed char group3_table[32][3]; + signed char group5_table[128][3]; + signed short group9_table[1024][3]; + SBT_FUNCTION_F sbt; + AUDIO_DECODE_ROUTINE audio_decode_routine ; + float *cs_factorL1; + float look_c_valueL1[16]; + int nbatL1; + + } cup; + + struct { + /* cupl3.c */ + int nBand[2][22]; /* [long/short][cb] */ + int sfBandIndex[2][22]; /* [long/short][cb] */ + int mpeg25_flag; + int iframe; + int band_limit; + int band_limit21; + int band_limit12; + int band_limit_nsb; + int nsb_limit; + int gaim_adjust; + int id; + int ncbl_mixed; + int gain_adjust; + int sr_index; + int outvalues; + int outbytes; + int half_outbytes; + int framebytes; + int padframebytes; + int crcbytes; + int pad; + int stereo_flag; + int nchan; + int ms_mode; + int is_mode; + unsigned int zero_level_pcm; + CB_INFO cb_info[2][2]; + IS_SF_INFO is_sf_info; /* MPEG-2 intensity stereo */ + unsigned char buf[NBUF]; + int buf_ptr0; + int buf_ptr1; + int main_pos_bit; + SIDE_INFO side_info; + SCALEFACT sf[2][2]; /* [gr][ch] */ + int nsamp[2][2]; /* must start = 0, for nsamp[igr_prev] */ + float yout[576]; /* hybrid out, sbt in */ + SAMPLE sample[2][2][576]; + SBT_FUNCTION_F sbt_L3; + XFORM_FUNCTION Xform; + DECODE_FUNCTION decode_function; + /* msis.c */ + /*-- windows by block type --*/ + float win[4][36]; + float csa[8][2]; /* antialias */ + float lr[2][8][2]; /* [ms_mode 0/1][sf][left/right] */ + float lr2[2][2][64][2]; + /* l3dq.c */ + float look_global[256 + 2 + 4]; + float look_scale[2][4][32]; +#define ISMAX 32 + float look_pow[2 * ISMAX]; + float look_subblock[8]; + float re_buf[192][3]; + } cupl; + struct { + signed int vb_ptr; + signed int vb2_ptr; + float vbuf[512]; + float vbuf2[512]; + int first_pass; + } csbt; + struct { + float coef32[31]; /* 32 pt dct coefs */ + } cdct; +}; + +typedef int (*CVT_FUNCTION_8) (void *mv, unsigned char *pcm); + +typedef struct +{ + struct { + unsigned char look_u[8192]; + short pcm[2304]; + int ncnt; + int ncnt1; + int nlast; + int ndeci; + int kdeci; + int first_pass; + short xsave; + CVT_FUNCTION_8 convert_routine; + } dec; + MPEG cupper; +} +MPEG8; + +#include "itype.h" + +typedef void (*SBT_FUNCTION) (SAMPLEINT * sample, short *pcm, int n); +typedef void (*UNPACK_FUNCTION) (); + +typedef struct +{ + struct { + DEC_INFO decinfo; + int pad; + int look_c_value[18]; /* built by init */ + int look_c_shift[18]; /* built by init */ + int outbytes; + int framebytes; + int outvalues; + int max_sb; + int stereo_sb; + int nsb_limit; + int bit_skip; + int nbat[4]; + int bat[4][16]; + int ballo[64]; /* set by unpack_ba */ + unsigned int samp_dispatch[66]; /* set by unpack_ba */ + int c_value[64]; /* set by unpack_ba */ + int c_shift[64]; /* set by unpack_ba */ + unsigned int sf_dispatch[66]; /* set by unpack_ba */ + int sf_table[64]; + INT32 cs_factor[3][64]; + SAMPLEINT sample[2304]; + signed char group3_table[32][3]; + signed char group5_table[128][3]; + signed short group9_table[1024][3]; + int nsbt; + SBT_FUNCTION sbt; + UNPACK_FUNCTION unpack_routine; + unsigned char *bs_ptr; + UINT32 bitbuf; + int bits; + INT32 bitval; + int first_pass; + int first_pass_L1; + int nbatL1; + INT32 *cs_factorL1; + int look_c_valueL1[16]; /* built by init */ + int look_c_shiftL1[16]; /* built by init */ + } iup; +} +MPEGI; + +#ifdef __cplusplus +extern "C" +{ +#endif + + + void mpeg_init(MPEG *m); + int head_info(unsigned char *buf, unsigned int n, MPEG_HEAD * h); + int head_info2(unsigned char *buf, + unsigned int n, MPEG_HEAD * h, int *br); + int head_info3(unsigned char *buf, unsigned int n, MPEG_HEAD *h, int*br, unsigned int *searchForward); +/* head_info returns framebytes > 0 for success */ +/* audio_decode_init returns 1 for success, 0 for fail */ +/* audio_decode returns in_bytes = 0 on sync loss */ + + int audio_decode_init(MPEG *m, MPEG_HEAD * h, int framebytes_arg, + int reduction_code, int transform_code, int convert_code, + int freq_limit); + void audio_decode_info(MPEG *m, DEC_INFO * info); + IN_OUT audio_decode(MPEG *m, unsigned char *bs, short *pcm); + + void mpeg8_init(MPEG8 *m); + int audio_decode8_init(MPEG8 *m, MPEG_HEAD * h, int framebytes_arg, + int reduction_code, int transform_code, int convert_code, + int freq_limit); + void audio_decode8_info(MPEG8 *m, DEC_INFO * info); + IN_OUT audio_decode8(MPEG8 *m, unsigned char *bs, short *pcmbuf); + +/*-- integer decode --*/ + void i_mpeg_init(MPEGI *m); + int i_audio_decode_init(MPEGI *m, MPEG_HEAD * h, int framebytes_arg, + int reduction_code, int transform_code, int convert_code, + int freq_limit); + void i_audio_decode_info(MPEGI *m, DEC_INFO * info); + IN_OUT i_audio_decode(MPEGI *m, unsigned char *bs, short *pcm); + + + +#ifdef __cplusplus +} +#endif |