[Bug 192755] New: snd_uaudio incorrect handling of version 1 audio format type descriptor
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Sun Aug 17 17:24:56 UTC 2014
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=192755
Bug ID: 192755
Summary: snd_uaudio incorrect handling of version 1 audio
format type descriptor
Product: Base System
Version: 10.0-STABLE
Hardware: amd64
OS: Any
Status: Needs Triage
Severity: Affects Only Me
Priority: ---
Component: usb
Assignee: freebsd-usb at FreeBSD.org
Reporter: juanmasf2 at ono.com
For USB audio 1.0 formats the code in uaudio.c uses the value of bBitResolution
from the descriptor directly to choose and internal audio format from the array
uaudio10_formats. It should use the value from bSubFrameSize instead.
It is clearly specified in the official USB document for audio data formats,
page 9 under the section "2.2.2 Audio Subframe" that the endpoint must be
handled using bSubFramSize*8 bits per sample from which the device will take
the number of bits it actually uses.
In my particular case I own a device reporting bBitResolution of 24 and
bSubFrameSize of 4. An unpatched driver will be sending 3-byte subframes to the
endpoint resulting in pure noise :)
For USB 2.0 formats the code already does some conversion to avoid this same
problem, using the equivalent bSubslotSize in the function
uaudio_chan_fill_info_sub:
/* 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;
}
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-usb
mailing list