1 #ifndef AL_BUFFER_H
2 #define AL_BUFFER_H
3 
4 #include <atomic>
5 
6 #include "AL/al.h"
7 
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"
14 
15 
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,
24 
25     UserFmtIMA4 = 128,
26     UserFmtMSADPCM,
27 };
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,
38 };
39 
40 
41 struct ALbuffer : public BufferStorage {
42     ALbitfieldSOFT Access{0u};
43 
44     al::vector<al::byte,16> mData;
45 
46     UserFmtType OriginalType{UserFmtShort};
47     ALuint OriginalSize{0};
48     ALuint OriginalAlign{0};
49 
50     ALuint UnpackAlign{0};
51     ALuint PackAlign{0};
52     ALuint UnpackAmbiOrder{1};
53 
54     ALbitfieldSOFT MappedAccess{0u};
55     ALsizei MappedOffset{0};
56     ALsizei MappedSize{0};
57 
58     ALuint mLoopStart{0u};
59     ALuint mLoopEnd{0u};
60 
61     /* Number of times buffer was attached to a source (deletion can only occur when 0) */
62     RefCount ref{0u};
63 
64     /* Self ID */
65     ALuint id{0};
66 
67     DISABLE_ALLOC()
68 };
69 
70 #endif
71