diff options
author | Chris Robinson <[email protected]> | 2020-08-24 17:59:07 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2020-08-24 17:59:07 -0700 |
commit | 9d61484e4bc0b2691b714d758391b3c3ecfd7890 (patch) | |
tree | e122607532bbbd692dccf01fa6da55e928da54bf /alc | |
parent | 73ab9d46c88f034a32a6fb174e98fd23dec1ff98 (diff) |
Move storable buffer format info to a separate source
Diffstat (limited to 'alc')
-rw-r--r-- | alc/buffer_formats.cpp | 37 | ||||
-rw-r--r-- | alc/buffer_formats.h | 33 |
2 files changed, 70 insertions, 0 deletions
diff --git a/alc/buffer_formats.cpp b/alc/buffer_formats.cpp new file mode 100644 index 00000000..7ee4bfc8 --- /dev/null +++ b/alc/buffer_formats.cpp @@ -0,0 +1,37 @@ + +#include "config.h" + +#include "buffer_formats.h" + +#include <cstdint> + + +ALuint BytesFromFmt(FmtType type) noexcept +{ + switch(type) + { + case FmtUByte: return sizeof(uint8_t); + case FmtShort: return sizeof(int16_t); + case FmtFloat: return sizeof(float); + case FmtDouble: return sizeof(double); + case FmtMulaw: return sizeof(uint8_t); + case FmtAlaw: return sizeof(uint8_t); + } + return 0; +} +ALuint ChannelsFromFmt(FmtChannels chans, ALuint ambiorder) noexcept +{ + switch(chans) + { + case FmtMono: return 1; + case FmtStereo: return 2; + case FmtRear: return 2; + case FmtQuad: return 4; + case FmtX51: return 6; + case FmtX61: return 7; + case FmtX71: return 8; + case FmtBFormat2D: return (ambiorder*2) + 1; + case FmtBFormat3D: return (ambiorder+1) * (ambiorder+1); + } + return 0; +} diff --git a/alc/buffer_formats.h b/alc/buffer_formats.h new file mode 100644 index 00000000..b10cea4c --- /dev/null +++ b/alc/buffer_formats.h @@ -0,0 +1,33 @@ +#ifndef ALC_BUFFER_FORMATS_H +#define ALC_BUFFER_FORMATS_H + +#include "AL/al.h" + + +/* Storable formats */ +enum FmtType : unsigned char { + FmtUByte, + FmtShort, + FmtFloat, + FmtDouble, + FmtMulaw, + FmtAlaw, +}; +enum FmtChannels : unsigned char { + FmtMono, + FmtStereo, + FmtRear, + FmtQuad, + FmtX51, /* (WFX order) */ + FmtX61, /* (WFX order) */ + FmtX71, /* (WFX order) */ + FmtBFormat2D, + FmtBFormat3D, +}; + +ALuint BytesFromFmt(FmtType type) noexcept; +ALuint ChannelsFromFmt(FmtChannels chans, ALuint ambiorder) noexcept; +inline ALuint FrameSizeFromFmt(FmtChannels chans, FmtType type, ALuint ambiorder) noexcept +{ return ChannelsFromFmt(chans, ambiorder) * BytesFromFmt(type); } + +#endif /* ALC_BUFFER_FORMATS_H */ |