| /* | |
| * Copyright (c) Michael Hipp and other authors of the mpglib project. | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library 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 | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #include <stdio.h> | |
| #include <string.h> | |
| #include <signal.h> | |
| #ifndef WIN32 | |
| #include <sys/signal.h> | |
| #include <unistd.h> | |
| #endif | |
| #include <math.h> | |
| #ifdef _WIN32 | |
| # undef WIN32 | |
| # define WIN32 | |
| # define M_PI 3.14159265358979323846 | |
| # define M_SQRT2 1.41421356237309504880 | |
| # define REAL_IS_FLOAT | |
| # define NEW_DCT9 | |
| # define random rand | |
| # define srandom srand | |
| #endif | |
| #ifdef REAL_IS_FLOAT | |
| # define real float | |
| #elif defined(REAL_IS_LONG_DOUBLE) | |
| # define real long double | |
| #else | |
| # define real double | |
| #endif | |
| #ifdef __GNUC__ | |
| #define INLINE inline | |
| #else | |
| #define INLINE | |
| #endif | |
| /* AUDIOBUFSIZE = n*64 with n=1,2,3 ... */ | |
| #define AUDIOBUFSIZE 16384 | |
| #ifndef FALSE | |
| #define FALSE 0 | |
| #endif | |
| #ifndef FALSE | |
| #define TRUE 1 | |
| #endif | |
| #define SBLIMIT 32 | |
| #define SSLIMIT 18 | |
| #define SCALE_BLOCK 12 | |
| #define MPG_MD_STEREO 0 | |
| #define MPG_MD_JOINT_STEREO 1 | |
| #define MPG_MD_DUAL_CHANNEL 2 | |
| #define MPG_MD_MONO 3 | |
| #define MAXFRAMESIZE 1792 | |
| /* Pre Shift fo 16 to 8 bit converter table */ | |
| #define AUSHIFT (3) | |
| struct frame { | |
| int stereo; | |
| int jsbound; | |
| int single; | |
| int lsf; | |
| int mpeg25; | |
| int header_change; | |
| int lay; | |
| int error_protection; | |
| int bitrate_index; | |
| int sampling_frequency; | |
| int padding; | |
| int extension; | |
| int mode; | |
| int mode_ext; | |
| int copyright; | |
| int original; | |
| int emphasis; | |
| int framesize; /* computed framesize */ | |
| /* layer2 stuff */ | |
| int II_sblimit; | |
| void *alloc; | |
| }; | |
| struct parameter { | |
| int quiet; /* shut up! */ | |
| int tryresync; /* resync stream after error */ | |
| int verbose; /* verbose level */ | |
| int checkrange; | |
| }; | |
| extern unsigned int get1bit(void); | |
| extern unsigned int getbits(int); | |
| extern unsigned int getbits_fast(int); | |
| extern int set_pointer(long); | |
| extern unsigned char *wordpointer; | |
| extern int bitindex; | |
| extern void make_decode_tables(long scaleval); | |
| extern int do_layer3(struct frame *fr,unsigned char *,int *); | |
| extern int do_layer2(struct frame *fr,unsigned char *,int *); | |
| extern int do_layer1(struct frame *fr,unsigned char *,int *); | |
| extern int decode_header(struct frame *fr,unsigned long newhead); | |
| struct gr_info_s { | |
| int scfsi; | |
| unsigned part2_3_length; | |
| unsigned big_values; | |
| unsigned scalefac_compress; | |
| unsigned block_type; | |
| unsigned mixed_block_flag; | |
| unsigned table_select[3]; | |
| unsigned subblock_gain[3]; | |
| unsigned maxband[3]; | |
| unsigned maxbandl; | |
| unsigned maxb; | |
| unsigned region1start; | |
| unsigned region2start; | |
| unsigned preflag; | |
| unsigned scalefac_scale; | |
| unsigned count1table_select; | |
| real *full_gain[3]; | |
| real *pow2gain; | |
| }; | |
| struct III_sideinfo | |
| { | |
| unsigned main_data_begin; | |
| unsigned private_bits; | |
| struct { | |
| struct gr_info_s gr[2]; | |
| } ch[2]; | |
| }; | |
| extern int synth_1to1 (real *,int,unsigned char *,int *); | |
| extern int synth_1to1_8bit (real *,int,unsigned char *,int *); | |
| extern int synth_1to1_mono (real *,unsigned char *,int *); | |
| extern int synth_1to1_mono2stereo (real *,unsigned char *,int *); | |
| extern int synth_1to1_8bit_mono (real *,unsigned char *,int *); | |
| extern int synth_1to1_8bit_mono2stereo (real *,unsigned char *,int *); | |
| extern int synth_2to1 (real *,int,unsigned char *,int *); | |
| extern int synth_2to1_8bit (real *,int,unsigned char *,int *); | |
| extern int synth_2to1_mono (real *,unsigned char *,int *); | |
| extern int synth_2to1_mono2stereo (real *,unsigned char *,int *); | |
| extern int synth_2to1_8bit_mono (real *,unsigned char *,int *); | |
| extern int synth_2to1_8bit_mono2stereo (real *,unsigned char *,int *); | |
| extern int synth_4to1 (real *,int,unsigned char *,int *); | |
| extern int synth_4to1_8bit (real *,int,unsigned char *,int *); | |
| extern int synth_4to1_mono (real *,unsigned char *,int *); | |
| extern int synth_4to1_mono2stereo (real *,unsigned char *,int *); | |
| extern int synth_4to1_8bit_mono (real *,unsigned char *,int *); | |
| extern int synth_4to1_8bit_mono2stereo (real *,unsigned char *,int *); | |
| extern int synth_ntom (real *,int,unsigned char *,int *); | |
| extern int synth_ntom_8bit (real *,int,unsigned char *,int *); | |
| extern int synth_ntom_mono (real *,unsigned char *,int *); | |
| extern int synth_ntom_mono2stereo (real *,unsigned char *,int *); | |
| extern int synth_ntom_8bit_mono (real *,unsigned char *,int *); | |
| extern int synth_ntom_8bit_mono2stereo (real *,unsigned char *,int *); | |
| extern void rewindNbits(int bits); | |
| extern int hsstell(void); | |
| extern int get_songlen(struct frame *fr,int no); | |
| extern void init_layer3(int); | |
| extern void init_layer2(void); | |
| extern void make_decode_tables(long scale); | |
| extern void make_conv16to8_table(int); | |
| extern void dct64(real *,real *,real *); | |
| extern void synth_ntom_set_step(long,long); | |
| extern unsigned char *conv16to8; | |
| extern long freqs[9]; | |
| extern real muls[27][64]; | |
| extern real decwin[512+32]; | |
| extern real *pnts[5]; | |
| extern struct parameter param; |