123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #ifndef _AL_BUFFER_H_
- #define _AL_BUFFER_H_
- #include "alMain.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* User formats */
- enum UserFmtType {
- UserFmtByte = AL_BYTE_SOFT,
- UserFmtUByte = AL_UNSIGNED_BYTE_SOFT,
- UserFmtShort = AL_SHORT_SOFT,
- UserFmtUShort = AL_UNSIGNED_SHORT_SOFT,
- UserFmtInt = AL_INT_SOFT,
- UserFmtUInt = AL_UNSIGNED_INT_SOFT,
- UserFmtFloat = AL_FLOAT_SOFT,
- UserFmtDouble = AL_DOUBLE_SOFT,
- UserFmtByte3 = AL_BYTE3_SOFT,
- UserFmtUByte3 = AL_UNSIGNED_BYTE3_SOFT,
- UserFmtMulaw = AL_MULAW_SOFT,
- UserFmtAlaw = 0x10000000,
- UserFmtIMA4,
- UserFmtMSADPCM,
- };
- enum UserFmtChannels {
- UserFmtMono = AL_MONO_SOFT,
- UserFmtStereo = AL_STEREO_SOFT,
- UserFmtRear = AL_REAR_SOFT,
- UserFmtQuad = AL_QUAD_SOFT,
- UserFmtX51 = AL_5POINT1_SOFT, /* (WFX order) */
- UserFmtX61 = AL_6POINT1_SOFT, /* (WFX order) */
- UserFmtX71 = AL_7POINT1_SOFT, /* (WFX order) */
- UserFmtBFormat2D = AL_BFORMAT2D_SOFT, /* WXY */
- UserFmtBFormat3D = AL_BFORMAT3D_SOFT, /* WXYZ */
- };
- ALuint BytesFromUserFmt(enum UserFmtType type);
- ALuint ChannelsFromUserFmt(enum UserFmtChannels chans);
- inline ALuint FrameSizeFromUserFmt(enum UserFmtChannels chans, enum UserFmtType type)
- {
- return ChannelsFromUserFmt(chans) * BytesFromUserFmt(type);
- }
- /* Storable formats */
- enum FmtType {
- FmtByte = UserFmtByte,
- FmtShort = UserFmtShort,
- FmtFloat = UserFmtFloat,
- };
- enum FmtChannels {
- FmtMono = UserFmtMono,
- FmtStereo = UserFmtStereo,
- FmtRear = UserFmtRear,
- FmtQuad = UserFmtQuad,
- FmtX51 = UserFmtX51,
- FmtX61 = UserFmtX61,
- FmtX71 = UserFmtX71,
- FmtBFormat2D = UserFmtBFormat2D,
- FmtBFormat3D = UserFmtBFormat3D,
- };
- #define MAX_INPUT_CHANNELS (8)
- ALuint BytesFromFmt(enum FmtType type);
- ALuint ChannelsFromFmt(enum FmtChannels chans);
- inline ALuint FrameSizeFromFmt(enum FmtChannels chans, enum FmtType type)
- {
- return ChannelsFromFmt(chans) * BytesFromFmt(type);
- }
- typedef struct ALbuffer {
- ALvoid *data;
- ALsizei Frequency;
- ALenum Format;
- ALsizei SampleLen;
- enum FmtChannels FmtChannels;
- enum FmtType FmtType;
- ALuint BytesAlloc;
- enum UserFmtChannels OriginalChannels;
- enum UserFmtType OriginalType;
- ALsizei OriginalSize;
- ALsizei OriginalAlign;
- ALsizei LoopStart;
- ALsizei LoopEnd;
- ATOMIC(ALsizei) UnpackAlign;
- ATOMIC(ALsizei) PackAlign;
- /* Number of times buffer was attached to a source (deletion can only occur when 0) */
- RefCount ref;
- RWLock lock;
- /* Self ID */
- ALuint id;
- } ALbuffer;
- ALbuffer *NewBuffer(ALCcontext *context);
- void DeleteBuffer(ALCdevice *device, ALbuffer *buffer);
- ALenum LoadData(ALbuffer *buffer, ALuint freq, ALenum NewFormat, ALsizei frames, enum UserFmtChannels SrcChannels, enum UserFmtType SrcType, const ALvoid *data, ALsizei align, ALboolean storesrc);
- inline void LockBuffersRead(ALCdevice *device)
- { LockUIntMapRead(&device->BufferMap); }
- inline void UnlockBuffersRead(ALCdevice *device)
- { UnlockUIntMapRead(&device->BufferMap); }
- inline void LockBuffersWrite(ALCdevice *device)
- { LockUIntMapWrite(&device->BufferMap); }
- inline void UnlockBuffersWrite(ALCdevice *device)
- { UnlockUIntMapWrite(&device->BufferMap); }
- inline struct ALbuffer *LookupBuffer(ALCdevice *device, ALuint id)
- { return (struct ALbuffer*)LookupUIntMapKeyNoLock(&device->BufferMap, id); }
- inline struct ALbuffer *RemoveBuffer(ALCdevice *device, ALuint id)
- { return (struct ALbuffer*)RemoveUIntMapKeyNoLock(&device->BufferMap, id); }
- ALvoid ReleaseALBuffers(ALCdevice *device);
- #ifdef __cplusplus
- }
- #endif
- #endif
|