diff --git a/dlls/winemp3.acm/decode_i386.c b/dlls/winemp3.acm/decode_i386.c index 575c53cdd7e..9875cd89e80 100644 --- a/dlls/winemp3.acm/decode_i386.c +++ b/dlls/winemp3.acm/decode_i386.c @@ -31,22 +31,20 @@ #include "mpg123.h" #include "mpglib.h" -extern struct mpstr *gmp; - /* old WRITE_SAMPLE */ #define WRITE_SAMPLE(samples,sum,clip) \ if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \ else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \ else { *(samples) = sum; } -int synth_1to1_mono(real *bandPtr,unsigned char *samples,int *pnt) +int synth_1to1_mono(struct mpstr *mp,real *bandPtr,unsigned char *samples,int *pnt) { short samples_tmp[64]; short *tmp1 = samples_tmp; int i,ret; int pnt1 = 0; - ret = synth_1to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1); + ret = synth_1to1(mp,bandPtr,0,(unsigned char *) samples_tmp,&pnt1); samples += *pnt; for(i=0;i<32;i++) { @@ -60,7 +58,7 @@ int synth_1to1_mono(real *bandPtr,unsigned char *samples,int *pnt) } -int synth_1to1(real *bandPtr,int channel,unsigned char *out,int *pnt) +int synth_1to1(struct mpstr *mp,real *bandPtr,int channel,unsigned char *out,int *pnt) { static const int step = 2; int bo; @@ -70,16 +68,16 @@ int synth_1to1(real *bandPtr,int channel,unsigned char *out,int *pnt) int clip = 0; int bo1; - bo = gmp->synth_bo; + bo = mp->synth_bo; if(!channel) { bo--; bo &= 0xf; - buf = gmp->synth_buffs[0]; + buf = mp->synth_buffs[0]; } else { samples++; - buf = gmp->synth_buffs[1]; + buf = mp->synth_buffs[1]; } if(bo & 0x1) { @@ -93,7 +91,7 @@ int synth_1to1(real *bandPtr,int channel,unsigned char *out,int *pnt) dct64(buf[0]+bo,buf[1]+bo+1,bandPtr); } - gmp->synth_bo = bo; + mp->synth_bo = bo; { register int j; diff --git a/dlls/winemp3.acm/interface.c b/dlls/winemp3.acm/interface.c index 6f039a75134..2ac120ac067 100644 --- a/dlls/winemp3.acm/interface.c +++ b/dlls/winemp3.acm/interface.c @@ -22,9 +22,6 @@ #include "mpg123.h" #include "mpglib.h" -/* Global mp .. it's a hack */ -struct mpstr *gmp; - BOOL InitMP3(struct mpstr *mp) { @@ -39,6 +36,7 @@ BOOL InitMP3(struct mpstr *mp) mp->fr.single = -1; mp->bsnum = 0; mp->synth_bo = 1; + mp->fr.mp = mp; if(!init) { init = 1; @@ -152,8 +150,6 @@ int decodeMP3(struct mpstr *mp,const unsigned char *in,int isize,unsigned char * { int len; - gmp = mp; - if(osize < 4608) { fprintf(stderr,"To less out space\n"); return MP3_ERR; @@ -224,17 +220,17 @@ int decodeMP3(struct mpstr *mp,const unsigned char *in,int isize,unsigned char * return MP3_OK; } -int set_pointer(long backstep) +int set_pointer(struct mpstr *mp, long backstep) { unsigned char *bsbufold; - if(gmp->fsizeold < 0 && backstep > 0) { + if(mp->fsizeold < 0 && backstep > 0) { fprintf(stderr,"Can't step back %ld!\n",backstep); return MP3_ERR; } - bsbufold = gmp->bsspace[gmp->bsnum] + 512; + bsbufold = mp->bsspace[mp->bsnum] + 512; wordpointer -= backstep; if (backstep) - memcpy(wordpointer,bsbufold+gmp->fsizeold-backstep,backstep); + memcpy(wordpointer,bsbufold+mp->fsizeold-backstep,backstep); bitindex = 0; return MP3_OK; } diff --git a/dlls/winemp3.acm/layer1.c b/dlls/winemp3.acm/layer1.c index 45caf30c943..16bc55cb649 100644 --- a/dlls/winemp3.acm/layer1.c +++ b/dlls/winemp3.acm/layer1.c @@ -146,12 +146,12 @@ int do_layer1(struct frame *fr,unsigned char *pcm_sample,int *pcm_point) I_step_two(fraction,balloc,scale_index,fr); if(single >= 0) { - clip += synth_1to1_mono( (real*)fraction[single],pcm_sample,pcm_point); + clip += synth_1to1_mono(fr->mp,(real*)fraction[single],pcm_sample,pcm_point); } else { int p1 = *pcm_point; - clip += synth_1to1( (real*)fraction[0],0,pcm_sample,&p1); - clip += synth_1to1( (real*)fraction[1],1,pcm_sample,pcm_point); + clip += synth_1to1(fr->mp,(real*)fraction[0],0,pcm_sample,&p1); + clip += synth_1to1(fr->mp,(real*)fraction[1],1,pcm_sample,pcm_point); } } diff --git a/dlls/winemp3.acm/layer2.c b/dlls/winemp3.acm/layer2.c index 5e3fbdf5831..d3cd46393e9 100644 --- a/dlls/winemp3.acm/layer2.c +++ b/dlls/winemp3.acm/layer2.c @@ -286,12 +286,12 @@ int do_layer2(struct frame *fr,unsigned char *pcm_sample,int *pcm_point) II_step_two(bit_alloc,fraction,scale,fr,i>>2); for (j=0;j<3;j++) { if(single >= 0) { - clip += synth_1to1_mono(fraction[0][j],pcm_sample,pcm_point); + clip += synth_1to1_mono(fr->mp,fraction[0][j],pcm_sample,pcm_point); } else { int p1 = *pcm_point; - clip += synth_1to1(fraction[0][j],0,pcm_sample,&p1); - clip += synth_1to1(fraction[1][j],1,pcm_sample,pcm_point); + clip += synth_1to1(fr->mp,fraction[0][j],0,pcm_sample,&p1); + clip += synth_1to1(fr->mp,fraction[1][j],1,pcm_sample,pcm_point); } } diff --git a/dlls/winemp3.acm/layer3.c b/dlls/winemp3.acm/layer3.c index 398a0a06cf7..129d82151ac 100644 --- a/dlls/winemp3.acm/layer3.c +++ b/dlls/winemp3.acm/layer3.c @@ -25,8 +25,6 @@ #include "mpglib.h" #include "huffman.h" -extern struct mpstr *gmp; - #define MPEG1 @@ -1830,11 +1828,11 @@ static void dct12(real *in,real *rawout1,real *rawout2,register real *wi,registe * III_hybrid */ static void III_hybrid(real fsIn[SBLIMIT][SSLIMIT],real tsOut[SSLIMIT][SBLIMIT], - int ch,struct gr_info_s *gr_info) + int ch,struct gr_info_s *gr_info,struct mpstr *mp) { real *tspnt = (real *) tsOut; - real (*block)[2][SBLIMIT*SSLIMIT] = gmp->hybrid_block; - int *blc = gmp->hybrid_blc; + real (*block)[2][SBLIMIT*SSLIMIT] = mp->hybrid_block; + int *blc = mp->hybrid_blc; real *rawout1,*rawout2; int bt; int sb = 0; @@ -1923,7 +1921,7 @@ int do_layer3(struct frame *fr,unsigned char *pcm_sample,int *pcm_point) #endif } - if(set_pointer(sideinfo.main_data_begin) == MP3_ERR) + if(set_pointer(fr->mp,sideinfo.main_data_begin) == MP3_ERR) return -1; for (gr=0;grmp); } for(ss=0;ss= 0) { - clip += synth_1to1_mono(hybridOut[0][ss],pcm_sample,pcm_point); + clip += synth_1to1_mono(fr->mp,hybridOut[0][ss],pcm_sample,pcm_point); } else { int p1 = *pcm_point; - clip += synth_1to1(hybridOut[0][ss],0,pcm_sample,&p1); - clip += synth_1to1(hybridOut[1][ss],1,pcm_sample,pcm_point); + clip += synth_1to1(fr->mp,hybridOut[0][ss],0,pcm_sample,&p1); + clip += synth_1to1(fr->mp,hybridOut[1][ss],1,pcm_sample,pcm_point); } } } diff --git a/dlls/winemp3.acm/mpg123.h b/dlls/winemp3.acm/mpg123.h index b397641a09c..14ebe11467f 100644 --- a/dlls/winemp3.acm/mpg123.h +++ b/dlls/winemp3.acm/mpg123.h @@ -105,6 +105,8 @@ struct frame { /* layer2 stuff */ int II_sblimit; const struct al_table *alloc; + + struct mpstr *mp; }; struct parameter { @@ -117,7 +119,7 @@ struct parameter { extern unsigned int get1bit(void); extern unsigned int getbits(int); extern unsigned int getbits_fast(int); -extern int set_pointer(long); +extern int set_pointer(struct mpstr *,long); extern unsigned char *wordpointer; extern int bitindex; @@ -160,9 +162,9 @@ struct III_sideinfo } ch[2]; }; -extern int synth_1to1 (real *,int,unsigned char *,int *); +extern int synth_1to1 (struct mpstr *,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_mono (struct mpstr *,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 *);