alBuffer.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #ifndef _AL_BUFFER_H_
  2. #define _AL_BUFFER_H_
  3. #include "AL/alc.h"
  4. #include "AL/al.h"
  5. #include "AL/alext.h"
  6. #include "inprogext.h"
  7. #include "atomic.h"
  8. #include "rwlock.h"
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. /* User formats */
  13. enum UserFmtType {
  14. UserFmtUByte,
  15. UserFmtShort,
  16. UserFmtFloat,
  17. UserFmtDouble,
  18. UserFmtMulaw,
  19. UserFmtAlaw,
  20. UserFmtIMA4,
  21. UserFmtMSADPCM,
  22. };
  23. enum UserFmtChannels {
  24. UserFmtMono,
  25. UserFmtStereo,
  26. UserFmtRear,
  27. UserFmtQuad,
  28. UserFmtX51, /* (WFX order) */
  29. UserFmtX61, /* (WFX order) */
  30. UserFmtX71, /* (WFX order) */
  31. UserFmtBFormat2D, /* WXY */
  32. UserFmtBFormat3D, /* WXYZ */
  33. };
  34. ALsizei BytesFromUserFmt(enum UserFmtType type);
  35. ALsizei ChannelsFromUserFmt(enum UserFmtChannels chans);
  36. inline ALsizei FrameSizeFromUserFmt(enum UserFmtChannels chans, enum UserFmtType type)
  37. {
  38. return ChannelsFromUserFmt(chans) * BytesFromUserFmt(type);
  39. }
  40. /* Storable formats */
  41. enum FmtType {
  42. FmtUByte = UserFmtUByte,
  43. FmtShort = UserFmtShort,
  44. FmtFloat = UserFmtFloat,
  45. FmtDouble = UserFmtDouble,
  46. FmtMulaw = UserFmtMulaw,
  47. FmtAlaw = UserFmtAlaw,
  48. };
  49. enum FmtChannels {
  50. FmtMono = UserFmtMono,
  51. FmtStereo = UserFmtStereo,
  52. FmtRear = UserFmtRear,
  53. FmtQuad = UserFmtQuad,
  54. FmtX51 = UserFmtX51,
  55. FmtX61 = UserFmtX61,
  56. FmtX71 = UserFmtX71,
  57. FmtBFormat2D = UserFmtBFormat2D,
  58. FmtBFormat3D = UserFmtBFormat3D,
  59. };
  60. #define MAX_INPUT_CHANNELS (8)
  61. ALsizei BytesFromFmt(enum FmtType type);
  62. ALsizei ChannelsFromFmt(enum FmtChannels chans);
  63. inline ALsizei FrameSizeFromFmt(enum FmtChannels chans, enum FmtType type)
  64. {
  65. return ChannelsFromFmt(chans) * BytesFromFmt(type);
  66. }
  67. typedef struct ALbuffer {
  68. ALvoid *data;
  69. ALsizei Frequency;
  70. ALbitfieldSOFT Access;
  71. ALsizei SampleLen;
  72. enum FmtChannels FmtChannels;
  73. enum FmtType FmtType;
  74. ALsizei BytesAlloc;
  75. enum UserFmtType OriginalType;
  76. ALsizei OriginalSize;
  77. ALsizei OriginalAlign;
  78. ALsizei LoopStart;
  79. ALsizei LoopEnd;
  80. ATOMIC(ALsizei) UnpackAlign;
  81. ATOMIC(ALsizei) PackAlign;
  82. ALbitfieldSOFT MappedAccess;
  83. ALsizei MappedOffset;
  84. ALsizei MappedSize;
  85. /* Number of times buffer was attached to a source (deletion can only occur when 0) */
  86. RefCount ref;
  87. /* Self ID */
  88. ALuint id;
  89. } ALbuffer;
  90. ALvoid ReleaseALBuffers(ALCdevice *device);
  91. #ifdef __cplusplus
  92. }
  93. #endif
  94. #endif