devformat.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #ifndef ALC_DEVFORMAT_H
  2. #define ALC_DEVFORMAT_H
  3. #include <cstdint>
  4. #include "AL/al.h"
  5. #include "AL/alext.h"
  6. #include "inprogext.h"
  7. enum Channel {
  8. FrontLeft = 0,
  9. FrontRight,
  10. FrontCenter,
  11. LFE,
  12. BackLeft,
  13. BackRight,
  14. BackCenter,
  15. SideLeft,
  16. SideRight,
  17. UpperFrontLeft,
  18. UpperFrontRight,
  19. UpperBackLeft,
  20. UpperBackRight,
  21. LowerFrontLeft,
  22. LowerFrontRight,
  23. LowerBackLeft,
  24. LowerBackRight,
  25. Aux0,
  26. Aux1,
  27. Aux2,
  28. Aux3,
  29. Aux4,
  30. Aux5,
  31. Aux6,
  32. Aux7,
  33. Aux8,
  34. Aux9,
  35. Aux10,
  36. Aux11,
  37. Aux12,
  38. Aux13,
  39. Aux14,
  40. Aux15,
  41. MaxChannels
  42. };
  43. /* Device formats */
  44. enum DevFmtType : ALenum {
  45. DevFmtByte = ALC_BYTE_SOFT,
  46. DevFmtUByte = ALC_UNSIGNED_BYTE_SOFT,
  47. DevFmtShort = ALC_SHORT_SOFT,
  48. DevFmtUShort = ALC_UNSIGNED_SHORT_SOFT,
  49. DevFmtInt = ALC_INT_SOFT,
  50. DevFmtUInt = ALC_UNSIGNED_INT_SOFT,
  51. DevFmtFloat = ALC_FLOAT_SOFT,
  52. DevFmtTypeDefault = DevFmtFloat
  53. };
  54. enum DevFmtChannels : ALenum {
  55. DevFmtMono = ALC_MONO_SOFT,
  56. DevFmtStereo = ALC_STEREO_SOFT,
  57. DevFmtQuad = ALC_QUAD_SOFT,
  58. DevFmtX51 = ALC_5POINT1_SOFT,
  59. DevFmtX61 = ALC_6POINT1_SOFT,
  60. DevFmtX71 = ALC_7POINT1_SOFT,
  61. DevFmtAmbi3D = ALC_BFORMAT3D_SOFT,
  62. /* Similar to 5.1, except using rear channels instead of sides */
  63. DevFmtX51Rear = 0x70000000,
  64. DevFmtChannelsDefault = DevFmtStereo
  65. };
  66. #define MAX_OUTPUT_CHANNELS (16)
  67. /* DevFmtType traits, providing the type, etc given a DevFmtType. */
  68. template<DevFmtType T>
  69. struct DevFmtTypeTraits { };
  70. template<>
  71. struct DevFmtTypeTraits<DevFmtByte> { using Type = int8_t; };
  72. template<>
  73. struct DevFmtTypeTraits<DevFmtUByte> { using Type = uint8_t; };
  74. template<>
  75. struct DevFmtTypeTraits<DevFmtShort> { using Type = int16_t; };
  76. template<>
  77. struct DevFmtTypeTraits<DevFmtUShort> { using Type = uint16_t; };
  78. template<>
  79. struct DevFmtTypeTraits<DevFmtInt> { using Type = int32_t; };
  80. template<>
  81. struct DevFmtTypeTraits<DevFmtUInt> { using Type = uint32_t; };
  82. template<>
  83. struct DevFmtTypeTraits<DevFmtFloat> { using Type = float; };
  84. ALuint BytesFromDevFmt(DevFmtType type) noexcept;
  85. ALuint ChannelsFromDevFmt(DevFmtChannels chans, ALuint ambiorder) noexcept;
  86. inline ALuint FrameSizeFromDevFmt(DevFmtChannels chans, DevFmtType type, ALuint ambiorder) noexcept
  87. { return ChannelsFromDevFmt(chans, ambiorder) * BytesFromDevFmt(type); }
  88. enum class AmbiLayout {
  89. FuMa = ALC_FUMA_SOFT, /* FuMa channel order */
  90. ACN = ALC_ACN_SOFT, /* ACN channel order */
  91. Default = ACN
  92. };
  93. enum class AmbiNorm {
  94. FuMa = ALC_FUMA_SOFT, /* FuMa normalization */
  95. SN3D = ALC_SN3D_SOFT, /* SN3D normalization */
  96. N3D = ALC_N3D_SOFT, /* N3D normalization */
  97. Default = SN3D
  98. };
  99. #endif /* ALC_DEVFORMAT_H */