1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-25 00:51:21 +00:00

- 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
This commit is contained in:
Florian Smeets 2013-12-14 14:41:17 +00:00
parent 1ed97b2fe8
commit 50cfc58f27
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=336451
5 changed files with 94 additions and 29 deletions

View File

@ -3,6 +3,7 @@
PORTNAME= alsa-lib
PORTVERSION= 1.0.27.2
PORTREVISION= 1
CATEGORIES= audio
MASTER_SITES= ALSA/lib \
GENTOO/distfiles

View File

@ -1,42 +1,65 @@
#
# FreeBSD/OSS
#
pcm_slave.oss {
pcm.type oss
}
pcm.!default {
type oss
device /dev/dsp
type plug
slave oss
}
ctl.!default {
type oss
device /dev/mixer
}
#
# Remap all possible surround stuffs.
#
pcm.!front {
type plug
slave oss
}
pcm.!rear {
type plug
slave oss
}
pcm.!center_lfe {
type plug
slave oss
}
pcm.!side {
type plug
slave oss
}
pcm.!surround40 {
type oss
device /dev/dsp
type plug
slave oss
}
pcm.!surround41 {
type oss
device /dev/dsp
type plug
slave oss
}
pcm.!surround50 {
type oss
device /dev/dsp
type plug
slave oss
}
pcm.!surround51 {
type oss
device /dev/dsp
type plug
slave oss
}
pcm.!surround71 {
type oss
device /dev/dsp
type plug
slave oss
}
#

View File

@ -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}

View File

@ -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,

View File

@ -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",