Free Electron
alBuffer.h
1 #ifndef _AL_BUFFER_H_
2 #define _AL_BUFFER_H_
3 
4 #include "AL/alc.h"
5 #include "AL/al.h"
6 #include "AL/alext.h"
7 
8 #include "inprogext.h"
9 #include "atomic.h"
10 #include "rwlock.h"
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 /* User formats */
17 enum UserFmtType {
18  UserFmtUByte,
19  UserFmtShort,
20  UserFmtFloat,
21  UserFmtDouble,
22  UserFmtMulaw,
23  UserFmtAlaw,
24  UserFmtIMA4,
25  UserFmtMSADPCM,
26 };
27 enum UserFmtChannels {
28  UserFmtMono,
29  UserFmtStereo,
30  UserFmtRear,
31  UserFmtQuad,
32  UserFmtX51, /* (WFX order) */
33  UserFmtX61, /* (WFX order) */
34  UserFmtX71, /* (WFX order) */
35  UserFmtBFormat2D, /* WXY */
36  UserFmtBFormat3D, /* WXYZ */
37 };
38 
39 ALsizei BytesFromUserFmt(enum UserFmtType type);
40 ALsizei ChannelsFromUserFmt(enum UserFmtChannels chans);
41 inline ALsizei FrameSizeFromUserFmt(enum UserFmtChannels chans, enum UserFmtType type)
42 {
43  return ChannelsFromUserFmt(chans) * BytesFromUserFmt(type);
44 }
45 
46 
47 /* Storable formats */
48 enum FmtType {
49  FmtUByte = UserFmtUByte,
50  FmtShort = UserFmtShort,
51  FmtFloat = UserFmtFloat,
52  FmtDouble = UserFmtDouble,
53  FmtMulaw = UserFmtMulaw,
54  FmtAlaw = UserFmtAlaw,
55 };
56 enum FmtChannels {
57  FmtMono = UserFmtMono,
58  FmtStereo = UserFmtStereo,
59  FmtRear = UserFmtRear,
60  FmtQuad = UserFmtQuad,
61  FmtX51 = UserFmtX51,
62  FmtX61 = UserFmtX61,
63  FmtX71 = UserFmtX71,
64  FmtBFormat2D = UserFmtBFormat2D,
65  FmtBFormat3D = UserFmtBFormat3D,
66 };
67 #define MAX_INPUT_CHANNELS (8)
68 
69 ALsizei BytesFromFmt(enum FmtType type);
70 ALsizei ChannelsFromFmt(enum FmtChannels chans);
71 inline ALsizei FrameSizeFromFmt(enum FmtChannels chans, enum FmtType type)
72 {
73  return ChannelsFromFmt(chans) * BytesFromFmt(type);
74 }
75 
76 
77 typedef struct ALbuffer {
78  ALvoid *data;
79 
80  ALsizei Frequency;
81  ALbitfieldSOFT Access;
82  ALsizei SampleLen;
83 
84  enum FmtChannels FmtChannels;
85  enum FmtType FmtType;
86  ALsizei BytesAlloc;
87 
88  enum UserFmtType OriginalType;
89  ALsizei OriginalSize;
90  ALsizei OriginalAlign;
91 
92  ALsizei LoopStart;
93  ALsizei LoopEnd;
94 
95  ATOMIC(ALsizei) UnpackAlign;
96  ATOMIC(ALsizei) PackAlign;
97 
98  ALbitfieldSOFT MappedAccess;
99  ALsizei MappedOffset;
100  ALsizei MappedSize;
101 
102  /* Number of times buffer was attached to a source (deletion can only occur when 0) */
103  RefCount ref;
104 
105  /* Self ID */
106  ALuint id;
107 } ALbuffer;
108 
109 ALvoid ReleaseALBuffers(ALCdevice *device);
110 
111 #ifdef __cplusplus
112 }
113 #endif
114 
115 #endif