Finalize AL_SOFT_events
[openal-soft.git] / al / buffer.h
blobbdc87e07deb8a41a42a166fd02f67be5632eed52
1 #ifndef AL_BUFFER_H
2 #define AL_BUFFER_H
4 #include <atomic>
6 #include "AL/al.h"
8 #include "albyte.h"
9 #include "almalloc.h"
10 #include "atomic.h"
11 #include "buffer_storage.h"
12 #include "inprogext.h"
13 #include "vector.h"
16 /* User formats */
17 enum UserFmtType : unsigned char {
18 UserFmtUByte = FmtUByte,
19 UserFmtShort = FmtShort,
20 UserFmtFloat = FmtFloat,
21 UserFmtMulaw = FmtMulaw,
22 UserFmtAlaw = FmtAlaw,
23 UserFmtDouble = FmtDouble,
25 UserFmtIMA4 = 128,
26 UserFmtMSADPCM,
28 enum UserFmtChannels : unsigned char {
29 UserFmtMono = FmtMono,
30 UserFmtStereo = FmtStereo,
31 UserFmtRear = FmtRear,
32 UserFmtQuad = FmtQuad,
33 UserFmtX51 = FmtX51,
34 UserFmtX61 = FmtX61,
35 UserFmtX71 = FmtX71,
36 UserFmtBFormat2D = FmtBFormat2D,
37 UserFmtBFormat3D = FmtBFormat3D,
41 struct ALbuffer {
42 BufferStorage mBuffer;
44 ALbitfieldSOFT Access{0u};
46 UserFmtType OriginalType{};
47 ALuint OriginalSize{0};
48 ALuint OriginalAlign{0};
50 ALuint LoopStart{0u};
51 ALuint LoopEnd{0u};
53 ALuint UnpackAlign{0};
54 ALuint PackAlign{0};
55 ALuint UnpackAmbiOrder{1};
57 ALbitfieldSOFT MappedAccess{0u};
58 ALsizei MappedOffset{0};
59 ALsizei MappedSize{0};
61 /* Number of times buffer was attached to a source (deletion can only occur when 0) */
62 RefCount ref{0u};
64 /* Self ID */
65 ALuint id{0};
67 inline ALuint bytesFromFmt() const noexcept { return mBuffer.bytesFromFmt(); }
68 inline ALuint channelsFromFmt() const noexcept { return mBuffer.channelsFromFmt(); }
69 inline ALuint frameSizeFromFmt() const noexcept { return mBuffer.frameSizeFromFmt(); }
71 DISABLE_ALLOC()
74 #endif