rlm@0: #ifndef _AL_BUFFER_H_ rlm@0: #define _AL_BUFFER_H_ rlm@0: rlm@0: #include "AL/al.h" rlm@0: rlm@0: #ifdef __cplusplus rlm@0: extern "C" { rlm@0: #endif rlm@0: rlm@0: /* User formats */ rlm@0: enum UserFmtType { rlm@0: UserFmtByte = AL_BYTE, rlm@0: UserFmtUByte = AL_UNSIGNED_BYTE, rlm@0: UserFmtShort = AL_SHORT, rlm@0: UserFmtUShort = AL_UNSIGNED_SHORT, rlm@0: UserFmtInt = AL_INT, rlm@0: UserFmtUInt = AL_UNSIGNED_INT, rlm@0: UserFmtFloat = AL_FLOAT, rlm@0: UserFmtDouble = AL_DOUBLE, rlm@0: UserFmtMulaw = AL_MULAW, rlm@0: UserFmtIMA4 = AL_IMA4, rlm@0: UserFmtByte3 = AL_BYTE3, rlm@0: UserFmtUByte3 = AL_UNSIGNED_BYTE3, rlm@0: }; rlm@0: enum UserFmtChannels { rlm@0: UserFmtMono = AL_MONO, rlm@0: UserFmtStereo = AL_STEREO, rlm@0: UserFmtRear = AL_REAR, rlm@0: UserFmtQuad = AL_QUAD, rlm@0: UserFmtX51 = AL_5POINT1, /* (WFX order) */ rlm@0: UserFmtX61 = AL_6POINT1, /* (WFX order) */ rlm@0: UserFmtX71 = AL_7POINT1 /* (WFX order) */ rlm@0: }; rlm@0: rlm@0: ALboolean DecomposeUserFormat(ALenum format, enum UserFmtChannels *chans, rlm@0: enum UserFmtType *type); rlm@0: ALuint BytesFromUserFmt(enum UserFmtType type); rlm@0: ALuint ChannelsFromUserFmt(enum UserFmtChannels chans); rlm@0: static __inline ALuint FrameSizeFromUserFmt(enum UserFmtChannels chans, rlm@0: enum UserFmtType type) rlm@0: { rlm@0: return ChannelsFromUserFmt(chans) * BytesFromUserFmt(type); rlm@0: } rlm@0: rlm@0: rlm@0: /* Storable formats */ rlm@0: enum FmtType { rlm@0: FmtByte = UserFmtByte, rlm@0: FmtShort = UserFmtShort, rlm@0: FmtFloat = UserFmtFloat, rlm@0: }; rlm@0: enum FmtChannels { rlm@0: FmtMono = UserFmtMono, rlm@0: FmtStereo = UserFmtStereo, rlm@0: FmtRear = UserFmtRear, rlm@0: FmtQuad = UserFmtQuad, rlm@0: FmtX51 = UserFmtX51, rlm@0: FmtX61 = UserFmtX61, rlm@0: FmtX71 = UserFmtX71, rlm@0: }; rlm@0: rlm@0: ALboolean DecomposeFormat(ALenum format, enum FmtChannels *chans, enum FmtType *type); rlm@0: ALuint BytesFromFmt(enum FmtType type); rlm@0: ALuint ChannelsFromFmt(enum FmtChannels chans); rlm@0: static __inline ALuint FrameSizeFromFmt(enum FmtChannels chans, enum FmtType type) rlm@0: { rlm@0: return ChannelsFromFmt(chans) * BytesFromFmt(type); rlm@0: } rlm@0: rlm@0: rlm@0: typedef struct ALbuffer rlm@0: { rlm@0: ALvoid *data; rlm@0: ALsizei size; rlm@0: rlm@0: ALsizei Frequency; rlm@0: enum FmtChannels FmtChannels; rlm@0: enum FmtType FmtType; rlm@0: rlm@0: enum UserFmtChannels OriginalChannels; rlm@0: enum UserFmtType OriginalType; rlm@0: ALsizei OriginalSize; rlm@0: ALsizei OriginalAlign; rlm@0: rlm@0: ALsizei LoopStart; rlm@0: ALsizei LoopEnd; rlm@0: rlm@0: ALuint refcount; // Number of sources using this buffer (deletion can only occur when this is 0) rlm@0: rlm@0: // Index to itself rlm@0: ALuint buffer; rlm@0: } ALbuffer; rlm@0: rlm@0: ALvoid ReleaseALBuffers(ALCdevice *device); rlm@0: rlm@0: #ifdef __cplusplus rlm@0: } rlm@0: #endif rlm@0: rlm@0: #endif