2021-04-28 12:43:51 +08:00
|
|
|
#ifndef CORE_DEVFORMAT_H
|
|
|
|
#define CORE_DEVFORMAT_H
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
|
|
|
|
|
|
|
using uint = unsigned int;
|
|
|
|
|
|
|
|
enum Channel : unsigned char {
|
|
|
|
FrontLeft = 0,
|
|
|
|
FrontRight,
|
|
|
|
FrontCenter,
|
|
|
|
LFE,
|
|
|
|
BackLeft,
|
|
|
|
BackRight,
|
|
|
|
BackCenter,
|
|
|
|
SideLeft,
|
|
|
|
SideRight,
|
|
|
|
|
2022-04-25 12:02:45 +08:00
|
|
|
TopCenter,
|
2021-04-28 12:43:51 +08:00
|
|
|
TopFrontLeft,
|
|
|
|
TopFrontCenter,
|
|
|
|
TopFrontRight,
|
|
|
|
TopBackLeft,
|
|
|
|
TopBackCenter,
|
|
|
|
TopBackRight,
|
|
|
|
|
|
|
|
MaxChannels
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* Device formats */
|
|
|
|
enum DevFmtType : unsigned char {
|
|
|
|
DevFmtByte,
|
|
|
|
DevFmtUByte,
|
|
|
|
DevFmtShort,
|
|
|
|
DevFmtUShort,
|
|
|
|
DevFmtInt,
|
|
|
|
DevFmtUInt,
|
|
|
|
DevFmtFloat,
|
|
|
|
|
|
|
|
DevFmtTypeDefault = DevFmtFloat
|
|
|
|
};
|
|
|
|
enum DevFmtChannels : unsigned char {
|
|
|
|
DevFmtMono,
|
|
|
|
DevFmtStereo,
|
|
|
|
DevFmtQuad,
|
|
|
|
DevFmtX51,
|
|
|
|
DevFmtX61,
|
|
|
|
DevFmtX71,
|
|
|
|
DevFmtAmbi3D,
|
|
|
|
|
|
|
|
DevFmtChannelsDefault = DevFmtStereo
|
|
|
|
};
|
|
|
|
#define MAX_OUTPUT_CHANNELS 16
|
|
|
|
|
|
|
|
/* DevFmtType traits, providing the type, etc given a DevFmtType. */
|
|
|
|
template<DevFmtType T>
|
|
|
|
struct DevFmtTypeTraits { };
|
|
|
|
|
|
|
|
template<>
|
|
|
|
struct DevFmtTypeTraits<DevFmtByte> { using Type = int8_t; };
|
|
|
|
template<>
|
|
|
|
struct DevFmtTypeTraits<DevFmtUByte> { using Type = uint8_t; };
|
|
|
|
template<>
|
|
|
|
struct DevFmtTypeTraits<DevFmtShort> { using Type = int16_t; };
|
|
|
|
template<>
|
|
|
|
struct DevFmtTypeTraits<DevFmtUShort> { using Type = uint16_t; };
|
|
|
|
template<>
|
|
|
|
struct DevFmtTypeTraits<DevFmtInt> { using Type = int32_t; };
|
|
|
|
template<>
|
|
|
|
struct DevFmtTypeTraits<DevFmtUInt> { using Type = uint32_t; };
|
|
|
|
template<>
|
|
|
|
struct DevFmtTypeTraits<DevFmtFloat> { using Type = float; };
|
|
|
|
|
|
|
|
template<DevFmtType T>
|
|
|
|
using DevFmtType_t = typename DevFmtTypeTraits<T>::Type;
|
|
|
|
|
|
|
|
|
|
|
|
uint BytesFromDevFmt(DevFmtType type) noexcept;
|
|
|
|
uint ChannelsFromDevFmt(DevFmtChannels chans, uint ambiorder) noexcept;
|
|
|
|
inline uint FrameSizeFromDevFmt(DevFmtChannels chans, DevFmtType type, uint ambiorder) noexcept
|
|
|
|
{ return ChannelsFromDevFmt(chans, ambiorder) * BytesFromDevFmt(type); }
|
|
|
|
|
|
|
|
const char *DevFmtTypeString(DevFmtType type) noexcept;
|
|
|
|
const char *DevFmtChannelsString(DevFmtChannels chans) noexcept;
|
|
|
|
|
|
|
|
enum class DevAmbiLayout : bool {
|
|
|
|
FuMa,
|
|
|
|
ACN,
|
|
|
|
|
|
|
|
Default = ACN
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class DevAmbiScaling : unsigned char {
|
|
|
|
FuMa,
|
|
|
|
SN3D,
|
|
|
|
N3D,
|
|
|
|
|
|
|
|
Default = SN3D
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* CORE_DEVFORMAT_H */
|