devformat.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "config.h"
  2. #include "devformat.h"
  3. #include <string_view>
  4. namespace {
  5. using namespace std::string_view_literals;
  6. } // namespace
  7. uint BytesFromDevFmt(DevFmtType type) noexcept
  8. {
  9. switch(type)
  10. {
  11. case DevFmtByte: return sizeof(int8_t);
  12. case DevFmtUByte: return sizeof(uint8_t);
  13. case DevFmtShort: return sizeof(int16_t);
  14. case DevFmtUShort: return sizeof(uint16_t);
  15. case DevFmtInt: return sizeof(int32_t);
  16. case DevFmtUInt: return sizeof(uint32_t);
  17. case DevFmtFloat: return sizeof(float);
  18. }
  19. return 0;
  20. }
  21. uint ChannelsFromDevFmt(DevFmtChannels chans, uint ambiorder) noexcept
  22. {
  23. switch(chans)
  24. {
  25. case DevFmtMono: return 1;
  26. case DevFmtStereo: return 2;
  27. case DevFmtQuad: return 4;
  28. case DevFmtX51: return 6;
  29. case DevFmtX61: return 7;
  30. case DevFmtX71: return 8;
  31. case DevFmtX714: return 12;
  32. case DevFmtX7144: return 16;
  33. case DevFmtX3D71: return 8;
  34. case DevFmtAmbi3D: return (ambiorder+1) * (ambiorder+1);
  35. }
  36. return 0;
  37. }
  38. auto DevFmtTypeString(DevFmtType type) noexcept -> std::string_view
  39. {
  40. switch(type)
  41. {
  42. case DevFmtByte: return "Int8"sv;
  43. case DevFmtUByte: return "UInt8"sv;
  44. case DevFmtShort: return "Int16"sv;
  45. case DevFmtUShort: return "UInt16"sv;
  46. case DevFmtInt: return "Int32"sv;
  47. case DevFmtUInt: return "UInt32"sv;
  48. case DevFmtFloat: return "Float32"sv;
  49. }
  50. return "(unknown type)"sv;
  51. }
  52. auto DevFmtChannelsString(DevFmtChannels chans) noexcept -> std::string_view
  53. {
  54. switch(chans)
  55. {
  56. case DevFmtMono: return "Mono"sv;
  57. case DevFmtStereo: return "Stereo"sv;
  58. case DevFmtQuad: return "Quadraphonic"sv;
  59. case DevFmtX51: return "5.1 Surround"sv;
  60. case DevFmtX61: return "6.1 Surround"sv;
  61. case DevFmtX71: return "7.1 Surround"sv;
  62. case DevFmtX714: return "7.1.4 Surround"sv;
  63. case DevFmtX7144: return "7.1.4.4 Surround"sv;
  64. case DevFmtX3D71: return "3D7.1 Surround"sv;
  65. case DevFmtAmbi3D: return "Ambisonic 3D"sv;
  66. }
  67. return "(unknown channels)"sv;
  68. }