svn commit: r470834 - in head/www/palemoon: . files
Tobias Kortkamp
tobik at FreeBSD.org
Fri May 25 13:09:12 UTC 2018
Author: tobik
Date: Fri May 25 13:09:10 2018
New Revision: 470834
URL: https://svnweb.freebsd.org/changeset/ports/470834
Log:
www/palemoon: Consolidate sndio patches and apply softvol fix [1]
This will prevent Pale Moon from changing the slot volumes of sndiod
which can lead to them being too silent or even muted when Pale Moon
happens to reuse one of them later. It'll also fix a bug where Pale
Moon won't pick up slot volumes changes done externally and thus
provides inaccurate volume controls.
[1] https://marc.info/?l=openbsd-ports&m=152641946326955&w=2
PR: 228479
Submitted by: tobik
Approved by: lichray at gmail.com (maintainer)
Added:
head/www/palemoon/files/patch-sndio (contents, props changed)
Deleted:
head/www/palemoon/files/patch-bug1153151
head/www/palemoon/files/patch-bug1153179
head/www/palemoon/files/patch-cubeb5ffce9e91b
Modified:
head/www/palemoon/Makefile
Modified: head/www/palemoon/Makefile
==============================================================================
--- head/www/palemoon/Makefile Fri May 25 13:01:27 2018 (r470833)
+++ head/www/palemoon/Makefile Fri May 25 13:09:10 2018 (r470834)
@@ -3,6 +3,7 @@
PORTNAME= palemoon
DISTVERSION= 27.9.2
+PORTREVISION= 1
DISTVERSIONSUFFIX=_Release
CATEGORIES= www ipv6
Added: head/www/palemoon/files/patch-sndio
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/www/palemoon/files/patch-sndio Fri May 25 13:09:10 2018 (r470834)
@@ -0,0 +1,145 @@
+Bug 1153151 - make libcubeb sndio use non-blocking i/o
+Bug 1153179 - fix latency reporting in libcubeb sndio
+
+From cubeb:
+From 5ffce9e91b2fde70ba532ea215e3e9e7eed3d41a Mon Sep 17 00:00:00 2001
+From: Alexandre Ratchov <alex at caoua.org>
+Date: Thu, 2 Apr 2015 13:09:22 +1300
+Subject: [PATCH] sndio: improve and clamp float->s16 conversion.
+
+https://marc.info/?l=openbsd-ports&m=152641946326955&w=2
+Apply volume in software as do other backends. This is necessary
+because sndio volume may be controlled externally and there's no
+volume getter in libcubeb to notify the caller about volume
+changes.
+
+--- media/libcubeb/src/cubeb_sndio.c.orig 2018-05-24 13:59:58 UTC
++++ media/libcubeb/src/cubeb_sndio.c
+@@ -4,6 +4,7 @@
+ * This program is made available under an ISC-style license. See the
+ * accompanying file LICENSE for details.
+ */
++#include <math.h>
+ #include <poll.h>
+ #include <pthread.h>
+ #include <sndio.h>
+@@ -41,17 +42,39 @@ struct cubeb_stream {
+ uint64_t wrpos; /* number of written frames */
+ cubeb_data_callback data_cb; /* cb to preapare data */
+ cubeb_state_callback state_cb; /* cb to notify about state changes */
++ float volume; /* current volume */
+ void *arg; /* user arg to {data,state}_cb */
+ };
+
+ static void
+-float_to_s16(void *ptr, long nsamp)
++s16_setvol(void *ptr, long nsamp, float volume)
+ {
+ int16_t *dst = ptr;
++ int32_t mult = volume * 32768;
++ int32_t s;
++ while (nsamp-- > 0) {
++ s = *dst;
++ s = (s * mult) >> 15;
++ *(dst++) = s;
++ }
++}
++
++static void
++float_to_s16(void *ptr, long nsamp, float volume)
++{
++ int16_t *dst = ptr;
+ float *src = ptr;
++ float mult = volume * 32768;
++ int s;
+
+- while (nsamp-- > 0)
+- *(dst++) = *(src++) * 32767;
++ while (nsamp-- > 0) {
++ s = lrintf(*(src++) * mult);
++ if (s < -32768)
++ s = -32768;
++ else if (s > 32767)
++ s = 32767;
++ *(dst++) = s;
++ }
+ }
+
+ static void
+@@ -59,7 +82,7 @@ sndio_onmove(void *arg, int delta)
+ {
+ cubeb_stream *s = (cubeb_stream *)arg;
+
+- s->rdpos += delta;
++ s->rdpos += delta * s->bpf;
+ }
+
+ static void *
+@@ -103,7 +126,9 @@ sndio_mainloop(void *arg)
+ break;
+ }
+ if (s->conv)
+- float_to_s16(s->buf, nfr * s->pchan);
++ float_to_s16(s->buf, nfr * s->pchan, s->volume);
++ else
++ s16_setvol(s->buf, nfr * s->pchan, s->volume);
+ start = 0;
+ end = nfr * s->bpf;
+ }
+@@ -127,7 +152,7 @@ sndio_mainloop(void *arg)
+ state = CUBEB_STATE_ERROR;
+ break;
+ }
+- s->wrpos = 0;
++ s->wrpos += n;
+ start += n;
+ }
+ }
+@@ -179,7 +204,7 @@ sndio_stream_init(cubeb *context,
+ if (s == NULL)
+ return CUBEB_ERROR;
+ s->context = context;
+- s->hdl = sio_open(NULL, SIO_PLAY, 0);
++ s->hdl = sio_open(NULL, SIO_PLAY, 1);
+ if (s->hdl == NULL) {
+ free(s);
+ DPR("sndio_stream_init(), sio_open() failed\n");
+@@ -242,6 +267,7 @@ sndio_stream_init(cubeb *context,
+ free(s);
+ return CUBEB_ERROR;
+ }
++ s->volume = 1.;
+ *stream = s;
+ DPR("sndio_stream_init() end, ok\n");
+ (void)context;
+@@ -318,7 +344,7 @@ sndio_stream_get_position(cubeb_stream *s, uint64_t *p
+ {
+ pthread_mutex_lock(&s->mtx);
+ DPR("sndio_stream_get_position() %lld\n", s->rdpos);
+- *p = s->rdpos;
++ *p = s->rdpos / s->bpf;
+ pthread_mutex_unlock(&s->mtx);
+ return CUBEB_OK;
+ }
+@@ -328,7 +354,11 @@ sndio_stream_set_volume(cubeb_stream *s, float volume)
+ {
+ DPR("sndio_stream_set_volume(%f)\n", volume);
+ pthread_mutex_lock(&s->mtx);
+- sio_setvol(s->hdl, SIO_MAXVOL * volume);
++ if (volume < 0.)
++ volume = 0.;
++ else if (volume > 1.0)
++ volume = 1.;
++ s->volume = volume;
+ pthread_mutex_unlock(&s->mtx);
+ return CUBEB_OK;
+ }
+@@ -338,7 +368,7 @@ sndio_stream_get_latency(cubeb_stream * stm, uint32_t
+ {
+ // http://www.openbsd.org/cgi-bin/man.cgi?query=sio_open
+ // in the "Measuring the latency and buffers usage" paragraph.
+- *latency = stm->wrpos - stm->rdpos;
++ *latency = (stm->wrpos - stm->rdpos) / stm->bpf;
+ return CUBEB_OK;
+ }
+
More information about the svn-ports-all
mailing list