summaryrefslogtreecommitdiffstats
path: root/Alc/mixer.c
diff options
context:
space:
mode:
Diffstat (limited to 'Alc/mixer.c')
-rw-r--r--Alc/mixer.c220
1 files changed, 0 insertions, 220 deletions
diff --git a/Alc/mixer.c b/Alc/mixer.c
index 6cc92837..bd73899c 100644
--- a/Alc/mixer.c
+++ b/Alc/mixer.c
@@ -37,29 +37,6 @@
#include "bs2b.h"
-static __inline ALfloat aluF2F(ALfloat Value)
-{
- return Value;
-}
-
-static __inline ALshort aluF2S(ALfloat Value)
-{
- ALint i;
-
- if(Value <= -1.0f) i = -32768;
- else if(Value >= 1.0f) i = 32767;
- else i = (ALint)(Value*32767.0f);
-
- return ((ALshort)i);
-}
-
-static __inline ALubyte aluF2UB(ALfloat Value)
-{
- ALshort i = aluF2S(Value);
- return (i>>8)+128;
-}
-
-
static __inline ALfloat point32(ALfloat val1, ALfloat val2, ALint frac)
{
return val1;
@@ -752,200 +729,3 @@ ALvoid MixSource(ALsource *Source, ALCdevice *Device, ALuint SamplesToDo)
Source->position_fraction = DataPosFrac;
Source->Buffer = BufferListItem->buffer;
}
-
-
-ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
-{
- ALuint SamplesToDo;
- ALeffectslot *ALEffectSlot;
- ALCcontext **ctx, **ctx_end;
- ALsource **src, **src_end;
- int fpuState;
- ALuint i, j, c;
- ALsizei e;
-
-#if defined(HAVE_FESETROUND)
- fpuState = fegetround();
- fesetround(FE_TOWARDZERO);
-#elif defined(HAVE__CONTROLFP)
- fpuState = _controlfp(_RC_CHOP, _MCW_RC);
-#else
- (void)fpuState;
-#endif
-
- while(size > 0)
- {
- /* Setup variables */
- SamplesToDo = min(size, BUFFERSIZE);
-
- /* Clear mixing buffer */
- memset(device->DryBuffer, 0, SamplesToDo*OUTPUTCHANNELS*sizeof(ALfloat));
-
- SuspendContext(NULL);
- ctx = device->Contexts;
- ctx_end = ctx + device->NumContexts;
- while(ctx != ctx_end)
- {
- SuspendContext(*ctx);
-
- src = (*ctx)->ActiveSources;
- src_end = src + (*ctx)->ActiveSourceCount;
- while(src != src_end)
- {
- if((*src)->state != AL_PLAYING)
- {
- --((*ctx)->ActiveSourceCount);
- *src = *(--src_end);
- continue;
- }
-
- if((*src)->NeedsUpdate)
- {
- ALsource_Update(*src, *ctx);
- (*src)->NeedsUpdate = AL_FALSE;
- }
-
- ALsource_Mix(*src, device, SamplesToDo);
- src++;
- }
-
- /* effect slot processing */
- for(e = 0;e < (*ctx)->EffectSlotMap.size;e++)
- {
- ALEffectSlot = (*ctx)->EffectSlotMap.array[e].value;
-
- for(i = 0;i < SamplesToDo;i++)
- {
- ALEffectSlot->ClickRemoval[0] -= ALEffectSlot->ClickRemoval[0] / 256.0f;
- ALEffectSlot->WetBuffer[i] += ALEffectSlot->ClickRemoval[0];
- }
- for(i = 0;i < 1;i++)
- {
- ALEffectSlot->ClickRemoval[i] += ALEffectSlot->PendingClicks[i];
- ALEffectSlot->PendingClicks[i] = 0.0f;
- }
-
- ALEffect_Process(ALEffectSlot->EffectState, ALEffectSlot,
- SamplesToDo, ALEffectSlot->WetBuffer,
- device->DryBuffer);
-
- for(i = 0;i < SamplesToDo;i++)
- ALEffectSlot->WetBuffer[i] = 0.0f;
- }
-
- ProcessContext(*ctx);
- ctx++;
- }
- device->SamplesPlayed += SamplesToDo;
- ProcessContext(NULL);
-
- //Post processing loop
- for(i = 0;i < SamplesToDo;i++)
- {
- for(c = 0;c < OUTPUTCHANNELS;c++)
- {
- device->ClickRemoval[c] -= device->ClickRemoval[c] / 256.0f;
- device->DryBuffer[i][c] += device->ClickRemoval[c];
- }
- }
- for(i = 0;i < OUTPUTCHANNELS;i++)
- {
- device->ClickRemoval[i] += device->PendingClicks[i];
- device->PendingClicks[i] = 0.0f;
- }
-
- switch(device->Format)
- {
-#define DO_WRITE(T, func, N, ...) do { \
- const Channel chans[] = { \
- __VA_ARGS__ \
- }; \
- ALfloat (*DryBuffer)[OUTPUTCHANNELS] = device->DryBuffer; \
- ALfloat (*Matrix)[OUTPUTCHANNELS] = device->ChannelMatrix; \
- const ALuint *ChanMap = device->DevChannels; \
- \
- for(i = 0;i < SamplesToDo;i++) \
- { \
- for(j = 0;j < N;j++) \
- { \
- ALfloat samp = 0.0f; \
- for(c = 0;c < OUTPUTCHANNELS;c++) \
- samp += DryBuffer[i][c] * Matrix[c][chans[j]]; \
- ((T*)buffer)[ChanMap[chans[j]]] = func(samp); \
- } \
- buffer = ((T*)buffer) + N; \
- } \
-} while(0)
-
-#define CHECK_WRITE_FORMAT(bits, T, func) \
- case AL_FORMAT_MONO##bits: \
- DO_WRITE(T, func, 1, FRONT_CENTER); \
- break; \
- case AL_FORMAT_STEREO##bits: \
- if(device->Bs2b) \
- { \
- ALfloat (*DryBuffer)[OUTPUTCHANNELS] = device->DryBuffer; \
- ALfloat (*Matrix)[OUTPUTCHANNELS] = device->ChannelMatrix; \
- const ALuint *ChanMap = device->DevChannels; \
- \
- for(i = 0;i < SamplesToDo;i++) \
- { \
- float samples[2] = { 0.0f, 0.0f }; \
- for(c = 0;c < OUTPUTCHANNELS;c++) \
- { \
- samples[0] += DryBuffer[i][c]*Matrix[c][FRONT_LEFT]; \
- samples[1] += DryBuffer[i][c]*Matrix[c][FRONT_RIGHT]; \
- } \
- bs2b_cross_feed(device->Bs2b, samples); \
- ((T*)buffer)[ChanMap[FRONT_LEFT]] = func(samples[0]); \
- ((T*)buffer)[ChanMap[FRONT_RIGHT]] = func(samples[1]); \
- buffer = ((T*)buffer) + 2; \
- } \
- } \
- else \
- DO_WRITE(T, func, 2, FRONT_LEFT, FRONT_RIGHT); \
- break; \
- case AL_FORMAT_QUAD##bits: \
- DO_WRITE(T, func, 4, FRONT_LEFT, FRONT_RIGHT, \
- BACK_LEFT, BACK_RIGHT); \
- break; \
- case AL_FORMAT_51CHN##bits: \
- DO_WRITE(T, func, 6, FRONT_LEFT, FRONT_RIGHT, \
- FRONT_CENTER, LFE, \
- BACK_LEFT, BACK_RIGHT); \
- break; \
- case AL_FORMAT_61CHN##bits: \
- DO_WRITE(T, func, 7, FRONT_LEFT, FRONT_RIGHT, \
- FRONT_CENTER, LFE, BACK_CENTER, \
- SIDE_LEFT, SIDE_RIGHT); \
- break; \
- case AL_FORMAT_71CHN##bits: \
- DO_WRITE(T, func, 8, FRONT_LEFT, FRONT_RIGHT, \
- FRONT_CENTER, LFE, \
- BACK_LEFT, BACK_RIGHT, \
- SIDE_LEFT, SIDE_RIGHT); \
- break;
-
-#define AL_FORMAT_MONO32 AL_FORMAT_MONO_FLOAT32
-#define AL_FORMAT_STEREO32 AL_FORMAT_STEREO_FLOAT32
- CHECK_WRITE_FORMAT(8, ALubyte, aluF2UB)
- CHECK_WRITE_FORMAT(16, ALshort, aluF2S)
- CHECK_WRITE_FORMAT(32, ALfloat, aluF2F)
-#undef AL_FORMAT_STEREO32
-#undef AL_FORMAT_MONO32
-#undef CHECK_WRITE_FORMAT
-#undef DO_WRITE
-
- default:
- break;
- }
-
- size -= SamplesToDo;
- }
-
-#if defined(HAVE_FESETROUND)
- fesetround(fpuState);
-#elif defined(HAVE__CONTROLFP)
- _controlfp(fpuState, _MCW_RC);
-#endif
-}