Mercurial > hg > dmlib
diff jmix_c_in.c @ 46:f939d3896937
Rename another template file.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 01 Oct 2012 01:11:59 +0300 |
parents | jmix_c.in.c@32250b436bca |
children | 033c660c25f5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jmix_c_in.c Mon Oct 01 01:11:59 2012 +0300 @@ -0,0 +1,103 @@ +/* + * miniJSS - Mixing routines in C + * Programmed and designed by Matti 'ccr' Hamalainen + * (C) Copyright 2006-2007 Tecnic Software productions (TNSP) + */ + +#define JMIXER_INTERPOLATE +//#define JMIXER_DEBUG fprintf(stderr, "[%.8x:%.8x / %.8x]: %d\n", FP_GETH(tmpPos), FP_GETL(tmpPos), endPos, sp[FP_GETH(tmpPos)]); +#define JMIXER_DEBUG + +/* Mono / Linear Interpolation + */ +#define JMIXER_INIT const Sint32 vol = (chn->chVolume * mixer->globalVol) / 256; +#ifdef JMIXER_INTERPOLATE +#define JMIXER_FUNC_16 tr = (((Sint32) sp[FP_GETH(tmpPos)]) * vol + tr) / (256 * 2); *(ap++) += tr; +#define JMIXER_FUNC_8 tr = ((*volTab8)[vol][sp[FP_GETH(tmpPos)]] + tr) / 2; *(ap++) += tr; +#else +#define JMIXER_FUNC_16 *(ap++) += (((Sint32) sp[FP_GETH(tmpPos)]) * vol) / 256; +#define JMIXER_FUNC_8 *(ap++) += (*volTab8)[vol][sp[FP_GETH(tmpPos)]]; +#endif + +#define JMIXER_NAME jvmMix_Mono_C_FW +#define JMIXER_NEXT FP_ADD(tmpPos, tmpDelta); +#define JMIXER_ENDCOND (FP_GETH(tmpPos) < endPos) +#include "jmix_c.h" + +#define JMIXER_NAME jvmMix_Mono_C_BW +#define JMIXER_NEXT FP_SUB(tmpPos, tmpDelta); +#define JMIXER_ENDCOND (FP_GETH(tmpPos) > endPos) +#include "jmix_c.h" + +#undef JMIXER_INIT +#undef JMIXER_FUNC_16 +#undef JMIXER_FUNC_8 + + +/* Stereo / Linear Interpolation + */ +#define JMIXER_INIT const Sint32 vol_l = (chn->chVolume * mixer->globalVol) / 256, \ + vol_r = (chn->chVolume * mixer->globalVol) / 256; +#ifdef JMIXER_INTERPOLATE +#define JMIXER_FUNC_16 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_8 tl = ((*volTab8)[vol_l][sp[FP_GETH(tmpPos)]] + tl) / 2; *(ap++) += tl; \ + tr = ((*volTab8)[vol_r][sp[FP_GETH(tmpPos)]] + tr) / 2; *(ap++) += tr; +#else +#define JMIXER_FUNC_16 *(ap++) += (((Sint32) sp[FP_GETH(tmpPos)]) * vol_l) / 256; \ + *(ap++) += (((Sint32) sp[FP_GETH(tmpPos)]) * vol_r) / 256; +#define JMIXER_FUNC_8 *(ap++) += (*volTab8)[vol_l][sp[FP_GETH(tmpPos)]]; \ + *(ap++) += (*volTab8)[vol_r][sp[FP_GETH(tmpPos)]]; +#endif + +#define JMIXER_NAME jvmMix_Stereo_C_FW +#define JMIXER_NEXT FP_ADD(tmpPos, tmpDelta); +#define JMIXER_ENDCOND (FP_GETH(tmpPos) < endPos) +#include "jmix_c.h" + +#define JMIXER_NAME jvmMix_Stereo_C_BW +#define JMIXER_NEXT FP_SUB(tmpPos, tmpDelta); +#define JMIXER_ENDCOND (FP_GETH(tmpPos) > endPos) +#include "jmix_c.h" + +#undef JMIXER_INIT +#undef JMIXER_FUNC_16 +#undef JMIXER_FUNC_8 + + +/* Post processing functions + */ +#define JMIXER_NAME jvmPostProcess_U8_C +#define JMIXER_TYPE Uint8 +#define JMIXER_FUNCTION \ + if (t < JVM_LIMIT_16_NEG) t = JVM_LIMIT_16_NEG; else \ + if (t > JVM_LIMIT_16_POS) t = JVM_LIMIT_16_POS; \ + *(sp++) = (t + JVM_ADD_16) >> 8; +#include "jmix_post.h" + + +#define JMIXER_NAME jvmPostProcess_S8_C +#define JMIXER_TYPE Sint8 +#define JMIXER_FUNCTION \ + if (t < JVM_LIMIT_16_NEG) t = JVM_LIMIT_16_NEG; else \ + if (t > JVM_LIMIT_16_POS) t = JVM_LIMIT_16_POS; \ + *(sp++) = t >> 8; +#include "jmix_post.h" + + +#define JMIXER_NAME jvmPostProcess_U16_C +#define JMIXER_TYPE Uint16 +#define JMIXER_FUNCTION \ + if (t < JVM_LIMIT_16_NEG) t = JVM_LIMIT_16_NEG; else \ + if (t > JVM_LIMIT_16_POS) t = JVM_LIMIT_16_POS; \ + *(sp++) = t + JVM_ADD_16; +#include "jmix_post.h" + + +#define JMIXER_NAME jvmPostProcess_S16_C +#define JMIXER_TYPE Sint16 +#define JMIXER_FUNCTION \ + if (t < JVM_LIMIT_16_NEG) t = JVM_LIMIT_16_NEG; else \ + if (t > JVM_LIMIT_16_POS) t = JVM_LIMIT_16_POS; \ + *(sp++) = t; +#include "jmix_post.h"