#ifndef MPG123_DECODE_H
#define MPG123_DECODE_H
#ifndef REAL_IS_FIXED
#define OUT_FORMATS 4
#else
#define OUT_FORMATS 2
#endif
#define OUT_16 0
#define OUT_8 1
#define OUT_REAL 2
#define OUT_S32 3
#ifdef NO_NTOM
#define NTOM_MAX 1
#else
#define NTOM_MAX 8
#define NTOM_MAX_FREQ 96000
#define NTOM_MUL (32768)
void INT123_ntom_set_ntom(mpg123_handle *fr, int64_t num);
#endif
#ifndef NO_16BIT
int INT123_synth_1to1 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_dither (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_i586 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_i586_dither(real*, int, mpg123_handle*, int);
int INT123_synth_1to1_mmx (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_3dnow (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_sse (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_stereo_sse (real*, real*, mpg123_handle*);
int INT123_synth_1to1_3dnowext (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_altivec (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_stereo_altivec(real*, real*, mpg123_handle*);
int INT123_synth_1to1_x86_64 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_stereo_x86_64(real*, real*, mpg123_handle*);
int INT123_synth_1to1_avx (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_stereo_avx (real*, real*, mpg123_handle*);
int INT123_synth_1to1_arm (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_neon (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_stereo_neon(real*, real*, mpg123_handle*);
int INT123_synth_1to1_neon64 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_stereo_neon64(real*, real*, mpg123_handle*);
int INT123_absynth_1to1_i486(real*, int, mpg123_handle*, int);
int INT123_synth_1to1_mono (real*, mpg123_handle*);
int INT123_synth_1to1_m2s(real*, mpg123_handle*);
#ifndef NO_DOWNSAMPLE
int INT123_synth_2to1 (real*, int, mpg123_handle*, int);
int INT123_synth_2to1_dither (real*, int, mpg123_handle*, int);
int INT123_synth_2to1_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_2to1_mono (real*, mpg123_handle*);
int INT123_synth_2to1_m2s(real*, mpg123_handle*);
int INT123_synth_4to1 (real *,int, mpg123_handle*, int);
int INT123_synth_4to1_dither (real *,int, mpg123_handle*, int);
int INT123_synth_4to1_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_4to1_mono (real*, mpg123_handle*);
int INT123_synth_4to1_m2s(real*, mpg123_handle*);
#endif
#ifndef NO_NTOM
int INT123_synth_ntom (real *,int, mpg123_handle*, int);
int INT123_synth_ntom_mono (real *, mpg123_handle *);
int INT123_synth_ntom_m2s (real *, mpg123_handle *);
#endif
#endif
#ifndef NO_8BIT
int INT123_synth_1to1_8bit (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_8bit_i386 (real*, int, mpg123_handle*, int);
#ifndef NO_16BIT
int INT123_synth_1to1_8bit_wrap (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_8bit_mono (real*, mpg123_handle*);
#endif
int INT123_synth_1to1_8bit_m2s(real*, mpg123_handle*);
#ifndef NO_16BIT
int INT123_synth_1to1_8bit_wrap_mono (real*, mpg123_handle*);
int INT123_synth_1to1_8bit_wrap_m2s(real*, mpg123_handle*);
#endif
#ifndef NO_DOWNSAMPLE
int INT123_synth_2to1_8bit (real*, int, mpg123_handle*, int);
int INT123_synth_2to1_8bit_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_2to1_8bit_mono (real*, mpg123_handle*);
int INT123_synth_2to1_8bit_m2s(real*, mpg123_handle*);
int INT123_synth_4to1_8bit (real*, int, mpg123_handle*, int);
int INT123_synth_4to1_8bit_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_4to1_8bit_mono (real*, mpg123_handle*);
int INT123_synth_4to1_8bit_m2s(real*, mpg123_handle*);
#endif
#ifndef NO_NTOM
int INT123_synth_ntom_8bit (real*, int, mpg123_handle*, int);
int INT123_synth_ntom_8bit_mono (real*, mpg123_handle*);
int INT123_synth_ntom_8bit_m2s(real*, mpg123_handle*);
#endif
#endif
#ifndef REAL_IS_FIXED
#ifndef NO_REAL
int INT123_synth_1to1_real (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_real_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_real_sse (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_real_stereo_sse (real*, real*, mpg123_handle*);
int INT123_synth_1to1_real_x86_64 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_real_stereo_x86_64(real*, real*, mpg123_handle*);
int INT123_synth_1to1_real_avx (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_fltst_avx (real*, real*, mpg123_handle*);
int INT123_synth_1to1_real_altivec (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_fltst_altivec(real*, real*, mpg123_handle*);
int INT123_synth_1to1_real_neon (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_real_stereo_neon(real*, real*, mpg123_handle*);
int INT123_synth_1to1_real_neon64 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_fltst_neon64(real*, real*, mpg123_handle*);
int INT123_synth_1to1_real_mono (real*, mpg123_handle*);
int INT123_synth_1to1_real_m2s(real*, mpg123_handle*);
#ifndef NO_DOWNSAMPLE
int INT123_synth_2to1_real (real*, int, mpg123_handle*, int);
int INT123_synth_2to1_real_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_2to1_real_mono (real*, mpg123_handle*);
int INT123_synth_2to1_real_m2s(real*, mpg123_handle*);
int INT123_synth_4to1_real (real*, int, mpg123_handle*, int);
int INT123_synth_4to1_real_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_4to1_real_mono (real*, mpg123_handle*);
int INT123_synth_4to1_real_m2s(real*, mpg123_handle*);
#endif
#ifndef NO_NTOM
int INT123_synth_ntom_real (real*, int, mpg123_handle*, int);
int INT123_synth_ntom_real_mono (real*, mpg123_handle*);
int INT123_synth_ntom_real_m2s(real*, mpg123_handle*);
#endif
#endif
#ifndef NO_32BIT
int INT123_synth_1to1_s32 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_s32_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_s32_sse (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_s32_stereo_sse (real*, real*, mpg123_handle*);
int INT123_synth_1to1_s32_x86_64 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_s32_stereo_x86_64(real*, real*, mpg123_handle*);
int INT123_synth_1to1_s32_avx (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_s32_stereo_avx (real*, real*, mpg123_handle*);
int INT123_synth_1to1_s32_altivec (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_s32_stereo_altivec(real*, real*, mpg123_handle*);
int INT123_synth_1to1_s32_neon (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_s32_stereo_neon(real*, real*, mpg123_handle*);
int INT123_synth_1to1_s32_neon64 (real*, int, mpg123_handle*, int);
int INT123_synth_1to1_s32st_neon64(real*, real*, mpg123_handle*);
int INT123_synth_1to1_s32_mono (real*, mpg123_handle*);
int INT123_synth_1to1_s32_m2s(real*, mpg123_handle*);
#ifndef NO_DOWNSAMPLE
int INT123_synth_2to1_s32 (real*, int, mpg123_handle*, int);
int INT123_synth_2to1_s32_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_2to1_s32_mono (real*, mpg123_handle*);
int INT123_synth_2to1_s32_m2s(real*, mpg123_handle*);
int INT123_synth_4to1_s32 (real*, int, mpg123_handle*, int);
int INT123_synth_4to1_s32_i386 (real*, int, mpg123_handle*, int);
int INT123_synth_4to1_s32_mono (real*, mpg123_handle*);
int INT123_synth_4to1_s32_m2s(real*, mpg123_handle*);
#endif
#ifndef NO_NTOM
int INT123_synth_ntom_s32 (real*, int, mpg123_handle*, int);
int INT123_synth_ntom_s32_mono (real*, mpg123_handle*);
int INT123_synth_ntom_s32_m2s(real*, mpg123_handle*);
#endif
#endif
#endif
void INT123_dct64 (real *,real *,real *);
void INT123_dct64_i386 (real *,real *,real *);
void INT123_dct64_altivec(real *,real *,real *);
void INT123_dct64_i486(int*, int* , real*);
int INT123_synth_ntom_set_step(mpg123_handle *fr);
unsigned long INT123_ntom_val(mpg123_handle *fr, int64_t frame);
#ifndef NO_NTOM
int64_t INT123_ntom_frame_outsamples(mpg123_handle *fr);
int64_t INT123_ntom_frmouts(mpg123_handle *fr, int64_t frame);
int64_t INT123_ntom_ins2outs(mpg123_handle *fr, int64_t ins);
int64_t INT123_ntom_frameoff(mpg123_handle *fr, int64_t soff);
#endif
#ifndef NO_LAYER3
#ifdef OPT_THE_DCT36
void INT123_dct36_choose(mpg123_handle *fr);
int INT123_dct36_match(mpg123_handle *fr, enum optdec t);
#endif
#ifdef RUNTIME_TABLES
void INT123_init_layer3(void);
#endif
real INT123_init_layer3_gainpow2(mpg123_handle *fr, int i);
void INT123_init_layer3_stuff(mpg123_handle *fr, real (*gainpow2)(mpg123_handle *fr, int i));
#endif
#ifndef NO_LAYER12
#ifdef RUNTIME_TABLES
void INT123_init_layer12(void);
#endif
real* INT123_init_layer12_table(mpg123_handle *fr, real *table, int m);
void INT123_init_layer12_stuff(mpg123_handle *fr, real* (*init_table)(mpg123_handle *fr, real *table, int m));
#endif
#ifdef RUNTIME_TABLES
void INT123_init_costabs(void);
#else
const
#endif
extern real *INT123_pnts[5];
void INT123_make_decode_tables(mpg123_handle *fr);
#ifdef OPT_MMXORSSE
void INT123_make_decode_tables_mmx(mpg123_handle *fr);
#ifndef NO_LAYER3
real INT123_init_layer3_gainpow2_mmx(mpg123_handle *fr, int i);
#endif
#ifndef NO_LAYER12
real* INT123_init_layer12_table_mmx(mpg123_handle *fr, real *table, int m);
#endif
#endif
#ifndef NO_8BIT
int INT123_make_conv16to8_table(mpg123_handle *fr);
#endif
#ifndef NO_LAYER3
int INT123_do_layer3(mpg123_handle *fr);
#endif
#ifndef NO_LAYER2
int INT123_do_layer2(mpg123_handle *fr);
#endif
#ifndef NO_LAYER1
int INT123_do_layer1(mpg123_handle *fr);
#endif
void INT123_do_equalizer(real *bandPtr,int channel, real equalizer[2][32]);
#endif