sndio support for libao

[email protected] (Christian Weisgerber)
Newsgroups gmane.comp.multimedia.ogg.vorbis.devel
Message-ID <[email protected]>
(Is this the right list for libao patches?)

The following adds support for a sndio plugin to libao.  sndio is
OpenBSD's new audio API.


diff -uNrp libao-0.8.8.orig/configure.ac libao-0.8.8/configure.ac
--- libao-0.8.8.orig/configure.ac	Thu May 24 12:51:05 2007
+++ libao-0.8.8/configure.ac	Mon Dec  8 16:34:44 2008
@@ -300,6 +300,11 @@ dnl Check for Sun audio
 AC_CHECK_HEADERS(sys/audioio.h)
 AM_CONDITIONAL(HAVE_SUN_AUDIO,test "${ac_cv_header_sys_audioio_h}" = yes)
 
+dnl Check for libsndio audio
+
+AC_CHECK_HEADERS(sndio.h)
+AM_CONDITIONAL(HAVE_SNDIO_AUDIO,test "${ac_cv_header_sndio_h}" = yes)
+
 dnl Check for AIX audio
 
 case $host in
@@ -415,4 +420,4 @@ dnl Plugins get special LDFLAGS
 AC_SUBST(PLUGIN_LDFLAGS)
 
 
-AC_OUTPUT(Makefile src/Makefile doc/Makefile include/Makefile include/ao/Makefile include/ao/os_types.h src/plugins/Makefile src/plugins/esd/Makefile src/plugins/oss/Makefile src/plugins/alsa/Makefile src/plugins/alsa09/Makefile src/plugins/sun/Makefile src/plugins/irix/Makefile src/plugins/arts/Makefile src/plugins/macosx/Makefile src/plugins/nas/Makefile src/plugins/pulse/Makefile ao.pc)
+AC_OUTPUT(Makefile src/Makefile doc/Makefile include/Makefile include/ao/Makefile include/ao/os_types.h src/plugins/Makefile src/plugins/esd/Makefile src/plugins/oss/Makefile src/plugins/alsa/Makefile src/plugins/alsa09/Makefile src/plugins/sun/Makefile src/plugins/irix/Makefile src/plugins/arts/Makefile src/plugins/macosx/Makefile src/plugins/nas/Makefile src/plugins/pulse/Makefile src/plugins/sndio/Makefile ao.pc)
diff -uNrp libao-0.8.8.orig/src/plugins/Makefile.am libao-0.8.8/src/plugins/Makefile.am
--- libao-0.8.8.orig/src/plugins/Makefile.am	Thu May 24 11:19:07 2007
+++ libao-0.8.8/src/plugins/Makefile.am	Mon Dec  8 16:34:44 2008
@@ -1,4 +1,5 @@
 ## Process this file with automake to produce Makefile.in
 
 AUTOMAKE_OPTIONS = foreign
-SUBDIRS = oss esd arts alsa alsa09 sun irix macosx nas pulse
+SUBDIRS = oss esd arts alsa alsa09 sun irix macosx nas pulse sndio
+AM_MAKEFLAGS = LIBTOOL="$(LIBTOOL) --tag=disable-static"
diff -uNrp libao-0.8.8.orig/src/plugins/sndio/Makefile.am libao-0.8.8/src/plugins/sndio/Makefile.am
--- libao-0.8.8.orig/src/plugins/sndio/Makefile.am	Thu Jan  1 01:00:00 1970
+++ libao-0.8.8/src/plugins/sndio/Makefile.am	Mon Dec  8 16:35:29 2008
@@ -0,0 +1,26 @@
+## Process this file with automake to produce Makefile.in
+
+AUTOMAKE_OPTIONS = foreign
+
+if HAVE_SNDIO_AUDIO
+
+sndioltlibs = libsndio.la
+sndiosources = ao_sndio.c
+
+else
+
+sndioltlibs =
+sndiosources =
+
+endif
+
+INCLUDES = -I$(top_builddir)/include/ao -I$(top_srcdir)/include
+
+libdir = $(plugindir)
+lib_LTLIBRARIES = $(sndioltlibs)
+
+libsndio_la_LDFLAGS = @PLUGIN_LDFLAGS@
+libsndio_la_LIBADD = -lsndio
+libsndio_la_SOURCES = $(sndiosources)
+
+EXTRA_DIST = ao_sndio.c
diff -uNrp libao-0.8.8.orig/src/plugins/sndio/ao_sndio.c libao-0.8.8/src/plugins/sndio/ao_sndio.c
--- libao-0.8.8.orig/src/plugins/sndio/ao_sndio.c	Thu Jan  1 01:00:00 1970
+++ libao-0.8.8/src/plugins/sndio/ao_sndio.c	Mon Dec  8 16:35:29 2008
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2008 Alexandre Ratchov <[email protected]>
+ *
+ * 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 <sndio.h>
+#include <ao/ao.h>
+#include <ao/plugin.h>
+
+ao_info ao_sndio_info = {
+	AO_TYPE_LIVE,
+	"sndio audio output",
+	"sndio",
+	"Alexandre Ratchov <[email protected]>",
+	"Outputs to the sndio library",
+	AO_FMT_NATIVE,
+	30,
+	NULL,	/* no options */
+	0	/* zero options */
+};
+
+int ao_plugin_test()
+{
+	struct sio_hdl *hdl;
+
+	hdl = sio_open(NULL, SIO_PLAY, 0);
+	if (hdl == NULL)
+		return 0;
+	sio_close(hdl);
+	return 1;
+}
+
+ao_info *ao_plugin_driver_info(void)
+{
+	return &ao_sndio_info;
+}
+
+int ao_plugin_device_init(ao_device *device)
+{
+	struct sio_hdl *hdl;
+
+	hdl = sio_open(NULL, SIO_PLAY, 0);
+	if (hdl == NULL)
+		return 0;
+	device->internal = hdl;
+	return 1;
+}
+
+int ao_plugin_set_option(ao_device *device, const char *key, const char *value)
+{
+	return 1;
+}
+
+int ao_plugin_open(ao_device *device, ao_sample_format *format)
+{
+	struct sio_hdl *hdl = (struct sio_hdl *)device->internal;
+	struct sio_par par;
+
+	sio_initpar(&par);
+	par.sig = 1;
+	par.le = SIO_LE_NATIVE;
+	par.bits = format->bits;
+	par.rate = format->rate;
+	par.pchan = format->channels;
+	if (!sio_setpar(hdl, &par))
+		return 0;
+	device->driver_byte_format = AO_FMT_NATIVE;
+	if (!sio_start(hdl))
+		return 0;
+	return 1;
+}
+
+int ao_plugin_play(ao_device *device, const char *output_samples, uint_32 num_bytes)
+{
+	struct sio_hdl *hdl = (struct sio_hdl *)device->internal;
+
+	if (!sio_write(hdl, output_samples, num_bytes))
+		return 0;
+	return 1;
+}
+
+int ao_plugin_close(ao_device *device)
+{
+	struct sio_hdl *hdl = (struct sio_hdl *)device->internal;
+
+	if (!sio_stop(hdl))
+		return 0;
+	return 1;
+}
+
+void ao_plugin_device_clear(ao_device *device)
+{
+	struct sio_hdl *hdl = (struct sio_hdl *)device->internal;
+
+	sio_close(hdl);	
+}
-- 
Christian "naddy" Weisgerber                          [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.