Use gettimeofday if clock_gettime isn't available
[openal-soft.git] / OpenAL32 / Include / alBuffer.h
blob10359d9d7ecb3dfb30d1168db35210223a42b8f9
1 #ifndef _AL_BUFFER_H_
2 #define _AL_BUFFER_H_
4 #include "alMain.h"
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
10 /* User formats */
11 enum UserFmtType {
12 UserFmtByte = AL_BYTE_SOFT,
13 UserFmtUByte = AL_UNSIGNED_BYTE_SOFT,
14 UserFmtShort = AL_SHORT_SOFT,
15 UserFmtUShort = AL_UNSIGNED_SHORT_SOFT,
16 UserFmtInt = AL_INT_SOFT,
17 UserFmtUInt = AL_UNSIGNED_INT_SOFT,
18 UserFmtFloat = AL_FLOAT_SOFT,
19 UserFmtDouble = AL_DOUBLE_SOFT,
20 UserFmtByte3 = AL_BYTE3_SOFT,
21 UserFmtUByte3 = AL_UNSIGNED_BYTE3_SOFT,
22 UserFmtMulaw,
23 UserFmtAlaw,
24 UserFmtIMA4,
25 UserFmtMSADPCM,
27 enum UserFmtChannels {
28 UserFmtMono = AL_MONO_SOFT,
29 UserFmtStereo = AL_STEREO_SOFT,
30 UserFmtRear = AL_REAR_SOFT,
31 UserFmtQuad = AL_QUAD_SOFT,
32 UserFmtX51 = AL_5POINT1_SOFT, /* (WFX order) */
33 UserFmtX61 = AL_6POINT1_SOFT, /* (WFX order) */
34 UserFmtX71 = AL_7POINT1_SOFT, /* (WFX order) */
37 ALuint BytesFromUserFmt(enum UserFmtType type);
38 ALuint ChannelsFromUserFmt(enum UserFmtChannels chans);
39 inline ALuint FrameSizeFromUserFmt(enum UserFmtChannels chans, enum UserFmtType type)
41 return ChannelsFromUserFmt(chans) * BytesFromUserFmt(type);
45 /* Storable formats */
46 enum FmtType {
47 FmtByte = UserFmtByte,
48 FmtShort = UserFmtShort,
49 FmtFloat = UserFmtFloat,
51 enum FmtChannels {
52 FmtMono = UserFmtMono,
53 FmtStereo = UserFmtStereo,
54 FmtRear = UserFmtRear,
55 FmtQuad = UserFmtQuad,
56 FmtX51 = UserFmtX51,
57 FmtX61 = UserFmtX61,
58 FmtX71 = UserFmtX71,
60 #define MAX_INPUT_CHANNELS (8)
62 ALuint BytesFromFmt(enum FmtType type);
63 ALuint ChannelsFromFmt(enum FmtChannels chans);
64 inline ALuint FrameSizeFromFmt(enum FmtChannels chans, enum FmtType type)
66 return ChannelsFromFmt(chans) * BytesFromFmt(type);
70 typedef struct ALbuffer {
71 ALvoid *data;
73 ALsizei Frequency;
74 ALenum Format;
75 ALsizei SampleLen;
77 enum FmtChannels FmtChannels;
78 enum FmtType FmtType;
80 enum UserFmtChannels OriginalChannels;
81 enum UserFmtType OriginalType;
82 ALsizei OriginalSize;
83 ALsizei OriginalAlign;
85 ALsizei LoopStart;
86 ALsizei LoopEnd;
88 ALsizei UnpackAlign;
89 ALsizei PackAlign;
91 /* Number of times buffer was attached to a source (deletion can only occur when 0) */
92 RefCount ref;
94 RWLock lock;
96 /* Self ID */
97 ALuint id;
98 } ALbuffer;
100 inline struct ALbuffer *LookupBuffer(ALCdevice *device, ALuint id)
101 { return (struct ALbuffer*)LookupUIntMapKey(&device->BufferMap, id); }
102 inline struct ALbuffer *RemoveBuffer(ALCdevice *device, ALuint id)
103 { return (struct ALbuffer*)RemoveUIntMapKey(&device->BufferMap, id); }
105 ALvoid ReleaseALBuffers(ALCdevice *device);
107 #ifdef __cplusplus
109 #endif
111 #endif