Yet another sndio backend and one less -lossaudio user. Tested on
amd64.

OK?

Index: Makefile
===================================================================
RCS file: /cvs/ports/audio/libdca/Makefile,v
retrieving revision 1.8
diff -u -p -u -p -r1.8 Makefile
--- Makefile    21 Mar 2013 08:45:12 -0000      1.8
+++ Makefile    24 Oct 2014 11:28:32 -0000
@@ -4,7 +4,7 @@ COMMENT=        free DTS Coherent Acoustics dec
 
 V=             0.0.5
 DISTNAME=      libdca-${V}
-REVISION=      2
+REVISION=      3
 EXTRACT_SUFX=  .tar.bz2
 CATEGORIES=    audio
 MASTER_SITES=  http://download.videolan.org/pub/videolan/libdca/${V}/
@@ -16,8 +16,15 @@ HOMEPAGE=    http://www.videolan.org/develo
 # GPLv2
 PERMIT_PACKAGE_CDROM=  Yes
 
-WANTLIB=       c m ossaudio
+WANTLIB=       c m sndio
 
-CONFIGURE_STYLE= gnu
+CONFIGURE_STYLE = autoconf
+AUTOCONF_VERSION = 2.61
+CONFIGURE_ARGS += ${CONFIGURE_SHARED}
+CONFIGURE_ARGS += --disable-oss
+MODGNU_CONFIG_GUESS_DIRS =     ${WRKSRC}/autotools
+
+post-extract:
+       @cp ${FILESDIR}/audio_out_sndio.c ${WRKSRC}/libao
 
 .include <bsd.port.mk>
Index: files/audio_out_sndio.c
===================================================================
RCS file: files/audio_out_sndio.c
diff -N files/audio_out_sndio.c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ files/audio_out_sndio.c     24 Oct 2014 11:28:32 -0000
@@ -0,0 +1,170 @@
+/*
+ * audio_out_sndio.c
+ * Copyright (C) 2000-2003 Michel Lespinasse <wal...@zoy.org>
+ * Copyright (C) 1999-2000 Aaron Holtzman <aholt...@ess.engr.uvic.ca>
+ *
+ * This file is part of a52dec, a free ATSC A-52 stream decoder.
+ * See http://liba52.sourceforge.net/ for updates.
+ *
+ * a52dec is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * a52dec is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+
+#ifdef LIBAO_SNDIO
+
+#include <sndio.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "dca.h"
+#include "audio_out.h"
+#include "audio_out_internal.h"
+
+typedef struct sndio_instance_s {
+    ao_instance_t ao;
+    struct sio_hdl *hdl;
+    int sample_rate;
+    int set_params;
+    int flags;
+} sndio_instance_t;
+
+static int sndio_setup (ao_instance_t * _instance, int sample_rate, int * 
flags,
+                     level_t * level, sample_t * bias)
+{
+    sndio_instance_t * instance = (sndio_instance_t *) _instance;
+
+    if ((instance->set_params == 0) && (instance->sample_rate != sample_rate))
+       return 1;
+    instance->sample_rate = sample_rate;
+
+    *flags = instance->flags;
+    *level = CONVERT_LEVEL;
+    *bias = CONVERT_BIAS;
+
+    return 0;
+}
+
+static int sndio_play (ao_instance_t * _instance, int flags, sample_t * 
_samples)
+{
+    sndio_instance_t * instance = (sndio_instance_t *) _instance;
+    int16_t int16_samples[256*6];
+    int chans = -1;
+
+#ifdef LIBDCA_DOUBLE
+    convert_t samples[256 * 6];
+    int i;
+
+    for (i = 0; i < 256 * 6; i++)
+       samples[i] = _samples[i];
+#else
+    convert_t * samples = _samples;
+#endif
+
+    chans = channels_multi (flags);
+    flags &= DCA_CHANNEL_MASK | DCA_LFE;
+
+    if (instance->set_params) {
+       struct sio_par par;
+
+       sio_initpar(&par);
+       par.bits = 16;
+       par.sig = 1;
+       par.le = SIO_LE_NATIVE;
+       par.pchan = chans;
+       par.rate = instance->sample_rate;
+       if (!sio_setpar(instance->hdl, &par) || !sio_setpar(instance->hdl, 
&par)) {
+           fprintf (stderr, "Can not set audio parameters\n");
+           return 1;
+       }
+       if (par.bits != 16 || par.sig != 1 || par.le != SIO_LE_NATIVE ||
+           par.pchan != chans || par.rate != instance->sample_rate) {
+           fprintf (stderr, "Unsupported audio parameters\n");
+           return 1;
+       }
+       instance->flags = flags;
+       instance->set_params = 0;
+       sio_start(instance->hdl);
+    } else if ((flags == DCA_DOLBY) && (instance->flags == DCA_STEREO)) {
+       fprintf (stderr, "Switching from stereo to dolby surround\n");
+       instance->flags = DCA_DOLBY;
+    } else if ((flags == DCA_STEREO) && (instance->flags == DCA_DOLBY)) {
+       fprintf (stderr, "Switching from dolby surround to stereo\n");
+       instance->flags = DCA_STEREO;
+    } else if (flags != instance->flags)
+       return 1;
+
+    convert2s16_multi (samples, int16_samples, flags);
+    sio_write (instance->hdl, int16_samples, 256 * sizeof (int16_t) * chans);
+
+    return 0;
+}
+
+static void sndio_close (ao_instance_t * _instance)
+{
+    sndio_instance_t * instance = (sndio_instance_t *) _instance;
+
+    sio_close (instance->hdl);
+}
+
+static ao_instance_t * sndio_open (int flags)
+{
+    sndio_instance_t * instance;
+
+    instance = (sndio_instance_t *) malloc (sizeof (sndio_instance_t));
+    if (instance == NULL)
+       return NULL;
+
+    instance->ao.setup = sndio_setup;
+    instance->ao.play = sndio_play;
+    instance->ao.close = sndio_close;
+
+    instance->sample_rate = 0;
+    instance->set_params = 1;
+    instance->flags = flags;
+
+    instance->hdl = sio_open (SIO_DEVANY, SIO_PLAY, 0);
+    if (instance->hdl == NULL) {
+       fprintf (stderr, "Can not open " SIO_DEVANY " device\n");
+       free (instance);
+       return NULL;
+    }
+
+    return (ao_instance_t *) instance;
+}
+
+ao_instance_t * ao_sndio_open (void)
+{
+    return sndio_open (DCA_STEREO);
+}
+
+ao_instance_t * ao_sndiodolby_open (void)
+{
+    return sndio_open (DCA_DOLBY);
+}
+
+ao_instance_t * ao_sndio4_open (void)
+{
+    return sndio_open (DCA_2F2R);
+}
+
+ao_instance_t * ao_sndio6_open (void)
+{
+    return sndio_open (DCA_3F2R | DCA_LFE);
+}
+
+#endif
Index: patches/patch-configure
===================================================================
RCS file: patches/patch-configure
diff -N patches/patch-configure
--- patches/patch-configure     12 Jul 2009 23:26:08 -0000      1.1.1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,15 +0,0 @@
-$OpenBSD: patch-configure,v 1.1.1.1 2009/07/12 23:26:08 jolan Exp $
---- configure.orig     Tue Apr 10 07:31:19 2007
-+++ configure  Sun Jul 12 18:21:25 2009
-@@ -4242,9 +4242,9 @@ echo "${ECHO_T}$ac_cv_try_cflags_ok" >&6; }
-     fi
- 
- 
--    TRY_CFLAGS=`echo "$OPT_CFLAGS $CFLAGS"|sed "s/-O[0-9]*//g"`
-+    TRY_CFLAGS=`echo "$OPT_CFLAGS $CFLAGS"`
- 
--    TRY_CFLAGS="$TRY_CFLAGS -O3"
-+    #TRY_CFLAGS="$TRY_CFLAGS -O3"
-     { echo "$as_me:$LINENO: checking if $CC supports $TRY_CFLAGS flags" >&5
- echo $ECHO_N "checking if $CC supports $TRY_CFLAGS flags... $ECHO_C" >&6; }
-     SAVE_CFLAGS="$CFLAGS"
Index: patches/patch-libao_Makefile_am
===================================================================
RCS file: patches/patch-libao_Makefile_am
diff -N patches/patch-libao_Makefile_am
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libao_Makefile_am     24 Oct 2014 11:28:32 -0000
@@ -0,0 +1,12 @@
+$OpenBSD$
+--- libao/Makefile.am.orig     Fri Oct 24 12:06:39 2014
++++ libao/Makefile.am  Fri Oct 24 12:06:56 2014
+@@ -3,7 +3,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/include
+ 
+ noinst_LTLIBRARIES = libao.la
+ libao_la_SOURCES = audio_out.c audio_out_null.c audio_out_float.c \
+-                 audio_out_oss.c audio_out_solaris.c audio_out_al.c \
++                 audio_out_oss.c audio_out_sndio.c audio_out_solaris.c 
audio_out_al.c \
+                  audio_out_win.c audio_out_wav.c audio_out_aif.c \
+                  audio_out_peak.c convert2s16.c \
+                  audio_out_internal.h
Index: patches/patch-libao_Makefile_in
===================================================================
RCS file: patches/patch-libao_Makefile_in
diff -N patches/patch-libao_Makefile_in
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libao_Makefile_in     24 Oct 2014 11:28:32 -0000
@@ -0,0 +1,29 @@
+$OpenBSD$
+--- libao/Makefile.in.orig     Fri Oct 24 12:07:06 2014
++++ libao/Makefile.in  Fri Oct 24 12:08:02 2014
+@@ -46,7 +46,7 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
+ am__DEPENDENCIES_1 =
+ libao_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+ am_libao_la_OBJECTS = audio_out.lo audio_out_null.lo \
+-      audio_out_float.lo audio_out_oss.lo audio_out_solaris.lo \
++      audio_out_float.lo audio_out_oss.lo audio_out_sndio.lo 
audio_out_solaris.lo \
+       audio_out_al.lo audio_out_win.lo audio_out_wav.lo \
+       audio_out_aif.lo audio_out_peak.lo convert2s16.lo
+ libao_la_OBJECTS = $(am_libao_la_OBJECTS)
+@@ -176,7 +176,7 @@ AM_CFLAGS = $(OPT_CFLAGS)
+ AM_CPPFLAGS = -I$(top_srcdir)/include
+ noinst_LTLIBRARIES = libao.la
+ libao_la_SOURCES = audio_out.c audio_out_null.c audio_out_float.c \
+-                 audio_out_oss.c audio_out_solaris.c audio_out_al.c \
++                 audio_out_oss.c audio_out_sndio.c audio_out_solaris.c 
audio_out_al.c \
+                  audio_out_win.c audio_out_wav.c audio_out_aif.c \
+                  audio_out_peak.c convert2s16.c \
+                  audio_out_internal.h
+@@ -240,6 +240,7 @@ distclean-compile:
+ @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/audio_out_float.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_out_null.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_out_oss.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/audio_out_sndio.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_out_peak.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/audio_out_solaris.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_out_wav.Plo@am__quote@
Index: patches/patch-libao_audio_out_c
===================================================================
RCS file: patches/patch-libao_audio_out_c
diff -N patches/patch-libao_audio_out_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libao_audio_out_c     24 Oct 2014 11:28:32 -0000
@@ -0,0 +1,27 @@
+$OpenBSD$
+--- libao/audio_out.c.orig     Fri Oct 24 12:21:31 2014
++++ libao/audio_out.c  Fri Oct 24 12:22:02 2014
+@@ -34,6 +34,10 @@ extern ao_open_t ao_oss_open;
+ extern ao_open_t ao_ossdolby_open;
+ extern ao_open_t ao_oss4_open;
+ extern ao_open_t ao_oss6_open;
++extern ao_open_t ao_sndio_open;
++extern ao_open_t ao_sndiodolby_open;
++extern ao_open_t ao_sndio4_open;
++extern ao_open_t ao_sndio6_open;
+ extern ao_open_t ao_solaris_open;
+ extern ao_open_t ao_solarisdolby_open;
+ extern ao_open_t ao_al_open;
+@@ -61,6 +65,12 @@ static ao_driver_t audio_out_drivers[] = {
+     {"ossdolby", ao_ossdolby_open},
+     {"oss4", ao_oss4_open},
+     {"oss6", ao_oss6_open},
++#endif
++#ifdef LIBAO_SNDIO
++    {"sndio", ao_sndio_open},
++    {"sndiodolby", ao_sndiodolby_open},
++    {"sndio4", ao_sndio4_open},
++    {"sndio6", ao_sndio6_open},
+ #endif
+ #ifdef LIBAO_SOLARIS
+     {"solaris", ao_solaris_open},
Index: patches/patch-libao_configure_incl
===================================================================
RCS file: patches/patch-libao_configure_incl
diff -N patches/patch-libao_configure_incl
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-libao_configure_incl  24 Oct 2014 11:28:32 -0000
@@ -0,0 +1,19 @@
+$OpenBSD$
+--- libao/configure.incl.orig  Fri Oct 24 12:09:22 2014
++++ libao/configure.incl       Fri Oct 24 12:10:49 2014
+@@ -12,6 +12,15 @@ if test x"$enable_oss" != x"no"; then
+     esac
+ fi
+ 
++dnl check for sndio
++AC_ARG_ENABLE([sndio],
++    [  --disable-sndio           make a version not using sndio])
++if test x"$enable_sndio" != x"no"; then
++    AC_DEFINE([LIBAO_SNDIO],,[libao sndio support])
++    AC_CHECK_LIB([sndio],[sio_initpar],
++      [LIBAO_LIBS="$LIBAO_LIBS -lsndio"])
++fi
++
+ dnl check for solaris
+ AC_ARG_ENABLE([solaris-audio],
+     [  --disable-solaris-audio make a version not using solaris audio])

Reply via email to