aboutsummaryrefslogtreecommitdiffstats
path: root/www/seamonkey
diff options
context:
space:
mode:
authortobik <tobik@FreeBSD.org>2018-07-01 03:24:21 +0800
committertobik <tobik@FreeBSD.org>2018-07-01 03:24:21 +0800
commit70b40d0f70e7c73fc04af8ccb37bda43ff4220e3 (patch)
tree0bd4aa2d237a30cce5bbcc0c846f99806ee0195c /www/seamonkey
parenta801a1f63ccb9a63611069ccab3b1f8299440491 (diff)
downloadfreebsd-ports-gnome-70b40d0f70e7c73fc04af8ccb37bda43ff4220e3.tar.gz
freebsd-ports-gnome-70b40d0f70e7c73fc04af8ccb37bda43ff4220e3.tar.zst
freebsd-ports-gnome-70b40d0f70e7c73fc04af8ccb37bda43ff4220e3.zip
www/seamonkey: Backport sndio volume handling fix
https://bugzilla.mozilla.org/show_bug.cgi?id=1467882 PR: 229135 Approved by: gecko (jbeich)
Diffstat (limited to 'www/seamonkey')
-rw-r--r--www/seamonkey/Makefile2
-rw-r--r--www/seamonkey/files/patch-bug146788270
2 files changed, 71 insertions, 1 deletions
diff --git a/www/seamonkey/Makefile b/www/seamonkey/Makefile
index 217da33b0831..d79fee2ea5cb 100644
--- a/www/seamonkey/Makefile
+++ b/www/seamonkey/Makefile
@@ -3,7 +3,7 @@
PORTNAME= seamonkey
DISTVERSION= 2.49.3
-PORTREVISION= 8
+PORTREVISION= 9
MOZILLA_VER= 52 # above + 3
CATEGORIES?= www mail news editors irc ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
diff --git a/www/seamonkey/files/patch-bug1467882 b/www/seamonkey/files/patch-bug1467882
new file mode 100644
index 000000000000..a90748178de3
--- /dev/null
+++ b/www/seamonkey/files/patch-bug1467882
@@ -0,0 +1,70 @@
+--- mozilla/media/libcubeb/src/cubeb_sndio.c.orig 2018-04-04 00:35:17 UTC
++++ mozilla/media/libcubeb/src/cubeb_sndio.c
+@@ -43,17 +43,33 @@ struct cubeb_stream {
+ cubeb_data_callback data_cb; /* cb to preapare data */
+ cubeb_state_callback state_cb; /* cb to notify about state changes */
+ void *arg; /* user arg to {data,state}_cb */
++ float volume; /* current volume */
+ };
+
+ 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) {
+- s = lrintf(*(src++) * 32768);
++ s = lrintf(*(src++) * mult);
+ if (s < -32768)
+ s = -32768;
+ else if (s > 32767)
+@@ -111,7 +127,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;
+ }
+@@ -260,6 +278,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;
+@@ -346,7 +365,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;
+ }