alBuffer.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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. UserFmtByte3 = AL_BYTE3_SOFT,
  18. UserFmtUByte3 = AL_UNSIGNED_BYTE3_SOFT,
  19. UserFmtMulaw,
  20. UserFmtAlaw,
  21. UserFmtIMA4,
  22. UserFmtMSADPCM,
  23. };
  24. enum UserFmtChannels {
  25. UserFmtMono = AL_MONO_SOFT,
  26. UserFmtStereo = AL_STEREO_SOFT,
  27. UserFmtRear = AL_REAR_SOFT,
  28. UserFmtQuad = AL_QUAD_SOFT,
  29. UserFmtX51 = AL_5POINT1_SOFT, /* (WFX order) */
  30. UserFmtX61 = AL_6POINT1_SOFT, /* (WFX order) */
  31. UserFmtX71 = AL_7POINT1_SOFT, /* (WFX order) */
  32. UserFmtBFormat2D = 0x10000000, /* WXY */
  33. UserFmtBFormat3D, /* WXYZ */
  34. };
  35. ALuint BytesFromUserFmt(enum UserFmtType type) DECL_CONST;
  36. ALuint ChannelsFromUserFmt(enum UserFmtChannels chans) DECL_CONST;
  37. inline ALuint FrameSizeFromUserFmt(enum UserFmtChannels chans, enum UserFmtType type)
  38. {
  39. return ChannelsFromUserFmt(chans) * BytesFromUserFmt(type);
  40. }
  41. /* Storable formats */
  42. enum FmtType {
  43. FmtByte = UserFmtByte,
  44. FmtShort = UserFmtShort,
  45. FmtFloat = UserFmtFloat,
  46. };
  47. enum FmtChannels {
  48. FmtMono = UserFmtMono,
  49. FmtStereo = UserFmtStereo,
  50. FmtRear = UserFmtRear,
  51. FmtQuad = UserFmtQuad,
  52. FmtX51 = UserFmtX51,
  53. FmtX61 = UserFmtX61,
  54. FmtX71 = UserFmtX71,
  55. FmtBFormat2D = UserFmtBFormat2D,
  56. FmtBFormat3D = UserFmtBFormat3D,
  57. };
  58. #define MAX_INPUT_CHANNELS (8)
  59. ALuint BytesFromFmt(enum FmtType type) DECL_CONST;
  60. ALuint ChannelsFromFmt(enum FmtChannels chans) DECL_CONST;
  61. inline ALuint FrameSizeFromFmt(enum FmtChannels chans, enum FmtType type)
  62. {
  63. return ChannelsFromFmt(chans) * BytesFromFmt(type);
  64. }
  65. typedef struct ALbuffer {
  66. ALvoid *data;
  67. ALsizei Frequency;
  68. ALenum Format;
  69. ALsizei SampleLen;
  70. enum FmtChannels FmtChannels;
  71. enum FmtType FmtType;
  72. enum UserFmtChannels OriginalChannels;
  73. enum UserFmtType OriginalType;
  74. ALsizei OriginalSize;
  75. ALsizei OriginalAlign;
  76. ALsizei LoopStart;
  77. ALsizei LoopEnd;
  78. ATOMIC(ALsizei) UnpackAlign;
  79. ATOMIC(ALsizei) PackAlign;
  80. /* Number of times buffer was attached to a source (deletion can only occur when 0) */
  81. RefCount ref;
  82. RWLock lock;
  83. /* Self ID */
  84. ALuint id;
  85. } ALbuffer;
  86. ALbuffer *NewBuffer(ALCcontext *context);
  87. void DeleteBuffer(ALCdevice *device, ALbuffer *buffer);
  88. ALenum LoadData(ALbuffer *buffer, ALuint freq, ALenum NewFormat, ALsizei frames, enum UserFmtChannels SrcChannels, enum UserFmtType SrcType, const ALvoid *data, ALsizei align, ALboolean storesrc);
  89. inline struct ALbuffer *LookupBuffer(ALCdevice *device, ALuint id)
  90. { return (struct ALbuffer*)LookupUIntMapKey(&device->BufferMap, id); }
  91. inline struct ALbuffer *RemoveBuffer(ALCdevice *device, ALuint id)
  92. { return (struct ALbuffer*)RemoveUIntMapKey(&device->BufferMap, id); }
  93. ALvoid ReleaseALBuffers(ALCdevice *device);
  94. #ifdef __cplusplus
  95. }
  96. #endif
  97. #endif