storage_formats.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #ifndef CORE_STORAGE_FORMATS_H
  2. #define CORE_STORAGE_FORMATS_H
  3. #include <string_view>
  4. using uint = unsigned int;
  5. /* Storable formats */
  6. enum FmtType : unsigned char {
  7. FmtUByte,
  8. FmtShort,
  9. FmtInt,
  10. FmtFloat,
  11. FmtDouble,
  12. FmtMulaw,
  13. FmtAlaw,
  14. FmtIMA4,
  15. FmtMSADPCM,
  16. };
  17. enum FmtChannels : unsigned char {
  18. FmtMono,
  19. FmtStereo,
  20. FmtRear,
  21. FmtQuad,
  22. FmtX51, /* (WFX order) */
  23. FmtX61, /* (WFX order) */
  24. FmtX71, /* (WFX order) */
  25. FmtBFormat2D,
  26. FmtBFormat3D,
  27. FmtUHJ2, /* 2-channel UHJ, aka "BHJ", stereo-compatible */
  28. FmtUHJ3, /* 3-channel UHJ, aka "THJ" */
  29. FmtUHJ4, /* 4-channel UHJ, aka "PHJ" */
  30. FmtSuperStereo, /* Stereo processed with Super Stereo. */
  31. FmtMonoDup, /* Mono duplicated for left/right separation */
  32. };
  33. enum class AmbiLayout : unsigned char {
  34. FuMa,
  35. ACN,
  36. };
  37. enum class AmbiScaling : unsigned char {
  38. FuMa,
  39. SN3D,
  40. N3D,
  41. UHJ,
  42. };
  43. auto NameFromFormat(FmtType type) noexcept -> std::string_view;
  44. auto NameFromFormat(FmtChannels channels) noexcept -> std::string_view;
  45. uint BytesFromFmt(FmtType type) noexcept;
  46. uint ChannelsFromFmt(FmtChannels chans, uint ambiorder) noexcept;
  47. inline uint FrameSizeFromFmt(FmtChannels chans, FmtType type, uint ambiorder) noexcept
  48. { return ChannelsFromFmt(chans, ambiorder) * BytesFromFmt(type); }
  49. #endif /* CORE_STORAGE_FORMATS_H */