14.4. High level layers

The rest (basically the MMSYSTEM and WINMM DLLs entry points). It also provides the skeleton for the core functionality for multimedia rendering. 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). Moreover, native DLLs require 16 bit MCI and low level drivers. Wine implements them as 32 bit drivers. MCI and low level drivers can either be 16 or 32 bit for Wine.

TODO:

14.4.1. MCI skeleton

Implementation of what is needed to load/unload MCI drivers, and to pass correct information to them. This is implemented in dlls/winmm/mci.c. The mciSendString function uses command strings, which are translated into normal MCI commands as used by mciSendCommand with the help of command tables. The API can be found in dlls/winmm/mmsystem.c and dlls/winmm/mci.c. The functions there (mciOpen,mciSysInfo) handle mid level driver allocation and calls. The implementation is not complete.

MCI drivers are seen as regular Wine modules, and can be loaded (with a correct load order between built-in, native, elfdll, so), as any other DLL. Please note, that MCI drivers module names must bear the .drv extension to be correctly understood.

The list of available MCI drivers is obtained as follows: 1. key 'mci' in [option] section from .winerc (or wineconf) mci=CDAUDIO:SEQUENCER gives the list of MCI drivers (names, in uppercase only) to be used in Wine. 2. This list, when defined, supersedes the mci key in c:\windows\system.ini

Note that native VIDEODISC crashes when the module is loaded, which occurs when the MCI procedures are initialised. Make sure that this is not in the list from above. Try adding: mci=CDAUDIO:SEQUENCER:WAVEAUDIO:AVIVIDEO:MPEGVIDEO to the [options] section of the wine config file.

TODO:

14.4.2. MCI multi-tasking

Multi-tasking capabilities used for the MCI drivers are provided in dlls/winmm/mmsystem.c.

TODO:

14.4.3. Timers

It currently uses a service thread, run in the context of the calling process, which should correctly mimic Windows behavior.

TODO:

14.4.4. MMIO

The API consists of the mmio* functions found in mdlls/winmm/mmio.c. Seems to work ok in most of the cases. There's some linear/segmented issues with 16 bit code. There are also some bugs when writting MMIO files.

14.4.5. sndPlayXXX functions

Seem to work correctly.