diff options
Diffstat (limited to 'www/firefox/files/patch-cubeb-sndio')
-rw-r--r-- | www/firefox/files/patch-cubeb-sndio | 116 |
1 files changed, 9 insertions, 107 deletions
diff --git a/www/firefox/files/patch-cubeb-sndio b/www/firefox/files/patch-cubeb-sndio index 974af005402b..4637d825c08d 100644 --- a/www/firefox/files/patch-cubeb-sndio +++ b/www/firefox/files/patch-cubeb-sndio @@ -1,113 +1,15 @@ -https://github.com/kinetiknz/cubeb/commit/a71f116501fe39962599c435ef65066f7e7ea9f5 -https://github.com/kinetiknz/cubeb/commit/3025cbec70f3ed097ec9a2f33a4823316a29efc4 -https://github.com/kinetiknz/cubeb/commit/bb2735fa2ff680fdc615edbb363b19ff4a759503 -https://github.com/kinetiknz/cubeb/pull/564 +https://github.com/kinetiknz/cubeb/commit/3ab507569153 diff --git a/src/cubeb_sndio.c b/src/cubeb_sndio.c index 4a05bd84..34b3513d 100644 --- media/libcubeb/src/cubeb_sndio.c +++ media/libcubeb/src/cubeb_sndio.c -@@ -32,6 +32,7 @@ - X(sio_eof) \ - X(sio_getpar) \ - X(sio_initpar) \ -+ X(sio_nfds) \ - X(sio_onmove) \ - X(sio_open) \ - X(sio_pollfd) \ -@@ -124,6 +125,23 @@ s16_to_float(void *ptr, long nsamp) - *(--dst) = (1. / 32768) * *(--src); - } - -+static const char * -+sndio_get_device() -+{ -+#ifdef __linux__ -+ /* -+ * On other platforms default to sndio devices, -+ * so cubebs other backends can be used instead. -+ */ -+ const char *dev = getenv("AUDIODEVICE"); -+ if (dev == NULL || *dev == '\0') -+ return "snd/0"; -+ return dev; -+#else -+ return SIO_DEVANY; -+#endif -+} -+ - static void - sndio_onmove(void *arg, int delta) - { -@@ -135,18 +153,23 @@ sndio_onmove(void *arg, int delta) - static void * - sndio_mainloop(void *arg) +@@ -128,7 +128,7 @@ s16_to_float(void *ptr, long nsamp) + static const char * + sndio_get_device() { --#define MAXFDS 8 -- struct pollfd pfds[MAXFDS]; -+ struct pollfd *pfds; - cubeb_stream *s = arg; - int n, eof = 0, prime, nfds, events, revents, state = CUBEB_STATE_STARTED; - size_t pstart = 0, pend = 0, rstart = 0, rend = 0; - long nfr; - -+ nfds = WRAP(sio_nfds)(s->hdl); -+ pfds = calloc(nfds, sizeof (struct pollfd)); -+ if (pfds == NULL) -+ return NULL; -+ - DPR("sndio_mainloop()\n"); - s->state_cb(s, s->arg, CUBEB_STATE_STARTED); - pthread_mutex_lock(&s->mtx); - if (!WRAP(sio_start)(s->hdl)) { - pthread_mutex_unlock(&s->mtx); -+ free(pfds); - return NULL; - } - DPR("sndio_mainloop(), started\n"); -@@ -274,6 +297,7 @@ sndio_mainloop(void *arg) - s->hwpos = s->swpos; - pthread_mutex_unlock(&s->mtx); - s->state_cb(s, s->arg, state); -+ free(pfds); - return NULL; - } - -@@ -281,6 +305,9 @@ sndio_mainloop(void *arg) - sndio_init(cubeb **context, char const *context_name) - { - void * libsndio = NULL; -+ struct sio_hdl *hdl; -+ -+ assert(context); - - #ifndef DISABLE_LIBSNDIO_DLOPEN - libsndio = dlopen("libsndio.so.7.0", RTLD_LAZY); -@@ -305,8 +332,17 @@ sndio_init(cubeb **context, char const *context_name) - #undef LOAD - #endif - -+ /* test if sndio works */ -+ hdl = WRAP(sio_open)(sndio_get_device(), SIO_PLAY, 1); -+ if (hdl == NULL) { -+ return CUBEB_ERROR; -+ } -+ WRAP(sio_close)(hdl); -+ - DPR("sndio_init(%s)\n", context_name); -- *context = malloc(sizeof(*context)); -+ *context = malloc(sizeof(**context)); -+ if (*context == NULL) -+ return CUBEB_ERROR; - (*context)->libsndio = libsndio; - (*context)->ops = &sndio_ops; - (void)context_name; -@@ -377,7 +413,7 @@ sndio_stream_init(cubeb * context, - goto err; - } - s->context = context; -- s->hdl = WRAP(sio_open)(NULL, s->mode, 1); -+ s->hdl = WRAP(sio_open)(sndio_get_device(), s->mode, 1); - if (s->hdl == NULL) { - DPR("sndio_stream_init(), sio_open() failed\n"); - goto err; +-#ifndef __OpenBSD__ ++#ifdef __linux__ + /* + * On other platforms default to sndio devices, + * so cubebs other backends can be used instead. |