alBuffer.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. };
  23. enum UserFmtChannels {
  24. UserFmtMono = AL_MONO_SOFT,
  25. UserFmtStereo = AL_STEREO_SOFT,
  26. UserFmtRear = AL_REAR_SOFT,
  27. UserFmtQuad = AL_QUAD_SOFT,
  28. UserFmtX51 = AL_5POINT1_SOFT, /* (WFX order) */
  29. UserFmtX61 = AL_6POINT1_SOFT, /* (WFX order) */
  30. UserFmtX71 = AL_7POINT1_SOFT, /* (WFX order) */
  31. };
  32. ALuint BytesFromUserFmt(enum UserFmtType type);
  33. ALuint ChannelsFromUserFmt(enum UserFmtChannels chans);
  34. inline ALuint FrameSizeFromUserFmt(enum UserFmtChannels chans, enum UserFmtType type)
  35. {
  36. return ChannelsFromUserFmt(chans) * BytesFromUserFmt(type);
  37. }
  38. /* Storable formats */
  39. enum FmtType {
  40. FmtByte = UserFmtByte,
  41. FmtShort = UserFmtShort,
  42. FmtFloat = UserFmtFloat,
  43. };
  44. enum FmtChannels {
  45. FmtMono = UserFmtMono,
  46. FmtStereo = UserFmtStereo,
  47. FmtRear = UserFmtRear,
  48. FmtQuad = UserFmtQuad,
  49. FmtX51 = UserFmtX51,
  50. FmtX61 = UserFmtX61,
  51. FmtX71 = UserFmtX71,
  52. };
  53. #define MAX_INPUT_CHANNELS (8)
  54. ALuint BytesFromFmt(enum FmtType type);
  55. ALuint ChannelsFromFmt(enum FmtChannels chans);
  56. inline ALuint FrameSizeFromFmt(enum FmtChannels chans, enum FmtType type)
  57. {
  58. return ChannelsFromFmt(chans) * BytesFromFmt(type);
  59. }
  60. typedef struct ALbuffer {
  61. ALvoid *data;
  62. ALsizei Frequency;
  63. ALenum Format;
  64. ALsizei SampleLen;
  65. enum FmtChannels FmtChannels;
  66. enum FmtType FmtType;
  67. enum UserFmtChannels OriginalChannels;
  68. enum UserFmtType OriginalType;
  69. ALsizei OriginalSize;
  70. ALsizei LoopStart;
  71. ALsizei LoopEnd;
  72. /* Number of times buffer was attached to a source (deletion can only occur when 0) */
  73. RefCount ref;
  74. RWLock lock;
  75. /* Self ID */
  76. ALuint id;
  77. } ALbuffer;
  78. inline struct ALbuffer *LookupBuffer(ALCdevice *device, ALuint id)
  79. { return (struct ALbuffer*)LookupUIntMapKey(&device->BufferMap, id); }
  80. inline struct ALbuffer *RemoveBuffer(ALCdevice *device, ALuint id)
  81. { return (struct ALbuffer*)RemoveUIntMapKey(&device->BufferMap, id); }
  82. ALvoid ReleaseALBuffers(ALCdevice *device);
  83. #ifdef __cplusplus
  84. }
  85. #endif
  86. #endif