Workaround a GCC 5 issue
[openal-soft.git] / alc / devformat.h
blobf08dc182ca6b559cb6bb6e9080d00b6f7f96627a
1 #ifndef ALC_DEVFORMAT_H
2 #define ALC_DEVFORMAT_H
4 #include <cstdint>
6 #include "AL/al.h"
7 #include "AL/alext.h"
9 #include "inprogext.h"
12 enum Channel {
13 FrontLeft = 0,
14 FrontRight,
15 FrontCenter,
16 LFE,
17 BackLeft,
18 BackRight,
19 BackCenter,
20 SideLeft,
21 SideRight,
23 TopFrontLeft,
24 TopFrontCenter,
25 TopFrontRight,
26 TopCenter,
27 TopBackLeft,
28 TopBackCenter,
29 TopBackRight,
31 MaxChannels
35 /* Device formats */
36 enum DevFmtType : ALenum {
37 DevFmtByte = ALC_BYTE_SOFT,
38 DevFmtUByte = ALC_UNSIGNED_BYTE_SOFT,
39 DevFmtShort = ALC_SHORT_SOFT,
40 DevFmtUShort = ALC_UNSIGNED_SHORT_SOFT,
41 DevFmtInt = ALC_INT_SOFT,
42 DevFmtUInt = ALC_UNSIGNED_INT_SOFT,
43 DevFmtFloat = ALC_FLOAT_SOFT,
45 DevFmtTypeDefault = DevFmtFloat
47 enum DevFmtChannels : ALenum {
48 DevFmtMono = ALC_MONO_SOFT,
49 DevFmtStereo = ALC_STEREO_SOFT,
50 DevFmtQuad = ALC_QUAD_SOFT,
51 DevFmtX51 = ALC_5POINT1_SOFT,
52 DevFmtX61 = ALC_6POINT1_SOFT,
53 DevFmtX71 = ALC_7POINT1_SOFT,
54 DevFmtAmbi3D = ALC_BFORMAT3D_SOFT,
56 /* Similar to 5.1, except using rear channels instead of sides */
57 DevFmtX51Rear = 0x70000000,
59 DevFmtChannelsDefault = DevFmtStereo
61 #define MAX_OUTPUT_CHANNELS 16
63 /* DevFmtType traits, providing the type, etc given a DevFmtType. */
64 template<DevFmtType T>
65 struct DevFmtTypeTraits { };
67 template<>
68 struct DevFmtTypeTraits<DevFmtByte> { using Type = int8_t; };
69 template<>
70 struct DevFmtTypeTraits<DevFmtUByte> { using Type = uint8_t; };
71 template<>
72 struct DevFmtTypeTraits<DevFmtShort> { using Type = int16_t; };
73 template<>
74 struct DevFmtTypeTraits<DevFmtUShort> { using Type = uint16_t; };
75 template<>
76 struct DevFmtTypeTraits<DevFmtInt> { using Type = int32_t; };
77 template<>
78 struct DevFmtTypeTraits<DevFmtUInt> { using Type = uint32_t; };
79 template<>
80 struct DevFmtTypeTraits<DevFmtFloat> { using Type = float; };
83 ALuint BytesFromDevFmt(DevFmtType type) noexcept;
84 ALuint ChannelsFromDevFmt(DevFmtChannels chans, ALuint ambiorder) noexcept;
85 inline ALuint FrameSizeFromDevFmt(DevFmtChannels chans, DevFmtType type, ALuint ambiorder) noexcept
86 { return ChannelsFromDevFmt(chans, ambiorder) * BytesFromDevFmt(type); }
88 enum class DevAmbiLayout : ALenum {
89 FuMa = ALC_FUMA_SOFT, /* FuMa channel order */
90 ACN = ALC_ACN_SOFT, /* ACN channel order */
92 Default = ACN
95 enum class DevAmbiScaling : ALenum {
96 FuMa = ALC_FUMA_SOFT, /* FuMa normalization */
97 SN3D = ALC_SN3D_SOFT, /* SN3D normalization */
98 N3D = ALC_N3D_SOFT, /* N3D normalization */
100 Default = SN3D
103 #endif /* ALC_DEVFORMAT_H */