[BACK]Return to sndio.h CVS log [TXT][DIR] Up to [local] / src / include

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) */