[SVN-Commit] r1414 - in trunk: . audio/alsa-plugins audio/alsa-plugins/files

svn-freebsd-gecko at chruetertee.ch svn-freebsd-gecko at chruetertee.ch
Sun Dec 1 00:59:57 UTC 2013


Author: jbeich
Date: Sun Dec  1 00:59:50 2013
New Revision: 1414

Log:
always use ariff's patch for alsa-plugins-oss, again

SNDCTL_DSP_GETIPTR is now used by default via IO_PTR option [1] while
BUFSZ_P2 controls behavior that triggers asserts in libcubeb [2].

PR:		ports/165247 [1], ports/170473 [2], ports/183861 [2]

Modified:
   trunk/Gecko_UPDATING
   trunk/audio/alsa-plugins/Makefile
   trunk/audio/alsa-plugins/files/alsa-plugins.patch

Modified: trunk/Gecko_UPDATING
==============================================================================
--- trunk/Gecko_UPDATING	Sun Dec  1 00:59:42 2013	(r1413)
+++ trunk/Gecko_UPDATING	Sun Dec  1 00:59:50 2013	(r1414)
@@ -4,4 +4,4 @@
 
   When using Firefox or SeaMonkey compiled with ALSA option ON it may
   crash on assert in alsa_refill_stream as described in ports/170473.
-  To workaround disable ARIFF_OSS in audio/alsa-plugins or use PULSEAUDIO.
+  To workaround enable BUFSZ_P2 in audio/alsa-plugins or use PULSEAUDIO.

Modified: trunk/audio/alsa-plugins/Makefile
==============================================================================
--- trunk/audio/alsa-plugins/Makefile	Sun Dec  1 00:59:42 2013	(r1413)
+++ trunk/audio/alsa-plugins/Makefile	Sun Dec  1 00:59:50 2013	(r1414)
@@ -17,15 +17,36 @@
 GNU_CONFIGURE=	yes
 USES=		pkgconfig
 LDFLAGS+=	-L${LOCALBASE}/lib
+EXTRA_PATCHES+=	${FILESDIR}/alsa-plugins.patch
 
-OPTIONS_DEFINE=	ARIFF_OSS JACK FFMPEG PULSEAUDIO SAMPLERATE SPEEX
+OPTIONS_DEFAULT=BUFSZ_P2 IO_PTR
+OPTIONS_DEFINE=	JACK FFMPEG PULSEAUDIO SAMPLERATE SPEEX
 OPTIONS_SUB=	${OPTIONS_DEFINE}
-ARIFF_OSS_DESC=	FreeBSD-specific OSS plugin
+
+OPTIONS_GROUP=	OSS
+OPTIONS_GROUP_OSS=IO_PTR BLKCNT_P2 BUFSZ_P2 VERBOSE
+
+IO_PTR_DESC=	Precise playback/recording pointer
+BLKCNT_P2_DESC=	Restrict number of fragments to ^2 aligned
+BUFSZ_P2_DESC=	Restrict buffer size to ^2 aligned (breaks aplay)
+VERBOSE_DESC=	Print debugging messages
 
 .include <bsd.port.options.mk>
 
-.if ${PORT_OPTIONS:MARIFF_OSS}
-EXTRA_PATCHES+=	${FILESDIR}/alsa-plugins.patch
+.if ${PORT_OPTIONS:MIO_PTR}
+CFLAGS+=	-DFREEBSD_OSS_USE_IO_PTR
+.endif
+
+.if ${PORT_OPTIONS:MBLKCNT_P2}
+CFLAGS+=	-DFREEBSD_OSS_BLKCNT_P2
+.endif
+
+.if ${PORT_OPTIONS:MBUFSZ_P2}
+CFLAGS+=	-DFREEBSD_OSS_BUFSZ_P2
+.endif
+
+.if ${PORT_OPTIONS:MVERBOSE}
+CFLAGS+=	-DFREEBSD_OSS_DEBUG_VERBOSE
 .endif
 
 .if ${PORT_OPTIONS:MJACK}

Modified: trunk/audio/alsa-plugins/files/alsa-plugins.patch
==============================================================================
--- trunk/audio/alsa-plugins/files/alsa-plugins.patch	Sun Dec  1 00:59:42 2013	(r1413)
+++ trunk/audio/alsa-plugins/files/alsa-plugins.patch	Sun Dec  1 00:59:50 2013	(r1414)
@@ -42,7 +42,7 @@
  	oss->ext.private_data = oss;
 --- oss/pcm_oss.c.orig	2009-08-31 21:09:41.000000000 +0800
 +++ oss/pcm_oss.c	2009-09-28 14:54:12.000000000 +0800
-@@ -22,17 +22,55 @@
+@@ -22,17 +22,48 @@
  #include <sys/ioctl.h>
  #include <alsa/asoundlib.h>
  #include <alsa/pcm_external.h>
@@ -54,18 +54,11 @@
 +#define ARRAY_SIZE(x)	(sizeof(x) / sizeof(*(x)))
 +
 +#ifdef __FreeBSD__
-+/* #define FREEBSD_OSS_USE_IO_PTR	1 */
-+/* #define FREEBSD_OSS_BLKCNT_P2	1 */
-+/* #define FREEBSD_OSS_DEBUG_VERBOSE	1 */
-+#undef FREEBSD_OSS_USE_IO_PTR	/* _IPTR is buggy ... Grr... */
-+#undef FREEBSD_OSS_BLKCNT_P2
-+#undef FREEBSD_OSS_DEBUG_VERBOSE
-+
 +#define FREEBSD_OSS_RATE_MIN	1
 +#define FREEBSD_OSS_RATE_MAX	384000
 +
 +#define FREEBSD_OSS_CHANNELS_MIN	1
-+#if __FreeBSD_version >= 800096
++#ifndef __DragonFly__
 +#define FREEBSD_OSS_CHANNELS_MAX	8
 +#else
 +#define FREEBSD_OSS_CHANNELS_MAX	2
@@ -73,7 +66,7 @@
 +
 +#define FREEBSD_OSS_BUFSZ_MAX	131072
 +#define FREEBSD_OSS_BLKCNT_MIN	2
-+#define FREEBSD_OSS_BLKSZ_MIN	16 /* (FREEBSD_OSS_CHANNEL_MAX * 4) */
++#define FREEBSD_OSS_BLKSZ_MIN	16 /* (FREEBSD_OSS_CHANNELS_MAX * 4) */
 +
 +#define FREEBSD_OSS_BUFSZ_MIN	(FREEBSD_OSS_BLKCNT_MIN * FREEBSD_OSS_BLKSZ_MIN)
 +#define FREEBSD_OSS_BLKCNT_MAX	(FREEBSD_OSS_BUFSZ_MAX / FREEBSD_OSS_BUFSZ_MIN)
@@ -461,7 +454,7 @@
  
  	if ((flags = fcntl(oss->fd, F_GETFL)) < 0) {
  		err = -errno;
-@@ -229,10 +530,128 @@
+@@ -229,10 +530,146 @@
  	return 0;
  }
  
@@ -478,6 +471,9 @@
 +#ifdef FREEBSD_OSS_BLKCNT_P2
 +	unsigned int period_list[30];
 +#endif
++#ifdef FREEBSD_OSS_BUFSZ_P2
++	unsigned int bufsz_list[30];
++#endif
 +	unsigned int nformats;
 +	unsigned int format[ARRAY_SIZE(oss_formats_tab)];
 +#if 0
@@ -580,6 +576,21 @@
 +	if (err < 0)
 +		return err;
 +
++#ifdef FREEBSD_OSS_BUFSZ_P2
++	tmp = 0;
++	for (i = 1; i < 31 && tmp < ARRAY_SIZE(bufsz_list); i++) {
++		if ((1 << i) > FREEBSD_OSS_BUFSZ_MAX)
++			break;
++		if ((1 << i) < FREEBSD_OSS_BUFSZ_MIN)
++			continue;
++		bufsz_list[tmp++] = 1 << i;
++	}
++
++	if (tmp > 0)
++		err = snd_pcm_ioplug_set_param_list(io,
++		    SND_PCM_IOPLUG_HW_BUFFER_BYTES, tmp, bufsz_list);
++	else
++#endif
 +	/* buffer size , not strictly ^2 */
 +	err = snd_pcm_ioplug_set_param_minmax(io,
 +	    SND_PCM_IOPLUG_HW_BUFFER_BYTES, FREEBSD_OSS_BUFSZ_MIN,


More information about the freebsd-gecko mailing list