10 /* Input formats (some are currently theoretical) */
12 SrcFmtByte
, /* AL_BYTE */
13 SrcFmtUByte
, /* AL_UNSIGNED_BYTE */
14 SrcFmtShort
, /* AL_SHORT */
15 SrcFmtUShort
, /* AL_UNSIGNED_SHORT */
16 SrcFmtFloat
, /* AL_FLOAT */
17 SrcFmtDouble
, /* AL_DOUBLE */
18 SrcFmtMulaw
, /* AL_MULAW */
21 SrcFmtMono
, /* AL_MONO */
22 SrcFmtStereo
, /* AL_STEREO */
23 SrcFmtRear
, /* AL_REAR */
24 SrcFmtQuad
, /* AL_QUAD */
25 SrcFmtX51
, /* AL_5POINT1 (WFX order) */
26 SrcFmtX61
, /* AL_6POINT1 (WFX order) */
27 SrcFmtX71
, /* AL_7POINT1 (WFX order) */
30 void DecomposeInputFormat(ALenum format
, enum SrcFmtType
*type
,
31 enum SrcFmtChannels
*order
);
33 static __inline ALuint
BytesFromSrcFmt(enum SrcFmtType type
)
37 case SrcFmtByte
: return sizeof(ALbyte
);
38 case SrcFmtUByte
: return sizeof(ALubyte
);
39 case SrcFmtShort
: return sizeof(ALshort
);
40 case SrcFmtUShort
: return sizeof(ALushort
);
41 case SrcFmtFloat
: return sizeof(ALfloat
);
42 case SrcFmtDouble
: return sizeof(ALdouble
);
43 case SrcFmtMulaw
: return sizeof(ALubyte
);
47 static __inline ALuint
ChannelsFromSrcFmt(enum SrcFmtChannels chans
)
51 case SrcFmtMono
: return 1;
52 case SrcFmtStereo
: return 2;
53 case SrcFmtRear
: return 2;
54 case SrcFmtQuad
: return 4;
55 case SrcFmtX51
: return 6;
56 case SrcFmtX61
: return 7;
57 case SrcFmtX71
: return 8;
61 static __inline ALuint
FrameSizeFromSrcFmt(enum SrcFmtType type
,
62 enum SrcFmtChannels chans
)
64 return BytesFromSrcFmt(type
) * ChannelsFromSrcFmt(chans
);
68 /* Storable formats */
85 void DecomposeFormat(ALenum format
, enum FmtType
*type
, enum FmtChannels
*order
);
87 static __inline ALuint
BytesFromFmt(enum FmtType type
)
91 case FmtUByte
: return sizeof(ALubyte
);
92 case FmtShort
: return sizeof(ALshort
);
93 case FmtFloat
: return sizeof(ALfloat
);
94 case FmtDouble
: return sizeof(ALdouble
);
98 static __inline ALuint
ChannelsFromFmt(enum FmtChannels chans
)
102 case FmtMono
: return 1;
103 case FmtStereo
: return 2;
104 case FmtRear
: return 2;
105 case FmtQuad
: return 4;
106 case FmtX51
: return 6;
107 case FmtX61
: return 7;
108 case FmtX71
: return 8;
112 static __inline ALuint
FrameSizeFromFmt(enum FmtType type
, enum FmtChannels chans
)
114 return BytesFromFmt(type
) * ChannelsFromFmt(chans
);
118 typedef struct ALbuffer
124 enum FmtType FmtType
;
125 enum FmtChannels FmtChannels
;
127 ALenum OriginalFormat
;
128 ALsizei OriginalSize
;
129 ALsizei OriginalAlign
;
134 ALuint refcount
; // Number of sources using this buffer (deletion can only occur when this is 0)
140 ALvoid
ReleaseALBuffers(ALCdevice
*device
);