/* Changed Sept 15th by John M McIntosh to support Macintosh & Squeak */ #ifndef MPEG3AUDIO_H #define MPEG3AUDIO_H #include "ac3.h" #include "bitstream.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #define M_SQRT2 1.41421356237309504880 #endif #define MAXFRAMESIZE 1792 #define HDRCMPMASK 0xfffffd00 #define SBLIMIT 32 #define SSLIMIT 18 #define SCALE_BLOCK 12 #define MPEG3AUDIO_PADDING 1024 /* Values for mode */ #define MPG_MD_STEREO 0 #define MPG_MD_JOINT_STEREO 1 #define MPG_MD_DUAL_CHANNEL 2 #define MPG_MD_MONO 3 /* IMDCT variables */ typedef struct { float real; float imag; } mpeg3_complex_t; #define AC3_N 512 struct al_table { short bits; short d; }; typedef struct { void* file; void* track; mpeg3_bits_t *astream; /* In order of importance */ int format; /* format of audio */ int layer; /* layer if mpeg */ int channels; long outscale; long framenum; long prev_framesize; long framesize; /* For mp3 current framesize without header. For AC3 current framesize with header. */ float avg_framesize; /* Includes the 4 byte header */ float *pcm_sample; /* Interlaced output from synthesizer in floats */ int pcm_point; /* Float offset in pcm_sample to write to */ long pcm_position; /* Sample start of pcm_samples in file */ long pcm_size; /* Number of pcm samples in the buffer */ long pcm_allocated; /* Allocated number of samples in pcm_samples */ int sample_seek; double percentage_seek; unsigned long oldhead; unsigned long newhead; unsigned long firsthead; int bsnum; int lsf; int mpeg35; int sampling_frequency_code; int bitrate_index; int bitrate; int samples_per_frame; int padding; int extension; int mode; int mode_ext; int copyright; int original; int emphasis; int error_protection; /* Back step buffers for mp3 */ unsigned char bsspace[2][MAXFRAMESIZE + 512]; /* MAXFRAMESIZE */ unsigned char *bsbuf, *bsbufold; long ssize; int init; int single; struct al_table *alloc; int II_sblimit; int jsbound; int bo; /* Static variable in synthesizer */ /* MP3 Static arrays here */ float synth_stereo_buffs[2][2][0x110]; float synth_mono_buff[64]; unsigned int layer2_scfsi_buf[64]; float mp3_block[2][2][SBLIMIT * SSLIMIT]; int mp3_blc[2]; /* AC3 specific stuff. AC3 also shares objects with MPEG */ unsigned int ac3_framesize_code; mpeg3_ac3bsi_t ac3_bsi; mpeg3_ac3audblk_t ac3_audblk; mpeg3_ac3_bitallocation_t ac3_bit_allocation; mpeg3_ac3_mantissa_t ac3_mantissa; mpeg3_complex_t ac3_imdct_buf[AC3_N / 4]; /* Delay buffer for DCT interleaving */ float ac3_delay[6][AC3_N / 2]; /* Twiddle factor LUT */ mpeg3_complex_t *ac3_w[7]; mpeg3_complex_t ac3_w_1[1]; mpeg3_complex_t ac3_w_2[2]; mpeg3_complex_t ac3_w_4[4]; mpeg3_complex_t ac3_w_8[8]; mpeg3_complex_t ac3_w_16[16]; mpeg3_complex_t ac3_w_32[32]; mpeg3_complex_t ac3_w_64[64]; int ac3_lfsr_state; unsigned char ac3_buffer[MAX_AC3_FRAMESIZE]; mpeg3ac3_stream_samples_t ac3_samples; } mpeg3audio_t; #endif