The high level layers encompass basically the MMSYSTEM and WINMM DLLs exported APIs. It also provides the skeleton for the core functionality for multimedia playback and recording. Note that native MMSYSTEM and WINMM do not currently work under Wine and there is no plan to support them (it would require to also fully support VxD, which is not done yet).
WINMM and MMSYSTEM in Wine can handle both 16 bit and 32 bit drivers (for low level and MCI drivers). It will handle all the conversions transparently for the all the calls to WINMM and MMSYSTEM, as it knows what the driver interface is (16 bit or 32 bit) and it manages the information sent accordingly.
MCI drivers are seen as regular Wine modules, and can be loaded (with a correct load order between builtin, native), as any other DLL. Please note, that MCI drivers module names must bear the .drv extension to be correctly understood.
Multimedia timers are implemented with a dedicated thread, run in the context of the calling process, which should correctly mimic Windows behavior. The only drawback is that the thread will appear the calling process if it enumerates the running processes.
Wine also provide a DSound (DirectX) DLL with the proper COM implementation.
Note that a Wine specific flag has been added to the
wodOpen
function, so that the DSound
DLL can get a reference to a COM sound object from a given
WINMM wave output device. This should be changed in the
future.