Remove the separate surround51rear decoder option
[openal-soft.git] / Alc / mixer_defs.h
blobb76c9aee9ef6c40ca3138891bc29e035edbe6ff5
1 #ifndef MIXER_DEFS_H
2 #define MIXER_DEFS_H
4 #include "AL/alc.h"
5 #include "AL/al.h"
6 #include "alMain.h"
7 #include "alu.h"
9 struct MixGains;
11 struct MixHrtfParams;
12 struct HrtfState;
14 /* C resamplers */
15 const ALfloat *Resample_copy32_C(const InterpState *state, const ALfloat *restrict src, ALuint frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen);
16 const ALfloat *Resample_point32_C(const InterpState *state, const ALfloat *restrict src, ALuint frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen);
17 const ALfloat *Resample_lerp32_C(const InterpState *state, const ALfloat *restrict src, ALuint frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen);
18 const ALfloat *Resample_fir4_32_C(const InterpState *state, const ALfloat *restrict src, ALuint frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen);
19 const ALfloat *Resample_bsinc32_C(const InterpState *state, const ALfloat *restrict src, ALuint frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen);
22 /* C mixers */
23 void MixHrtf_C(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
24 const ALfloat *data, ALsizei Counter, ALsizei Offset, ALsizei OutPos,
25 const ALsizei IrSize, const struct MixHrtfParams *hrtfparams,
26 struct HrtfState *hrtfstate, ALsizei BufferSize);
27 void MixDirectHrtf_C(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
28 const ALfloat *data, ALsizei Offset, const ALsizei IrSize,
29 ALfloat (*restrict Coeffs)[2], ALfloat (*restrict Values)[2],
30 ALsizei BufferSize);
31 void Mix_C(const ALfloat *data, ALsizei OutChans, ALfloat (*restrict OutBuffer)[BUFFERSIZE],
32 ALfloat *CurrentGains, const ALfloat *TargetGains, ALsizei Counter, ALsizei OutPos,
33 ALsizei BufferSize);
34 void MixRow_C(ALfloat *OutBuffer, const ALfloat *Gains,
35 const ALfloat (*restrict data)[BUFFERSIZE], ALsizei InChans,
36 ALsizei InPos, ALsizei BufferSize);
38 /* SSE mixers */
39 void MixHrtf_SSE(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
40 const ALfloat *data, ALsizei Counter, ALsizei Offset, ALsizei OutPos,
41 const ALsizei IrSize, const struct MixHrtfParams *hrtfparams,
42 struct HrtfState *hrtfstate, ALsizei BufferSize);
43 void MixDirectHrtf_SSE(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
44 const ALfloat *data, ALsizei Offset, const ALsizei IrSize,
45 ALfloat (*restrict Coeffs)[2], ALfloat (*restrict Values)[2],
46 ALsizei BufferSize);
47 void Mix_SSE(const ALfloat *data, ALsizei OutChans, ALfloat (*restrict OutBuffer)[BUFFERSIZE],
48 ALfloat *CurrentGains, const ALfloat *TargetGains, ALsizei Counter, ALsizei OutPos,
49 ALsizei BufferSize);
50 void MixRow_SSE(ALfloat *OutBuffer, const ALfloat *Gains,
51 const ALfloat (*restrict data)[BUFFERSIZE], ALsizei InChans,
52 ALsizei InPos, ALsizei BufferSize);
54 /* SSE resamplers */
55 inline void InitiatePositionArrays(ALuint frac, ALint increment, ALuint *restrict frac_arr, ALint *restrict pos_arr, ALsizei size)
57 ALsizei i;
59 pos_arr[0] = 0;
60 frac_arr[0] = frac;
61 for(i = 1;i < size;i++)
63 ALint frac_tmp = frac_arr[i-1] + increment;
64 pos_arr[i] = pos_arr[i-1] + (frac_tmp>>FRACTIONBITS);
65 frac_arr[i] = frac_tmp&FRACTIONMASK;
69 const ALfloat *Resample_lerp32_SSE2(const InterpState *state, const ALfloat *restrict src,
70 ALuint frac, ALint increment, ALfloat *restrict dst,
71 ALsizei numsamples);
72 const ALfloat *Resample_lerp32_SSE41(const InterpState *state, const ALfloat *restrict src,
73 ALuint frac, ALint increment, ALfloat *restrict dst,
74 ALsizei numsamples);
76 const ALfloat *Resample_fir4_32_SSE3(const InterpState *state, const ALfloat *restrict src,
77 ALuint frac, ALint increment, ALfloat *restrict dst,
78 ALsizei numsamples);
79 const ALfloat *Resample_fir4_32_SSE41(const InterpState *state, const ALfloat *restrict src,
80 ALuint frac, ALint increment, ALfloat *restrict dst,
81 ALsizei numsamples);
83 const ALfloat *Resample_bsinc32_SSE(const InterpState *state, const ALfloat *restrict src,
84 ALuint frac, ALint increment, ALfloat *restrict dst,
85 ALsizei dstlen);
87 /* Neon mixers */
88 void MixHrtf_Neon(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
89 const ALfloat *data, ALsizei Counter, ALsizei Offset, ALsizei OutPos,
90 const ALsizei IrSize, const struct MixHrtfParams *hrtfparams,
91 struct HrtfState *hrtfstate, ALsizei BufferSize);
92 void MixDirectHrtf_Neon(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
93 const ALfloat *data, ALsizei Offset, const ALsizei IrSize,
94 ALfloat (*restrict Coeffs)[2], ALfloat (*restrict Values)[2],
95 ALsizei BufferSize);
96 void Mix_Neon(const ALfloat *data, ALsizei OutChans, ALfloat (*restrict OutBuffer)[BUFFERSIZE],
97 ALfloat *CurrentGains, const ALfloat *TargetGains, ALsizei Counter, ALsizei OutPos,
98 ALsizei BufferSize);
99 void MixRow_Neon(ALfloat *OutBuffer, const ALfloat *Gains,
100 const ALfloat (*restrict data)[BUFFERSIZE], ALsizei InChans,
101 ALsizei InPos, ALsizei BufferSize);
103 /* Neon resamplers */
104 const ALfloat *Resample_lerp32_Neon(const InterpState *state, const ALfloat *restrict src,
105 ALuint frac, ALint increment, ALfloat *restrict dst,
106 ALsizei numsamples);
107 const ALfloat *Resample_fir4_32_Neon(const InterpState *state, const ALfloat *restrict src,
108 ALuint frac, ALint increment, ALfloat *restrict dst,
109 ALsizei numsamples);
110 const ALfloat *Resample_bsinc32_Neon(const InterpState *state, const ALfloat *restrict src,
111 ALuint frac, ALint increment, ALfloat *restrict dst,
112 ALsizei dstlen);
114 #endif /* MIXER_DEFS_H */