diff --git a/mpeglib/lib/util/audio/audioIO.cpp b/mpeglib/lib/util/audio/audioIO.cpp index d066210f..f2a1f7cb 100644 --- a/mpeglib/lib/util/audio/audioIO.cpp +++ b/mpeglib/lib/util/audio/audioIO.cpp @@ -26,8 +26,12 @@ #endif #ifdef OS_BSD +#ifdef __OpenBSD__ + #include "audioIO_sndio.cpp" +#else #include "audioIO_Linux.cpp" #endif +#endif #if defined(OS_IRIX) || defined(OS_IRIX64) #include "audioIO_IRIX.cpp" diff --git a/mpeglib/lib/util/audio/audioIO_sndio.cpp b/mpeglib/lib/util/audio/audioIO_sndio.cpp new file mode 100644 index 00000000..6f632628 --- /dev/null +++ b/mpeglib/lib/util/audio/audioIO_sndio.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2010 Jacob Meuser + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include + +#include "audioIO.h" + +static struct sio_hdl *hdl; +static struct sio_par par; + +int +audioConstruct() +{ + hdl = NULL; + return true; +} + +void +audioDestruct() +{ +} + +int +audioOpen() +{ + hdl = sio_open(NULL, SIO_PLAY, 0); + if (hdl == NULL) { + fprintf(stderr, "unable to open audio device\n"); + return 0; + } + + return true; +} + +inline void +audioFlush() +{ +} + +void +audioClose() +{ + if (hdl != NULL) + sio_close(hdl); +} + +void +audioInit(int sampleSize, int frequency, int stereo, int sign, int big) +{ + sio_initpar(&par); + + par.bits = sampleSize; + par.sig = sign ? 1 : 0; + par.le = big ? 0 : 1; + par.rate = frequency; + par.pchan = stereo ? 2 : 1; + + if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) + fprintf(stderr, "error setting sndio parameters\n"); + + if (par.bits != sampleSize || + par.sig != sign ? 1 : 0 || + par.le != big ? 0 : 1 || + par.rate != frequency || + par.pchan != stereo ? 2 : 1) + fprintf(stderr, "could not set requested audio parameters"); + + if (!sio_start(hdl)) + fprintf(stderr, "could not start audio"); +} + +int +getAudioBufferSize() +{ + return (par.appbufsz * par.bps * par.pchan); +} + + +void +mixerSetVolume(int leftVolume, int rightVolume) +{ + /* values from 0..100 */ +} + +int +mixerOpen() +{ + return false; +} + +void +mixerClose() +{ +} + +int +audioWrite(char *buffer, int count) +{ + return(sio_write(hdl, buffer, count)); +}