mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-10 09:11:31 +00:00
We can not support 32-bit because Windows is buggy: The exact Windows 11 mmsys.cpl from build 26100.8737 populates Speaker Setup testing against hard-coded speaker masks and for each calls IKsFormatSupport::IsFormatSupported() using 24 hard-coded PCM formats. These formats do not include 32-bit in 32-bit, consequently, every one of the wizard’s format probes fails and it inserts zero channel-list entries. It does however test for 24-bit in 32-bit which passes, however this exposes another breakage due to an inconsistency inside Windows usbaudio2.sys For bSubslotSize = 4, bBitResolution = 24, Windows does this: 1. It publishes a KS range whose minimum and maximum bit depths are both taken from bBitResolution, so the range says 24-bit. 2. It correctly constructs the actual stream format as: wBitsPerSample = 32, wValidBitsPerSample = 24 3. KS range intersection rejects that 24-in-32 format because its container is 32 bits while the published range says 24. 4. A packed 24-bit candidate passes range intersection, but the subsequent exact stream check rejects it because it uses a three-byte container while USB advertises four bytes. Therefore no format can pass both checks. That exactly explains: * USB Device Tree Viewer seeing 24-bit device ranges. * The MMDevice endpoint exposing no usable formats. * Windows being unable to start playback. I verified this in the exact Windows 10.0.26100.8737 driver: * KSPin::AddDataRange stores bBitResolution into both KS bit-depth bounds. * MiniportWave::DataRangeIntersection tests those bounds. * WaveFormatInfo::IsMatchingStreamFormat separately compares both the container width and valid-bit count.