Annotation of src/include/sndio.h, Revision 1.8
1.8 ! espie 1: /* $OpenBSD: sndio.h,v 1.7 2012/07/08 17:55:50 ratchov Exp $ */
1.1 ratchov 2: /*
3: * Copyright (c) 2008 Alexandre Ratchov <alex@caoua.org>
4: *
5: * Permission to use, copy, modify, and distribute this software for any
6: * purpose with or without fee is hereby granted, provided that the above
7: * copyright notice and this permission notice appear in all copies.
8: *
9: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16: */
17: #ifndef SNDIO_H
18: #define SNDIO_H
19:
1.7 ratchov 20: #include <sys/types.h>
1.6 ratchov 21:
22: /*
23: * default audio device and MIDI port
24: */
25: #define SIO_DEVANY "default"
26: #define MIO_PORTANY "default"
1.1 ratchov 27:
28: /*
29: * private ``handle'' structure
30: */
31: struct sio_hdl;
1.2 ratchov 32: struct mio_hdl;
1.1 ratchov 33:
34: /*
35: * parameters of a full-duplex stream
36: */
37: struct sio_par {
1.5 ratchov 38: unsigned int bits; /* bits per sample */
39: unsigned int bps; /* bytes per sample */
40: unsigned int sig; /* 1 = signed, 0 = unsigned */
41: unsigned int le; /* 1 = LE, 0 = BE byte order */
42: unsigned int msb; /* 1 = MSB, 0 = LSB aligned */
43: unsigned int rchan; /* number channels for recording direction */
44: unsigned int pchan; /* number channels for playback direction */
45: unsigned int rate; /* frames per second */
46: unsigned int bufsz; /* end-to-end buffer size */
1.1 ratchov 47: #define SIO_IGNORE 0 /* pause during xrun */
48: #define SIO_SYNC 1 /* resync after xrun */
49: #define SIO_ERROR 2 /* terminate on xrun */
1.5 ratchov 50: unsigned int xrun; /* what to do on overruns/underruns */
51: unsigned int round; /* optimal bufsz divisor */
52: unsigned int appbufsz; /* minimum buffer size */
1.1 ratchov 53: int __pad[3]; /* for future use */
1.8 ! espie 54: unsigned int __magic; /* for internal/debug purposes only */
1.1 ratchov 55: };
56:
57: /*
58: * capabilities of a stream
59: */
60: struct sio_cap {
61: #define SIO_NENC 8
62: #define SIO_NCHAN 8
63: #define SIO_NRATE 16
64: #define SIO_NCONF 4
65: struct sio_enc { /* allowed sample encodings */
1.5 ratchov 66: unsigned int bits;
67: unsigned int bps;
68: unsigned int sig;
69: unsigned int le;
70: unsigned int msb;
1.1 ratchov 71: } enc[SIO_NENC];
1.5 ratchov 72: unsigned int rchan[SIO_NCHAN]; /* allowed values for rchan */
73: unsigned int pchan[SIO_NCHAN]; /* allowed values for pchan */
74: unsigned int rate[SIO_NRATE]; /* allowed rates */
1.1 ratchov 75: int __pad[7]; /* for future use */
1.5 ratchov 76: unsigned int nconf; /* number of elements in confs[] */
1.1 ratchov 77: struct sio_conf {
1.5 ratchov 78: unsigned int enc; /* mask of enc[] indexes */
79: unsigned int rchan; /* mask of chan[] indexes (rec) */
80: unsigned int pchan; /* mask of chan[] indexes (play) */
81: unsigned int rate; /* mask of rate[] indexes */
1.1 ratchov 82: } confs[SIO_NCONF];
83: };
84:
85: #define SIO_XSTRINGS { "ignore", "sync", "error" }
86:
87: /*
88: * mode bitmap
89: */
90: #define SIO_PLAY 1
91: #define SIO_REC 2
1.2 ratchov 92: #define MIO_OUT 4
93: #define MIO_IN 8
1.1 ratchov 94:
95: /*
96: * default bytes per sample for the given bits per sample
97: */
98: #define SIO_BPS(bits) (((bits) <= 8) ? 1 : (((bits) <= 16) ? 2 : 4))
99:
100: /*
101: * default value of "sio_par->le" flag
102: */
103: #if BYTE_ORDER == LITTLE_ENDIAN
104: #define SIO_LE_NATIVE 1
105: #else
106: #define SIO_LE_NATIVE 0
107: #endif
108:
109: /*
110: * maximum value of volume, eg. for sio_setvol()
111: */
112: #define SIO_MAXVOL 127
113:
114: #ifdef __cplusplus
115: extern "C" {
116: #endif
117:
118: struct pollfd;
119:
120: void sio_initpar(struct sio_par *);
1.5 ratchov 121: struct sio_hdl *sio_open(const char *, unsigned int, int);
1.1 ratchov 122: void sio_close(struct sio_hdl *);
123: int sio_setpar(struct sio_hdl *, struct sio_par *);
124: int sio_getpar(struct sio_hdl *, struct sio_par *);
125: int sio_getcap(struct sio_hdl *, struct sio_cap *);
126: void sio_onmove(struct sio_hdl *, void (*)(void *, int), void *);
1.3 ratchov 127: size_t sio_write(struct sio_hdl *, const void *, size_t);
1.1 ratchov 128: size_t sio_read(struct sio_hdl *, void *, size_t);
129: int sio_start(struct sio_hdl *);
130: int sio_stop(struct sio_hdl *);
131: int sio_nfds(struct sio_hdl *);
132: int sio_pollfd(struct sio_hdl *, struct pollfd *, int);
133: int sio_revents(struct sio_hdl *, struct pollfd *);
134: int sio_eof(struct sio_hdl *);
1.5 ratchov 135: int sio_setvol(struct sio_hdl *, unsigned int);
136: int sio_onvol(struct sio_hdl *, void (*)(void *, unsigned int), void *);
1.2 ratchov 137:
1.5 ratchov 138: struct mio_hdl *mio_open(const char *, unsigned int, int);
1.2 ratchov 139: void mio_close(struct mio_hdl *);
1.3 ratchov 140: size_t mio_write(struct mio_hdl *, const void *, size_t);
1.2 ratchov 141: size_t mio_read(struct mio_hdl *, void *, size_t);
142: int mio_nfds(struct mio_hdl *);
143: int mio_pollfd(struct mio_hdl *, struct pollfd *, int);
144: int mio_revents(struct mio_hdl *, struct pollfd *);
145: int mio_eof(struct mio_hdl *);
1.1 ratchov 146:
147: #ifdef __cplusplus
148: }
149: #endif
150:
151: #endif /* !defined(SNDIO_H) */