This diff adds the missing sndio backend to sidplay. Tested on
amd64
OKs?
Index: Makefile
===================================================================
RCS file: /cvs/ports/audio/sidplay/Makefile,v
retrieving revision 1.10
diff -u -p -u -p -r1.10 Makefile
--- Makefile 10 Mar 2013 22:55:05 -0000 1.10
+++ Makefile 24 Oct 2014 14:01:54 -0000
@@ -4,7 +4,7 @@ COMMENT= Commodore 64 music player and S
DISTNAME= sidplay-base-1.0.9
PKGNAME= ${DISTNAME:S/-base//}
-REVISION= 0
+REVISION= 1
CATEGORIES= audio
MAINTAINER= Christian Weisgerber <[email protected]>
@@ -12,7 +12,7 @@ MAINTAINER= Christian Weisgerber <naddy@
# GPL
PERMIT_PACKAGE_CDROM= Yes
-WANTLIB= c m ossaudio sidplay>=1 stdc++
+WANTLIB= c m sidplay>=1 sndio stdc++
MASTER_SITES= ${MASTER_SITE_OPENBSD}
EXTRACT_SUFX= .tgz
@@ -22,5 +22,10 @@ LIB_DEPENDS= audio/libsidplay
CONFIGURE_STYLE= gnu
CONFIGURE_ARGS= --with-sidplay-includes=${LOCALBASE}/include \
--with-sidplay-library=${LOCALBASE}/lib
+
+post-extract:
+ @mkdir -p ${WRKSRC}/audio/sndio
+ @cp ${FILESDIR}/audiodrv.cpp ${WRKSRC}/audio/sndio
+ @cp ${FILESDIR}/audiodrv.h ${WRKSRC}/audio/sndio
.include <bsd.port.mk>
Index: files/audiodrv.cpp
===================================================================
RCS file: files/audiodrv.cpp
diff -N files/audiodrv.cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ files/audiodrv.cpp 24 Oct 2014 14:01:54 -0000
@@ -0,0 +1,100 @@
+// --------------------------------------------------------------------------
+// ``sndio'' specific audio driver interface.
+// --------------------------------------------------------------------------
+
+#include "audiodrv.h"
+
+audioDriver::audioDriver()
+{
+ hdl = NULL;
+}
+
+bool audioDriver::IsThere()
+{
+ return 1;
+}
+
+bool audioDriver::Open(udword inFreq, int inPrecision, int inChannels,
+ int inFragments, int inFragBase)
+{
+ sio_par askpar, retpar;
+
+ hdl = sio_open(SIO_DEVANY, SIO_PLAY, 0);
+ if (hdl == NULL)
+ {
+ errorString = "ERROR: Could not open audio device.";
+ return false;
+ }
+
+ frequency = inFreq;
+ channels = inChannels;
+ precision = inPrecision;
+ encoding = retpar.sig ? SIDEMU_SIGNED_PCM : SIDEMU_UNSIGNED_PCM;
+
+ sio_initpar(&askpar);
+ if (precision == SIDEMU_8BIT)
+ {
+ askpar.le = SIO_LE_NATIVE;
+ askpar.bits = 16;
+ askpar.sig = 1;
+ } else {
+ askpar.bits = 8;
+ askpar.sig = 0;
+ }
+ askpar.pchan = inChannels == SIDEMU_MONO ? 1 : 2;
+ askpar.rate = inFreq;
+ askpar.round = 1 << inFragBase;
+ askpar.appbufsz = inFragments * askpar.round;
+
+ if (!sio_setpar(hdl, &askpar) || !sio_getpar(hdl, &retpar))
+ {
+ errorString = "ERROR: Could not set audio parameters.";
+ goto bad_close;
+ }
+
+ if (retpar.bits != askpar.bits || retpar.sig != askpar.sig ||
+ (retpar.bits > 8 && retpar.le != askpar.le) ||
+ retpar.pchan != askpar.pchan || retpar.rate != askpar.rate)
+ {
+ errorString = "ERROR: Unsupported audio parameters.";
+ goto bad_close;
+ }
+ blockSize = retpar.round;
+
+ if (!sio_start(hdl))
+ {
+ errorString = "ERROR: Could not start audio device.";
+ goto bad_close;
+ }
+ return true;
+
+bad_close:
+ sio_close(hdl);
+ hdl = NULL;
+ return false;
+}
+
+void audioDriver::Close()
+{
+ if (hdl != NULL)
+ {
+ sio_close(hdl);
+ hdl = NULL;
+ }
+}
+
+void audioDriver::Play(ubyte* pBuffer, int bufferSize)
+{
+ if (hdl != NULL)
+ sio_write(hdl, pBuffer, bufferSize);
+}
+
+bool audioDriver::Reset()
+{
+ if (hdl != NULL) {
+ sio_stop(hdl);
+ sio_start(hdl);
+ return true;
+ }
+ return false;
+}
Index: files/audiodrv.h
===================================================================
RCS file: files/audiodrv.h
diff -N files/audiodrv.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ files/audiodrv.h 24 Oct 2014 14:01:54 -0000
@@ -0,0 +1,91 @@
+// --------------------------------------------------------------------------
+// ``sndio'' specific audio driver interface.
+// --------------------------------------------------------------------------
+
+#ifndef AUDIODRV_H
+#define AUDIODRV_H
+
+
+#include <sndio.h>
+#include <stdio.h>
+#include <sidplay/emucfg.h>
+
+class audioDriver
+{
+
+ public: // --------------------------------------------------------- public
+
+ audioDriver();
+
+ bool IsThere();
+
+ bool Open(udword freq, int precision, int channels,
+ int fragments, int fragBase);
+
+ void Close();
+
+ void Play(ubyte* buffer, int bufferSize);
+
+ bool Reset();
+
+ int GetAudioHandle()
+ {
+ return -1;
+ }
+
+ udword GetFrequency()
+ {
+ return frequency;
+ }
+
+ int GetChannels()
+ {
+ return channels;
+ }
+
+ int GetSamplePrecision()
+ {
+ return precision;
+ }
+
+ int GetSampleEncoding()
+ {
+ return encoding;
+ }
+
+ int GetBlockSize()
+ {
+ return blockSize;
+ }
+
+ int GetFragments()
+ {
+ return 1;
+ }
+
+ int GetFragSizeBase()
+ {
+ return 0;
+ }
+
+ const char* GetErrorString()
+ {
+ return errorString;
+ }
+
+ private: // ------------------------------------------------------- private
+ struct sio_hdl *hdl;
+
+ const char* errorString;
+ int blockSize;
+
+ udword frequency;
+
+ // These are constants/enums from ``libsidplay/include/emucfg.h''.
+ int encoding;
+ int precision;
+ int channels;
+};
+
+
+#endif // AUDIODRV_H
Index: patches/patch-configure
===================================================================
RCS file: patches/patch-configure
diff -N patches/patch-configure
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-configure 24 Oct 2014 14:01:54 -0000
@@ -0,0 +1,18 @@
+$OpenBSD$
+--- configure.orig Sat Sep 28 20:44:14 2002
++++ configure Fri Oct 24 15:49:10 2014
+@@ -1590,11 +1590,9 @@ EOF
+ #define HAVE_OPENBSD 1
+ EOF
+
+- $CP audio/oss/* .
+- echo "$ac_t""oss" 1>&6
+- if test -z "$LIBAUDIO"; then
+- { echo "configure: error: libossaudio required, but not found." 1>&2;
exit 1; };
+- fi
++ $CP audio/sndio/* .
++ LIBAUDIO=-lsndio
++ echo "$ac_t""sndio" 1>&6
+ ;;
+ esac
+
Index: patches/patch-configure_in
===================================================================
RCS file: patches/patch-configure_in
diff -N patches/patch-configure_in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-configure_in 24 Oct 2014 14:01:54 -0000
@@ -0,0 +1,18 @@
+$OpenBSD$
+--- configure.in.orig Sat Sep 28 20:44:02 2002
++++ configure.in Fri Oct 24 15:57:45 2014
+@@ -64,11 +64,9 @@ case "$host" in
+ fi
+ ;;
+ *openbsd*) AC_DEFINE(HAVE_OPENBSD,1)
+- $CP audio/oss/* .
+- AC_MSG_RESULT(oss)
+- if test -z "$LIBAUDIO"; then
+- AC_MSG_ERROR([libossaudio required, but not found.]);
+- fi
++ $CP audio/sndio/* .
++ LIBAUDIO=-lsndio
++ AC_MSG_RESULT(sndio)
+ ;;
+ esac
+