# HG changeset patch # User Matti Hamalainen # Date 1349064098 -10800 # Node ID 2edda27f951c05a65c1b73567bf485b3adf725a6 # Parent 8725853609db8e829fb891d2a447a1f22205265e Silly interpolation in mixing. diff -r 8725853609db -r 2edda27f951c jmix_c_in.c --- a/jmix_c_in.c Mon Oct 01 06:59:00 2012 +0300 +++ b/jmix_c_in.c Mon Oct 01 07:01:38 2012 +0300 @@ -6,15 +6,16 @@ //#define JMIXER_DEBUG fprintf(stderr, "[%.8x:%.8x / %.8x]: %d\n", FP_GETH(tmpPos), FP_GETL(tmpPos), endPos, sp[FP_GETH(tmpPos)]); #define JMIXER_DEBUG +#define JMIXER_ADDBUF_TYPE Sint32 -#define JMIXER_ADDBUF_TYPE Sint32 /* Mono / Linear Interpolation */ -#define JMIXER_ADDBUF_TYPE Sint32 #define JMIXER_SAMPLE_TYPE Sint16 #define JMIXER_INIT const Sint32 vol = (chn->chVolume * mixer->globalVol) / 256; -#define JMIXER_FUNC tr = (((Sint32) sp[FP_GETH(tmpPos)]) * vol + tr) / (256 * 2); *(ap++) += tr; +#define JMIXER_FUNC \ + memmove(&tl[0], &tl[1], 4 * sizeof(tl[0])); \ + tl[4] = (((Sint32) sp[FP_GETH(tmpPos)]) * vol * 3 + tl[3] * 2 + tl[2] + tl[1] + tl[0]) / (256 * 8); *(ap++) += tl[4]; \ #define JMIXER_NAME jvmMix_Mono_C_FW #define JMIXER_NEXT FP_ADD(tmpPos, tmpDelta); @@ -26,6 +27,7 @@ #define JMIXER_ENDCOND (FP_GETH(tmpPos) > endPos) #include "jmixtmpl_c.h" + #undef JMIXER_SAMPLE_TYPE #undef JMIXER_INIT #undef JMIXER_FUNC @@ -37,8 +39,11 @@ #define JMIXER_INIT const Sint32 vol_l = (chn->chVolume * mixer->globalVol) / 256, \ vol_r = (chn->chVolume * mixer->globalVol) / 256; -#define JMIXER_FUNC tl = (((Sint32) sp[FP_GETH(tmpPos)]) * vol_l + tl) / (256 * 2); *(ap++) += tl; \ - tr = (((Sint32) sp[FP_GETH(tmpPos)]) * vol_r + tr) / (256 * 2); *(ap++) += tr; +#define JMIXER_FUNC \ + memmove(&tl[0], &tl[1], 4 * sizeof(tl[0])); \ + memmove(&tr[0], &tr[1], 4 * sizeof(tr[0])); \ + tl[4] = (((Sint32) sp[FP_GETH(tmpPos)]) * vol_l * 3 + tl[3] * 2 + tl[2] + tl[1] + tl[0]) / (256 * 8); *(ap++) += tl[4]; \ + tr[4] = (((Sint32) sp[FP_GETH(tmpPos)]) * vol_r * 3 + tr[3] * 2 + tr[2] + tr[1] + tr[0]) / (256 * 8); *(ap++) += tr[4]; #define JMIXER_NAME jvmMix_Stereo_C_FW #define JMIXER_NEXT FP_ADD(tmpPos, tmpDelta); @@ -50,6 +55,7 @@ #define JMIXER_ENDCOND (FP_GETH(tmpPos) > endPos) #include "jmixtmpl_c.h" + #undef JMIXER_SAMPLE_TYPE #undef JMIXER_INIT #undef JMIXER_FUNC diff -r 8725853609db -r 2edda27f951c jmixtmpl_c.h --- a/jmixtmpl_c.h Mon Oct 01 06:59:00 2012 +0300 +++ b/jmixtmpl_c.h Mon Oct 01 07:01:38 2012 +0300 @@ -13,9 +13,10 @@ DMFixedPoint tmpPos = chn->chPos; JMIXER_ADDBUF_TYPE *ap = addBuffer, - tr = chn->chPrevR, - tl = chn->chPrevL; + *tr = chn->chPrevR, + *tl = chn->chPrevL; int strideLength = 0; + JMIXER_SAMPLE_TYPE *sp = (JMIXER_SAMPLE_TYPE *) chn->chData; JMIXER_INIT @@ -29,8 +30,6 @@ } chn->chPos.dw = tmpPos.dw; - chn->chPrevR = tr; - chn->chPrevL = tl; return strideLength; } #endif diff -r 8725853609db -r 2edda27f951c jssmix.c --- a/jssmix.c Mon Oct 01 06:59:00 2012 +0300 +++ b/jssmix.c Mon Oct 01 07:01:38 2012 +0300 @@ -508,7 +508,8 @@ c->chLoopE = loopE; c->chFlags = flags; c->chDirection = TRUE; - c->chPrevL = c->chPrevR = 0; + memset(c->chPrevL, 0, sizeof(c->chPrevL)); + memset(c->chPrevR, 0, sizeof(c->chPrevR)); c->chPos.dw = c->chDeltaO.dw = 0; JSS_UNLOCK(mixer); diff -r 8725853609db -r 2edda27f951c jssmix.h --- a/jssmix.h Mon Oct 01 06:59:00 2012 +0300 +++ b/jssmix.h Mon Oct 01 07:01:38 2012 +0300 @@ -16,6 +16,7 @@ #define JVM_LIMIT_16_NEG (-32767) #define JVM_ADD_16 (32768) + #define JMIXER_ADDBUF_TYPE Sint32 @@ -42,7 +43,7 @@ int chVolume, // Volume chPanning; // Panning - JMIXER_ADDBUF_TYPE chPrevR, chPrevL; + JMIXER_ADDBUF_TYPE chPrevR[5], chPrevL[5]; } JSSChannel;