Mercurial > audlegacy
diff Plugins/Input/mpg123/decode_2to1.c @ 127:05d824e30afd trunk
[svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
author | nenolod |
---|---|
date | Wed, 09 Nov 2005 16:40:03 -0800 |
parents | fa848bd484d8 |
children | 0f294f2b0a9b |
line wrap: on
line diff
--- a/Plugins/Input/mpg123/decode_2to1.c Tue Nov 08 12:04:15 2005 -0800 +++ b/Plugins/Input/mpg123/decode_2to1.c Wed Nov 09 16:40:03 2005 -0800 @@ -1,4 +1,3 @@ - /* * Mpeg Layer-1,2,3 audio decoder * ------------------------------ @@ -19,233 +18,211 @@ else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \ else { *(samples) = sum; } -int -mpg123_synth_2to1_8bit(real * bandPtr, int channel, - unsigned char *samples, int *pnt) +int mpg123_synth_2to1_8bit(real *bandPtr,int channel,unsigned char *samples,int *pnt) { - short samples_tmp[32]; - short *tmp1 = samples_tmp + channel; - int i, ret; - int pnt1 = 0; + short samples_tmp[32]; + short *tmp1 = samples_tmp + channel; + int i,ret; + int pnt1 = 0; - ret = - mpg123_synth_2to1(bandPtr, channel, (unsigned char *) samples_tmp, - &pnt1); - samples += channel + *pnt; + ret = mpg123_synth_2to1(bandPtr,channel,(unsigned char *) samples_tmp,&pnt1); + samples += channel + *pnt; - for (i = 0; i < 16; i++) { - *samples = (*tmp1 >> 8) ^ 128; - samples += 2; - tmp1 += 2; - } - *pnt += 32; + for(i=0;i<16;i++) { + *samples = mpg123_conv16to8[*tmp1>>AUSHIFT]; + samples += 2; + tmp1 += 2; + } + *pnt += 32; - return ret; + return ret; } -int -mpg123_synth_2to1_8bit_mono(real * bandPtr, unsigned char *samples, int *pnt) +int mpg123_synth_2to1_8bit_mono(real *bandPtr,unsigned char *samples,int *pnt) { - short samples_tmp[32]; - short *tmp1 = samples_tmp; - int i, ret; - int pnt1 = 0; + short samples_tmp[32]; + short *tmp1 = samples_tmp; + int i,ret; + int pnt1 = 0; + + ret = mpg123_synth_2to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1); + samples += *pnt; + + for(i=0;i<16;i++) { + *samples++ = mpg123_conv16to8[*tmp1>>AUSHIFT]; + tmp1 += 2; + } + *pnt += 16; + + return ret; +} - ret = mpg123_synth_2to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1); - samples += *pnt; + +int mpg123_synth_2to1_8bit_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt) +{ + short samples_tmp[32]; + short *tmp1 = samples_tmp; + int i,ret; + int pnt1 = 0; - for (i = 0; i < 16; i++) { - *samples++ = (*tmp1 >> 8) ^ 128; - tmp1 += 2; - } - *pnt += 16; + ret = mpg123_synth_2to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1); + samples += *pnt; - return ret; + for(i=0;i<16;i++) { + *samples++ = mpg123_conv16to8[*tmp1>>AUSHIFT]; + *samples++ = mpg123_conv16to8[*tmp1>>AUSHIFT]; + tmp1 += 2; + } + *pnt += 32; + + return ret; } -#if 0 -int -mpg123_synth_2to1_8bit_mono2stereo(real * bandPtr, - unsigned char *samples, int *pnt) +int mpg123_synth_2to1_mono(real *bandPtr,unsigned char *samples,int *pnt) { - short samples_tmp[32]; - short *tmp1 = samples_tmp; - int i, ret; - int pnt1 = 0; + short samples_tmp[32]; + short *tmp1 = samples_tmp; + int i,ret; + int pnt1=0; - ret = mpg123_synth_2to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1); - samples += *pnt; + ret = mpg123_synth_2to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1); + samples += *pnt; - for (i = 0; i < 16; i++) { - *samples++ = (*tmp1 >> 8) ^ 128; - *samples++ = (*tmp1 >> 8) ^ 128; - tmp1 += 2; - } - *pnt += 32; + for(i=0;i<16;i++) { + *( (short *) samples) = *tmp1; + samples += 2; + tmp1 += 2; + } + *pnt += 32; - return ret; + return ret; } -#endif -int -mpg123_synth_2to1_mono(real * bandPtr, unsigned char *samples, int *pnt) +int mpg123_synth_2to1_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt) { - short samples_tmp[32]; - short *tmp1 = samples_tmp; - int i, ret; - int pnt1 = 0; + int i,ret; - ret = mpg123_synth_2to1(bandPtr, 0, (unsigned char *) samples_tmp, &pnt1); - samples += *pnt; + ret = mpg123_synth_2to1(bandPtr,0,samples,pnt); + samples = samples + *pnt - 64; - for (i = 0; i < 16; i++) { - *((short *) samples) = *tmp1; - samples += 2; - tmp1 += 2; - } - *pnt += 32; - - return ret; + for(i=0;i<16;i++) { + ((short *)samples)[1] = ((short *)samples)[0]; + samples+=4; + } + + return ret; } -#if 0 -int -mpg123_synth_2to1_mono2stereo(real * bandPtr, unsigned char *samples, - int *pnt) +int mpg123_synth_2to1(real *bandPtr,int channel,unsigned char *out,int *pnt) { - int i, ret; - - ret = mpg123_synth_2to1(bandPtr, 0, samples, pnt); - samples = samples + *pnt - 64; + static real buffs[2][2][0x110]; + static const int step = 2; + static int bo = 1; + short *samples = (short *) (out + *pnt); - for (i = 0; i < 16; i++) { - ((short *) samples)[1] = ((short *) samples)[0]; - samples += 4; - } + real *b0,(*buf)[0x110]; + int clip = 0; + int bo1; - return ret; -} -#endif - -int -mpg123_synth_2to1(real * bandPtr, int channel, unsigned char *out, int *pnt) -{ - static real buffs[2][2][0x110]; - static const int step = 2; - static int bo = 1; - short *samples = (short *) (out + *pnt); + if(!channel) { + bo--; + bo &= 0xf; + buf = buffs[0]; + } + else { + samples++; + buf = buffs[1]; + } - real *b0, (*buf)[0x110]; - int clip = 0; - int bo1; + if(bo & 0x1) { + b0 = buf[0]; + bo1 = bo; + mpg123_dct64(buf[1]+((bo+1)&0xf),buf[0]+bo,bandPtr); + } + else { + b0 = buf[1]; + bo1 = bo+1; + mpg123_dct64(buf[0]+bo,buf[1]+bo+1,bandPtr); + } -/* if(param.equalizer) - do_equalizer(bandPtr,channel); */ + { + register int j; + real *window = mpg123_decwin + 16 - bo1; - if (!channel) { - bo--; - bo &= 0xf; - buf = buffs[0]; - } - else { - samples++; - buf = buffs[1]; - } + for (j=8;j;j--,b0+=0x10,window+=0x30) + { + real sum; + sum = *window++ * *b0++; + sum -= *window++ * *b0++; + sum += *window++ * *b0++; + sum -= *window++ * *b0++; + sum += *window++ * *b0++; + sum -= *window++ * *b0++; + sum += *window++ * *b0++; + sum -= *window++ * *b0++; + sum += *window++ * *b0++; + sum -= *window++ * *b0++; + sum += *window++ * *b0++; + sum -= *window++ * *b0++; + sum += *window++ * *b0++; + sum -= *window++ * *b0++; + sum += *window++ * *b0++; + sum -= *window++ * *b0++; - if (bo & 0x1) { - b0 = buf[0]; - bo1 = bo; - mpg123_dct64(buf[1] + ((bo + 1) & 0xf), buf[0] + bo, bandPtr); - } - else { - b0 = buf[1]; - bo1 = bo + 1; - mpg123_dct64(buf[0] + bo, buf[1] + bo + 1, bandPtr); + WRITE_SAMPLE(samples,sum,clip); samples += step; +#if 0 + WRITE_SAMPLE(samples,sum,clip); samples += step; +#endif } { - register int j; - real *window = mpg123_decwin + 16 - bo1; - - for (j = 8; j; j--, b0 += 0x10, window += 0x30) { - real sum; - - sum = *window++ * *b0++; - sum -= *window++ * *b0++; - sum += *window++ * *b0++; - sum -= *window++ * *b0++; - sum += *window++ * *b0++; - sum -= *window++ * *b0++; - sum += *window++ * *b0++; - sum -= *window++ * *b0++; - sum += *window++ * *b0++; - sum -= *window++ * *b0++; - sum += *window++ * *b0++; - sum -= *window++ * *b0++; - sum += *window++ * *b0++; - sum -= *window++ * *b0++; - sum += *window++ * *b0++; - sum -= *window++ * *b0++; - - WRITE_SAMPLE(samples, sum, clip); - samples += step; + real sum; + sum = window[0x0] * b0[0x0]; + sum += window[0x2] * b0[0x2]; + sum += window[0x4] * b0[0x4]; + sum += window[0x6] * b0[0x6]; + sum += window[0x8] * b0[0x8]; + sum += window[0xA] * b0[0xA]; + sum += window[0xC] * b0[0xC]; + sum += window[0xE] * b0[0xE]; + WRITE_SAMPLE(samples,sum,clip); samples += step; #if 0 - WRITE_SAMPLE(samples, sum, clip); - samples += step; + WRITE_SAMPLE(samples,sum,clip); samples += step; #endif - } - - { - real sum; + b0-=0x20,window-=0x40; + } + window += bo1<<1; - sum = window[0x0] * b0[0x0]; - sum += window[0x2] * b0[0x2]; - sum += window[0x4] * b0[0x4]; - sum += window[0x6] * b0[0x6]; - sum += window[0x8] * b0[0x8]; - sum += window[0xA] * b0[0xA]; - sum += window[0xC] * b0[0xC]; - sum += window[0xE] * b0[0xE]; - WRITE_SAMPLE(samples, sum, clip); - samples += step; -#if 0 - WRITE_SAMPLE(samples, sum, clip); - samples += step; -#endif - b0 -= 0x20, window -= 0x40; - } - window += bo1 << 1; - - for (j = 7; j; j--, b0 -= 0x30, window -= 0x30) { - real sum; + for (j=7;j;j--,b0-=0x30,window-=0x30) + { + real sum; + sum = -*(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; + sum -= *(--window) * *b0++; - sum = -*(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; - sum -= *(--window) * *b0++; + WRITE_SAMPLE(samples,sum,clip); samples += step; +#if 0 + WRITE_SAMPLE(samples,sum,clip); samples += step; +#endif + } + } - WRITE_SAMPLE(samples, sum, clip); - samples += step; -#if 0 - WRITE_SAMPLE(samples, sum, clip); - samples += step; -#endif - } - } + *pnt += 64; - *pnt += 64; + return clip; +} - return clip; -} +