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

Annotation of src/include/sndio.h, Revision 1.5

1.5     ! ratchov     1: /*     $OpenBSD: sndio.h,v 1.4 2010/11/06 20:25:42 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:
                     20: #include <sys/param.h>
                     21:
                     22: /*
                     23:  * private ``handle'' structure
                     24:  */
                     25: struct sio_hdl;
1.2       ratchov    26: struct mio_hdl;
1.1       ratchov    27:
                     28: /*
                     29:  * parameters of a full-duplex stream
                     30:  */
                     31: struct sio_par {
1.5     ! ratchov    32:        unsigned int bits;      /* bits per sample */
        !            33:        unsigned int bps;       /* bytes per sample */
        !            34:        unsigned int sig;       /* 1 = signed, 0 = unsigned */
        !            35:        unsigned int le;        /* 1 = LE, 0 = BE byte order */
        !            36:        unsigned int msb;       /* 1 = MSB, 0 = LSB aligned */
        !            37:        unsigned int rchan;     /* number channels for recording direction */
        !            38:        unsigned int pchan;     /* number channels for playback direction */
        !            39:        unsigned int rate;      /* frames per second */
        !            40:        unsigned int bufsz;     /* end-to-end buffer size */
1.1       ratchov    41: #define SIO_IGNORE     0       /* pause during xrun */
                     42: #define SIO_SYNC       1       /* resync after xrun */
                     43: #define SIO_ERROR      2       /* terminate on xrun */
1.5     ! ratchov    44:        unsigned int xrun;      /* what to do on overruns/underruns */
        !            45:        unsigned int round;     /* optimal bufsz divisor */
        !            46:        unsigned int appbufsz;  /* minimum buffer size */
1.1       ratchov    47:        int __pad[3];           /* for future use */
                     48:        int __magic;            /* for internal/debug purposes only */
                     49: };
                     50:
                     51: /*
                     52:  * capabilities of a stream
                     53:  */
                     54: struct sio_cap {
                     55: #define SIO_NENC       8
                     56: #define SIO_NCHAN      8
                     57: #define SIO_NRATE      16
                     58: #define SIO_NCONF      4
                     59:        struct sio_enc {                        /* allowed sample encodings */
1.5     ! ratchov    60:                unsigned int bits;
        !            61:                unsigned int bps;
        !            62:                unsigned int sig;
        !            63:                unsigned int le;
        !            64:                unsigned int msb;
1.1       ratchov    65:        } enc[SIO_NENC];
1.5     ! ratchov    66:        unsigned int rchan[SIO_NCHAN];  /* allowed values for rchan */
        !            67:        unsigned int pchan[SIO_NCHAN];  /* allowed values for pchan */
        !            68:        unsigned int rate[SIO_NRATE];   /* allowed rates */
1.1       ratchov    69:        int __pad[7];                   /* for future use */
1.5     ! ratchov    70:        unsigned int nconf;             /* number of elements in confs[] */
1.1       ratchov    71:        struct sio_conf {
1.5     ! ratchov    72:                unsigned int enc;       /* mask of enc[] indexes */
        !            73:                unsigned int rchan;     /* mask of chan[] indexes (rec) */
        !            74:                unsigned int pchan;     /* mask of chan[] indexes (play) */
        !            75:                unsigned int rate;      /* mask of rate[] indexes */
1.1       ratchov    76:        } confs[SIO_NCONF];
                     77: };
                     78:
                     79: #define SIO_XSTRINGS { "ignore", "sync", "error" }
                     80:
                     81: /*
                     82:  * mode bitmap
                     83:  */
                     84: #define SIO_PLAY       1
                     85: #define SIO_REC                2
1.2       ratchov    86: #define MIO_OUT                4
                     87: #define MIO_IN         8
1.1       ratchov    88:
                     89: /*
                     90:  * default bytes per sample for the given bits per sample
                     91:  */
                     92: #define SIO_BPS(bits) (((bits) <= 8) ? 1 : (((bits) <= 16) ? 2 : 4))
                     93:
                     94: /*
                     95:  * default value of "sio_par->le" flag
                     96:  */
                     97: #if BYTE_ORDER == LITTLE_ENDIAN
                     98: #define SIO_LE_NATIVE 1
                     99: #else
                    100: #define SIO_LE_NATIVE 0
                    101: #endif
                    102:
                    103: /*
                    104:  * maximum value of volume, eg. for sio_setvol()
                    105:  */
                    106: #define SIO_MAXVOL 127
                    107:
                    108: #ifdef __cplusplus
                    109: extern "C" {
                    110: #endif
                    111:
                    112: struct pollfd;
                    113:
                    114: void sio_initpar(struct sio_par *);
1.5     ! ratchov   115: struct sio_hdl *sio_open(const char *, unsigned int, int);
1.1       ratchov   116: void sio_close(struct sio_hdl *);
                    117: int sio_setpar(struct sio_hdl *, struct sio_par *);
                    118: int sio_getpar(struct sio_hdl *, struct sio_par *);
                    119: int sio_getcap(struct sio_hdl *, struct sio_cap *);
                    120: void sio_onmove(struct sio_hdl *, void (*)(void *, int), void *);
1.3       ratchov   121: size_t sio_write(struct sio_hdl *, const void *, size_t);
1.1       ratchov   122: size_t sio_read(struct sio_hdl *, void *, size_t);
                    123: int sio_start(struct sio_hdl *);
                    124: int sio_stop(struct sio_hdl *);
                    125: int sio_nfds(struct sio_hdl *);
                    126: int sio_pollfd(struct sio_hdl *, struct pollfd *, int);
                    127: int sio_revents(struct sio_hdl *, struct pollfd *);
                    128: int sio_eof(struct sio_hdl *);
1.5     ! ratchov   129: int sio_setvol(struct sio_hdl *, unsigned int);
        !           130: int sio_onvol(struct sio_hdl *, void (*)(void *, unsigned int), void *);
1.2       ratchov   131:
1.5     ! ratchov   132: struct mio_hdl *mio_open(const char *, unsigned int, int);
1.2       ratchov   133: void mio_close(struct mio_hdl *);
1.3       ratchov   134: size_t mio_write(struct mio_hdl *, const void *, size_t);
1.2       ratchov   135: size_t mio_read(struct mio_hdl *, void *, size_t);
                    136: int mio_nfds(struct mio_hdl *);
                    137: int mio_pollfd(struct mio_hdl *, struct pollfd *, int);
                    138: int mio_revents(struct mio_hdl *, struct pollfd *);
                    139: int mio_eof(struct mio_hdl *);
1.1       ratchov   140:
                    141: #ifdef __cplusplus
                    142: }
                    143: #endif
                    144:
                    145: #endif /* !defined(SNDIO_H) */