defs.h 6.5 KB

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