Free Electron
mixer/defs.h
1 #ifndef MIXER_DEFS_H
2 #define MIXER_DEFS_H
3 
4 #include "AL/alc.h"
5 #include "AL/al.h"
6 #include "alMain.h"
7 #include "alu.h"
8 
9 struct MixGains;
10 
11 struct MixHrtfParams;
12 struct HrtfState;
13 
14 /* C resamplers */
15 const ALfloat *Resample_copy_C(const InterpState *state, const ALfloat *restrict src, ALsizei frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen);
16 const ALfloat *Resample_point_C(const InterpState *state, const ALfloat *restrict src, ALsizei frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen);
17 const ALfloat *Resample_lerp_C(const InterpState *state, const ALfloat *restrict src, ALsizei frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen);
18 const ALfloat *Resample_cubic_C(const InterpState *state, const ALfloat *restrict src, ALsizei frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen);
19 const ALfloat *Resample_bsinc_C(const InterpState *state, const ALfloat *restrict src, ALsizei frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen);
20 
21 
22 /* C mixers */
23 void MixHrtf_C(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
24  const ALfloat *data, ALsizei Offset, ALsizei OutPos,
25  const ALsizei IrSize, struct MixHrtfParams *hrtfparams,
26  struct HrtfState *hrtfstate, ALsizei BufferSize);
27 void MixHrtfBlend_C(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
28  const ALfloat *data, ALsizei Offset, ALsizei OutPos,
29  const ALsizei IrSize, const HrtfParams *oldparams,
30  MixHrtfParams *newparams, HrtfState *hrtfstate,
31  ALsizei BufferSize);
32 void MixDirectHrtf_C(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
33  const ALfloat *data, ALsizei Offset, const ALsizei IrSize,
34  const ALfloat (*restrict Coeffs)[2], ALfloat (*restrict Values)[2],
35  ALsizei BufferSize);
36 void Mix_C(const ALfloat *data, ALsizei OutChans, ALfloat (*restrict OutBuffer)[BUFFERSIZE],
37  ALfloat *CurrentGains, const ALfloat *TargetGains, ALsizei Counter, ALsizei OutPos,
38  ALsizei BufferSize);
39 void MixRow_C(ALfloat *OutBuffer, const ALfloat *Gains,
40  const ALfloat (*restrict data)[BUFFERSIZE], ALsizei InChans,
41  ALsizei InPos, ALsizei BufferSize);
42 
43 /* SSE mixers */
44 void MixHrtf_SSE(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
45  const ALfloat *data, ALsizei Offset, ALsizei OutPos,
46  const ALsizei IrSize, struct MixHrtfParams *hrtfparams,
47  struct HrtfState *hrtfstate, ALsizei BufferSize);
48 void MixHrtfBlend_SSE(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
49  const ALfloat *data, ALsizei Offset, ALsizei OutPos,
50  const ALsizei IrSize, const HrtfParams *oldparams,
51  MixHrtfParams *newparams, HrtfState *hrtfstate,
52  ALsizei BufferSize);
53 void MixDirectHrtf_SSE(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
54  const ALfloat *data, ALsizei Offset, const ALsizei IrSize,
55  const ALfloat (*restrict Coeffs)[2], ALfloat (*restrict Values)[2],
56  ALsizei BufferSize);
57 void Mix_SSE(const ALfloat *data, ALsizei OutChans, ALfloat (*restrict OutBuffer)[BUFFERSIZE],
58  ALfloat *CurrentGains, const ALfloat *TargetGains, ALsizei Counter, ALsizei OutPos,
59  ALsizei BufferSize);
60 void MixRow_SSE(ALfloat *OutBuffer, const ALfloat *Gains,
61  const ALfloat (*restrict data)[BUFFERSIZE], ALsizei InChans,
62  ALsizei InPos, ALsizei BufferSize);
63 
64 /* SSE resamplers */
65 inline void InitiatePositionArrays(ALsizei frac, ALint increment, ALsizei *restrict frac_arr, ALsizei *restrict pos_arr, ALsizei size)
66 {
67  ALsizei i;
68 
69  pos_arr[0] = 0;
70  frac_arr[0] = frac;
71  for(i = 1;i < size;i++)
72  {
73  ALint frac_tmp = frac_arr[i-1] + increment;
74  pos_arr[i] = pos_arr[i-1] + (frac_tmp>>FRACTIONBITS);
75  frac_arr[i] = frac_tmp&FRACTIONMASK;
76  }
77 }
78 
79 const ALfloat *Resample_lerp_SSE2(const InterpState *state, const ALfloat *restrict src,
80  ALsizei frac, ALint increment, ALfloat *restrict dst,
81  ALsizei numsamples);
82 const ALfloat *Resample_lerp_SSE41(const InterpState *state, const ALfloat *restrict src,
83  ALsizei frac, ALint increment, ALfloat *restrict dst,
84  ALsizei numsamples);
85 
86 const ALfloat *Resample_bsinc_SSE(const InterpState *state, const ALfloat *restrict src,
87  ALsizei frac, ALint increment, ALfloat *restrict dst,
88  ALsizei dstlen);
89 
90 /* Neon mixers */
91 void MixHrtf_Neon(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
92  const ALfloat *data, ALsizei Offset, ALsizei OutPos,
93  const ALsizei IrSize, struct MixHrtfParams *hrtfparams,
94  struct HrtfState *hrtfstate, ALsizei BufferSize);
95 void MixHrtfBlend_Neon(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
96  const ALfloat *data, ALsizei Offset, ALsizei OutPos,
97  const ALsizei IrSize, const HrtfParams *oldparams,
98  MixHrtfParams *newparams, HrtfState *hrtfstate,
99  ALsizei BufferSize);
100 void MixDirectHrtf_Neon(ALfloat *restrict LeftOut, ALfloat *restrict RightOut,
101  const ALfloat *data, ALsizei Offset, const ALsizei IrSize,
102  const ALfloat (*restrict Coeffs)[2], ALfloat (*restrict Values)[2],
103  ALsizei BufferSize);
104 void Mix_Neon(const ALfloat *data, ALsizei OutChans, ALfloat (*restrict OutBuffer)[BUFFERSIZE],
105  ALfloat *CurrentGains, const ALfloat *TargetGains, ALsizei Counter, ALsizei OutPos,
106  ALsizei BufferSize);
107 void MixRow_Neon(ALfloat *OutBuffer, const ALfloat *Gains,
108  const ALfloat (*restrict data)[BUFFERSIZE], ALsizei InChans,
109  ALsizei InPos, ALsizei BufferSize);
110 
111 /* Neon resamplers */
112 const ALfloat *Resample_lerp_Neon(const InterpState *state, const ALfloat *restrict src,
113  ALsizei frac, ALint increment, ALfloat *restrict dst,
114  ALsizei numsamples);
115 const ALfloat *Resample_bsinc_Neon(const InterpState *state, const ALfloat *restrict src,
116  ALsizei frac, ALint increment, ALfloat *restrict dst,
117  ALsizei dstlen);
118 
119 #endif /* MIXER_DEFS_H */
U32 size(const DenseVector< T > &lhs)
Return number of elements.
Definition: DenseVector.h:587