aboutsummaryrefslogtreecommitdiffstats
path: root/alc
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2020-08-24 17:59:07 -0700
committerChris Robinson <[email protected]>2020-08-24 17:59:07 -0700
commit9d61484e4bc0b2691b714d758391b3c3ecfd7890 (patch)
treee122607532bbbd692dccf01fa6da55e928da54bf /alc
parent73ab9d46c88f034a32a6fb174e98fd23dec1ff98 (diff)
Move storable buffer format info to a separate source
Diffstat (limited to 'alc')
-rw-r--r--alc/buffer_formats.cpp37
-rw-r--r--alc/buffer_formats.h33
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 */