summaryrefslogtreecommitdiff
path: root/www/firefox/files/patch-cubeb-sndio
diff options
context:
space:
mode:
Diffstat (limited to 'www/firefox/files/patch-cubeb-sndio')
-rw-r--r--www/firefox/files/patch-cubeb-sndio116
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.