diff options
author | Florian Smeets <flo@FreeBSD.org> | 2013-12-14 14:41:17 +0000 |
---|---|---|
committer | Florian Smeets <flo@FreeBSD.org> | 2013-12-14 14:41:17 +0000 |
commit | 50cfc58f27626b350f6c37ab57f39a9aa06aec0f (patch) | |
tree | 3c3536c4cd313fac086be7f8987b4636a3393e80 /audio/alsa-plugins | |
parent | 1ed97b2fe829d26fd3d7d65f58d55ef6fd243330 (diff) | |
download | ports-50cfc58f27626b350f6c37ab57f39a9aa06aec0f.tar.gz ports-50cfc58f27626b350f6c37ab57f39a9aa06aec0f.zip |
- ALSA now supports playing HTML5 audio with 32-bit sample format [1]
after being converted from float as passed by firefox/libcubeb [2]
- Restore behavior from r296140 while adding alignment options in case
of issues. This should make things slightly less broken and add more
sample formats. [1]
- Some apps (e.g. linux-firefox with ports/169896) don't check with ALSA
which sample formats are supported and just feed whatever they like,
assuming the underlying device supports it.
While here also fix mixer device for OSS plugin. It should be /dev/dsp
according to 4Front OSS wiki. The only works with ARIFF_OSS enabled
but the volume is reset on close(). audio/oss doesn't work either way:
the new (OSSv4) way to control mixer is via SNDCTL_MIX_* ioctls. [2]
PR: ports/183861 [1]
PR: ports/184006 [2]
Submitted by: Jan Beich <jbeich@tormail.org>
Approved by: maintainer timeout
Notes
Notes:
svn path=/head/; revision=336451
Diffstat (limited to 'audio/alsa-plugins')
-rw-r--r-- | audio/alsa-plugins/Makefile | 31 | ||||
-rw-r--r-- | audio/alsa-plugins/files/alsa-plugins.patch | 33 | ||||
-rw-r--r-- | audio/alsa-plugins/files/patch-oss-ctl_oss.c | 9 |
3 files changed, 57 insertions, 16 deletions
diff --git a/audio/alsa-plugins/Makefile b/audio/alsa-plugins/Makefile index 8b7f9fefe86e..f9f1796360a6 100644 --- a/audio/alsa-plugins/Makefile +++ b/audio/alsa-plugins/Makefile @@ -3,7 +3,7 @@ PORTNAME= alsa-plugins PORTVERSION= 1.0.27 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= audio MASTER_SITES= ALSA/plugins \ GENTOO/distfiles @@ -17,15 +17,36 @@ USE_BZIP2= yes 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} diff --git a/audio/alsa-plugins/files/alsa-plugins.patch b/audio/alsa-plugins/files/alsa-plugins.patch index c7ebabd0f3ad..0e3c21e2dca4 100644 --- a/audio/alsa-plugins/files/alsa-plugins.patch +++ b/audio/alsa-plugins/files/alsa-plugins.patch @@ -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, diff --git a/audio/alsa-plugins/files/patch-oss-ctl_oss.c b/audio/alsa-plugins/files/patch-oss-ctl_oss.c index 09b9b308f038..e7e38139f7d9 100644 --- a/audio/alsa-plugins/files/patch-oss-ctl_oss.c +++ b/audio/alsa-plugins/files/patch-oss-ctl_oss.c @@ -12,3 +12,12 @@ typedef struct snd_ctl_oss { snd_ctl_ext_t ext; +@@ -52,7 +56,7 @@ static const char *const vol_devices[SOU + [SOUND_MIXER_CD] = "CD Playback Volume", + [SOUND_MIXER_IMIX] = "Monitor Mix Playback Volume", + [SOUND_MIXER_ALTPCM] = "Headphone Playback Volume", +- [SOUND_MIXER_RECLEV] = "Capture Volume", ++ [SOUND_MIXER_RECLEV] = "Master Capture Volume", + [SOUND_MIXER_IGAIN] = "Capture Volume", + [SOUND_MIXER_OGAIN] = "Playback Volume", + [SOUND_MIXER_LINE1] = "Aux Playback Volume", |