53 lines
1.7 KiB
C
53 lines
1.7 KiB
C
#include <inttypes.h>
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t sampformat;
|
|
uint32_t channels; /* 1 = mono, 2 = stereo */
|
|
uint32_t rate; /* Number of frames per second, 22050, 44100, etc. */
|
|
uint32_t byteorder; /* 0 = Native(to CPU), 1 = Reversed. PDP can go to hell. */
|
|
} SexyAL_format;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t fragcount;
|
|
uint32_t fragsize;
|
|
uint32_t totalsize; /* Shouldn't be filled in by application code. */
|
|
uint32_t ms; /* Milliseconds of buffering, approximate. */
|
|
} SexyAL_buffering;
|
|
|
|
#define SEXYAL_ID_DEFAULT 0
|
|
#define SEXYAL_ID_UNUSED 1
|
|
|
|
#define SEXYAL_FMT_PCMU8 0x10
|
|
#define SEXYAL_FMT_PCMS8 0x11
|
|
|
|
#define SEXYAL_FMT_PCMU16 0x20
|
|
#define SEXYAL_FMT_PCMS16 0x21
|
|
|
|
#define SEXYAL_FMT_PCMU32U24 0x40
|
|
#define SEXYAL_FMT_PCMS32S24 0x41
|
|
|
|
#define SEXYAL_FMT_PCMU32U16 0x42
|
|
#define SEXYAL_FMT_PCMS32S16 0x43
|
|
|
|
typedef struct __SexyAL_device {
|
|
int (*SetConvert)(struct __SexyAL_device *, SexyAL_format *);
|
|
uint32_t (*Write)(struct __SexyAL_device *, void *data, uint32_t frames);
|
|
uint32_t (*CanWrite)(struct __SexyAL_device *);
|
|
int (*Close)(struct __SexyAL_device *);
|
|
SexyAL_format format;
|
|
SexyAL_format srcformat;
|
|
SexyAL_buffering buffering;
|
|
void *private;
|
|
} SexyAL_device;
|
|
|
|
typedef struct __SexyAL {
|
|
SexyAL_device * (*Open)(struct __SexyAL *, uint64_t id, SexyAL_format *, SexyAL_buffering *buffering);
|
|
void (*Enumerate)(struct __SexyAL *, int (*func)(uint8_t *name, uint64_t id, void *udata));
|
|
void (*Destroy)(struct __SexyAL *);
|
|
} SexyAL;
|
|
|
|
/* Initializes the library, requesting the interface of the version specified. */
|
|
void *SexyAL_Init(int version);
|