Index: head/devel/sdl12/Makefile =================================================================== --- head/devel/sdl12/Makefile +++ head/devel/sdl12/Makefile @@ -3,7 +3,7 @@ PORTNAME= sdl PORTVERSION= 1.2.15 -PORTREVISION= 8 +PORTREVISION= 9 PORTEPOCH= 2 CATEGORIES= devel MASTER_SITES= http://www.libsdl.org/release/ @@ -13,26 +13,26 @@ COMMENT= Cross-platform multimedia development API LICENSE= LGPL21 +LICENSE_FILE= ${WRKSRC}/COPYING BUILD_DEPENDS= nasm:devel/nasm -USES= gmake iconv libtool pathfix pkgconfig +USES= gmake iconv libtool localbase:ldflags pathfix pkgconfig USE_LDCONFIG= yes GNU_CONFIGURE= yes CONFIGURE_ENV= ac_cv_header_libusbhid_h=no - -CPPFLAGS+= -I${LOCALBASE}/include -LDFLAGS+= -L${LOCALBASE}/lib - -CONFIGURE_ARGS+=--disable-alsa --disable-alsatest \ +CONFIGURE_ARGS= --disable-alsa --disable-alsatest \ --disable-arts --disable-video-directfb --disable-video-ggi EXAMPLES= test/*.c test/*.bmp test/*.dat test/*.xbm test/*.wav -DOCS= BUGS COPYING CREDITS README README-SDL.txt WhatsNew docs.html +DOCS= BUGS CREDITS README README-SDL.txt WhatsNew docs.html -OPTIONS_DEFINE= AALIB DOCS ESOUND EXAMPLES NAS OPENGL OSS \ - PULSEAUDIO SVGALIB X11 +OPTIONS_DEFINE= AALIB DOCS EXAMPLES OPENGL SVGALIB X11 OPTIONS_DEFAULT= AALIB OPENGL OSS X11 +OPTIONS_GROUP= AUDIO +OPTIONS_GROUP_AUDIO= ESOUND NAS OSS PULSEAUDIO SNDIO + +AUDIO_DESC= Audio backend .if exists(/usr/lib/libvgl.so) OPTIONS_DEFINE+= VGL @@ -51,22 +51,23 @@ OSS_CONFIGURE_ENABLE= oss PULSEAUDIO_CONFIGURE_ENABLE= pulseaudio PULSEAUDIO_LIB_DEPENDS= libpulse-simple.so:audio/pulseaudio +SNDIO_CONFIGURE_ENABLE= sndio +SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio SVGALIB_CONFIGURE_ENABLE= video-svga SVGALIB_LIB_DEPENDS= libvga.so:graphics/svgalib VGL_CONFIGURE_ENABLE= video-vgl +VGL_VARS_OFF= PKGMESSAGE=none X11_CONFIGURE_ENABLE= video-x11 X11_USE= XORG=x11,xrender,xrandr,xextproto -.include - -.if ! ${PORT_OPTIONS:MVGL} -PKGMESSAGE= none -.endif - post-patch: @${REINPLACE_CMD} -e '/EXTRA_LDFLAGS/s/-liconv/${ICONV_LIB}/' \ ${WRKSRC}/configure +post-patch-SNDIO-on: + @${MKDIR} ${WRKSRC}/src/audio/sndio + @${CP} ${FILESDIR}/SDL_sndioaudio.* ${WRKSRC}/src/audio/sndio + post-install: ${MKDIR} ${STAGEDIR}${DOCSDIR} &&\ ${INSTALL_DATA} ${DOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR}/ &&\ @@ -74,5 +75,6 @@ ${COPYTREE_SHARE} docs ${STAGEDIR}${DOCSDIR}/ "! -regex .*/man3.*" ${MKDIR} ${STAGEDIR}${EXAMPLESDIR} &&\ ${INSTALL_DATA} ${EXAMPLES:S,^,${WRKSRC}/,} ${STAGEDIR}${EXAMPLESDIR}/ + ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libSDL-1.2.so.0.11.4 .include Index: head/devel/sdl12/files/SDL_sndioaudio.h =================================================================== --- head/devel/sdl12/files/SDL_sndioaudio.h +++ head/devel/sdl12/files/SDL_sndioaudio.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2008 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 "SDL_config.h" + +#ifndef _SDL_sndioaudio_h +#define _SDL_sndioaudio_h + +#include + +#include "../SDL_sysaudio.h" + +/* Hidden "this" pointer for the video functions */ +#define _THIS SDL_AudioDevice *this + +struct SDL_PrivateAudioData { + /* The stream descriptor for the audio device */ + struct sio_hdl *hdl; + + /* The parent process id, to detect when application quits */ + pid_t parent; + + /* Raw mixing buffer */ + Uint8 *mixbuf; + int mixlen; + +}; + +/* Old variable names */ +#define stream (this->hidden->stream) +#define parent (this->hidden->parent) +#define mixbuf (this->hidden->mixbuf) +#define mixlen (this->hidden->mixlen) +#define hdl (this->hidden->hdl) + +#endif /* _SDL_sndioaudio_h */ + Index: head/devel/sdl12/files/SDL_sndioaudio.c =================================================================== --- head/devel/sdl12/files/SDL_sndioaudio.c +++ head/devel/sdl12/files/SDL_sndioaudio.c @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2008 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 "SDL_config.h" + +/* Allow access to a raw mixing buffer */ + +#ifdef HAVE_SIGNAL_H +#include +#endif +#include + +#include "SDL_timer.h" +#include "SDL_audio.h" +#include "../SDL_audiomem.h" +#include "../SDL_audio_c.h" +#include "../SDL_audiodev_c.h" +#include "SDL_sndioaudio.h" + +/* The tag name used by sndio audio */ +#define SNDIO_DRIVER_NAME "sndio" + +/* Audio driver functions */ +static int SNDIO_OpenAudio(_THIS, SDL_AudioSpec *spec); +static void SNDIO_WaitAudio(_THIS); +static void SNDIO_PlayAudio(_THIS); +static Uint8 *SNDIO_GetAudioBuf(_THIS); +static void SNDIO_CloseAudio(_THIS); + +/* Audio driver bootstrap functions */ + +static int Audio_Available(void) +{ + struct sio_hdl *this_hdl; + int available = 0; + + if ( (this_hdl = sio_open(SIO_DEVANY, SIO_PLAY, 0)) != NULL ) { + sio_close(this_hdl); + available = 1; + } + + return available; +} + +static void Audio_DeleteDevice(SDL_AudioDevice *device) +{ + SDL_free(device->hidden); + SDL_free(device); +} + +static SDL_AudioDevice *Audio_CreateDevice(int devindex) +{ + SDL_AudioDevice *this; + + /* Initialize all variables that we clean on shutdown */ + this = (SDL_AudioDevice *)SDL_malloc(sizeof(SDL_AudioDevice)); + if ( this ) { + SDL_memset(this, 0, (sizeof *this)); + this->hidden = (struct SDL_PrivateAudioData *) + SDL_malloc((sizeof *this->hidden)); + } + if ( (this == NULL) || (this->hidden == NULL) ) { + SDL_OutOfMemory(); + if ( this ) { + SDL_free(this); + } + return(0); + } + SDL_memset(this->hidden, 0, (sizeof *this->hidden)); + + /* Set the function pointers */ + this->OpenAudio = SNDIO_OpenAudio; + this->WaitAudio = SNDIO_WaitAudio; + this->PlayAudio = SNDIO_PlayAudio; + this->GetAudioBuf = SNDIO_GetAudioBuf; + this->CloseAudio = SNDIO_CloseAudio; + + this->free = Audio_DeleteDevice; + + hdl = NULL; + + return this; +} + +AudioBootStrap SNDIO_bootstrap = { + SNDIO_DRIVER_NAME, "sndio", + Audio_Available, Audio_CreateDevice +}; + + + +/* This function waits until it is possible to write a full sound buffer */ +static void SNDIO_WaitAudio(_THIS) +{ + /* nothing, we're using the blocking api */ +} + +static void SNDIO_PlayAudio(_THIS) +{ + int written; + + /* Write the audio data */ + written = sio_write(hdl, mixbuf, mixlen); + + /* If we couldn't write, assume fatal error for now */ + if ( written == 0 ) { + this->enabled = 0; + } +#ifdef DEBUG_AUDIO + fprintf(stderr, "Wrote %d bytes of audio data\n", written); +#endif +} + +static Uint8 *SNDIO_GetAudioBuf(_THIS) +{ + return(mixbuf); +} + +static void SNDIO_CloseAudio(_THIS) +{ + if ( mixbuf != NULL ) { + SDL_FreeAudioMem(mixbuf); + mixbuf = NULL; + } + if ( hdl != NULL ) { + sio_close(hdl); + hdl = NULL; + } +} + +static int SNDIO_OpenAudio(_THIS, SDL_AudioSpec *spec) +{ + struct sio_par par; + + mixbuf = NULL; + + if ((hdl = sio_open(NULL, SIO_PLAY, 0)) == NULL) { + SDL_SetError("sio_open() failed"); + return(-1); + } + + sio_initpar(&par); + + switch (spec->format) { + case AUDIO_S16LSB: + par.bits = 16; + par.sig = 1; + par.le = 1; + break; + case AUDIO_S16MSB: + par.bits = 16; + par.sig = 1; + par.le = 0; + break; + case AUDIO_S8: + par.bits = 8; + par.sig = 1; + break; + case AUDIO_U16LSB: + par.bits = 16; + par.sig = 0; + par.le = 1; + break; + case AUDIO_U16MSB: + par.bits = 16; + par.sig = 0; + par.le = 0; + break; + case AUDIO_U8: + par.bits = 8; + par.sig = 0; + break; + default: + SDL_SetError("SNDIO unknown format"); + return(-1); + } + + par.rate = spec->freq; + par.pchan = spec->channels; + par.round = spec->samples; + par.appbufsz = par.round * 2; + + if (sio_setpar(hdl, &par) == 0) { + SDL_SetError("sio_setpar() failed"); + return(-1); + } + + if (sio_getpar(hdl, &par) == 0) { + SDL_SetError("sio_getpar() failed"); + return(-1); + } + + if (par.bits == 16) { + if (par.sig && par.le) { + spec->format = AUDIO_S16LSB; + } else if (par.sig && !par.le) { + spec->format = AUDIO_S16MSB; + } else if (!par.sig && par.le) { + spec->format = AUDIO_U16LSB; + } else + spec->format = AUDIO_U16MSB; + } else if (par.bits == 8) { + spec->format = par.sig ? AUDIO_S8 : AUDIO_U8; + } else { + SDL_SetError("SNDIO couldn't configure a suitable format"); + return(-1); + } + + spec->freq = par.rate; + spec->channels = par.pchan; + spec->samples = par.round; + + SDL_CalculateAudioSpec(spec); + + /* Allocate mixing buffer */ + mixlen = spec->size; + mixbuf = (Uint8 *)SDL_AllocAudioMem(mixlen); + if ( mixbuf == NULL ) { + return(-1); + } + SDL_memset(mixbuf, spec->silence, spec->size); + + if ( sio_start(hdl) == 0 ) { + SDL_SetError("sio_start() failed"); + return(-1); + } + + /* We're ready to rock and roll. :-) */ + return(0); +} Index: head/devel/sdl12/files/patch-configure =================================================================== --- head/devel/sdl12/files/patch-configure +++ head/devel/sdl12/files/patch-configure @@ -22,3 +22,28 @@ BASE_LDFLAGS="" ;; esac +@@ -20999,6 +20993,16 @@ + fi + fi + } ++ ++CheckSndio() ++{ ++if test "x${enable_sndio}" = "xyes"; then : ++ SOURCES="$SOURCES $srcdir/src/audio/sndio/SDL_sndioaudio.c" ++ EXTRA_CFLAGS="$EXTRA_CFLAGS -DSDL_AUDIO_DRIVER_SNDIO=1" ++ EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lsndio" ++ have_audio=yes ++fi ++} + + CheckPulseAudio() + { +@@ -29551,6 +29555,7 @@ + CheckALSA + CheckARTSC + CheckESD ++ CheckSndio + CheckPulseAudio + CheckNAS + CheckX11 Index: head/devel/sdl12/files/patch-src_audio_SDL__audio.c =================================================================== --- head/devel/sdl12/files/patch-src_audio_SDL__audio.c +++ head/devel/sdl12/files/patch-src_audio_SDL__audio.c @@ -0,0 +1,19 @@ +$OpenBSD: patch-src_audio_SDL_audio_c,v 1.17 2012/03/02 09:10:38 dcoppa Exp $ +--- src/audio/SDL_audio.c.orig 2012-01-19 06:30:06 UTC ++++ src/audio/SDL_audio.c +@@ -36,11 +36,15 @@ + + /* Available audio drivers */ + static AudioBootStrap *bootstrap[] = { ++ + #if SDL_AUDIO_DRIVER_PULSE + &PULSE_bootstrap, + #endif + #if SDL_AUDIO_DRIVER_ALSA + &ALSA_bootstrap, ++#endif ++#if SDL_AUDIO_DRIVER_SNDIO ++ &SNDIO_bootstrap, + #endif + #if SDL_AUDIO_DRIVER_BSD + &BSD_AUDIO_bootstrap, Index: head/devel/sdl12/files/patch-src_audio_SDL__sysaudio.h =================================================================== --- head/devel/sdl12/files/patch-src_audio_SDL__sysaudio.h +++ head/devel/sdl12/files/patch-src_audio_SDL__sysaudio.h @@ -0,0 +1,13 @@ +$OpenBSD: patch-src_audio_SDL_sysaudio_h,v 1.6 2012/03/02 09:10:38 dcoppa Exp $ +--- src/audio/SDL_sysaudio.h.orig 2012-01-19 06:30:06 UTC ++++ src/audio/SDL_sysaudio.h +@@ -105,6 +105,9 @@ typedef struct AudioBootStrap { + #if SDL_AUDIO_DRIVER_BSD + extern AudioBootStrap BSD_AUDIO_bootstrap; + #endif ++#if SDL_AUDIO_DRIVER_SNDIO ++extern AudioBootStrap SNDIO_bootstrap; ++#endif + #if SDL_AUDIO_DRIVER_PULSE + extern AudioBootStrap PULSE_bootstrap; + #endif Index: head/devel/sdl12/pkg-plist =================================================================== --- head/devel/sdl12/pkg-plist +++ head/devel/sdl12/pkg-plist @@ -213,7 +213,6 @@ man/man3/SDL_mutexV.3.gz share/aclocal/sdl.m4 %%PORTDOCS%%%%DOCSDIR%%/BUGS -%%PORTDOCS%%%%DOCSDIR%%/COPYING %%PORTDOCS%%%%DOCSDIR%%/CREDITS %%PORTDOCS%%%%DOCSDIR%%/README %%PORTDOCS%%%%DOCSDIR%%/README-SDL.txt