http://bugs.winehq.org/show_bug.cgi?id=14717
Jörg Höhle hoehle@users.sourceforge.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |hoehle@users.sourceforge.ne | |t
--- Comment #245 from Jörg Höhle hoehle@users.sourceforge.net 2011-12-12 08:04:40 CST --- I'm not that familiar with the DSound API, but I'd like to know whether Wine could come up with a scheme that allows its mixer to sit near mmdevapi, or use some COM-based objects to access mixer functionality. The point is, we don't know yet whether mmdevapi might not need a mixer and resampler eventually.
Why does mmdevapi's GetMixFormat return floating point? Obviously because that what the native mixer uses!
So I don't understand why in comment #243, Alexander asks for permission to use FP. That is obviously the right choice. The output of anything that is going to be mixed should be FP, then mixed (if HW has not enough channels) then converted to 16bit (if HW doesn't grok FP, Intel audio looks like it does).
How comes that native's winmm capabilities claim support of all frequencies since w7, even with cards that don't, whereas the same HW runding MS<Vista returns "real" capabilities? Because there must be a resampler somewhere between winmm for w7 and mmdevapi! (winmm for w7 supposedly uses mmdevapi)
In Wine, this was solved incompatibly by requiring the audio back ends to support all rates and formats, therefore using plughw (bug #27956) and having IsFormatSupported constantly return S_OK, unlike native.
Perhaps Wine must implement AUDCLNT_STREAMFLAGS_RATEADJUST one day, what is it going to do? (Read it and you'll see it's not a set_hw_params_rate).
I'd feel much better if there was a mixer that is shared both by DSound and mmdevapi and a resampler that is used and shared by DSound, winmm, msacm and mmdevapi. I don't see that as an impossible task, but then, I'm not familiar with DSound (and weird constraints on the buffer implementation such as bug #28748, comment #1 -- I wonder if apps do the same with mmdevapi's buffer?!?).