Hi,
Andrew Eikum writes:
(try2): Remove the test found by testbot. My Win7 Home VM passed that test, so it seems we can expect any behavior.
I object to the removal of the test like that. It should be replaced with a comment to explain that the behaviour of IsFormatSupported is very surprising, hence skipped. Actually, that behaviour begs for even more tests to understand what's going on.
So far I believed in the invariant: IsFormatSupported == S_OK <=> Initialize == S_OK which is verified using all standard formats (1-2 channels), with one exception on testbot: render.c:396: Initialize (1, 48000x16x1) returns 8889000f unlike IsFormatSupported ^1^ means in exclusive mode, and only there.
Now you experienced A. on testbot: IsFormatSupported(dwChannelMask==FFFF) == S_OK, like Initialize which conforms to the above invariant and simply suggests that ChannelMask is not checked at all, therefore this code in Wine seems too much: + fmtex->dwChannelMask != 0 && + fmtex->dwChannelMask != get_channel_mask(pwfx->nChannels))
B. your own Win7 Home system, with dwChannelMask=ffff, IsFormatSupported returns + ok(hr == S_FALSE || hr == AUDCLNT_E_UNSUPPORTED_FORMAT while Initialize returns + ok(hr == S_OK, which is weird.
When does IFS return UNSUPPORTED_FORMAT? When does it return S_FALSE? In the latter case, is the suggested format anything else than GetMixFormat?
What does exclusive mode return? Unlike in Wine, the shared mode "audio engine" mixer is a completely different SW entity than the exclusive mode "audio device", so it's important to check both.
This needs more testing. In particular, tests performed on HW that supports more than 2 channels are welcome. Based on your surprising test result, I'd guess yours is such a system.
Unlike DSound, mmdevapi has no GetSpeakerConfig that I'm aware of (short of Device Topology), so I don't know how apps find out about multi-channel abilities. BTW, I believe + fmtex->dwChannelMask != get_channel_mask(pwfx->nChannels)) in Wine is bogus anyway, because it's arbitrary. There exist different 3/4/5/6 channel configurations.
Regards, Jörg Höhle