svn commit: r270718 - stable/9/sys/dev/sound/usb
Hans Petter Selasky
hselasky at FreeBSD.org
Wed Aug 27 14:24:01 UTC 2014
Author: hselasky
Date: Wed Aug 27 14:24:00 2014
New Revision: 270718
URL: http://svnweb.freebsd.org/changeset/base/270718
Log:
MFC r270134:
Use the "bSubslotSize" and "bSubFrameSize" fields to obtain the actual
sample size. According to the USB audio frame format specification
from USB.org, the value in the "bBitResolution" field can be less than
the actual sample size, depending on the actual hardware, and should
not be used for this computation.
PR: 192755
Modified:
stable/9/sys/dev/sound/usb/uaudio.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/dev/ (props changed)
Modified: stable/9/sys/dev/sound/usb/uaudio.c
==============================================================================
--- stable/9/sys/dev/sound/usb/uaudio.c Wed Aug 27 14:22:40 2014 (r270717)
+++ stable/9/sys/dev/sound/usb/uaudio.c Wed Aug 27 14:24:00 2014 (r270718)
@@ -1665,21 +1665,10 @@ uaudio_chan_fill_info_sub(struct uaudio_
} else if (audio_rev >= UAUDIO_VERSION_20) {
uint32_t dwFormat;
- uint8_t bSubslotSize;
dwFormat = UGETDW(asid.v2->bmFormats);
bChannels = asid.v2->bNrChannels;
- bBitResolution = asf1d.v2->bBitResolution;
- bSubslotSize = asf1d.v2->bSubslotSize;
-
- /* Map 4-byte aligned 24-bit samples into 32-bit */
- if (bBitResolution == 24 && bSubslotSize == 4)
- bBitResolution = 32;
-
- if (bBitResolution != (bSubslotSize * 8)) {
- DPRINTF("Invalid bSubslotSize\n");
- goto next_ep;
- }
+ bBitResolution = asf1d.v2->bSubslotSize * 8;
if ((bChannels != channels) ||
(bBitResolution != bit_resolution)) {
@@ -1726,7 +1715,7 @@ uaudio_chan_fill_info_sub(struct uaudio_
wFormat = UGETW(asid.v1->wFormatTag);
bChannels = UAUDIO_MAX_CHAN(asf1d.v1->bNrChannels);
- bBitResolution = asf1d.v1->bBitResolution;
+ bBitResolution = asf1d.v1->bSubFrameSize * 8;
if (asf1d.v1->bSamFreqType == 0) {
DPRINTFN(16, "Sample rate: %d-%dHz\n",
More information about the svn-src-stable-9
mailing list