1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
#ifndef _AL_BUFFER_H_
#define _AL_BUFFER_H_
#include "AL/al.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Input formats (some are currently theoretical) */
enum SrcFmtType {
SrcFmtByte, /* AL_BYTE */
SrcFmtUByte, /* AL_UNSIGNED_BYTE */
SrcFmtShort, /* AL_SHORT */
SrcFmtUShort, /* AL_UNSIGNED_SHORT */
SrcFmtInt, /* AL_INT */
SrcFmtUInt, /* AL_UNSIGNED_INT */
SrcFmtFloat, /* AL_FLOAT */
SrcFmtDouble, /* AL_DOUBLE */
SrcFmtMulaw, /* AL_MULAW */
};
enum SrcFmtChannels {
SrcFmtMono, /* AL_MONO */
SrcFmtStereo, /* AL_STEREO */
SrcFmtRear, /* AL_REAR */
SrcFmtQuad, /* AL_QUAD */
SrcFmtX51, /* AL_5POINT1 (WFX order) */
SrcFmtX61, /* AL_6POINT1 (WFX order) */
SrcFmtX71, /* AL_7POINT1 (WFX order) */
};
void DecomposeInputFormat(ALenum format, enum SrcFmtChannels *chans,
enum SrcFmtType *type);
ALuint BytesFromSrcFmt(enum SrcFmtType type);
ALuint ChannelsFromSrcFmt(enum SrcFmtChannels chans);
static __inline ALuint FrameSizeFromSrcFmt(enum SrcFmtType type,
enum SrcFmtChannels chans)
{
return BytesFromSrcFmt(type) * ChannelsFromSrcFmt(chans);
}
/* Storable formats */
enum FmtType {
FmtUByte,
FmtShort,
FmtFloat,
};
enum FmtChannels {
FmtMono,
FmtStereo,
FmtRear,
FmtQuad,
FmtX51,
FmtX61,
FmtX71,
};
void DecomposeFormat(ALenum format, enum FmtChannels *chans, enum FmtType *type);
ALuint BytesFromFmt(enum FmtType type);
ALuint ChannelsFromFmt(enum FmtChannels chans);
static __inline ALuint FrameSizeFromFmt(enum FmtType type, enum FmtChannels chans)
{
return BytesFromFmt(type) * ChannelsFromFmt(chans);
}
typedef struct ALbuffer
{
ALvoid *data;
ALsizei size;
ALsizei Frequency;
enum FmtChannels FmtChannels;
enum FmtType FmtType;
ALenum OriginalFormat;
ALsizei OriginalSize;
ALsizei OriginalAlign;
ALsizei LoopStart;
ALsizei LoopEnd;
ALuint refcount; // Number of sources using this buffer (deletion can only occur when this is 0)
// Index to itself
ALuint buffer;
} ALbuffer;
ALvoid ReleaseALBuffers(ALCdevice *device);
#ifdef __cplusplus
}
#endif
#endif
|