update to 14.3.0, fixing a problem with mp3 playback reported by

Jan Stary, and rolling sndio support into the upstream distribution.
thanks Jan for testing. suggestions/ok naddy@.
This commit is contained in:
sthen 2009-11-06 00:04:37 +00:00
parent 5f77b656fa
commit 8b1f3b7ea9
8 changed files with 29 additions and 370 deletions

View File

@ -1,16 +1,13 @@
# $OpenBSD: Makefile,v 1.41 2009/04/06 18:56:55 kili Exp $
# $OpenBSD: Makefile,v 1.42 2009/11/06 00:04:37 sthen Exp $
COMMENT= Sound eXchange, the Swiss Army knife of audio manipulation
DISTNAME= sox-14.2.0
PKGNAME= ${DISTNAME}p2
SHARED_LIBS += sox 0.0 # .0.0
SHARED_LIBS += sfx 0.0 # .0.0
DISTNAME= sox-14.3.0
SHARED_LIBS += sox 1.0 # .1.0
CATEGORIES= audio
HOMEPAGE= http://sox.sourceforge.net/
# GPLv2.
# The libgsm issues have been fixed (see libgsm-1.0.13).
# GPLv2
PERMIT_PACKAGE_CDROM= Yes
PERMIT_PACKAGE_FTP= Yes
PERMIT_DISTFILES_CDROM= Yes
@ -27,14 +24,11 @@ LIB_DEPENDS= vorbis.>=6,vorbisenc.>=2,vorbisfile.>=5::audio/libvorbis \
mp3lame.>=2::audio/lame \
wavpack.>=0::audio/wavpack \
png.>=8::graphics/png \
samplerate.>=2::audio/libsamplerate \
gsm.>=1::audio/gsm
WANTLIB= c iconv m ogg sndio z
AUTOCONF_VERSION=2.62 # 2.63
AUTOMAKE_VERSION=1.9 # 1.10
USE_LIBTOOL= Yes
CONFIGURE_STYLE=autoconf automake
CONFIGURE_STYLE=gnu
CONFIGURE_ARGS= ${CONFIGURE_SHARED} \
--disable-silent-libtool
@ -42,45 +36,33 @@ CONFIGURE_ARGS= ${CONFIGURE_SHARED} \
CONFIGURE_ARGS+=--without-libltdl
# Sound drivers
CONFIGURE_ARGS+=--disable-libao \
--disable-oss \
--enable-sndio \
--disable-sun-audio
CONFIGURE_ARGS+=--without-ao \
--without-oss \
--with-sndio \
--without-sunaudio
# Additional file formats
CONFIGURE_ARGS+=--without-sndfile \
--with-ogg \
--with-oggvorbis \
--with-flac \
--without-ffmpeg \
--with-magic \
--with-mad \
--with-id3tag \
--with-lame \
--without-amr-wb \
--without-amr-nb \
--without-amrwb \
--without-amrnb \
--with-wavpack \
--with-png \
--with-samplerate \
--without-ladspa
CONFIGURE_ENV= \
CPPFLAGS="-I${LOCALBASE}/include -I${LOCALBASE}/include/libpng" \
LDFLAGS="-L${WRKBUILD}/src/.libs -L${LOCALBASE}/lib"
post-extract:
@cp ${FILESDIR}/sndio.c ${WRKSRC}/src
AUTO_ENV= AUTOCONF_VERSION=${AUTOCONF_VERSION} \
AUTOMAKE_VERSION=${AUTOMAKE_VERSION}
post-patch:
@echo "Running aclocal-${AUTOMAKE_VERSION} in ${WRKSRC}"
@cd ${WRKSRC}; ${AUTO_ENV} aclocal -I m4
pre-configure:
@echo "Running automake-${AUTOMAKE_VERSION} in ${WRKSRC}"
@cd ${WRKSRC}; ${AUTO_ENV} automake --foreign
do-regress:
@cd ${WRKSRC}/src && ./tests.sh && ./testall.sh

View File

@ -1,5 +1,5 @@
MD5 (sox-14.2.0.tar.gz) = evwOhdFL4BTwjn07fujCTg==
RMD160 (sox-14.2.0.tar.gz) = fHai21xYOPw9n4tUAuR9VI/QlNU=
SHA1 (sox-14.2.0.tar.gz) = G2Dlr0P0SlEkf7l48kI/Defic2M=
SHA256 (sox-14.2.0.tar.gz) = jRuOszpyoYE2lHXJ2l/cvl9oIOavPYag6E9pOeYancE=
SIZE (sox-14.2.0.tar.gz) = 964800
MD5 (sox-14.3.0.tar.gz) = jjUJgE5iJyc++ECS4aL+pw==
RMD160 (sox-14.3.0.tar.gz) = kwLgDXbJcsSRaXnRR0aPZA4ErKo=
SHA1 (sox-14.3.0.tar.gz) = NLjpkbqFEfqWg+np01b7f0F50Dw=
SHA256 (sox-14.3.0.tar.gz) = mr9BHJSTZtdciEs2goRpC2yMfV+13w3q9ZlTm3BLI5c=
SIZE (sox-14.3.0.tar.gz) = 1007679

View File

@ -1,242 +0,0 @@
/*
* libsndio sound handler
*
* Copyright (c) 2009 Alexandre Ratchov <alex@caoua.org>
*
* 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 <string.h>
#include <sndio.h>
#include "sox_i.h"
struct sndio_priv {
struct sio_hdl *hdl; /* handle to speak to libsndio */
struct sio_par par; /* current device parameters */
#define SNDIO_BUFSZ 0x1000
unsigned char buf[SNDIO_BUFSZ]; /* temp buffer for converions */
};
/*
* convert ``count'' samples from sox encoding to sndio encoding
*/
static void encode(struct sio_par *par,
sox_sample_t *idata, unsigned char *odata, unsigned count)
{
int obnext, osnext, s, osigbit;
unsigned oshift, obps, i;
obps = par->bps;
osigbit = par->sig ? 0 : 1 << (par->bits - 1);
oshift = 32 - (par->msb ? par->bps * 8 : par->bits);
if (par->le) {
obnext = 1;
osnext = 0;
} else {
odata += par->bps - 1;
obnext = -1;
osnext = 2 * par->bps;
}
for (; count > 0; count--) {
s = (*idata++ >> oshift) ^ osigbit;
for (i = obps; i > 0; i--) {
*odata = (unsigned char)s;
s >>= 8;
odata += obnext;
}
odata += osnext;
}
}
/*
* convert ``count'' samples from sndio encoding to sox encoding
*/
static void decode(struct sio_par *par,
unsigned char *idata, sox_sample_t *odata, unsigned count)
{
unsigned ishift, ibps, i;
int s = 0xdeadbeef, ibnext, isnext, isigbit;
ibps = par->bps;
isigbit = par->sig ? 0 : 1 << (par->bits - 1);
ishift = 32 - (par->msb ? par->bps * 8 : par->bits);
if (par->le) {
idata += par->bps - 1;
ibnext = -1;
isnext = 2 * par->bps;
} else {
ibnext = 1;
isnext = 0;
}
for (; count > 0; count--) {
for (i = ibps; i > 0; i--) {
s <<= 8;
s |= *idata;
idata += ibnext;
}
idata += isnext;
*odata++ = (s ^ isigbit) << ishift;
}
}
static int startany(struct sox_format *ft, unsigned mode)
{
struct sndio_priv *p = (struct sndio_priv *)ft->priv;
struct sio_par reqpar;
char *device;
device = ft->filename;
if (strcmp("default", device) == 0)
device = NULL;
p->hdl = sio_open(device, mode, 0);
if (p->hdl == NULL)
return SOX_EOF;
/*
* set specified parameters, leaving others to the defaults
*/
sio_initpar(&reqpar);
if (ft->signal.rate > 0)
reqpar.rate = ft->signal.rate;
if (ft->signal.channels > 0) {
if (mode == SIO_PLAY)
reqpar.pchan = ft->signal.channels;
else
reqpar.rchan = ft->signal.channels;
}
if (ft->signal.precision > 0)
reqpar.bits = ft->signal.precision;
switch (ft->encoding.encoding) {
case SOX_ENCODING_SIGN2:
reqpar.sig = 1;
break;
case SOX_ENCODING_UNSIGNED:
reqpar.sig = 0;
break;
default:
break; /* use device default */
}
if (ft->encoding.bits_per_sample > 0)
reqpar.bits = ft->encoding.bits_per_sample;
if (ft->encoding.reverse_bytes != SOX_OPTION_DEFAULT) {
reqpar.le = SIO_LE_NATIVE;
if (ft->encoding.reverse_bytes)
reqpar.le = !reqpar.le;
}
if (!sio_setpar(p->hdl, &reqpar) ||
!sio_getpar(p->hdl, &p->par))
goto failed;
ft->signal.channels = (mode == SIO_PLAY) ? p->par.pchan : p->par.rchan;
ft->signal.precision = p->par.bits;
ft->signal.rate = p->par.rate;
ft->encoding.encoding = p->par.sig ? SOX_ENCODING_SIGN2 : SOX_ENCODING_UNSIGNED;
ft->encoding.bits_per_sample = p->par.bps * 8;
ft->encoding.reverse_bytes = SIO_LE_NATIVE ? !p->par.le : p->par.le;
ft->encoding.reverse_nibbles = SOX_OPTION_NO;
ft->encoding.reverse_bits = SOX_OPTION_NO;
if (!sio_start(p->hdl))
goto failed;
return SOX_SUCCESS;
failed:
sio_close(p->hdl);
return SOX_EOF;
}
static int stopany(struct sox_format *ft)
{
sio_close(((struct sndio_priv *)ft->priv)->hdl);
return SOX_SUCCESS;
}
static int startread(struct sox_format *ft)
{
return startany(ft, SIO_REC);
}
static int startwrite(struct sox_format *ft)
{
return startany(ft, SIO_PLAY);
}
static size_t readsamples(sox_format_t *ft, sox_sample_t *buf, size_t len)
{
struct sndio_priv *p = (struct sndio_priv *)ft->priv;
unsigned char partial[4];
unsigned cpb, cc, pc;
size_t todo, n;
pc = 0;
todo = len * p->par.bps;
cpb = SNDIO_BUFSZ - (SNDIO_BUFSZ % p->par.bps);
while (todo > 0) {
memcpy(p->buf, partial, pc);
cc = cpb - pc;
if (cc > todo)
cc = todo;
n = sio_read(p->hdl, p->buf + pc, cc);
if (n == 0 && sio_eof(p->hdl))
break;
n += pc;
pc = n % p->par.bps;
n -= pc;
memcpy(partial, p->buf + n, pc);
decode(&p->par, p->buf, buf, n / p->par.bps);
buf += n / p->par.bps;
todo -= n;
}
return len - todo / p->par.bps;
}
static size_t writesamples(sox_format_t *ft, const sox_sample_t *buf, size_t len)
{
struct sndio_priv *p = (struct sndio_priv *)ft->priv;
unsigned sc, spb;
size_t n, todo;
todo = len;
spb = SNDIO_BUFSZ / p->par.bps;
while (todo > 0) {
sc = spb;
if (sc > todo)
sc = todo;
encode(&p->par, buf, p->buf, sc);
n = sio_write(p->hdl, p->buf, sc * p->par.bps);
if (n == 0 && sio_eof(p->hdl))
break;
n /= p->par.bps;
todo -= n;
buf += n;
}
return len - todo;
}
SOX_FORMAT_HANDLER(sndio)
{
static char const * const names[] = {"sndio", NULL};
static unsigned const write_encodings[] = {
SOX_ENCODING_SIGN2, 32, 24, 16, 8, 0,
SOX_ENCODING_UNSIGNED, 32, 24, 16, 8, 0,
0
};
static sox_format_handler_t const handler = {
SOX_LIB_VERSION_CODE,
"libsndio device driver",
names,
SOX_FILE_DEVICE | SOX_FILE_NOSTDIO,
startread, readsamples, stopany,
startwrite, writesamples, stopany,
NULL, write_encodings, NULL,
sizeof(struct sndio_priv)
};
return &handler;
}

View File

@ -1,35 +0,0 @@
$OpenBSD: patch-configure_ac,v 1.1 2009/01/16 16:42:56 ratchov Exp $
--- configure.ac.orig Fri Nov 7 18:54:28 2008
+++ configure.ac Thu Jan 8 22:08:14 2009
@@ -225,6 +225,23 @@ fi
AM_CONDITIONAL(HAVE_OSS, test x$enable_oss = xyes)
AC_SUBST(OSS_LIBS)
+dnl Check for sndio
+AC_MSG_CHECKING([whether to try building sndio sound driver])
+AC_ARG_ENABLE(sndio,
+ AC_HELP_STRING([--disable-sndio], [Don't build sndio sound driver.]),,enable_sndio=yes)
+AC_MSG_RESULT($enable_sndio)
+if test "$enable_sndio" = "yes"; then
+ AC_CHECK_HEADERS(sndio.h,
+ [AC_CHECK_LIB(sndio, sio_open, SNDIO_LIBS="$SNDIO_LIBS -lsndio")],
+ enable_sndio=no)
+fi
+if test "$enable_sndio" = yes; then
+ AC_DEFINE(HAVE_SNDIO, 1, [Define to 1 if you have sndio.])
+ audio_driver_found=yes
+fi
+AM_CONDITIONAL(HAVE_SNDIO, test x$enable_sndio = xyes)
+AC_SUBST(SNDIO_LIBS)
+
dnl Check for Sun audio
AC_MSG_CHECKING([whether to try building Sun audio driver])
AC_ARG_ENABLE(sun-audio,
@@ -607,6 +624,7 @@ echo "External module support........... $using_libltd
echo "ALSA driver....................... $enable_alsa"
echo "libao driver...................... $enable_libao"
echo "OSS driver........................ $enable_oss"
+echo "sndio driver...................... $enable_sndio"
echo "SUN audio driver.................. $enable_sun_audio"
echo "CoreAudio driver.................. $enable_coreaudio"
echo "symlinks enabled.................. $enable_symlinks"

View File

@ -1,27 +0,0 @@
$OpenBSD: patch-src_Makefile_am,v 1.1 2009/01/16 16:42:56 ratchov Exp $
--- src/Makefile.am.orig Thu Jan 8 21:57:05 2009
+++ src/Makefile.am Thu Jan 8 21:59:19 2009
@@ -239,6 +239,11 @@ libsox_fmt_oss_la_SOURCES = oss.c
libsox_fmt_oss_la_LIBADD = libsox.la @OSS_LIBS@
pkglib_LTLIBRARIES += libsox_fmt_oss.la
endif
+if HAVE_SNDIO
+libsox_fmt_sndio_la_SOURCES = sndio.c
+libsox_fmt_sndio_la_LIBADD = libsox.la @SNDIO_LIBS@
+pkglib_LTLIBRARIES += libsox_fmt_sndio.la
+endif
if HAVE_SUN_AUDIO
libsox_fmt_sunau_la_SOURCES = sunaudio.c
libsox_fmt_sunau_la_LIBADD = libsox.la
@@ -360,6 +365,11 @@ if HAVE_OSS
libsox_la_SOURCES += oss.c
libsox_la_LIBADD += @OSS_LIBS@
sox_LDADD += @OSS_LIBS@
+endif
+if HAVE_SNDIO
+ libsox_la_SOURCES += sndio.c
+ libsox_la_LIBADD += @SNDIO_LIBS@
+ sox_LDADD += @SNDIO_LIBS@
endif
if HAVE_SUN_AUDIO
libsox_la_SOURCES += sunaudio.c

View File

@ -0,0 +1,12 @@
$OpenBSD: patch-src_formats_c,v 1.1 2009/11/06 00:04:37 sthen Exp $
--- src/formats.c.orig Mon Nov 2 17:11:55 2009
+++ src/formats.c Mon Nov 2 17:11:34 2009
@@ -403,7 +403,7 @@ static void UNUSED rewind_pipe(FILE * fp)
/* To fix this #error, either simply remove the #error line and live without
* file-type detection with pipes, or add support for your compiler in the
* lines above. Test with cat monkey.au | ./sox --info - */
- #error FIX NEEDED HERE
+ /* #error FIX NEEDED HERE */
#define NO_REWIND_PIPE
(void)fp;
#endif

View File

@ -1,12 +0,0 @@
--- src/formats.h.old Sun Jan 11 19:41:19 2009
+++ src/formats.h Sun Jan 11 19:41:56 2009
@@ -87,6 +87,9 @@
#if defined(HAVE_SYS_SOUNDCARD_H) || defined(HAVE_MACHINE_SOUNDCARD_H)
FORMAT(oss)
#endif
+#if defined HAVE_SNDIO
+ FORMAT(sndio)
+#endif
#if defined HAVE_SNDFILE
FORMAT(sndfile)
#if defined HAVE_SNDFILE_1_0_12

View File

@ -1,19 +0,0 @@
--- src/sox.c.orig Mon Jan 12 11:36:30 2009
+++ src/sox.c Mon Jan 12 11:37:54 2009
@@ -2142,7 +2142,7 @@ static char const * device_name(char const * const typ
return NULL;
if (!strcmp(type, "sunau")) name = "/dev/audio";
else if (!strcmp(type, "oss" ) || !strcmp(type, "ossdsp")) name = "/dev/dsp";
- else if (!strcmp(type, "alsa") || !strcmp(type, "ao") || !strcmp(type, "coreaudio")) name = "default";
+ else if (!strcmp(type, "alsa") || !strcmp(type, "ao") || !strcmp(type, "coreaudio") || !strcmp(type, "sndio")) name = "default";
return name? from_env? from_env : name : NULL;
}
@@ -2154,6 +2154,7 @@ static char const * set_default_device(file_t * f)
if (!f->filetype && sox_find_format("alsa", sox_false)) f->filetype = "alsa";
if (!f->filetype && sox_find_format("oss" , sox_false)) f->filetype = "oss";
if (!f->filetype && sox_find_format("sunau",sox_false)) f->filetype = "sunau";
+ if (!f->filetype && sox_find_format("sndio", sox_false)) f->filetype = "sndio";
if (!f->filetype && sox_find_format("ao" , sox_false) && file_count) /*!rec*/
f->filetype = "ao";