alBuffer.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #ifndef _AL_BUFFER_H_
  2. #define _AL_BUFFER_H_
  3. #include "alMain.h"
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. /* User formats */
  8. enum UserFmtType {
  9. UserFmtByte = AL_BYTE_SOFT,
  10. UserFmtUByte = AL_UNSIGNED_BYTE_SOFT,
  11. UserFmtShort = AL_SHORT_SOFT,
  12. UserFmtUShort = AL_UNSIGNED_SHORT_SOFT,
  13. UserFmtInt = AL_INT_SOFT,
  14. UserFmtUInt = AL_UNSIGNED_INT_SOFT,
  15. UserFmtFloat = AL_FLOAT_SOFT,
  16. UserFmtDouble = AL_DOUBLE_SOFT,
  17. UserFmtMulaw = AL_MULAW_SOFT,
  18. UserFmtAlaw = 0x10000000,
  19. UserFmtIMA4,
  20. UserFmtMSADPCM,
  21. };
  22. enum UserFmtChannels {
  23. UserFmtMono = AL_MONO_SOFT,
  24. UserFmtStereo = AL_STEREO_SOFT,
  25. UserFmtRear = AL_REAR_SOFT,
  26. UserFmtQuad = AL_QUAD_SOFT,
  27. UserFmtX51 = AL_5POINT1_SOFT, /* (WFX order) */
  28. UserFmtX61 = AL_6POINT1_SOFT, /* (WFX order) */
  29. UserFmtX71 = AL_7POINT1_SOFT, /* (WFX order) */
  30. UserFmtBFormat2D = AL_BFORMAT2D_SOFT, /* WXY */
  31. UserFmtBFormat3D = AL_BFORMAT3D_SOFT, /* WXYZ */
  32. };
  33. ALsizei BytesFromUserFmt(enum UserFmtType type);
  34. ALsizei ChannelsFromUserFmt(enum UserFmtChannels chans);
  35. inline ALsizei FrameSizeFromUserFmt(enum UserFmtChannels chans, enum UserFmtType type)
  36. {
  37. return ChannelsFromUserFmt(chans) * BytesFromUserFmt(type);
  38. }
  39. /* Storable formats */
  40. enum FmtType {
  41. FmtByte = UserFmtByte,
  42. FmtShort = UserFmtShort,
  43. FmtFloat = UserFmtFloat,
  44. };
  45. enum FmtChannels {
  46. FmtMono = UserFmtMono,
  47. FmtStereo = UserFmtStereo,
  48. FmtRear = UserFmtRear,
  49. FmtQuad = UserFmtQuad,
  50. FmtX51 = UserFmtX51,
  51. FmtX61 = UserFmtX61,
  52. FmtX71 = UserFmtX71,
  53. FmtBFormat2D = UserFmtBFormat2D,
  54. FmtBFormat3D = UserFmtBFormat3D,
  55. };
  56. #define MAX_INPUT_CHANNELS (8)
  57. ALsizei BytesFromFmt(enum FmtType type);
  58. ALsizei ChannelsFromFmt(enum FmtChannels chans);
  59. inline ALsizei FrameSizeFromFmt(enum FmtChannels chans, enum FmtType type)
  60. {
  61. return ChannelsFromFmt(chans) * BytesFromFmt(type);
  62. }
  63. typedef struct ALbuffer {
  64. ALvoid *data;
  65. ALsizei Frequency;
  66. ALenum Format;
  67. ALsizei SampleLen;
  68. enum FmtChannels FmtChannels;
  69. enum FmtType FmtType;
  70. ALuint BytesAlloc;
  71. enum UserFmtChannels OriginalChannels;
  72. enum UserFmtType OriginalType;
  73. ALsizei OriginalSize;
  74. ALsizei OriginalAlign;
  75. ALsizei LoopStart;
  76. ALsizei LoopEnd;
  77. ATOMIC(ALsizei) UnpackAlign;
  78. ATOMIC(ALsizei) PackAlign;
  79. /* Number of times buffer was attached to a source (deletion can only occur when 0) */
  80. RefCount ref;
  81. RWLock lock;
  82. /* Self ID */
  83. ALuint id;
  84. } ALbuffer;
  85. ALbuffer *NewBuffer(ALCcontext *context);
  86. void DeleteBuffer(ALCdevice *device, ALbuffer *buffer);
  87. ALenum LoadData(ALbuffer *buffer, ALuint freq, ALenum NewFormat, ALsizei frames, enum UserFmtChannels SrcChannels, enum UserFmtType SrcType, const ALvoid *data, ALsizei align, ALboolean storesrc);
  88. inline void LockBuffersRead(ALCdevice *device)
  89. { LockUIntMapRead(&device->BufferMap); }
  90. inline void UnlockBuffersRead(ALCdevice *device)
  91. { UnlockUIntMapRead(&device->BufferMap); }
  92. inline void LockBuffersWrite(ALCdevice *device)
  93. { LockUIntMapWrite(&device->BufferMap); }
  94. inline void UnlockBuffersWrite(ALCdevice *device)
  95. { UnlockUIntMapWrite(&device->BufferMap); }
  96. inline struct ALbuffer *LookupBuffer(ALCdevice *device, ALuint id)
  97. { return (struct ALbuffer*)LookupUIntMapKeyNoLock(&device->BufferMap, id); }
  98. inline struct ALbuffer *RemoveBuffer(ALCdevice *device, ALuint id)
  99. { return (struct ALbuffer*)RemoveUIntMapKeyNoLock(&device->BufferMap, id); }
  100. ALvoid ReleaseALBuffers(ALCdevice *device);
  101. #ifdef __cplusplus
  102. }
  103. #endif
  104. #endif