2007-11-13 18:02:18 -08:00
|
|
|
#ifndef _AL_BUFFER_H_
|
|
|
|
#define _AL_BUFFER_H_
|
|
|
|
|
|
|
|
#include "AL/al.h"
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2010-11-27 15:33:33 -08:00
|
|
|
/* Input formats (some are currently theoretical) */
|
|
|
|
enum SrcFmtType {
|
|
|
|
SrcFmtByte, /* AL_BYTE */
|
|
|
|
SrcFmtUByte, /* AL_UNSIGNED_BYTE */
|
|
|
|
SrcFmtShort, /* AL_SHORT */
|
|
|
|
SrcFmtUShort, /* AL_UNSIGNED_SHORT */
|
|
|
|
SrcFmtFloat, /* AL_FLOAT */
|
|
|
|
SrcFmtDouble, /* AL_DOUBLE */
|
2010-11-27 22:00:24 -08:00
|
|
|
SrcFmtMulaw, /* AL_MULAW */
|
2010-11-27 15:33:33 -08:00
|
|
|
};
|
|
|
|
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 SrcFmtType *type,
|
|
|
|
enum SrcFmtChannels *order);
|
|
|
|
|
2010-11-28 12:53:35 -08:00
|
|
|
static __inline ALuint BytesFromSrcFmt(enum SrcFmtType type)
|
|
|
|
{
|
|
|
|
switch(type)
|
|
|
|
{
|
|
|
|
case SrcFmtByte: return sizeof(ALbyte);
|
|
|
|
case SrcFmtUByte: return sizeof(ALubyte);
|
|
|
|
case SrcFmtShort: return sizeof(ALshort);
|
|
|
|
case SrcFmtUShort: return sizeof(ALushort);
|
|
|
|
case SrcFmtFloat: return sizeof(ALfloat);
|
|
|
|
case SrcFmtDouble: return sizeof(ALdouble);
|
|
|
|
case SrcFmtMulaw: return sizeof(ALubyte);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
static __inline ALuint ChannelsFromSrcFmt(enum SrcFmtChannels chans)
|
|
|
|
{
|
|
|
|
switch(chans)
|
|
|
|
{
|
|
|
|
case SrcFmtMono: return 1;
|
|
|
|
case SrcFmtStereo: return 2;
|
|
|
|
case SrcFmtRear: return 2;
|
|
|
|
case SrcFmtQuad: return 4;
|
|
|
|
case SrcFmtX51: return 6;
|
|
|
|
case SrcFmtX61: return 7;
|
|
|
|
case SrcFmtX71: return 8;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
static __inline ALuint FrameSizeFromSrcFmt(enum SrcFmtType type,
|
|
|
|
enum SrcFmtChannels chans)
|
|
|
|
{
|
|
|
|
return BytesFromSrcFmt(type) * ChannelsFromSrcFmt(chans);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-11-27 15:33:33 -08:00
|
|
|
/* Storable formats */
|
2010-11-26 23:42:30 -08:00
|
|
|
enum FmtType {
|
|
|
|
FmtUByte,
|
|
|
|
FmtShort,
|
|
|
|
FmtFloat,
|
2010-11-27 00:32:53 -08:00
|
|
|
FmtDouble,
|
2010-11-26 23:42:30 -08:00
|
|
|
};
|
|
|
|
enum FmtChannels {
|
|
|
|
FmtMono,
|
|
|
|
FmtStereo,
|
2010-11-27 22:55:20 -08:00
|
|
|
FmtRear,
|
2010-11-28 12:53:35 -08:00
|
|
|
FmtQuad,
|
2010-11-26 23:42:30 -08:00
|
|
|
Fmt51ChanWFX,
|
|
|
|
Fmt61ChanWFX,
|
|
|
|
Fmt71ChanWFX,
|
|
|
|
};
|
|
|
|
|
2010-11-27 15:37:51 -08:00
|
|
|
void DecomposeFormat(ALenum format, enum FmtType *type, enum FmtChannels *order);
|
2010-11-26 23:42:30 -08:00
|
|
|
|
2010-11-28 12:53:35 -08:00
|
|
|
static __inline ALuint BytesFromFmt(enum FmtType type)
|
|
|
|
{
|
|
|
|
switch(type)
|
|
|
|
{
|
|
|
|
case FmtUByte: return sizeof(ALubyte);
|
|
|
|
case FmtShort: return sizeof(ALshort);
|
|
|
|
case FmtFloat: return sizeof(ALfloat);
|
|
|
|
case FmtDouble: return sizeof(ALdouble);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
static __inline ALuint ChannelsFromFmt(enum FmtChannels chans)
|
|
|
|
{
|
|
|
|
switch(chans)
|
|
|
|
{
|
|
|
|
case FmtMono: return 1;
|
|
|
|
case FmtStereo: return 2;
|
|
|
|
case FmtRear: return 2;
|
|
|
|
case FmtQuad: return 4;
|
|
|
|
case Fmt51ChanWFX: return 6;
|
|
|
|
case Fmt61ChanWFX: return 7;
|
|
|
|
case Fmt71ChanWFX: return 8;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
static __inline ALuint FrameSizeFromFmt(enum FmtType type, enum FmtChannels chans)
|
|
|
|
{
|
|
|
|
return BytesFromFmt(type) * ChannelsFromFmt(chans);
|
|
|
|
}
|
|
|
|
|
2010-11-26 23:42:30 -08:00
|
|
|
|
2009-08-15 09:14:08 -07:00
|
|
|
typedef struct ALbuffer
|
2007-11-13 18:02:18 -08:00
|
|
|
{
|
2010-09-22 17:19:35 -07:00
|
|
|
ALvoid *data;
|
2007-11-13 18:02:18 -08:00
|
|
|
ALsizei size;
|
2009-10-22 08:53:59 -07:00
|
|
|
|
2010-11-28 12:53:35 -08:00
|
|
|
ALsizei frequency;
|
|
|
|
enum FmtType FmtType;
|
|
|
|
enum FmtChannels FmtChannels;
|
2009-10-22 08:53:59 -07:00
|
|
|
|
2010-11-28 12:53:35 -08:00
|
|
|
ALenum eOriginalFormat;
|
2010-05-12 01:36:09 -07:00
|
|
|
ALsizei OriginalSize;
|
|
|
|
ALsizei OriginalAlign;
|
|
|
|
|
2010-05-13 02:03:48 -07:00
|
|
|
ALsizei LoopStart;
|
|
|
|
ALsizei LoopEnd;
|
|
|
|
|
2007-11-13 18:02:18 -08:00
|
|
|
ALuint refcount; // Number of sources using this buffer (deletion can only occur when this is 0)
|
2009-10-22 08:53:59 -07:00
|
|
|
|
|
|
|
// Index to itself
|
|
|
|
ALuint buffer;
|
2007-11-13 18:02:18 -08:00
|
|
|
} ALbuffer;
|
|
|
|
|
2009-08-15 09:14:08 -07:00
|
|
|
ALvoid ReleaseALBuffers(ALCdevice *device);
|
2007-11-13 18:02:18 -08:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|