PERFORCE change 171834 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Wed Dec 16 01:15:35 PST 2009
http://p4web.freebsd.org/chv.cgi?CH=171834
Change 171834 by hselasky at hselasky_laptop001 on 2009/12/16 09:14:53
USB audio:
- add support for more than 2 audio channels.
- patch by: Ariff Abdullah and HPS
Affected files ...
.. //depot/projects/usb/src/sys/dev/sound/usb/uaudio.c#64 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/sound/usb/uaudio.c#64 (text+ko) ====
@@ -89,7 +89,7 @@
static int uaudio_default_rate = 96000;
static int uaudio_default_bits = 32;
-static int uaudio_default_channels = 2;
+static int uaudio_default_channels = 16;
#if USB_DEBUG
static int uaudio_debug = 0;
@@ -1088,9 +1088,9 @@
/* set a valid value */
rate = 192000 - (192000 % fps);
}
- if ((channels == 0) || (channels > 2)) {
+ if ((channels == 0) || (channels > 16)) {
/* set a valid value */
- channels = 2;
+ channels = 16;
}
if (sbuf_new(&sc->sc_sndstat, NULL, 4096, SBUF_AUTOEXTEND)) {
sc->sc_sndstat_valid = 1;
@@ -1295,6 +1295,7 @@
&sc->sc_play_chan : &sc->sc_rec_chan);
uint32_t buf_size;
uint32_t frames;
+ uint32_t format;
uint8_t endpoint;
uint8_t blocks;
uint8_t iface_index;
@@ -1329,15 +1330,34 @@
ch->pcm_ch = c;
ch->pcm_mtx = c->lock;
- if (ch->p_asf1d->bNrChannels >= 2)
- ch->pcm_cap.fmtlist[0] =
- SND_FORMAT(ch->p_fmt->freebsd_fmt, 2, 0);
- else
- ch->pcm_cap.fmtlist[0] =
- SND_FORMAT(ch->p_fmt->freebsd_fmt, 1, 0);
+ format = ch->p_fmt->freebsd_fmt;
+
+ switch (ch->p_asf1d->bNrChannels) {
+ case 2:
+ /* stereo */
+ format = SND_FORMAT(format, 2, 0);
+ break;
+ case 1:
+ /* mono */
+ format = SND_FORMAT(format, 1, 0);
+ break;
+ default:
+ /* surround and more */
+ format = feeder_matrix_default_format(
+ SND_FORMAT(format, ch->p_asf1d->bNrChannels, 0));
+ break;
+ }
+ ch->pcm_cap.fmtlist[0] = format;
ch->pcm_cap.fmtlist[1] = 0;
+ /* check if format is not supported */
+
+ if (format == 0) {
+ DPRINTF("The selected audio format is not supported\n");
+ goto error;
+ }
+
/* set alternate interface corresponding to the mode */
endpoint = ch->p_ed1->bEndpointAddress;
More information about the p4-projects
mailing list