openbsd-ports/audio/soundtracker/patches/patch-app_audio_c
jasper f94281c7b8 - update soundtracker to the gtk2 version
* sndio bits by jakemsr, thanks
2010-04-08 08:47:09 +00:00

74 lines
1.8 KiB
Plaintext

$OpenBSD: patch-app_audio_c,v 1.2 2010/04/08 08:47:09 jasper Exp $
--- app/audio.c.orig Thu Mar 25 10:48:05 2010
+++ app/audio.c Thu Mar 25 10:50:18 2010
@@ -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_io_driver *playback_driver = NULL;
st_io_driver *editing_driver = NULL;
@@ -391,16 +396,37 @@ static void audio_thread (void){
static gchar *msgbuf = NULL;
static gint msgbuflen = 0;
+#ifdef DRIVER_SNDIO
+ struct sio_hdl *hdl;
+#endif
+
audio_raise_priority();
loop: pfd[0].revents = 0;
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) pfd[npl].events |= POLLIN;
@@ -495,7 +521,19 @@ static void 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) x |= GDK_INPUT_READ;