- update to soundtracker-0.6.8
- use sndio for audio, kill esd flavor - various cleanup ok MAINTAINER
This commit is contained in:
parent
9feaa9c0be
commit
b61b5670a7
@ -1,67 +1,50 @@
|
|||||||
# $OpenBSD: Makefile,v 1.18 2009/08/10 06:29:52 kili Exp $
|
# $OpenBSD: Makefile,v 1.19 2009/12/19 22:59:27 jakemsr Exp $
|
||||||
# Uses pthreads
|
|
||||||
|
|
||||||
COMMENT= Music tracking tool for X11
|
COMMENT= music tracking tool for X11
|
||||||
|
|
||||||
VERSION= 0.6.6
|
DISTNAME= soundtracker-0.6.8
|
||||||
DISTNAME= soundtracker-${VERSION}
|
|
||||||
PKGNAME= ${DISTNAME}p4
|
|
||||||
CATEGORIES= audio
|
CATEGORIES= audio
|
||||||
HOMEPAGE= http://www.soundtracker.org/
|
HOMEPAGE= http://www.soundtracker.org/
|
||||||
|
|
||||||
MAINTAINER= Wilbern Cobb <wcobb@openbsd.org>
|
MAINTAINER= Wilbern Cobb <wcobb@openbsd.org>
|
||||||
|
|
||||||
# GPL
|
# GPLv2
|
||||||
PERMIT_PACKAGE_CDROM= Yes
|
PERMIT_PACKAGE_CDROM= Yes
|
||||||
PERMIT_PACKAGE_FTP= Yes
|
PERMIT_PACKAGE_FTP= Yes
|
||||||
PERMIT_DISTFILES_CDROM= Yes
|
PERMIT_DISTFILES_CDROM= Yes
|
||||||
PERMIT_DISTFILES_FTP= Yes
|
PERMIT_DISTFILES_FTP= Yes
|
||||||
WANTLIB= X11 Xext Xi c glib gmodule m pthread pthread-stubs xcb
|
WANTLIB= X11 Xext Xi c glib gmodule gthread jpeg m png \
|
||||||
|
pthread pthread-stubs sndio tiff xcb z
|
||||||
|
|
||||||
V=v0.6
|
MASTER_SITES= http://www.soundtracker.org/dl/v0.6/
|
||||||
MASTER_SITES= http://www.soundtracker.org/dl/$V/ \
|
|
||||||
http://mirror.csoft.org/soundtracker/
|
|
||||||
|
|
||||||
LIB_DEPENDS= gtk.>=1.2,gdk.>=1.2::x11/gtk+ \
|
LIB_DEPENDS= gtk.>=1.2,gdk.>=1.2::x11/gtk+ \
|
||||||
audiofile::devel/libaudiofile
|
gdk_pixbuf.>=2::graphics/gdk-pixbuf \
|
||||||
|
sndfile::audio/libsndfile
|
||||||
|
|
||||||
MODULES= devel/gettext
|
MODULES= devel/gettext
|
||||||
|
|
||||||
FLAVORS= esd
|
|
||||||
FLAVOR?=
|
|
||||||
|
|
||||||
USE_X11= Yes
|
USE_X11= Yes
|
||||||
AUTOCONF_VERSION= 2.52
|
CONFIGURE_STYLE= gnu
|
||||||
CONFIGURE_STYLE= autoconf
|
CONFIGURE_ARGS= --disable-alsa \
|
||||||
CONFIGURE_ARGS= --with-audiofile-prefix=${LOCALBASE} \
|
|
||||||
--disable-alsa \
|
|
||||||
--disable-sgi \
|
--disable-sgi \
|
||||||
--disable-oss \
|
--disable-oss \
|
||||||
|
--disable-esd \
|
||||||
|
--disable-sun \
|
||||||
|
--disable-sdl \
|
||||||
|
--disable-jack \
|
||||||
--disable-gnome \
|
--disable-gnome \
|
||||||
--disable-splash
|
--disable-splash
|
||||||
CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \
|
CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include -DDRIVER_SNDIO" \
|
||||||
LDFLAGS="-L${LOCALBASE}/lib"
|
LDFLAGS="-L${LOCALBASE}/lib" \
|
||||||
|
LIBS="-lsndio"
|
||||||
.if ${FLAVOR:L:Mesd}
|
|
||||||
LIB_DEPENDS+= esd.>=2::audio/esound
|
|
||||||
WANTLIB += sndio
|
|
||||||
.else
|
|
||||||
CONFIGURE_ARGS+= --disable-esd
|
|
||||||
.endif
|
|
||||||
|
|
||||||
.if ${MACHINE_ARCH} != "i386"
|
|
||||||
CONFIGURE_ARGS+= --disable-assembler
|
|
||||||
.endif
|
|
||||||
|
|
||||||
DOCS= FAQ NEWS README \
|
DOCS= FAQ NEWS README \
|
||||||
doc/xi.txt doc/xm.txt
|
doc/xi.txt doc/xm.txt doc/xp.txt
|
||||||
|
|
||||||
post-configure:
|
|
||||||
cd ${WRKSRC}/po && cp -f Makefile.in Makefile
|
|
||||||
|
|
||||||
post-extract:
|
post-extract:
|
||||||
@ln -s ${FILESDIR}/sun-input.c ${WRKSRC}/app/drivers
|
@ln -s ${FILESDIR}/sndio-input.c ${WRKSRC}/app/drivers
|
||||||
@ln -s ${FILESDIR}/sun-output.c ${WRKSRC}/app/drivers
|
@ln -s ${FILESDIR}/sndio-output.c ${WRKSRC}/app/drivers
|
||||||
|
|
||||||
post-install:
|
post-install:
|
||||||
${INSTALL_DATA_DIR} ${PREFIX}/share/doc/soundtracker
|
${INSTALL_DATA_DIR} ${PREFIX}/share/doc/soundtracker
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
MD5 (soundtracker-0.6.6.tar.gz) = YBSwbJmagqIn5NG6Q64CbA==
|
MD5 (soundtracker-0.6.8.tar.gz) = Hlou9oniFJM+U/aHs6GZuw==
|
||||||
RMD160 (soundtracker-0.6.6.tar.gz) = 4d5HzZ8ISYFMzFSFxsOwf1tGS2s=
|
RMD160 (soundtracker-0.6.8.tar.gz) = uGv4YBPl0pWeGo27GaklXBFraNA=
|
||||||
SHA1 (soundtracker-0.6.6.tar.gz) = sH6wlgMUaZbzhPBg9ZTZxRbJM6w=
|
SHA1 (soundtracker-0.6.8.tar.gz) = JVyHzb4sy3Fdn5egZ35FlLeQlZU=
|
||||||
SHA256 (soundtracker-0.6.6.tar.gz) = gHp5MQgd0U76JzjTc9btmqjPH7SwV9nroBXDIZG434A=
|
SHA256 (soundtracker-0.6.8.tar.gz) = A7LywO26SEV+xheLChDt/jSBJUESk2cVYDoh9jiCL1A=
|
||||||
SIZE (soundtracker-0.6.6.tar.gz) = 673631
|
SIZE (soundtracker-0.6.8.tar.gz) = 1016718
|
||||||
|
218
audio/soundtracker/files/sndio-input.c
Normal file
218
audio/soundtracker/files/sndio-input.c
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009 Jacob Meuser <jakemsr@sdf.lonestar.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 <config.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <poll.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sndio.h>
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#include "driver-in.h"
|
||||||
|
#include "mixer.h"
|
||||||
|
#include "errors.h"
|
||||||
|
|
||||||
|
typedef struct sndio_in_driver {
|
||||||
|
struct sio_hdl *hdl;
|
||||||
|
struct sio_par par;
|
||||||
|
|
||||||
|
pthread_t read_tid;
|
||||||
|
int read_trun;
|
||||||
|
|
||||||
|
void *sndbuf;
|
||||||
|
int bufsize;
|
||||||
|
int mf;
|
||||||
|
|
||||||
|
} sndio_in_driver;
|
||||||
|
|
||||||
|
|
||||||
|
static void *
|
||||||
|
read_thread(void *dp)
|
||||||
|
{
|
||||||
|
sndio_in_driver *d = dp;
|
||||||
|
struct pollfd pfd;
|
||||||
|
int size, ret, off, nfds;
|
||||||
|
|
||||||
|
if (!sio_start(d->hdl)) {
|
||||||
|
error_error("could not start sndio");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (d->read_trun) {
|
||||||
|
nfds = sio_pollfd(d->hdl, &pfd, POLLIN);
|
||||||
|
poll(&pfd, nfds, -1);
|
||||||
|
if (sio_revents(d->hdl, &pfd) & POLLIN) {
|
||||||
|
size = d->par.rchan * d->par.bps * d->bufsize;
|
||||||
|
off = 0;
|
||||||
|
while (size > 0) {
|
||||||
|
ret = sio_read(d->hdl, d->sndbuf + off, size);
|
||||||
|
off += ret;
|
||||||
|
size -= ret;
|
||||||
|
}
|
||||||
|
sample_editor_sampled(d->sndbuf, d->bufsize,
|
||||||
|
d->par.rate, d->mf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
done:
|
||||||
|
pthread_exit(NULL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
sndio_new(void)
|
||||||
|
{
|
||||||
|
sndio_in_driver *d = g_new(sndio_in_driver, 1);
|
||||||
|
|
||||||
|
d->hdl = NULL;
|
||||||
|
d->sndbuf = NULL;
|
||||||
|
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sndio_release(void *dp)
|
||||||
|
{
|
||||||
|
sndio_in_driver *d = dp;
|
||||||
|
|
||||||
|
d->read_trun = 0;
|
||||||
|
pthread_join(d->read_tid, NULL);
|
||||||
|
|
||||||
|
if (d->sndbuf)
|
||||||
|
free(d->sndbuf);
|
||||||
|
d->sndbuf = NULL;
|
||||||
|
|
||||||
|
if (d->hdl)
|
||||||
|
sio_close(d->hdl);
|
||||||
|
d->hdl = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sndio_destroy(void *dp)
|
||||||
|
{
|
||||||
|
/* just in case */
|
||||||
|
sndio_release(dp);
|
||||||
|
|
||||||
|
g_free(dp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
sndio_open(void *dp)
|
||||||
|
{
|
||||||
|
sndio_in_driver *d = dp;
|
||||||
|
char buf[256];
|
||||||
|
|
||||||
|
sio_initpar(&d->par);
|
||||||
|
|
||||||
|
d->hdl = sio_open(NULL, SIO_REC, 0);
|
||||||
|
if (d->hdl == NULL) {
|
||||||
|
snprintf(buf, sizeof(buf), "can't open sndio rec device");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->par.rate = 44100;
|
||||||
|
d->par.bits = 16;
|
||||||
|
d->par.rchan = 1;
|
||||||
|
d->par.appbufsz = 2048;
|
||||||
|
|
||||||
|
if (!sio_setpar(d->hdl, &d->par) || !sio_getpar(d->hdl, &d->par)) {
|
||||||
|
snprintf(buf, sizeof(buf), "can't configure sndio device");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->par.bits == 16) {
|
||||||
|
if (d->par.sig) {
|
||||||
|
if (d->par.le)
|
||||||
|
d->mf = ST_MIXER_FORMAT_S16_LE;
|
||||||
|
else
|
||||||
|
d->mf = ST_MIXER_FORMAT_S16_BE;
|
||||||
|
} else {
|
||||||
|
if (d->par.le)
|
||||||
|
d->mf = ST_MIXER_FORMAT_U16_LE;
|
||||||
|
else
|
||||||
|
d->mf = ST_MIXER_FORMAT_U16_BE;
|
||||||
|
}
|
||||||
|
} else if (d->par.bits == 8) {
|
||||||
|
if (d->par.sig)
|
||||||
|
d->mf = ST_MIXER_FORMAT_S8;
|
||||||
|
else
|
||||||
|
d->mf = ST_MIXER_FORMAT_U8;
|
||||||
|
} else {
|
||||||
|
snprintf(buf, sizeof(buf), "invalid sndio bit-depth");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->par.rchan == 2) {
|
||||||
|
d->mf |= ST_MIXER_FORMAT_STEREO;
|
||||||
|
} else if (d->par.rchan != 1) {
|
||||||
|
snprintf(buf, sizeof(buf), "invalid sndio channel count");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->bufsize = d->par.round;
|
||||||
|
|
||||||
|
d->sndbuf = calloc(1, d->bufsize * d->par.bps * d->par.rchan);
|
||||||
|
|
||||||
|
d->read_trun = 1;
|
||||||
|
if (pthread_create(&d->read_tid, NULL, read_thread, d)) {
|
||||||
|
snprintf(buf, sizeof(buf), "couldn't spawn reading thread");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
out:
|
||||||
|
error_error(buf);
|
||||||
|
sndio_release(dp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget *
|
||||||
|
sndio_getwidget(void *dp)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
sndio_loadsettings(void *dp, prefs_node *f)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
sndio_savesettings(void *dp, prefs_node *f)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
st_in_driver driver_in_sndio = {
|
||||||
|
{
|
||||||
|
"Sndio Input",
|
||||||
|
sndio_new,
|
||||||
|
sndio_destroy,
|
||||||
|
sndio_open,
|
||||||
|
sndio_release,
|
||||||
|
|
||||||
|
sndio_getwidget,
|
||||||
|
sndio_loadsettings,
|
||||||
|
sndio_savesettings,
|
||||||
|
}
|
||||||
|
};
|
238
audio/soundtracker/files/sndio-output.c
Normal file
238
audio/soundtracker/files/sndio-output.c
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009 Jacob Meuser <jakemsr@sdf.lonestar.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 <config.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sndio.h>
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#include "driver-out.h"
|
||||||
|
#include "mixer.h"
|
||||||
|
#include "errors.h"
|
||||||
|
|
||||||
|
typedef struct sndio_driver {
|
||||||
|
struct sio_hdl *hdl;
|
||||||
|
struct sio_par par;
|
||||||
|
|
||||||
|
void *sndbuf;
|
||||||
|
int bufsize;
|
||||||
|
int mf;
|
||||||
|
|
||||||
|
long long realpos;
|
||||||
|
|
||||||
|
gpointer polltag;
|
||||||
|
|
||||||
|
} sndio_driver;
|
||||||
|
|
||||||
|
/* XXX */
|
||||||
|
void *
|
||||||
|
sndio_driver_get_hdl(void *dp)
|
||||||
|
{
|
||||||
|
sndio_driver *d = dp;
|
||||||
|
return d->hdl;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
movecb(void *arg, int delta)
|
||||||
|
{
|
||||||
|
sndio_driver *d = arg;
|
||||||
|
d->realpos += delta;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sndio_poll_ready_playing(gpointer data, gint source,
|
||||||
|
GdkInputCondition condition)
|
||||||
|
{
|
||||||
|
sndio_driver *d = data;
|
||||||
|
static int size;
|
||||||
|
|
||||||
|
audio_mix(d->sndbuf, d->bufsize, d->par.rate, d->mf);
|
||||||
|
|
||||||
|
size = d->par.pchan * d->par.bps * d->bufsize;
|
||||||
|
sio_write(d->hdl, d->sndbuf, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
sndio_new(void)
|
||||||
|
{
|
||||||
|
sndio_driver *d = g_new(sndio_driver, 1);
|
||||||
|
|
||||||
|
d->hdl = NULL;
|
||||||
|
d->sndbuf = NULL;
|
||||||
|
d->polltag = NULL;
|
||||||
|
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sndio_release(void *dp)
|
||||||
|
{
|
||||||
|
sndio_driver *d = dp;
|
||||||
|
|
||||||
|
if (d->sndbuf)
|
||||||
|
free(d->sndbuf);
|
||||||
|
d->sndbuf = NULL;
|
||||||
|
|
||||||
|
if (d->polltag != NULL)
|
||||||
|
audio_poll_remove(d->polltag);
|
||||||
|
d->polltag = NULL;
|
||||||
|
|
||||||
|
if (d->hdl)
|
||||||
|
sio_close(d->hdl);
|
||||||
|
d->hdl = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sndio_destroy(void *dp)
|
||||||
|
{
|
||||||
|
/* just in case */
|
||||||
|
sndio_release(dp);
|
||||||
|
|
||||||
|
g_free(dp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
sndio_open(void *dp)
|
||||||
|
{
|
||||||
|
sndio_driver *d = dp;
|
||||||
|
char buf[256];
|
||||||
|
|
||||||
|
sio_initpar(&d->par);
|
||||||
|
|
||||||
|
d->hdl = sio_open(NULL, SIO_PLAY, 0);
|
||||||
|
if (d->hdl == NULL) {
|
||||||
|
snprintf(buf, sizeof(buf), "can't open sndio device");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->par.rate = 44100;
|
||||||
|
d->par.bits = 16;
|
||||||
|
d->par.pchan = 2;
|
||||||
|
d->par.appbufsz = 2048;
|
||||||
|
|
||||||
|
if (!sio_setpar(d->hdl, &d->par) || !sio_getpar(d->hdl, &d->par)) {
|
||||||
|
snprintf(buf, sizeof(buf), "can't configure sndio device");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->par.bits == 16) {
|
||||||
|
if (d->par.sig) {
|
||||||
|
if (d->par.le)
|
||||||
|
d->mf = ST_MIXER_FORMAT_S16_LE;
|
||||||
|
else
|
||||||
|
d->mf = ST_MIXER_FORMAT_S16_BE;
|
||||||
|
} else {
|
||||||
|
if (d->par.le)
|
||||||
|
d->mf = ST_MIXER_FORMAT_U16_LE;
|
||||||
|
else
|
||||||
|
d->mf = ST_MIXER_FORMAT_U16_BE;
|
||||||
|
}
|
||||||
|
} else if (d->par.bits == 8) {
|
||||||
|
if (d->par.sig)
|
||||||
|
d->mf = ST_MIXER_FORMAT_S8;
|
||||||
|
else
|
||||||
|
d->mf = ST_MIXER_FORMAT_U8;
|
||||||
|
} else {
|
||||||
|
snprintf(buf, sizeof(buf), "invalid sndio bit-depth");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->par.pchan == 2) {
|
||||||
|
d->mf |= ST_MIXER_FORMAT_STEREO;
|
||||||
|
} else if (d->par.pchan != 1) {
|
||||||
|
snprintf(buf, sizeof(buf), "invalid sndio channel count");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->bufsize = d->par.round;
|
||||||
|
|
||||||
|
d->sndbuf = calloc(1, d->bufsize * d->par.bps * d->par.pchan);
|
||||||
|
|
||||||
|
sio_onmove(d->hdl, movecb, d);
|
||||||
|
|
||||||
|
if (!sio_start(d->hdl)) {
|
||||||
|
snprintf(buf, sizeof(buf), "could not start sndio");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->polltag = audio_poll_add(-1, GDK_INPUT_WRITE,
|
||||||
|
sndio_poll_ready_playing, d);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
out:
|
||||||
|
error_error(buf);
|
||||||
|
sndio_release(dp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static double
|
||||||
|
sndio_get_play_time(void *dp)
|
||||||
|
{
|
||||||
|
sndio_driver *d = dp;
|
||||||
|
|
||||||
|
/* time buffered */
|
||||||
|
return (float)d->realpos / d->par.rate;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
sndio_get_play_rate(void *dp)
|
||||||
|
{
|
||||||
|
sndio_driver *d = dp;
|
||||||
|
return d->par.rate;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget *
|
||||||
|
sndio_getwidget(void *dp)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
sndio_loadsettings(void *dp, prefs_node *f)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
sndio_savesettings(void *dp, prefs_node *f)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
st_out_driver driver_out_sndio = {
|
||||||
|
{
|
||||||
|
"Sndio Output",
|
||||||
|
sndio_new,
|
||||||
|
sndio_destroy,
|
||||||
|
sndio_open,
|
||||||
|
sndio_release,
|
||||||
|
|
||||||
|
sndio_getwidget,
|
||||||
|
sndio_loadsettings,
|
||||||
|
sndio_savesettings,
|
||||||
|
},
|
||||||
|
|
||||||
|
sndio_get_play_time,
|
||||||
|
sndio_get_play_rate
|
||||||
|
};
|
@ -1,388 +0,0 @@
|
|||||||
/*
|
|
||||||
* The Real SoundTracker - Sun (input) driver.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2001 CubeSoft Communications, Inc.
|
|
||||||
* <http://www.csoft.org>
|
|
||||||
*
|
|
||||||
* This program 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.
|
|
||||||
*
|
|
||||||
* This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
|
|
||||||
#if DRIVER_SUN
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/audioio.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#include "i18n.h"
|
|
||||||
#include "driver-in.h"
|
|
||||||
#include "mixer.h"
|
|
||||||
#include "errors.h"
|
|
||||||
#include "gui-subs.h"
|
|
||||||
|
|
||||||
typedef struct sun_driver {
|
|
||||||
GtkWidget *configwidget;
|
|
||||||
GtkWidget *prefs_devaudio_w;
|
|
||||||
|
|
||||||
int playrate;
|
|
||||||
int stereo;
|
|
||||||
int bits;
|
|
||||||
int bufsize;
|
|
||||||
int numbufs;
|
|
||||||
int mf;
|
|
||||||
|
|
||||||
pthread_mutex_t configmutex;
|
|
||||||
|
|
||||||
int soundfd;
|
|
||||||
void *sndbuf;
|
|
||||||
int polltag;
|
|
||||||
|
|
||||||
audio_info_t info;
|
|
||||||
gchar p_devaudio[128];
|
|
||||||
int p_resolution;
|
|
||||||
int p_channels;
|
|
||||||
int p_mixfreq;
|
|
||||||
int p_bufsize;
|
|
||||||
} sun_driver;
|
|
||||||
|
|
||||||
static void
|
|
||||||
sun_poll_ready_sampling (gpointer data,
|
|
||||||
gint source,
|
|
||||||
GdkInputCondition condition)
|
|
||||||
{
|
|
||||||
sun_driver * const d = data;
|
|
||||||
|
|
||||||
printf("sampling...\n");
|
|
||||||
|
|
||||||
read(d->soundfd, d->sndbuf, d->bufsize);
|
|
||||||
|
|
||||||
sample_editor_sampled(d->sndbuf, d->bufsize, d->playrate, d->mf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
prefs_init_from_structure (sun_driver *d)
|
|
||||||
{
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(d->prefs_devaudio_w), d->p_devaudio);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sun_devaudio_changed (void *a,
|
|
||||||
sun_driver *d)
|
|
||||||
{
|
|
||||||
strncpy(d->p_devaudio, gtk_entry_get_text(GTK_ENTRY(d->prefs_devaudio_w)),
|
|
||||||
127);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sun_make_config_widgets (sun_driver *d)
|
|
||||||
{
|
|
||||||
GtkWidget *thing, *mainbox, *box2;
|
|
||||||
|
|
||||||
d->configwidget = mainbox = gtk_vbox_new(FALSE, 2);
|
|
||||||
|
|
||||||
thing = gtk_label_new(
|
|
||||||
_("These changes won't take effect until you restart sampling."));
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
thing = gtk_hseparator_new();
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
box2 = gtk_hbox_new(FALSE, 4);
|
|
||||||
gtk_widget_show(box2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
thing = gtk_label_new(_("Input device (e.g. '/dev/audio'):"));
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0);
|
|
||||||
add_empty_hbox(box2);
|
|
||||||
thing = gtk_entry_new_with_max_length(126);
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0);
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(thing), d->p_devaudio);
|
|
||||||
gtk_signal_connect_after(GTK_OBJECT(thing), "changed",
|
|
||||||
GTK_SIGNAL_FUNC(sun_devaudio_changed), d);
|
|
||||||
d->prefs_devaudio_w = thing;
|
|
||||||
|
|
||||||
prefs_init_from_structure(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *
|
|
||||||
sun_getwidget (void *dp)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
return d->configwidget;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *
|
|
||||||
sun_new (void)
|
|
||||||
{
|
|
||||||
sun_driver *d = g_new(sun_driver, 1);
|
|
||||||
|
|
||||||
strcpy(d->p_devaudio, "/dev/audio");
|
|
||||||
d->p_mixfreq = 44100;
|
|
||||||
d->p_channels = 1;
|
|
||||||
d->p_resolution = 16;
|
|
||||||
d->p_bufsize = 9;
|
|
||||||
d->soundfd = -1;
|
|
||||||
d->sndbuf = NULL;
|
|
||||||
d->polltag = 0;
|
|
||||||
if (pthread_mutex_init(&d->configmutex, NULL) != 0) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
sun_make_config_widgets(d);
|
|
||||||
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sun_destroy (void *dp)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
gtk_widget_destroy(d->configwidget);
|
|
||||||
pthread_mutex_destroy(&d->configmutex);
|
|
||||||
|
|
||||||
g_free(dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sun_try_format (sun_driver *d, int fmt, int precision)
|
|
||||||
{
|
|
||||||
audio_encoding_t enc;
|
|
||||||
|
|
||||||
for(enc.index = 0; ioctl(d->soundfd, AUDIO_GETENC, &enc) == 0;
|
|
||||||
enc.index++) {
|
|
||||||
if (enc.encoding == fmt && enc.precision == precision) {
|
|
||||||
d->info.record.encoding = enc.encoding;
|
|
||||||
d->info.record.precision = enc.precision;
|
|
||||||
if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) == 0) {
|
|
||||||
return TRUE;
|
|
||||||
} else {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sun_try_channels (sun_driver *d, int nch)
|
|
||||||
{
|
|
||||||
d->info.record.channels = nch;
|
|
||||||
if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sun_release (void *dp)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
free(d->sndbuf);
|
|
||||||
d->sndbuf = NULL;
|
|
||||||
|
|
||||||
if(d->polltag != 0) {
|
|
||||||
gdk_input_remove(d->polltag);
|
|
||||||
d->polltag = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(d->soundfd >= 0) {
|
|
||||||
close(d->soundfd);
|
|
||||||
d->soundfd = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sun_open (void *dp)
|
|
||||||
{
|
|
||||||
char buf[256];
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
int mf, i, fullduplex;
|
|
||||||
|
|
||||||
AUDIO_INITINFO(&d->info);
|
|
||||||
|
|
||||||
d->soundfd = open(d->p_devaudio, O_RDONLY|O_NONBLOCK);
|
|
||||||
if(d->soundfd < 0) {
|
|
||||||
sprintf(buf, _("%s: %s"), d->p_devaudio, strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
fullduplex = 1;
|
|
||||||
if (ioctl(d->soundfd, AUDIO_SETFD, &fullduplex) != 0) {
|
|
||||||
fprintf(stderr, "%s: does not support full-duplex operation\n",
|
|
||||||
d->p_devaudio);
|
|
||||||
fullduplex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
d->info.mode = AUMODE_RECORD;
|
|
||||||
if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) {
|
|
||||||
sprintf(buf, _("%s: Cannot record (%s)"), d->p_devaudio,
|
|
||||||
strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
d->playrate = d->p_mixfreq;
|
|
||||||
d->info.record.sample_rate = d->playrate;
|
|
||||||
if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) {
|
|
||||||
sprintf(buf, _("%s: Cannot handle %dHz (%s)"), d->p_devaudio,
|
|
||||||
d->playrate, strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
d->bits = 0;
|
|
||||||
mf = 0;
|
|
||||||
if(d->p_resolution == 16) {
|
|
||||||
if(sun_try_format(d, AUDIO_ENCODING_SLINEAR_LE, 16)) {
|
|
||||||
d->bits = 16;
|
|
||||||
mf = ST_MIXER_FORMAT_S16_LE;
|
|
||||||
} else if(sun_try_format(d, AUDIO_ENCODING_SLINEAR_BE, 16)) {
|
|
||||||
d->bits = 16;
|
|
||||||
mf = ST_MIXER_FORMAT_S16_BE;
|
|
||||||
} else if(sun_try_format(d, AUDIO_ENCODING_ULINEAR_LE, 16)) {
|
|
||||||
d->bits = 16;
|
|
||||||
mf = ST_MIXER_FORMAT_U16_LE;
|
|
||||||
} else if(sun_try_format(d, AUDIO_ENCODING_ULINEAR_BE, 16)) {
|
|
||||||
d->bits = 16;
|
|
||||||
mf = ST_MIXER_FORMAT_U16_BE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(d->bits != 16) {
|
|
||||||
if(sun_try_format(d, AUDIO_ENCODING_SLINEAR, 8)) {
|
|
||||||
d->bits = 8;
|
|
||||||
mf = ST_MIXER_FORMAT_S8;
|
|
||||||
} else if(sun_try_format(d, AUDIO_ENCODING_PCM8, 8)) {
|
|
||||||
d->bits = 8;
|
|
||||||
mf = ST_MIXER_FORMAT_U8;
|
|
||||||
} else {
|
|
||||||
sprintf(buf, _("%s: Required sound encoding not supported.\n"),
|
|
||||||
d->p_devaudio);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(d->p_channels == 2 && sun_try_channels(d, 2)) {
|
|
||||||
d->stereo = 1;
|
|
||||||
mf |= ST_MIXER_FORMAT_STEREO;
|
|
||||||
} else if(sun_try_channels(d, 1)) {
|
|
||||||
d->stereo = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
d->mf = mf;
|
|
||||||
|
|
||||||
i = 0x00040000 + d->p_bufsize + d->stereo + (d->bits / 8 - 1);
|
|
||||||
d->info.blocksize = 1 << (i & 0xffff);
|
|
||||||
d->info.record.buffer_size = d->info.blocksize;
|
|
||||||
d->info.hiwat = ((unsigned)i >> 16) & 0x7fff;
|
|
||||||
printf("input blocksize %d hiwat %d\n", d->info.blocksize, d->info.hiwat);
|
|
||||||
d->info.hiwat = 1;
|
|
||||||
if (d->info.hiwat == 0) {
|
|
||||||
d->info.hiwat = 65536;
|
|
||||||
}
|
|
||||||
if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) {
|
|
||||||
sprintf(buf, _("%s: Cannot set block size (%s)"), d->p_devaudio,
|
|
||||||
strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ioctl(d->soundfd, AUDIO_GETINFO, &d->info) != 0) {
|
|
||||||
sprintf(buf, _("%s: %s"), d->p_devaudio, strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
d->bufsize = d->info.blocksize;
|
|
||||||
d->numbufs = d->info.hiwat;
|
|
||||||
d->sndbuf = calloc(1, d->bufsize);
|
|
||||||
|
|
||||||
if(d->stereo == 1) {
|
|
||||||
d->bufsize /= 2;
|
|
||||||
}
|
|
||||||
if(d->bits == 16) {
|
|
||||||
d->bufsize /= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("reading...\n");
|
|
||||||
read(d->soundfd, d->sndbuf, d->bufsize);
|
|
||||||
printf("done\n");
|
|
||||||
|
|
||||||
d->polltag = gdk_input_add(d->soundfd, GDK_INPUT_READ,
|
|
||||||
sun_poll_ready_sampling, d);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
out:
|
|
||||||
error_error(buf);
|
|
||||||
sun_release(dp);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sun_loadsettings (void *dp,
|
|
||||||
prefs_node *f)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
prefs_get_string(f, "sun-devaudio", d->p_devaudio);
|
|
||||||
|
|
||||||
prefs_init_from_structure(d);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sun_savesettings (void *dp,
|
|
||||||
prefs_node *f)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
prefs_put_string(f, "sun-devaudio", d->p_devaudio);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
st_in_driver driver_in_sun = {
|
|
||||||
{ "Sun Sampling",
|
|
||||||
|
|
||||||
sun_new,
|
|
||||||
sun_destroy,
|
|
||||||
|
|
||||||
sun_open,
|
|
||||||
sun_release,
|
|
||||||
|
|
||||||
sun_getwidget,
|
|
||||||
sun_loadsettings,
|
|
||||||
sun_savesettings,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* DRIVER_SUN */
|
|
@ -1,576 +0,0 @@
|
|||||||
|
|
||||||
/*
|
|
||||||
* The Real SoundTracker - Sun (output) driver.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2001 CubeSoft Communications, Inc.
|
|
||||||
* <http://www.csoft.org>
|
|
||||||
*
|
|
||||||
* This program 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.
|
|
||||||
*
|
|
||||||
* This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
|
|
||||||
#if DRIVER_SUN
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/audioio.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#include "i18n.h"
|
|
||||||
#include "driver-out.h"
|
|
||||||
#include "mixer.h"
|
|
||||||
#include "errors.h"
|
|
||||||
#include "gui-subs.h"
|
|
||||||
#include "preferences.h"
|
|
||||||
|
|
||||||
typedef struct sun_driver {
|
|
||||||
GtkWidget *configwidget;
|
|
||||||
GtkWidget *prefs_devaudio_w;
|
|
||||||
GtkWidget *prefs_resolution_w[2];
|
|
||||||
GtkWidget *prefs_channels_w[2];
|
|
||||||
GtkWidget *prefs_mixfreq_w[4];
|
|
||||||
GtkWidget *bufsizespin_w, *bufsizelabel_w, *estimatelabel_w;
|
|
||||||
|
|
||||||
int playrate;
|
|
||||||
int stereo;
|
|
||||||
int bits;
|
|
||||||
int fragsize;
|
|
||||||
int numfrags;
|
|
||||||
int mf;
|
|
||||||
gboolean realtimecaps;
|
|
||||||
|
|
||||||
pthread_mutex_t configmutex;
|
|
||||||
|
|
||||||
int soundfd;
|
|
||||||
void *sndbuf;
|
|
||||||
gpointer polltag;
|
|
||||||
int firstpoll;
|
|
||||||
|
|
||||||
gchar p_devaudio[128];
|
|
||||||
int p_resolution;
|
|
||||||
int p_channels;
|
|
||||||
int p_mixfreq;
|
|
||||||
int p_fragsize;
|
|
||||||
|
|
||||||
double outtime;
|
|
||||||
double playtime;
|
|
||||||
|
|
||||||
audio_info_t info;
|
|
||||||
} sun_driver;
|
|
||||||
|
|
||||||
static const int mixfreqs[] = { 8000, 16000, 22050, 44100, -1 };
|
|
||||||
|
|
||||||
static void
|
|
||||||
sun_poll_ready_playing (gpointer data,
|
|
||||||
gint source,
|
|
||||||
GdkInputCondition condition)
|
|
||||||
{
|
|
||||||
sun_driver * const d = data;
|
|
||||||
static int size;
|
|
||||||
static struct timeval tv;
|
|
||||||
|
|
||||||
if(!d->firstpoll) {
|
|
||||||
size = (d->stereo + 1) * (d->bits / 8) * d->fragsize;
|
|
||||||
write(d->soundfd, d->sndbuf, size);
|
|
||||||
|
|
||||||
if(!d->realtimecaps) {
|
|
||||||
gettimeofday(&tv, NULL);
|
|
||||||
d->outtime = tv.tv_sec + tv.tv_usec / 1e6;
|
|
||||||
d->playtime += (double) d->fragsize / d->playrate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
d->firstpoll = FALSE;
|
|
||||||
|
|
||||||
audio_mix(d->sndbuf, d->fragsize, d->playrate, d->mf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
prefs_init_from_structure (sun_driver *d)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
gtk_toggle_button_set_state(
|
|
||||||
GTK_TOGGLE_BUTTON(d->prefs_resolution_w[d->p_resolution / 8 - 1]),
|
|
||||||
TRUE);
|
|
||||||
gtk_toggle_button_set_state(
|
|
||||||
GTK_TOGGLE_BUTTON(d->prefs_channels_w[d->p_channels - 1]),
|
|
||||||
TRUE);
|
|
||||||
|
|
||||||
for(i = 0; mixfreqs[i] != -1; i++) {
|
|
||||||
if(d->p_mixfreq == mixfreqs[i])
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(mixfreqs[i] == -1) {
|
|
||||||
i = 3;
|
|
||||||
}
|
|
||||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_mixfreq_w[i]), TRUE);
|
|
||||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(d->bufsizespin_w), d->p_fragsize);
|
|
||||||
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(d->prefs_devaudio_w), d->p_devaudio);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
prefs_update_estimate (sun_driver *d)
|
|
||||||
{
|
|
||||||
char buf[64];
|
|
||||||
|
|
||||||
sprintf(buf, _("Estimated audio delay: %f milliseconds"),
|
|
||||||
(double)(1000 * (1 << d->p_fragsize)) / d->p_mixfreq);
|
|
||||||
gtk_label_set_text(GTK_LABEL(d->estimatelabel_w), buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
prefs_resolution_changed (void *a,
|
|
||||||
sun_driver *d)
|
|
||||||
{
|
|
||||||
d->p_resolution = (find_current_toggle(d->prefs_resolution_w, 2) + 1) * 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
prefs_channels_changed (void *a,
|
|
||||||
sun_driver *d)
|
|
||||||
{
|
|
||||||
d->p_channels = find_current_toggle(d->prefs_channels_w, 2) + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
prefs_mixfreq_changed (void *a,
|
|
||||||
sun_driver *d)
|
|
||||||
{
|
|
||||||
d->p_mixfreq = mixfreqs[find_current_toggle(d->prefs_mixfreq_w, 4)];
|
|
||||||
prefs_update_estimate(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
prefs_fragsize_changed (GtkSpinButton *w,
|
|
||||||
sun_driver *d)
|
|
||||||
{
|
|
||||||
char buf[30];
|
|
||||||
|
|
||||||
d->p_fragsize = gtk_spin_button_get_value_as_int(w);
|
|
||||||
|
|
||||||
sprintf(buf, _("(%d samples)"), 1 << d->p_fragsize);
|
|
||||||
gtk_label_set_text(GTK_LABEL(d->bufsizelabel_w), buf);
|
|
||||||
prefs_update_estimate(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sun_devaudio_changed (void *a,
|
|
||||||
sun_driver *d)
|
|
||||||
{
|
|
||||||
strncpy(d->p_devaudio, gtk_entry_get_text(GTK_ENTRY(d->prefs_devaudio_w)),
|
|
||||||
127);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sun_make_config_widgets (sun_driver *d)
|
|
||||||
{
|
|
||||||
GtkWidget *thing, *mainbox, *box2, *box3;
|
|
||||||
static const char *resolutionlabels[] = { "8 bits", "16 bits", NULL };
|
|
||||||
static const char *channelslabels[] = { "Mono", "Stereo", NULL };
|
|
||||||
static const char *mixfreqlabels[] = { "8000", "16000", "22050", "44100",
|
|
||||||
NULL };
|
|
||||||
|
|
||||||
d->configwidget = mainbox = gtk_vbox_new(FALSE, 2);
|
|
||||||
|
|
||||||
thing = gtk_label_new(
|
|
||||||
_("These changes won't take effect until you restart playing."));
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
thing = gtk_hseparator_new();
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
box2 = gtk_hbox_new(FALSE, 4);
|
|
||||||
gtk_widget_show(box2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
thing = gtk_label_new(_("Output device (e.g. '/dev/audio'):"));
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0);
|
|
||||||
add_empty_hbox(box2);
|
|
||||||
thing = gtk_entry_new_with_max_length(126);
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0);
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(thing), d->p_devaudio);
|
|
||||||
gtk_signal_connect_after(GTK_OBJECT(thing), "changed",
|
|
||||||
GTK_SIGNAL_FUNC(sun_devaudio_changed), d);
|
|
||||||
d->prefs_devaudio_w = thing;
|
|
||||||
|
|
||||||
box2 = gtk_hbox_new(FALSE, 4);
|
|
||||||
gtk_widget_show(box2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
thing = gtk_label_new(_("Resolution:"));
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0);
|
|
||||||
add_empty_hbox(box2);
|
|
||||||
make_radio_group_full(resolutionlabels, box2, d->prefs_resolution_w,
|
|
||||||
FALSE, TRUE, (void(*)())prefs_resolution_changed, d);
|
|
||||||
|
|
||||||
box2 = gtk_hbox_new(FALSE, 4);
|
|
||||||
gtk_widget_show(box2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
thing = gtk_label_new(_("Channels:"));
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0);
|
|
||||||
add_empty_hbox(box2);
|
|
||||||
make_radio_group_full(channelslabels, box2, d->prefs_channels_w,
|
|
||||||
FALSE, TRUE, (void(*)())prefs_channels_changed, d);
|
|
||||||
|
|
||||||
box2 = gtk_hbox_new(FALSE, 4);
|
|
||||||
gtk_widget_show(box2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
thing = gtk_label_new(_("Frequency [Hz]:"));
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0);
|
|
||||||
add_empty_hbox(box2);
|
|
||||||
make_radio_group_full(mixfreqlabels, box2, d->prefs_mixfreq_w,
|
|
||||||
FALSE, TRUE, (void(*)())prefs_mixfreq_changed, d);
|
|
||||||
|
|
||||||
box2 = gtk_hbox_new(FALSE, 4);
|
|
||||||
gtk_widget_show(box2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
thing = gtk_label_new(_("Buffer Size:"));
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0);
|
|
||||||
add_empty_hbox(box2);
|
|
||||||
|
|
||||||
box3 = gtk_vbox_new(FALSE, 2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0);
|
|
||||||
gtk_widget_show(box3);
|
|
||||||
|
|
||||||
d->bufsizespin_w = thing = gtk_spin_button_new(GTK_ADJUSTMENT(
|
|
||||||
gtk_adjustment_new(5.0, 5.0, 15.0, 1.0, 1.0, 0.0)), 0, 0);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0);
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_signal_connect (GTK_OBJECT(thing), "changed",
|
|
||||||
GTK_SIGNAL_FUNC(prefs_fragsize_changed), d);
|
|
||||||
|
|
||||||
d->bufsizelabel_w = thing = gtk_label_new("");
|
|
||||||
gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0);
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
|
|
||||||
box2 = gtk_hbox_new(FALSE, 4);
|
|
||||||
gtk_widget_show(box2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
add_empty_hbox(box2);
|
|
||||||
d->estimatelabel_w = thing = gtk_label_new("");
|
|
||||||
gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0);
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
add_empty_hbox(box2);
|
|
||||||
|
|
||||||
prefs_init_from_structure(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *
|
|
||||||
sun_getwidget (void *dp)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
return d->configwidget;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *
|
|
||||||
sun_new (void)
|
|
||||||
{
|
|
||||||
sun_driver *d = g_new(sun_driver, 1);
|
|
||||||
|
|
||||||
strcpy(d->p_devaudio, "/dev/audio");
|
|
||||||
d->p_mixfreq = 44100;
|
|
||||||
d->p_channels = 2;
|
|
||||||
d->p_resolution = 16;
|
|
||||||
d->p_fragsize = 11; // 2048;
|
|
||||||
d->soundfd = -1;
|
|
||||||
d->sndbuf = NULL;
|
|
||||||
d->polltag = NULL;
|
|
||||||
if (pthread_mutex_init(&d->configmutex, NULL) != 0) {
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
sun_make_config_widgets(d);
|
|
||||||
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sun_destroy (void *dp)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
gtk_widget_destroy(d->configwidget);
|
|
||||||
pthread_mutex_destroy(&d->configmutex);
|
|
||||||
|
|
||||||
g_free(dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sun_try_format (sun_driver *d, int fmt, int precision)
|
|
||||||
{
|
|
||||||
audio_encoding_t enc;
|
|
||||||
|
|
||||||
for(enc.index = 0; ioctl(d->soundfd, AUDIO_GETENC, &enc) == 0;
|
|
||||||
enc.index++) {
|
|
||||||
if (enc.encoding == fmt && enc.precision == precision) {
|
|
||||||
d->info.play.encoding = enc.encoding;
|
|
||||||
d->info.play.precision = enc.precision;
|
|
||||||
if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) == 0) {
|
|
||||||
return TRUE;
|
|
||||||
} else {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sun_try_channels (sun_driver *d, int nch)
|
|
||||||
{
|
|
||||||
d->info.play.channels = nch;
|
|
||||||
if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sun_release (void *dp)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
free(d->sndbuf);
|
|
||||||
d->sndbuf = NULL;
|
|
||||||
|
|
||||||
audio_poll_remove(d->polltag);
|
|
||||||
d->polltag = NULL;
|
|
||||||
|
|
||||||
if(d->soundfd >= 0) {
|
|
||||||
ioctl(d->soundfd, AUDIO_FLUSH, NULL);
|
|
||||||
close(d->soundfd);
|
|
||||||
d->soundfd = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sun_open (void *dp)
|
|
||||||
{
|
|
||||||
char buf[256];
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
int mf = 0, i;
|
|
||||||
|
|
||||||
AUDIO_INITINFO(&d->info);
|
|
||||||
|
|
||||||
d->soundfd = open(d->p_devaudio, O_WRONLY);
|
|
||||||
if(d->soundfd < 0) {
|
|
||||||
sprintf(buf, _("%s: %s"), d->p_devaudio, strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
d->info.mode = AUMODE_PLAY;
|
|
||||||
if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) {
|
|
||||||
sprintf(buf, _("%s: Cannot play (%s)"), d->p_devaudio, strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
d->playrate = d->p_mixfreq;
|
|
||||||
d->info.play.sample_rate = d->playrate;
|
|
||||||
if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) {
|
|
||||||
sprintf(buf, _("%s: Cannot handle %dHz (%s)"), d->p_devaudio,
|
|
||||||
d->playrate, strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
d->bits = 0;
|
|
||||||
if(d->p_resolution == 16) {
|
|
||||||
if(sun_try_format(d, AUDIO_ENCODING_SLINEAR_LE, 16)) {
|
|
||||||
d->bits = 16;
|
|
||||||
mf = ST_MIXER_FORMAT_S16_LE;
|
|
||||||
} else if(sun_try_format(d, AUDIO_ENCODING_SLINEAR_BE, 16)) {
|
|
||||||
d->bits = 16;
|
|
||||||
mf = ST_MIXER_FORMAT_S16_BE;
|
|
||||||
} else if(sun_try_format(d, AUDIO_ENCODING_ULINEAR_LE, 16)) {
|
|
||||||
d->bits = 16;
|
|
||||||
mf = ST_MIXER_FORMAT_U16_LE;
|
|
||||||
} else if(sun_try_format(d, AUDIO_ENCODING_ULINEAR_BE, 16)) {
|
|
||||||
d->bits = 16;
|
|
||||||
mf = ST_MIXER_FORMAT_U16_BE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(d->bits != 16) {
|
|
||||||
if(sun_try_format(d, AUDIO_ENCODING_SLINEAR, 8)) {
|
|
||||||
d->bits = 8;
|
|
||||||
mf = ST_MIXER_FORMAT_S8;
|
|
||||||
} else if(sun_try_format(d, AUDIO_ENCODING_PCM8, 8)) {
|
|
||||||
d->bits = 8;
|
|
||||||
mf = ST_MIXER_FORMAT_U8;
|
|
||||||
} else {
|
|
||||||
sprintf(buf, _("%s: Required sound encoding not supported.\n"),
|
|
||||||
d->p_devaudio);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(d->p_channels == 2 && sun_try_channels(d, 2)) {
|
|
||||||
d->stereo = 1;
|
|
||||||
mf |= ST_MIXER_FORMAT_STEREO;
|
|
||||||
} else if(sun_try_channels(d, 1)) {
|
|
||||||
d->stereo = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
d->mf = mf;
|
|
||||||
|
|
||||||
i = 0x00020000 + d->p_fragsize + d->stereo + (d->bits / 8 - 1);
|
|
||||||
d->info.blocksize = 1 << (i & 0xffff);
|
|
||||||
d->info.hiwat = ((unsigned)i >> 16) & 0x7fff;
|
|
||||||
if (d->info.hiwat == 0) {
|
|
||||||
d->info.hiwat = 65536;
|
|
||||||
}
|
|
||||||
if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) {
|
|
||||||
sprintf(buf, _("%s: Cannot set block size (%s)"), d->p_devaudio,
|
|
||||||
strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ioctl(d->soundfd, AUDIO_GETINFO, &d->info) != 0) {
|
|
||||||
sprintf(buf, _("%s: %s"), d->p_devaudio, strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
d->fragsize = d->info.blocksize;
|
|
||||||
d->numfrags = d->info.hiwat;
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (ioctl(d->soundfd, AUDIO_GETPROPS, &i) == 0) {
|
|
||||||
/* XXX use only if we are recording. */
|
|
||||||
d->realtimecaps = i & AUDIO_PROP_FULLDUPLEX;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
d->sndbuf = calloc(1, d->fragsize);
|
|
||||||
|
|
||||||
if(d->stereo == 1) {
|
|
||||||
d->fragsize /= 2;
|
|
||||||
}
|
|
||||||
if(d->bits == 16) {
|
|
||||||
d->fragsize /= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
d->polltag = audio_poll_add(d->soundfd, GDK_INPUT_WRITE,
|
|
||||||
sun_poll_ready_playing, d);
|
|
||||||
d->firstpoll = TRUE;
|
|
||||||
d->playtime = 0;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
out:
|
|
||||||
error_error(buf);
|
|
||||||
sun_release(dp);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static double
|
|
||||||
sun_get_play_time (void *dp)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
if(d->realtimecaps) {
|
|
||||||
static audio_offset_t ooffs;
|
|
||||||
|
|
||||||
ioctl(d->soundfd, AUDIO_GETOOFFS, &ooffs);
|
|
||||||
|
|
||||||
return (double)ooffs.samples /
|
|
||||||
(d->stereo + 1) / (d->bits / 8) / d->playrate;
|
|
||||||
} else {
|
|
||||||
struct timeval tv;
|
|
||||||
double curtime;
|
|
||||||
|
|
||||||
gettimeofday(&tv, NULL);
|
|
||||||
curtime = tv.tv_sec + tv.tv_usec / 1e6;
|
|
||||||
|
|
||||||
return d->playtime + curtime - d->outtime -
|
|
||||||
d->numfrags * ((double) d->fragsize / d->playrate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sun_loadsettings (void *dp,
|
|
||||||
prefs_node *f)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
prefs_get_string(f, "sun-devaudio", d->p_devaudio);
|
|
||||||
prefs_get_int(f, "sun-resolution", &d->p_resolution);
|
|
||||||
prefs_get_int(f, "sun-channels", &d->p_channels);
|
|
||||||
prefs_get_int(f, "sun-mixfreq", &d->p_mixfreq);
|
|
||||||
prefs_get_int(f, "sun-fragsize", &d->p_fragsize);
|
|
||||||
|
|
||||||
prefs_init_from_structure(d);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sun_savesettings (void *dp,
|
|
||||||
prefs_node *f)
|
|
||||||
{
|
|
||||||
sun_driver * const d = dp;
|
|
||||||
|
|
||||||
prefs_put_string(f, "sun-devaudio", d->p_devaudio);
|
|
||||||
prefs_put_int(f, "sun-resolution", d->p_resolution);
|
|
||||||
prefs_put_int(f, "sun-channels", d->p_channels);
|
|
||||||
prefs_put_int(f, "sun-mixfreq", d->p_mixfreq);
|
|
||||||
prefs_put_int(f, "sun-fragsize", d->p_fragsize);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
st_out_driver driver_out_sun = {
|
|
||||||
{ "Sun Output",
|
|
||||||
|
|
||||||
sun_new,
|
|
||||||
sun_destroy,
|
|
||||||
|
|
||||||
sun_open,
|
|
||||||
sun_release,
|
|
||||||
|
|
||||||
sun_getwidget,
|
|
||||||
sun_loadsettings,
|
|
||||||
sun_savesettings,
|
|
||||||
},
|
|
||||||
|
|
||||||
sun_get_play_time,
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* DRIVER_SUN */
|
|
@ -1,16 +0,0 @@
|
|||||||
$OpenBSD: patch-FAQ,v 1.2 2002/05/30 09:08:28 wcobb Exp $
|
|
||||||
--- FAQ.orig Tue May 21 19:23:27 2002
|
|
||||||
+++ FAQ Tue May 21 19:23:41 2002
|
|
||||||
@@ -2,12 +2,6 @@
|
|
||||||
FAQ
|
|
||||||
====
|
|
||||||
|
|
||||||
-QQQQ: SoundTracker crashes as soon as I start it or as I press a
|
|
||||||
-button in its window, giving weird X errors.
|
|
||||||
-
|
|
||||||
-a: You don't have thread-safe X libraries (you have a libc5
|
|
||||||
-system). Read the INSTALL file.
|
|
||||||
-
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
QQQQ: SoundTracker complains about not being able to open /dev/dsp.
|
|
@ -1,12 +0,0 @@
|
|||||||
$OpenBSD: patch-Makefile_in,v 1.1 2002/05/30 09:08:28 wcobb Exp $
|
|
||||||
--- Makefile.in.orig Mon May 20 13:50:54 2002
|
|
||||||
+++ Makefile.in Tue May 21 19:12:41 2002
|
|
||||||
@@ -97,7 +97,7 @@ VERSION = @VERSION@
|
|
||||||
gnomepath = @gnomepath@
|
|
||||||
sedpath = @sedpath@
|
|
||||||
|
|
||||||
-SUBDIRS = intl po doc app
|
|
||||||
+SUBDIRS = intl po app
|
|
||||||
|
|
||||||
EXTRA_DIST = TODO FAQ ABOUT-NLS soundtracker.spec soundtracker.desktop soundtracker_splash.png
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
|||||||
$OpenBSD: patch-acconfig_h,v 1.2 2002/05/30 09:08:28 wcobb Exp $
|
|
||||||
--- acconfig.h.orig Mon May 20 13:26:33 2002
|
|
||||||
+++ acconfig.h Tue May 21 18:21:30 2002
|
|
||||||
@@ -8,6 +8,7 @@
|
|
||||||
#undef DRIVER_ALSA_050
|
|
||||||
#undef DRIVER_ESD
|
|
||||||
#undef DRIVER_SGI
|
|
||||||
+#undef DRIVER_SUN
|
|
||||||
#undef USE_GNOME
|
|
||||||
#undef NO_AUDIOFILE
|
|
||||||
#undef NO_GASP
|
|
@ -1,12 +0,0 @@
|
|||||||
$OpenBSD: patch-aclocal_m4,v 1.1 2009/06/19 17:50:47 naddy Exp $
|
|
||||||
--- aclocal.m4.orig Fri Jun 19 19:38:46 2009
|
|
||||||
+++ aclocal.m4 Fri Jun 19 19:39:19 2009
|
|
||||||
@@ -224,7 +224,7 @@ return (int) gettext ("")]ifelse([$2], need-ngettext,
|
|
||||||
AC_CACHE_CHECK([for GNU gettext in libintl],
|
|
||||||
gt_cv_func_gnugettext_libintl,
|
|
||||||
[gt_save_LIBS="$LIBS"
|
|
||||||
- LIBS="$LIBS -lintl"
|
|
||||||
+ LIBS="$LIBS -lintl $LIBICONV"
|
|
||||||
AC_TRY_LINK([#include <libintl.h>
|
|
||||||
extern int _nl_msg_cat_cntr;],
|
|
||||||
[bindtextdomain ("", "");
|
|
@ -1,29 +1,34 @@
|
|||||||
$OpenBSD: patch-app_Makefile_in,v 1.3 2008/08/21 14:11:14 jasper Exp $
|
$OpenBSD: patch-app_Makefile_in,v 1.4 2009/12/19 22:59:27 jakemsr Exp $
|
||||||
--- app/Makefile.in.orig Mon May 20 18:51:13 2002
|
--- app/Makefile.in.orig Sat Feb 25 05:37:15 2006
|
||||||
+++ app/Makefile.in Thu Aug 21 15:54:10 2008
|
+++ app/Makefile.in Fri Dec 18 17:40:10 2009
|
||||||
@@ -436,7 +436,7 @@ check-am: all-am
|
@@ -665,7 +665,7 @@ info-am:
|
||||||
check: check-recursive
|
|
||||||
installcheck-am:
|
|
||||||
installcheck: installcheck-recursive
|
|
||||||
-install-exec-am: install-binPROGRAMS install-exec-local
|
|
||||||
+install-exec-am: install-binPROGRAMS
|
|
||||||
install-exec: install-exec-recursive
|
|
||||||
|
|
||||||
install-data-am:
|
install-data-am:
|
||||||
@@ -499,23 +499,12 @@ dvi-recursive mostlyclean-recursive distclean-recursiv
|
|
||||||
maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
|
|
||||||
distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
|
|
||||||
dvi-am dvi check check-am installcheck-am installcheck \
|
|
||||||
-install-exec-local install-exec-am install-exec install-data-am \
|
|
||||||
+install-exec-am install-exec install-data-am \
|
|
||||||
install-data install-am install uninstall-am uninstall all-redirect \
|
|
||||||
all-am all installdirs-am installdirs mostlyclean-generic \
|
|
||||||
distclean-generic clean-generic maintainer-clean-generic clean \
|
|
||||||
mostlyclean distclean maintainer-clean
|
|
||||||
|
|
||||||
-
|
-install-exec-am: install-binPROGRAMS install-exec-local
|
||||||
|
+install-exec-am: install-binPROGRAMS
|
||||||
|
|
||||||
|
install-info: install-info-recursive
|
||||||
|
|
||||||
|
@@ -713,29 +713,6 @@ uninstall-info: uninstall-info-recursive
|
||||||
|
uninstall-info-recursive uninstall-recursive
|
||||||
|
|
||||||
|
|
||||||
-install-exec-local:
|
-install-exec-local:
|
||||||
- chown root.root $(bindir)/soundtracker
|
- case `uname` in \
|
||||||
|
- OpenBSD) \
|
||||||
|
- chown root.wheel $(bindir)/soundtracker; \
|
||||||
|
- ;; \
|
||||||
|
- NetBSD) \
|
||||||
|
- chown root.wheel $(bindir)/soundtracker; \
|
||||||
|
- ;; \
|
||||||
|
- Darwin) \
|
||||||
|
- chown root:admin $(bindir)/soundtracker; \
|
||||||
|
- ;; \
|
||||||
|
- *) \
|
||||||
|
- chown root:root $(bindir)/soundtracker; \
|
||||||
|
- ;; \
|
||||||
|
- esac
|
||||||
- chmod +s $(bindir)/soundtracker
|
- chmod +s $(bindir)/soundtracker
|
||||||
- @echo ""
|
- @echo ""
|
||||||
- @echo "***"
|
- @echo "***"
|
||||||
@ -32,6 +37,6 @@ $OpenBSD: patch-app_Makefile_in,v 1.3 2008/08/21 14:11:14 jasper Exp $
|
|||||||
- @echo "*** if this is a multi-user machine. See file INSTALL."
|
- @echo "*** if this is a multi-user machine. See file INSTALL."
|
||||||
- @echo "***"
|
- @echo "***"
|
||||||
- @echo ""
|
- @echo ""
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
|
.NOEXPORT:
|
||||||
|
77
audio/soundtracker/patches/patch-app_audio_c
Normal file
77
audio/soundtracker/patches/patch-app_audio_c
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
$OpenBSD: patch-app_audio_c,v 1.1 2009/12/19 22:59:27 jakemsr Exp $
|
||||||
|
--- app/audio.c.orig Sat Feb 25 04:30:54 2006
|
||||||
|
+++ app/audio.c Fri Dec 18 20:07:19 2009
|
||||||
|
@@ -52,6 +52,11 @@
|
||||||
|
#include "gui-settings.h"
|
||||||
|
#include "tracer.h"
|
||||||
|
|
||||||
|
+#ifdef DRIVER_SNDIO
|
||||||
|
+#include <sndio.h>
|
||||||
|
+void * sndio_driver_get_hdl(void *);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
st_mixer *mixer = NULL;
|
||||||
|
st_out_driver *playback_driver = NULL;
|
||||||
|
st_out_driver *editing_driver = NULL;
|
||||||
|
@@ -454,6 +459,10 @@ audio_thread (void)
|
||||||
|
static char *msgbuf = NULL;
|
||||||
|
static int msgbuflen = 0;
|
||||||
|
|
||||||
|
+#ifdef DRIVER_SNDIO
|
||||||
|
+ struct sio_hdl *hdl;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
audio_raise_priority();
|
||||||
|
|
||||||
|
loop:
|
||||||
|
@@ -461,10 +470,27 @@ audio_thread (void)
|
||||||
|
|
||||||
|
for(pl = inputs, npl = 1; pl; pl = pl->next, npl++) {
|
||||||
|
pi = pl->data;
|
||||||
|
+
|
||||||
|
+#ifdef DRIVER_SNDIO
|
||||||
|
+ if (pi->fd == -1) {
|
||||||
|
+ hdl = sndio_driver_get_hdl(pi->data);
|
||||||
|
+ if (!hdl || !(pi->condition & GDK_INPUT_WRITE)) {
|
||||||
|
+ inputs = g_list_remove(inputs, pi);
|
||||||
|
+ goto loop;
|
||||||
|
+ }
|
||||||
|
+ if (sio_nfds(hdl) != 1) {
|
||||||
|
+ printf("too many sndio file handles\n");
|
||||||
|
+ } else {
|
||||||
|
+ sio_pollfd(hdl, &pfd[npl], POLLOUT);
|
||||||
|
+ }
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+#else
|
||||||
|
if(pi->fd == -1) {
|
||||||
|
inputs = g_list_remove(inputs, pi);
|
||||||
|
goto loop;
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
pfd[npl].events = pfd[npl].revents = 0;
|
||||||
|
pfd[npl].fd = pi->fd;
|
||||||
|
if(pi->condition & GDK_INPUT_READ)
|
||||||
|
@@ -564,8 +590,22 @@ audio_thread (void)
|
||||||
|
|
||||||
|
for(pl = inputs, i = 1; i < npl; pl = pl->next, i++) {
|
||||||
|
pi = pl->data;
|
||||||
|
+
|
||||||
|
+#ifdef DRIVER_SNDIO
|
||||||
|
+ if(pi->fd == -1) {
|
||||||
|
+ hdl = sndio_driver_get_hdl(pi->data);
|
||||||
|
+ if (hdl && (pi->condition & GDK_INPUT_WRITE)) {
|
||||||
|
+ pfd[i].revents = sio_revents(hdl, &pfd[i]);
|
||||||
|
+ } else {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ pfd[i].events = POLLOUT;
|
||||||
|
+ }
|
||||||
|
+#else
|
||||||
|
if(pi->fd == -1)
|
||||||
|
continue;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
if(pfd[i].revents & pfd[i].events) {
|
||||||
|
int x = 0;
|
||||||
|
if(pfd[i].revents & POLLIN)
|
@ -1,12 +0,0 @@
|
|||||||
$OpenBSD: patch-app_audioconfig_c,v 1.1 2002/07/30 06:51:15 wcobb Exp $
|
|
||||||
--- app/audioconfig.c.orig Tue Jul 30 02:45:44 2002
|
|
||||||
+++ app/audioconfig.c Tue Jul 30 02:46:22 2002
|
|
||||||
@@ -163,7 +163,7 @@ static void
|
|
||||||
audioconfig_object_changed (void *a,
|
|
||||||
void *b)
|
|
||||||
{
|
|
||||||
- unsigned n = (int)b;
|
|
||||||
+ unsigned n = GPOINTER_TO_INT(b);
|
|
||||||
GList *l;
|
|
||||||
gchar *insertbuf[2] = { NULL };
|
|
||||||
int i, active = -1;
|
|
@ -1,13 +0,0 @@
|
|||||||
$OpenBSD: patch-app_drivers_Makefile_am,v 1.1.1.1 2002/02/05 18:04:10 espie Exp $
|
|
||||||
--- app/drivers/Makefile.am.orig Mon Feb 4 12:39:19 2002
|
|
||||||
+++ app/drivers/Makefile.am Mon Feb 4 12:39:27 2002
|
|
||||||
@@ -12,6 +12,8 @@ libdrivers_a_SOURCES = \
|
|
||||||
file-output.c \
|
|
||||||
irix-output.c \
|
|
||||||
oss-output.c \
|
|
||||||
- oss-input.c
|
|
||||||
+ oss-input.c \
|
|
||||||
+ sun-output.c \
|
|
||||||
+ sun-input.c
|
|
||||||
|
|
||||||
INCLUDES = -I..
|
|
@ -1,36 +1,42 @@
|
|||||||
$OpenBSD: patch-app_drivers_Makefile_in,v 1.3 2008/08/21 14:11:14 jasper Exp $
|
$OpenBSD: patch-app_drivers_Makefile_in,v 1.4 2009/12/19 22:59:27 jakemsr Exp $
|
||||||
--- app/drivers/Makefile.in.orig Mon May 20 18:51:18 2002
|
--- app/drivers/Makefile.in.orig Sat Feb 25 05:37:16 2006
|
||||||
+++ app/drivers/Makefile.in Thu Aug 21 15:54:10 2008
|
+++ app/drivers/Makefile.in Fri Dec 18 19:16:40 2009
|
||||||
@@ -99,9 +99,8 @@ sedpath = @sedpath@
|
@@ -190,7 +190,7 @@ target_vendor = @target_vendor@
|
||||||
|
|
||||||
noinst_LIBRARIES = libdrivers.a
|
noinst_LIBRARIES = libdrivers.a
|
||||||
|
|
||||||
-libdrivers_a_SOURCES = alsa-output.c alsa-input.c alsa2-output.c alsa2-input.c dsound-output.c dummy-drivers.c esd-output.c file-output.c irix-output.c oss-output.c oss-input.c
|
-libdrivers_a_SOURCES = dummy-drivers.c file-output.c $(am__append_1) $(am__append_2) $(am__append_3) $(am__append_4) $(am__append_5) $(am__append_6) $(am__append_7) $(am__append_8)
|
||||||
+libdrivers_a_SOURCES = alsa-output.c alsa-input.c alsa2-output.c alsa2-input.c dsound-output.c dummy-drivers.c esd-output.c file-output.c irix-output.c oss-output.c oss-input.c sun-output.c sun-input.c
|
+libdrivers_a_SOURCES = dummy-drivers.c file-output.c $(am__append_1) $(am__append_2) $(am__append_3) $(am__append_4) $(am__append_5) $(am__append_6) $(am__append_7) $(am__append_8) sndio-output.c sndio-input.c
|
||||||
|
|
||||||
-
|
INCLUDES = -I.. ${ST_S_JACK_INCLUDES}
|
||||||
INCLUDES = -I..
|
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
|
||||||
CONFIG_HEADER = ../../config.h
|
|
||||||
@@ -116,7 +115,7 @@ LIBS = @LIBS@
|
|
||||||
libdrivers_a_LIBADD =
|
|
||||||
libdrivers_a_OBJECTS = alsa-output.o alsa-input.o alsa2-output.o \
|
|
||||||
alsa2-input.o dsound-output.o dummy-drivers.o esd-output.o \
|
|
||||||
-file-output.o irix-output.o oss-output.o oss-input.o
|
|
||||||
+file-output.o irix-output.o oss-output.o oss-input.o sun-output.o sun-input.o
|
|
||||||
AR = ar
|
|
||||||
CFLAGS = @CFLAGS@
|
|
||||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
|
||||||
@@ -242,6 +241,12 @@ oss-input.o: oss-input.c ../../config.h ../i18n.h ../d
|
|
||||||
../driver.h ../preferences.h ../mixer.h ../errors.h \
|
|
||||||
../gui-subs.h
|
|
||||||
oss-output.o: oss-output.c ../../config.h ../i18n.h ../driver-out.h \
|
|
||||||
+ ../driver.h ../preferences.h ../mixer.h ../errors.h \
|
|
||||||
+ ../gui-subs.h
|
|
||||||
+sun-input.o: sun-input.c ../../config.h ../i18n.h ../driver-in.h \
|
|
||||||
+ ../driver.h ../preferences.h ../mixer.h ../errors.h \
|
|
||||||
+ ../gui-subs.h
|
|
||||||
+sun-output.o: sun-output.c ../../config.h ../i18n.h ../driver-out.h \
|
|
||||||
../driver.h ../preferences.h ../mixer.h ../errors.h \
|
|
||||||
../gui-subs.h
|
|
||||||
|
|
||||||
|
@@ -223,7 +223,8 @@ am__libdrivers_a_SOURCES_DIST = dummy-drivers.c file-o
|
||||||
|
am_libdrivers_a_OBJECTS = dummy-drivers.$(OBJEXT) file-output.$(OBJEXT) \
|
||||||
|
$(am__objects_1) $(am__objects_2) $(am__objects_3) \
|
||||||
|
$(am__objects_4) $(am__objects_5) $(am__objects_6) \
|
||||||
|
- $(am__objects_7) $(am__objects_8)
|
||||||
|
+ $(am__objects_7) $(am__objects_8) \
|
||||||
|
+ sndio-output.$(OBJEXT) sndio-input.$(OBJEXT)
|
||||||
|
libdrivers_a_OBJECTS = $(am_libdrivers_a_OBJECTS)
|
||||||
|
|
||||||
|
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||||
|
@@ -239,7 +240,9 @@ am__depfiles_maybe = depfiles
|
||||||
|
@AMDEP_TRUE@ ./$(DEPDIR)/irix-output.Po \
|
||||||
|
@AMDEP_TRUE@ ./$(DEPDIR)/jack-output.Po ./$(DEPDIR)/oss-input.Po \
|
||||||
|
@AMDEP_TRUE@ ./$(DEPDIR)/oss-output.Po ./$(DEPDIR)/sdl-output.Po \
|
||||||
|
-@AMDEP_TRUE@ ./$(DEPDIR)/sun-input.Po ./$(DEPDIR)/sun-output.Po
|
||||||
|
+@AMDEP_TRUE@ ./$(DEPDIR)/sun-input.Po ./$(DEPDIR)/sun-output.Po \
|
||||||
|
+@AMDEP_TRUE@ ./$(DEPDIR)/sndio-output.Po \
|
||||||
|
+@AMDEP_TRUE@ ./$(DEPDIR)/sndio-input.Po
|
||||||
|
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||||
|
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
|
CCLD = $(CC)
|
||||||
|
@@ -287,6 +290,8 @@ distclean-compile:
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdl-output.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun-input.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun-output.Po@am__quote@
|
||||||
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sndio-output.Po@am__quote@
|
||||||
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sndio-input.Po@am__quote@
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
|
||||||
|
@ -1,89 +0,0 @@
|
|||||||
$OpenBSD: patch-app_event-waiter_c,v 1.1.1.1 2002/02/05 18:04:10 espie Exp $
|
|
||||||
--- app/event-waiter.c.orig Mon Feb 4 04:24:29 2002
|
|
||||||
+++ app/event-waiter.c Mon Feb 4 04:37:54 2002
|
|
||||||
@@ -22,9 +22,10 @@
|
|
||||||
#include "event-waiter.h"
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
+#include <pthread.h>
|
|
||||||
|
|
||||||
struct event_waiter {
|
|
||||||
- GMutex *mutex;
|
|
||||||
+ pthread_mutex_t mutex;
|
|
||||||
int counter;
|
|
||||||
double time;
|
|
||||||
};
|
|
||||||
@@ -35,7 +36,9 @@ event_waiter_new (void)
|
|
||||||
event_waiter *e = g_new(event_waiter, 1);
|
|
||||||
|
|
||||||
if(e) {
|
|
||||||
- e->mutex = g_mutex_new();
|
|
||||||
+ if (pthread_mutex_init(&e->mutex, NULL) != 0) {
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
event_waiter_reset(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -46,7 +49,7 @@ void
|
|
||||||
event_waiter_destroy (event_waiter *e)
|
|
||||||
{
|
|
||||||
if(e) {
|
|
||||||
- g_mutex_free(e->mutex);
|
|
||||||
+ pthread_mutex_destroy(&e->mutex);
|
|
||||||
g_free(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -56,10 +59,10 @@ event_waiter_reset (event_waiter *e)
|
|
||||||
{
|
|
||||||
g_assert(e);
|
|
||||||
|
|
||||||
- g_mutex_lock(e->mutex);
|
|
||||||
+ pthread_mutex_lock(&e->mutex);
|
|
||||||
e->counter = 0;
|
|
||||||
e->time = 0.0;
|
|
||||||
- g_mutex_unlock(e->mutex);
|
|
||||||
+ pthread_mutex_unlock(&e->mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
@@ -67,9 +70,9 @@ event_waiter_start (event_waiter *e)
|
|
||||||
{
|
|
||||||
g_assert(e);
|
|
||||||
|
|
||||||
- g_mutex_lock(e->mutex);
|
|
||||||
+ pthread_mutex_lock(&e->mutex);
|
|
||||||
e->counter++;
|
|
||||||
- g_mutex_unlock(e->mutex);
|
|
||||||
+ pthread_mutex_unlock(&e->mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
@@ -78,14 +81,14 @@ event_waiter_confirm (event_waiter *e,
|
|
||||||
{
|
|
||||||
g_assert(e);
|
|
||||||
|
|
||||||
- g_mutex_lock(e->mutex);
|
|
||||||
+ pthread_mutex_lock(&e->mutex);
|
|
||||||
if(e->counter > 0) {
|
|
||||||
e->counter--;
|
|
||||||
}
|
|
||||||
if(readytime >= e->time) {
|
|
||||||
e->time = readytime;
|
|
||||||
}
|
|
||||||
- g_mutex_unlock(e->mutex);
|
|
||||||
+ pthread_mutex_unlock(&e->mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
@@ -96,9 +99,9 @@ event_waiter_ready (event_waiter *e,
|
|
||||||
|
|
||||||
g_assert(e);
|
|
||||||
|
|
||||||
- g_mutex_lock(e->mutex);
|
|
||||||
+ pthread_mutex_lock(&e->mutex);
|
|
||||||
result = (e->counter == 0 && currenttime >= e->time);
|
|
||||||
- g_mutex_unlock(e->mutex);
|
|
||||||
+ pthread_mutex_unlock(&e->mutex);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
$OpenBSD: patch-app_file-operations_c,v 1.2 2002/07/30 06:51:15 wcobb Exp $
|
|
||||||
--- app/file-operations.c.orig Sat Feb 9 12:20:12 2002
|
|
||||||
+++ app/file-operations.c Tue Jul 30 02:47:43 2002
|
|
||||||
@@ -25,6 +25,7 @@
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
|
|
||||||
#include "i18n.h"
|
|
||||||
#include <gdk/gdktypes.h>
|
|
||||||
@@ -214,7 +215,7 @@ void
|
|
||||||
fileops_open_dialog (void *dummy,
|
|
||||||
void *index)
|
|
||||||
{
|
|
||||||
- int n = (int)index;
|
|
||||||
+ int n = GPOINTER_TO_INT(index);
|
|
||||||
|
|
||||||
if(!fileops_dialogs[n]) {
|
|
||||||
error_error(_("Operation not supported."));
|
|
@ -1,21 +0,0 @@
|
|||||||
$OpenBSD: patch-app_gui-subs_c,v 1.2 2008/08/21 14:11:14 jasper Exp $
|
|
||||||
--- app/gui-subs.c.orig Mon May 20 15:19:54 2002
|
|
||||||
+++ app/gui-subs.c Thu Aug 21 15:54:06 2008
|
|
||||||
@@ -359,7 +359,7 @@ gui_build_option_menu (OptionMenuItem items[],
|
|
||||||
{
|
|
||||||
menu_item = gtk_radio_menu_item_new_with_label (group, items[i].name);
|
|
||||||
gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
|
|
||||||
- (GtkSignalFunc) items[i].func, (void*)i);
|
|
||||||
+ (GtkSignalFunc) items[i].func, GINT_TO_POINTER(i));
|
|
||||||
group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
|
|
||||||
gtk_menu_append (GTK_MENU (menu), menu_item);
|
|
||||||
if (i == history)
|
|
||||||
@@ -443,7 +443,7 @@ cdialog_close (gpointer data)
|
|
||||||
gtk_widget_destroy(cdialog);
|
|
||||||
cdialog = NULL;
|
|
||||||
|
|
||||||
- ccallback((gint)data, ccallbackdata);
|
|
||||||
+ ccallback(GPOINTER_TO_INT(data), ccallbackdata);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
@ -1,94 +0,0 @@
|
|||||||
$OpenBSD: patch-app_gui_c,v 1.4 2008/08/21 14:11:14 jasper Exp $
|
|
||||||
--- app/gui.c.orig Mon May 20 15:06:48 2002
|
|
||||||
+++ app/gui.c Thu Aug 21 15:54:06 2008
|
|
||||||
@@ -227,8 +227,6 @@ gui_save_wav_callback (gint reply,
|
|
||||||
write(audio_ctlpipe, &i, sizeof(i));
|
|
||||||
write(audio_ctlpipe, &l, sizeof(l));
|
|
||||||
write(audio_ctlpipe, data, l + 1);
|
|
||||||
-
|
|
||||||
- gui_set_current_pattern(xm->pattern_order_table[0]);
|
|
||||||
wait_for_player();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -474,7 +472,7 @@ keyevent (GtkWidget *widget,
|
|
||||||
sample_editor_handle_keys,
|
|
||||||
modinfo_page_handle_keys,
|
|
||||||
};
|
|
||||||
- gboolean pressed = (gboolean)data;
|
|
||||||
+ gboolean pressed = (gboolean)GPOINTER_TO_INT(data);
|
|
||||||
gboolean handled = FALSE;
|
|
||||||
gboolean entry_focus = GTK_IS_ENTRY(GTK_WINDOW(mainwindow)->focus_widget);
|
|
||||||
|
|
||||||
@@ -529,7 +527,7 @@ static void
|
|
||||||
playlist_position_changed (Playlist *p,
|
|
||||||
int newpos)
|
|
||||||
{
|
|
||||||
- if(gui_playing_mode) {
|
|
||||||
+ if(gui_playing_mode != 0) {
|
|
||||||
// This will only be executed when the user changes the song position manually
|
|
||||||
gui_mixer_set_songpos(newpos);
|
|
||||||
event_waiter_start(audio_songpos_ew);
|
|
||||||
@@ -577,8 +575,18 @@ gui_editpat_changed (GtkSpinButton *spin)
|
|
||||||
{
|
|
||||||
int n = gtk_spin_button_get_value_as_int(spin);
|
|
||||||
|
|
||||||
- if(n != editing_pat)
|
|
||||||
+ if(n != editing_pat) {
|
|
||||||
gui_set_current_pattern(n);
|
|
||||||
+
|
|
||||||
+ /* If we are in 'playing pattern' mode and asynchronous
|
|
||||||
+ * editing is disabled, make the audio thread jump to the new
|
|
||||||
+ * pattern, too. I think it would be cool to have this for
|
|
||||||
+ * 'playing song' mode, too, but then modifications in
|
|
||||||
+ * gui_update_player_pos() will be necessary. */
|
|
||||||
+ if(gui_playing_mode == PLAYING_PATTERN && !ASYNCEDIT) {
|
|
||||||
+ gui_mixer_set_pattern(n);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -870,8 +878,6 @@ play_song (void)
|
|
||||||
write(audio_ctlpipe, &i, sizeof(i));
|
|
||||||
write(audio_ctlpipe, &sp, sizeof(sp));
|
|
||||||
write(audio_ctlpipe, &pp, sizeof(pp));
|
|
||||||
-
|
|
||||||
- gui_set_current_pattern(xm->pattern_order_table[sp]);
|
|
||||||
wait_for_player();
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1037,10 +1043,6 @@ gui_set_current_pattern (int p)
|
|
||||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_editpat), p);
|
|
||||||
gui_update_pattern_data();
|
|
||||||
|
|
||||||
- if(!GUI_ENABLED && !ASYNCEDIT) {
|
|
||||||
- gui_mixer_set_pattern(p);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
xm_set_modified(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1064,13 +1066,12 @@ offset_current_pattern (int offset)
|
|
||||||
int nv;
|
|
||||||
|
|
||||||
nv = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_editpat)) + offset;
|
|
||||||
-
|
|
||||||
if(nv < 0)
|
|
||||||
nv = 0;
|
|
||||||
else if(nv > 255)
|
|
||||||
nv = 255;
|
|
||||||
|
|
||||||
- gui_set_current_pattern(nv);
|
|
||||||
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_editpat), nv);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
@@ -1255,7 +1256,7 @@ gui_splash_set_label (const gchar *text,
|
|
||||||
char buf[256];
|
|
||||||
|
|
||||||
strcpy(buf, "SoundTracker v" VERSION " - ");
|
|
||||||
- strncat(buf, text, 255-sizeof(buf));
|
|
||||||
+ strlcat(buf, text, sizeof buf);
|
|
||||||
|
|
||||||
gtk_label_set_text(GTK_LABEL(gui_splash_label), buf);
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
|||||||
$OpenBSD: patch-app_keys_c,v 1.1 2002/07/30 06:51:15 wcobb Exp $
|
|
||||||
--- app/keys.c.orig Tue Jul 30 02:50:01 2002
|
|
||||||
+++ app/keys.c Tue Jul 30 02:50:08 2002
|
|
||||||
@@ -316,7 +316,7 @@ static void
|
|
||||||
keys_key_group_changed (void *a,
|
|
||||||
void *b)
|
|
||||||
{
|
|
||||||
- unsigned n = (int)b;
|
|
||||||
+ unsigned n = GPOINTER_TO_INT(b);
|
|
||||||
keys_key *kpt;
|
|
||||||
gchar string[128];
|
|
||||||
gchar * insertbuf[2] = { NULL, string };
|
|
@ -1,65 +1,52 @@
|
|||||||
$OpenBSD: patch-app_main_c,v 1.2 2002/05/30 09:08:28 wcobb Exp $
|
$OpenBSD: patch-app_main_c,v 1.3 2009/12/19 22:59:27 jakemsr Exp $
|
||||||
--- app/main.c.orig Sun Feb 17 11:02:22 2002
|
--- app/main.c.orig Sat Feb 25 05:02:27 2006
|
||||||
+++ app/main.c Tue May 21 21:10:04 2002
|
+++ app/main.c Fri Dec 18 19:19:12 2009
|
||||||
@@ -47,18 +47,6 @@
|
@@ -48,6 +48,7 @@
|
||||||
XM *xm = NULL;
|
XM *xm = NULL;
|
||||||
int pipea[2], pipeb[2];
|
int pipea[2], pipeb[2];
|
||||||
|
|
||||||
-static void
|
+#if 0
|
||||||
-sigsegv_handler (int parameter)
|
static void
|
||||||
-{
|
sigsegv_handler (int parameter)
|
||||||
- signal(SIGSEGV, SIG_DFL);
|
{
|
||||||
-
|
@@ -59,6 +60,7 @@ sigsegv_handler (int parameter)
|
||||||
- if(xm != NULL) {
|
exit(1);
|
||||||
- int retval = XM_Save(xm, "crash-save.xm", FALSE);
|
}
|
||||||
- printf("*** SIGSEGV caught.\n*** Saved current XM to 'crash-save.xm' in current directory.\n (status %d)\n", retval);
|
}
|
||||||
- exit(1);
|
+#endif
|
||||||
- }
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
int
|
int
|
||||||
main (int argc,
|
main (int argc,
|
||||||
char *argv[])
|
@@ -87,6 +89,9 @@ main (int argc,
|
||||||
@@ -80,6 +68,9 @@ main (int argc,
|
#ifdef DRIVER_SUN
|
||||||
#ifdef DRIVER_SGI
|
driver_out_sun, driver_in_sun,
|
||||||
driver_out_irix,
|
|
||||||
#endif
|
#endif
|
||||||
+#ifdef DRIVER_SUN
|
+#ifdef DRIVER_SNDIO
|
||||||
+ driver_out_sun, driver_in_sun,
|
+ driver_out_sndio, driver_in_sndio,
|
||||||
+#endif
|
+#endif
|
||||||
#ifndef NO_AUDIOFILE
|
#ifdef DRIVER_SDL
|
||||||
// driver_out_file,
|
driver_out_sdl,
|
||||||
#endif
|
#endif
|
||||||
@@ -92,7 +83,9 @@ main (int argc,
|
@@ -181,6 +186,13 @@ main (int argc,
|
||||||
mixer_kbfloat,
|
&driver_in_sun);
|
||||||
mixer_integer32;
|
|
||||||
|
|
||||||
+#ifndef __OpenBSD__
|
|
||||||
g_thread_init(NULL);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if(pipe(pipea) || pipe(pipeb)) {
|
|
||||||
fprintf(stderr, "Cränk. Can't pipe().\n");
|
|
||||||
@@ -178,6 +171,13 @@ main (int argc,
|
|
||||||
&driver_out_irix);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
+#ifdef DRIVER_SUN
|
+#ifdef DRIVER_SNDIO
|
||||||
+ drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT],
|
+ drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT],
|
||||||
+ &driver_out_sun);
|
+ &driver_out_sndio);
|
||||||
+ drivers[DRIVER_INPUT] = g_list_append(drivers[DRIVER_INPUT],
|
+ drivers[DRIVER_INPUT] = g_list_append(drivers[DRIVER_INPUT],
|
||||||
+ &driver_in_sun);
|
+ &driver_in_sndio);
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT],
|
drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT],
|
||||||
&driver_out_dsound);
|
&driver_out_dsound);
|
||||||
@@ -215,8 +215,6 @@ main (int argc,
|
@@ -243,7 +255,7 @@ main (int argc,
|
||||||
midi_load_config();
|
|
||||||
midi_init();
|
midi_init();
|
||||||
#endif
|
#endif
|
||||||
-
|
|
||||||
- signal(SIGSEGV, sigsegv_handler);
|
- signal(SIGSEGV, sigsegv_handler);
|
||||||
|
+ //signal(SIGSEGV, sigsegv_handler);
|
||||||
|
|
||||||
gtk_main();
|
gtk_main();
|
||||||
|
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
$OpenBSD: patch-app_menubar_c,v 1.2 2008/08/21 14:11:14 jasper Exp $
|
|
||||||
--- app/menubar.c.orig Mon May 20 16:33:38 2002
|
|
||||||
+++ app/menubar.c Thu Aug 21 15:54:06 2008
|
|
||||||
@@ -117,7 +117,7 @@ menubar_clear_callback (gint reply,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
if(reply == 0) {
|
|
||||||
- if((gint)data == 0) {
|
|
||||||
+ if(GPOINTER_TO_INT(data) == 0) {
|
|
||||||
gui_free_xm();
|
|
||||||
gui_new_xm();
|
|
||||||
xm->modified = 0;
|
|
||||||
@@ -709,19 +709,22 @@ menubar_gnome_to_gtk (GnomeUIInfo *gnometree,
|
|
||||||
switch(gnometree->type) {
|
|
||||||
case GNOME_APP_UI_SUBTREE:
|
|
||||||
menubar_gtk_items[n].callback = (GtkItemFactoryCallback)gnometree->func;
|
|
||||||
- menubar_gtk_items[n].callback_action = (guint)gnometree->funcparam;
|
|
||||||
+ menubar_gtk_items[n].callback_action =
|
|
||||||
+ GPOINTER_TO_UINT(gnometree->funcparam);
|
|
||||||
menubar_gtk_items[n].item_type = "<Branch>";
|
|
||||||
strip_underscores(buf, buf);
|
|
||||||
n = menubar_gnome_to_gtk((GnomeUIInfo*)gnometree->dummy1, n + 1, buf) - 1;
|
|
||||||
break;
|
|
||||||
case GNOME_APP_UI_ITEM:
|
|
||||||
menubar_gtk_items[n].callback = (GtkItemFactoryCallback)gnometree->func;
|
|
||||||
- menubar_gtk_items[n].callback_action = (guint)gnometree->funcparam;
|
|
||||||
+ menubar_gtk_items[n].callback_action =
|
|
||||||
+ GPOINTER_TO_UINT(gnometree->funcparam);
|
|
||||||
menubar_gtk_items[n].item_type = NULL;
|
|
||||||
break;
|
|
||||||
case GNOME_APP_UI_TOGGLEITEM:
|
|
||||||
menubar_gtk_items[n].callback = (GtkItemFactoryCallback)gnometree->func;
|
|
||||||
- menubar_gtk_items[n].callback_action = (guint)gnometree->funcparam;
|
|
||||||
+ menubar_gtk_items[n].callback_action =
|
|
||||||
+ GPOINTER_TO_UINT(gnometree->funcparam);
|
|
||||||
menubar_gtk_items[n].item_type = "<ToggleItem>";
|
|
||||||
break;
|
|
||||||
case GNOME_APP_UI_SEPARATOR:
|
|
@ -1,20 +0,0 @@
|
|||||||
$OpenBSD: patch-app_mixer_h,v 1.1.1.1 2002/02/05 18:04:10 espie Exp $
|
|
||||||
--- app/mixer.h.orig Mon Feb 4 04:21:58 2002
|
|
||||||
+++ app/mixer.h Mon Feb 4 04:37:12 2002
|
|
||||||
@@ -23,6 +23,7 @@
|
|
||||||
#define _ST_MIXER_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
+#include <pthread.h>
|
|
||||||
|
|
||||||
typedef struct st_mixer_sample_info {
|
|
||||||
guint32 looptype; /* see ST_MIXER_SAMPLE_LOOPTYPE_ defines below */
|
|
||||||
@@ -30,7 +31,7 @@ typedef struct st_mixer_sample_info {
|
|
||||||
guint32 loopstart; /* offset in samples, not in bytes */
|
|
||||||
guint32 loopend; /* offset to first sample not being played */
|
|
||||||
gint16 *data; /* pointer to sample data */
|
|
||||||
- GMutex *lock;
|
|
||||||
+ pthread_mutex_t *lock;
|
|
||||||
} st_mixer_sample_info;
|
|
||||||
|
|
||||||
/* values for st_mixer_sample_info.looptype */
|
|
@ -1,21 +0,0 @@
|
|||||||
$OpenBSD: patch-app_mixers_integer32_c,v 1.1.1.1 2002/02/05 18:04:10 espie Exp $
|
|
||||||
--- app/mixers/integer32.c.orig Mon Feb 4 04:35:50 2002
|
|
||||||
+++ app/mixers/integer32.c Mon Feb 4 04:36:16 2002
|
|
||||||
@@ -277,7 +277,7 @@ integer32_mix (void *dest,
|
|
||||||
}
|
|
||||||
|
|
||||||
g_assert(c->sample->lock);
|
|
||||||
- g_mutex_lock(c->sample->lock);
|
|
||||||
+ pthread_mutex_lock(c->sample->lock);
|
|
||||||
|
|
||||||
while(t) {
|
|
||||||
/* Check how much of the sample we can fill in one run */
|
|
||||||
@@ -414,7 +414,7 @@ integer32_mix (void *dest,
|
|
||||||
c->current = j;
|
|
||||||
}
|
|
||||||
|
|
||||||
- g_mutex_unlock(c->sample->lock);
|
|
||||||
+ pthread_mutex_unlock(c->sample->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* modules with many channels get additional amplification here */
|
|
@ -1,21 +0,0 @@
|
|||||||
$OpenBSD: patch-app_mixers_kb-x86_c,v 1.1.1.1 2002/02/05 18:04:10 espie Exp $
|
|
||||||
--- app/mixers/kb-x86.c.orig Mon Feb 4 04:35:55 2002
|
|
||||||
+++ app/mixers/kb-x86.c Mon Feb 4 04:36:34 2002
|
|
||||||
@@ -739,7 +739,7 @@ kb_x86_mix (void *dest,
|
|
||||||
}
|
|
||||||
|
|
||||||
g_assert(ch->sample->lock);
|
|
||||||
- g_mutex_lock(ch->sample->lock);
|
|
||||||
+ pthread_mutex_lock(ch->sample->lock);
|
|
||||||
|
|
||||||
while(num_samples_left && (ch->flags & KB_FLAG_SAMPLE_RUNNING)) {
|
|
||||||
int num_samples = 0;
|
|
||||||
@@ -770,7 +770,7 @@ kb_x86_mix (void *dest,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- g_mutex_unlock(ch->sample->lock);
|
|
||||||
+ pthread_mutex_unlock(ch->sample->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
clipflag = kbasm_post_mixing(kb_x86_tempbuf, (gint16*)dest, count, kb_x86_amplification);
|
|
@ -1,58 +0,0 @@
|
|||||||
$OpenBSD: patch-app_sample_editor_c,v 1.5 2008/08/21 14:11:14 jasper Exp $
|
|
||||||
--- app/sample-editor.c.orig Thu May 16 16:55:24 2002
|
|
||||||
+++ app/sample-editor.c Thu Aug 21 15:54:06 2008
|
|
||||||
@@ -186,7 +186,7 @@ static void sample_editor_reverse_clicked(void);
|
|
||||||
static void
|
|
||||||
sample_editor_lock_sample (void)
|
|
||||||
{
|
|
||||||
- g_mutex_lock(current_sample->sample.lock);
|
|
||||||
+ pthread_mutex_lock(current_sample->sample.lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -195,7 +195,7 @@ sample_editor_unlock_sample (void)
|
|
||||||
if(gui_playing_mode) {
|
|
||||||
mixer->updatesample(¤t_sample->sample);
|
|
||||||
}
|
|
||||||
- g_mutex_unlock(current_sample->sample.lock);
|
|
||||||
+ pthread_mutex_unlock(current_sample->sample.lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
@@ -2038,7 +2038,7 @@ static void
|
|
||||||
sample_editor_lrvol (GtkWidget *widget,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
- int mode = (int)data;
|
|
||||||
+ int mode = GPOINTER_TO_INT(data);
|
|
||||||
|
|
||||||
switch(mode)
|
|
||||||
{
|
|
||||||
@@ -2056,7 +2056,7 @@ static void
|
|
||||||
sample_editor_open_volume_ramp_dialog (void)
|
|
||||||
{
|
|
||||||
GtkWidget *mainbox, *box1, *thing;
|
|
||||||
- int i;
|
|
||||||
+ gint i;
|
|
||||||
const char *labels1[] = {
|
|
||||||
_("Normalize"),
|
|
||||||
_("Execute"),
|
|
||||||
@@ -2146,7 +2146,8 @@ sample_editor_open_volume_ramp_dialog (void)
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(thing), "clicked",
|
|
||||||
- GTK_SIGNAL_FUNC(sample_editor_perform_ramp), (gpointer)i);
|
|
||||||
+ GTK_SIGNAL_FUNC(sample_editor_perform_ramp),
|
|
||||||
+ GINT_TO_POINTER(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_widget_show (volrampwindow);
|
|
||||||
@@ -2166,7 +2167,7 @@ static void
|
|
||||||
sample_editor_perform_ramp (GtkWidget *w,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
- int action = (int)data;
|
|
||||||
+ int action = GPOINTER_TO_INT(data);
|
|
||||||
double left, right;
|
|
||||||
const int ss = sampledisplay->sel_start, se = sampledisplay->sel_end;
|
|
||||||
int i;
|
|
@ -1,21 +0,0 @@
|
|||||||
$OpenBSD: patch-app_scope-group_c,v 1.1 2002/07/30 06:51:15 wcobb Exp $
|
|
||||||
--- app/scope-group.c.orig Tue Jul 30 02:53:16 2002
|
|
||||||
+++ app/scope-group.c Tue Jul 30 02:53:33 2002
|
|
||||||
@@ -223,7 +223,7 @@ scope_group_new (void)
|
|
||||||
{
|
|
||||||
ScopeGroup *s;
|
|
||||||
GtkWidget *button, *box, *thing;
|
|
||||||
- int i;
|
|
||||||
+ gint i;
|
|
||||||
char buf[5];
|
|
||||||
|
|
||||||
s = gtk_type_new(scope_group_get_type());
|
|
||||||
@@ -244,7 +244,7 @@ scope_group_new (void)
|
|
||||||
gtk_signal_connect(GTK_OBJECT(button), "event",
|
|
||||||
GTK_SIGNAL_FUNC(scope_group_scope_event), s);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(button), "toggled",
|
|
||||||
- GTK_SIGNAL_FUNC(button_toggled), (void*)i);
|
|
||||||
+ GTK_SIGNAL_FUNC(button_toggled), GINT_TO_POINTER(i));
|
|
||||||
gtk_widget_show(button);
|
|
||||||
gtk_widget_ref(button);
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
$OpenBSD: patch-app_st-subs_c,v 1.1.1.1 2002/02/05 18:04:10 espie Exp $
|
|
||||||
--- app/st-subs.c.orig Mon Feb 4 04:18:39 2002
|
|
||||||
+++ app/st-subs.c Mon Feb 4 04:38:47 2002
|
|
||||||
@@ -359,7 +359,7 @@ void
|
|
||||||
st_clean_sample (STSample *s,
|
|
||||||
const char *name)
|
|
||||||
{
|
|
||||||
- GMutex *lock = s->sample.lock;
|
|
||||||
+ pthread_mutex_t *lock = s->sample.lock;
|
|
||||||
free(s->sample.data);
|
|
||||||
memset(s, 0, sizeof(STSample));
|
|
||||||
if(name)
|
|
||||||
@@ -367,8 +367,10 @@ st_clean_sample (STSample *s,
|
|
||||||
s->sample.loopend = 1;
|
|
||||||
if(lock)
|
|
||||||
s->sample.lock = lock;
|
|
||||||
- else
|
|
||||||
- s->sample.lock = g_mutex_new();
|
|
||||||
+ else {
|
|
||||||
+ s->sample.lock = malloc(sizeof(pthread_mutex_t));
|
|
||||||
+ pthread_mutex_init(s->sample.lock, NULL);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
@ -1,75 +0,0 @@
|
|||||||
$OpenBSD: patch-app_time-buffer_c,v 1.1.1.1 2002/02/05 18:04:10 espie Exp $
|
|
||||||
--- app/time-buffer.c.orig Mon Feb 4 04:06:19 2002
|
|
||||||
+++ app/time-buffer.c Mon Feb 4 04:39:34 2002
|
|
||||||
@@ -21,13 +21,14 @@
|
|
||||||
|
|
||||||
#include "time-buffer.h"
|
|
||||||
|
|
||||||
+#include <pthread.h>
|
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
/* This implementation of the time buffer interface might be rather
|
|
||||||
suboptimal... */
|
|
||||||
|
|
||||||
struct time_buffer {
|
|
||||||
- GMutex *mutex;
|
|
||||||
+ pthread_mutex_t mutex;
|
|
||||||
GList *list;
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -42,7 +43,9 @@ time_buffer_new (double maxtimedelta)
|
|
||||||
time_buffer *t = g_new(time_buffer, 1);
|
|
||||||
|
|
||||||
if(t) {
|
|
||||||
- t->mutex = g_mutex_new();
|
|
||||||
+ if (pthread_mutex_init(&t->mutex, NULL) != 0) {
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
t->list = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -54,7 +57,7 @@ time_buffer_destroy (time_buffer *t)
|
|
||||||
{
|
|
||||||
if(t) {
|
|
||||||
g_list_free(t->list);
|
|
||||||
- g_mutex_free(t->mutex);
|
|
||||||
+ pthread_mutex_destroy(&t->mutex);
|
|
||||||
g_free(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -75,10 +78,10 @@ time_buffer_add (time_buffer *t,
|
|
||||||
{
|
|
||||||
time_buffer_item *a = item;
|
|
||||||
|
|
||||||
- g_mutex_lock(t->mutex);
|
|
||||||
+ pthread_mutex_lock(&t->mutex);
|
|
||||||
a->time = time;
|
|
||||||
t->list = g_list_append(t->list, a);
|
|
||||||
- g_mutex_unlock(t->mutex);
|
|
||||||
+ pthread_mutex_unlock(&t->mutex);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
@@ -91,11 +94,11 @@ time_buffer_get (time_buffer *t,
|
|
||||||
void *result = NULL;
|
|
||||||
GList *list;
|
|
||||||
|
|
||||||
- g_mutex_lock(t->mutex);
|
|
||||||
+ pthread_mutex_lock(&t->mutex);
|
|
||||||
l = g_list_length(t->list);
|
|
||||||
|
|
||||||
if(l == 0) {
|
|
||||||
- g_mutex_unlock(t->mutex);
|
|
||||||
+ pthread_mutex_unlock(&t->mutex);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -114,7 +117,7 @@ time_buffer_get (time_buffer *t,
|
|
||||||
|
|
||||||
result = t->list->data;
|
|
||||||
|
|
||||||
- g_mutex_unlock(t->mutex);
|
|
||||||
+ pthread_mutex_unlock(&t->mutex);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
$OpenBSD: patch-app_tracker-settings_c,v 1.1 2002/07/30 06:46:24 wcobb Exp $
|
|
||||||
--- app/tracker-settings.c.orig Tue Jul 30 02:53:55 2002
|
|
||||||
+++ app/tracker-settings.c Tue Jul 30 02:54:38 2002
|
|
||||||
@@ -23,6 +23,8 @@
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
+#include <string.h>
|
|
||||||
+
|
|
||||||
#include "tracker-settings.h"
|
|
||||||
#include "i18n.h"
|
|
||||||
#include "gui-subs.h"
|
|
@ -1,59 +0,0 @@
|
|||||||
$OpenBSD: patch-app_transposition_c,v 1.2 2008/08/21 14:11:14 jasper Exp $
|
|
||||||
--- app/transposition.c.orig Fri May 17 15:21:59 2002
|
|
||||||
+++ app/transposition.c Thu Aug 21 15:54:06 2008
|
|
||||||
@@ -127,7 +127,7 @@ transposition_transpose_notes (GtkWidget *w,
|
|
||||||
{
|
|
||||||
int add = 0;
|
|
||||||
|
|
||||||
- switch((int)data) {
|
|
||||||
+ switch(GPOINTER_TO_INT(data)) {
|
|
||||||
case 0:
|
|
||||||
add = +1;
|
|
||||||
break;
|
|
||||||
@@ -173,7 +173,7 @@ static void
|
|
||||||
transposition_change_instruments (GtkWidget *w,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
- int b = (int)data;
|
|
||||||
+ int b = GPOINTER_TO_INT(data);
|
|
||||||
|
|
||||||
transposition_for_each (transposition_change_instruments_sub, b);
|
|
||||||
tracker_redraw(tracker);
|
|
||||||
@@ -184,14 +184,15 @@ static void
|
|
||||||
transposition_current_instrument_clicked (GtkWidget *w,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(transposition_instrument_w[(int)data]),
|
|
||||||
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(transposition_instrument_w[
|
|
||||||
+ GPOINTER_TO_INT(data)]),
|
|
||||||
gui_get_current_instrument());
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
transposition_dialog (void)
|
|
||||||
{
|
|
||||||
- int i;
|
|
||||||
+ gint i;
|
|
||||||
GtkWidget *mainbox, *thing, *box1, *box2, *frame, *hbox;
|
|
||||||
const char *labels1[] = {
|
|
||||||
_("Whole Song"),
|
|
||||||
@@ -279,7 +280,8 @@ transposition_dialog (void)
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(thing), "clicked",
|
|
||||||
- GTK_SIGNAL_FUNC(transposition_transpose_notes), (gpointer)i);
|
|
||||||
+ GTK_SIGNAL_FUNC(transposition_transpose_notes),
|
|
||||||
+ GINT_TO_POINTER(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
frame = gtk_frame_new(NULL);
|
|
||||||
@@ -327,7 +329,8 @@ transposition_dialog (void)
|
|
||||||
gtk_widget_show(thing);
|
|
||||||
gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(thing), "clicked",
|
|
||||||
- GTK_SIGNAL_FUNC(transposition_change_instruments), (gpointer)i);
|
|
||||||
+ GTK_SIGNAL_FUNC(transposition_change_instruments),
|
|
||||||
+ GINT_TO_POINTER(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The button area */
|
|
@ -1,24 +0,0 @@
|
|||||||
$OpenBSD: patch-app_xm_c,v 1.2 2002/05/30 09:08:28 wcobb Exp $
|
|
||||||
--- app/xm.c.orig Mon May 20 10:21:08 2002
|
|
||||||
+++ app/xm.c Tue May 21 18:21:30 2002
|
|
||||||
@@ -765,7 +765,8 @@ xm_init_locks (XM *xm)
|
|
||||||
for(i = 0; i < sizeof(xm->instruments) / sizeof(xm->instruments[0]); i++) {
|
|
||||||
STInstrument *ins = &xm->instruments[i];
|
|
||||||
for(j = 0; j < sizeof(ins->samples) / sizeof(ins->samples[0]); j++) {
|
|
||||||
- ins->samples[j].sample.lock = g_mutex_new();
|
|
||||||
+ ins->samples[j].sample.lock = malloc(sizeof(pthread_mutex_t));
|
|
||||||
+ pthread_mutex_init(ins->samples[j].sample.lock, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1094,7 +1095,9 @@ XM_Free (XM *xm)
|
|
||||||
STInstrument *ins = &xm->instruments[i];
|
|
||||||
st_clean_instrument(ins, NULL);
|
|
||||||
for(j = 0; j < sizeof(ins->samples) / sizeof(ins->samples[0]); j++) {
|
|
||||||
- g_mutex_free(ins->samples[j].sample.lock);
|
|
||||||
+ pthread_mutex_destroy(ins->samples[j].sample.lock);
|
|
||||||
+ free(ins->samples[j].sample.lock);
|
|
||||||
+ ins->samples[j].sample.lock = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
$OpenBSD: patch-config_h_in,v 1.3 2008/08/21 14:11:14 jasper Exp $
|
|
||||||
--- config.h.in.orig Mon May 20 18:41:08 2002
|
|
||||||
+++ config.h.in Thu Aug 21 15:54:10 2008
|
|
||||||
@@ -9,6 +9,7 @@
|
|
||||||
#undef DRIVER_ALSA_050
|
|
||||||
#undef DRIVER_ESD
|
|
||||||
#undef DRIVER_SGI
|
|
||||||
+#undef DRIVER_SUN
|
|
||||||
#undef USE_GNOME
|
|
||||||
#undef NO_AUDIOFILE
|
|
||||||
#undef NO_GASP
|
|
||||||
@@ -146,6 +147,9 @@
|
|
||||||
|
|
||||||
/* Define if you have the <string.h> header file. */
|
|
||||||
#undef HAVE_STRING_H
|
|
||||||
+
|
|
||||||
+/* Define if you have the <sys/audioio.h> header file. */
|
|
||||||
+#undef HAVE_SYS_AUDIOIO_H
|
|
||||||
|
|
||||||
/* Define if you have the <sys/param.h> header file. */
|
|
||||||
#undef HAVE_SYS_PARAM_H
|
|
@ -1,56 +0,0 @@
|
|||||||
$OpenBSD: patch-configure_in,v 1.4 2009/06/19 17:50:47 naddy Exp $
|
|
||||||
--- configure.in.orig Mon May 20 18:47:38 2002
|
|
||||||
+++ configure.in Thu Aug 21 15:54:10 2008
|
|
||||||
@@ -61,10 +61,19 @@ dnl --------------------------------------------------
|
|
||||||
dnl Test for GTK+ / GNOME
|
|
||||||
dnl -----------------------------------------------------------------------
|
|
||||||
|
|
||||||
+case `uname` in
|
|
||||||
+ OpenBSD)
|
|
||||||
+ gtk_threads=""
|
|
||||||
+ LIBS="$LIBS -pthread"
|
|
||||||
+ ;;
|
|
||||||
+ *)
|
|
||||||
+ gtk_threads="gthreads"
|
|
||||||
+ ;;
|
|
||||||
+esac
|
|
||||||
AM_PATH_GTK(1.2.2,
|
|
||||||
,
|
|
||||||
AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?),
|
|
||||||
- "gthread")
|
|
||||||
+ $gtk_threads)
|
|
||||||
|
|
||||||
gnome=yes
|
|
||||||
AC_ARG_ENABLE(gnome,
|
|
||||||
@@ -76,7 +85,7 @@ if test "$gnome" = yes; then
|
|
||||||
AC_MSG_CHECKING(for Gnome compile flags)
|
|
||||||
GNOME_CFLAGS=`$gnomepath gnomeui --cflags 2>/dev/null`
|
|
||||||
GNOME_VER=`$gnomepath --version |$sedpath 's/gnome-libs //'`
|
|
||||||
- GNOME_MAJOR=`echo $GNOME_VER |$sedpath 's/\([[0-9]*]*\).\([[0-9]*]*\).\([[0-9]*]*\)/\1/'`
|
|
||||||
+ GNOME_MAJOR=`echo $GNOME_VER |$sedpath 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
|
|
||||||
if test "_$GNOME_MAJOR" = "_0"; then
|
|
||||||
gnome=no
|
|
||||||
AC_MSG_RESULT([old Gnome found, building without it.])
|
|
||||||
@@ -218,6 +227,22 @@ case `uname` in
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+dnl -----------------------------------------------------------------------
|
|
||||||
+dnl Test for Sun audio
|
|
||||||
+dnl -----------------------------------------------------------------------
|
|
||||||
+
|
|
||||||
+AC_ARG_ENABLE(sun,
|
|
||||||
+[ --disable-sun Disable Sun driver (default = try)],
|
|
||||||
+sun_support=no)
|
|
||||||
+
|
|
||||||
+if test x$sun_support != xno; then
|
|
||||||
+ AC_CHECK_HEADERS(sys/audioio.h)
|
|
||||||
+ if test "${ac_cv_header_sys_audioio_h}" = "yes"; then
|
|
||||||
+ AC_DEFINE(DRIVER_SUN)
|
|
||||||
+ fi
|
|
||||||
+fi
|
|
||||||
|
|
||||||
dnl -----------------------------------------------------------------------
|
|
||||||
dnl Other tests
|
|
@ -1,4 +1,5 @@
|
|||||||
@comment $OpenBSD: PLIST,v 1.7 2009/06/19 17:50:47 naddy Exp $
|
@comment $OpenBSD: PLIST,v 1.8 2009/12/19 22:59:27 jakemsr Exp $
|
||||||
|
@pkgpath audio/soundtracker,esd
|
||||||
@pkgpath audio/soundtracker,gnome
|
@pkgpath audio/soundtracker,gnome
|
||||||
@pkgpath audio/soundtracker,gnome,esd
|
@pkgpath audio/soundtracker,gnome,esd
|
||||||
@bin bin/soundtracker
|
@bin bin/soundtracker
|
||||||
@ -8,15 +9,36 @@ share/doc/soundtracker/NEWS
|
|||||||
share/doc/soundtracker/README
|
share/doc/soundtracker/README
|
||||||
share/doc/soundtracker/xi.txt
|
share/doc/soundtracker/xi.txt
|
||||||
share/doc/soundtracker/xm.txt
|
share/doc/soundtracker/xm.txt
|
||||||
|
share/doc/soundtracker/xp.txt
|
||||||
|
share/locale/da/LC_MESSAGES/soundtracker.mo
|
||||||
share/locale/de/LC_MESSAGES/soundtracker.mo
|
share/locale/de/LC_MESSAGES/soundtracker.mo
|
||||||
|
share/locale/en@boldquot/LC_MESSAGES/soundtracker.mo
|
||||||
|
share/locale/en@quot/LC_MESSAGES/soundtracker.mo
|
||||||
share/locale/es/LC_MESSAGES/soundtracker.mo
|
share/locale/es/LC_MESSAGES/soundtracker.mo
|
||||||
share/locale/fr/LC_MESSAGES/soundtracker.mo
|
share/locale/fr/LC_MESSAGES/soundtracker.mo
|
||||||
share/locale/gl/LC_MESSAGES/soundtracker.mo
|
share/locale/gl/LC_MESSAGES/soundtracker.mo
|
||||||
|
share/locale/hr/LC_MESSAGES/soundtracker.mo
|
||||||
share/locale/it/LC_MESSAGES/soundtracker.mo
|
share/locale/it/LC_MESSAGES/soundtracker.mo
|
||||||
share/locale/ja/LC_MESSAGES/soundtracker.mo
|
share/locale/ja/LC_MESSAGES/soundtracker.mo
|
||||||
|
share/locale/no/LC_MESSAGES/soundtracker.mo
|
||||||
share/locale/pl/LC_MESSAGES/soundtracker.mo
|
share/locale/pl/LC_MESSAGES/soundtracker.mo
|
||||||
share/locale/ru/LC_MESSAGES/soundtracker.mo
|
share/locale/ru/LC_MESSAGES/soundtracker.mo
|
||||||
|
share/locale/rw/
|
||||||
|
share/locale/rw/LC_MESSAGES/
|
||||||
|
share/locale/rw/LC_MESSAGES/soundtracker.mo
|
||||||
|
share/locale/sk/LC_MESSAGES/soundtracker.mo
|
||||||
share/locale/sl/LC_MESSAGES/soundtracker.mo
|
share/locale/sl/LC_MESSAGES/soundtracker.mo
|
||||||
share/locale/sv/LC_MESSAGES/soundtracker.mo
|
share/locale/sv/LC_MESSAGES/soundtracker.mo
|
||||||
|
share/locale/tr/LC_MESSAGES/soundtracker.mo
|
||||||
|
share/locale/vi/LC_MESSAGES/soundtracker.mo
|
||||||
share/soundtracker/
|
share/soundtracker/
|
||||||
|
share/soundtracker/downarrow.xpm
|
||||||
|
share/soundtracker/flat.xpm
|
||||||
|
share/soundtracker/lock.xpm
|
||||||
|
share/soundtracker/muted.png
|
||||||
|
share/soundtracker/play.xpm
|
||||||
|
share/soundtracker/play_cur.xpm
|
||||||
|
share/soundtracker/rightarrow.xpm
|
||||||
|
share/soundtracker/sharp.xpm
|
||||||
share/soundtracker/soundtracker_splash.png
|
share/soundtracker/soundtracker_splash.png
|
||||||
|
share/soundtracker/stop.xpm
|
||||||
|
Loading…
Reference in New Issue
Block a user