buffer.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #ifndef AL_BUFFER_H
  2. #define AL_BUFFER_H
  3. #include <atomic>
  4. #include "AL/al.h"
  5. #include "albyte.h"
  6. #include "almalloc.h"
  7. #include "atomic.h"
  8. #include "inprogext.h"
  9. #include "vector.h"
  10. /* User formats */
  11. enum UserFmtType : unsigned char {
  12. UserFmtUByte,
  13. UserFmtShort,
  14. UserFmtFloat,
  15. UserFmtDouble,
  16. UserFmtMulaw,
  17. UserFmtAlaw,
  18. UserFmtIMA4,
  19. UserFmtMSADPCM,
  20. };
  21. enum UserFmtChannels : unsigned char {
  22. UserFmtMono,
  23. UserFmtStereo,
  24. UserFmtRear,
  25. UserFmtQuad,
  26. UserFmtX51, /* (WFX order) */
  27. UserFmtX61, /* (WFX order) */
  28. UserFmtX71, /* (WFX order) */
  29. UserFmtBFormat2D, /* WXY */
  30. UserFmtBFormat3D, /* WXYZ */
  31. };
  32. /* Storable formats */
  33. enum FmtType : unsigned char {
  34. FmtUByte = UserFmtUByte,
  35. FmtShort = UserFmtShort,
  36. FmtFloat = UserFmtFloat,
  37. FmtDouble = UserFmtDouble,
  38. FmtMulaw = UserFmtMulaw,
  39. FmtAlaw = UserFmtAlaw,
  40. };
  41. enum FmtChannels : unsigned char {
  42. FmtMono = UserFmtMono,
  43. FmtStereo = UserFmtStereo,
  44. FmtRear = UserFmtRear,
  45. FmtQuad = UserFmtQuad,
  46. FmtX51 = UserFmtX51,
  47. FmtX61 = UserFmtX61,
  48. FmtX71 = UserFmtX71,
  49. FmtBFormat2D = UserFmtBFormat2D,
  50. FmtBFormat3D = UserFmtBFormat3D,
  51. };
  52. #define MAX_INPUT_CHANNELS (8)
  53. ALuint BytesFromFmt(FmtType type);
  54. ALuint ChannelsFromFmt(FmtChannels chans);
  55. inline ALuint FrameSizeFromFmt(FmtChannels chans, FmtType type)
  56. { return ChannelsFromFmt(chans) * BytesFromFmt(type); }
  57. struct ALbuffer {
  58. al::vector<al::byte,16> mData;
  59. ALuint Frequency{0u};
  60. ALbitfieldSOFT Access{0u};
  61. ALuint SampleLen{0u};
  62. FmtChannels mFmtChannels{};
  63. FmtType mFmtType{};
  64. UserFmtType OriginalType{};
  65. ALuint OriginalSize{0};
  66. ALuint OriginalAlign{0};
  67. ALuint LoopStart{0u};
  68. ALuint LoopEnd{0u};
  69. ALuint UnpackAlign{0};
  70. ALuint PackAlign{0};
  71. ALbitfieldSOFT MappedAccess{0u};
  72. ALsizei MappedOffset{0};
  73. ALsizei MappedSize{0};
  74. /* Number of times buffer was attached to a source (deletion can only occur when 0) */
  75. RefCount ref{0u};
  76. /* Self ID */
  77. ALuint id{0};
  78. };
  79. #endif