2001-05-22 21:26:31 +02:00
|
|
|
|
<chapter id="multimedia">
|
|
|
|
|
<title>Wine and Multimedia</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
|
|
|
|
This file contains information about the implementation of the
|
2003-01-05 02:08:56 +01:00
|
|
|
|
multimedia layer of Wine.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
The implementation can be found in the
|
|
|
|
|
<filename>dlls/winmm/</filename> directory (and in many of its
|
|
|
|
|
subdirectories), but also in <filename>dlls/msacm/</filename>
|
|
|
|
|
(for the audio compression/decompression manager) and
|
|
|
|
|
<filename>dlls/msvideo/</filename> (for the video
|
|
|
|
|
compression/decompression manager).
|
2002-07-24 05:00:02 +02:00
|
|
|
|
</para>
|
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<sect1 id="mm-overview">
|
|
|
|
|
<title>Overview</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
|
|
|
|
The multimedia stuff is split into 3 layers. The low level (device
|
|
|
|
|
drivers), mid level (MCI commands) and high level abstraction layers.
|
|
|
|
|
The low level layer has also some helper DLLs (like the MSACM/MSACM32
|
|
|
|
|
and MSVIDEO/MSVFW32 pairs).
|
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
All of those components are defined as DLLs (one by one).
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
The low level layer may depend on current hardware and OS services
|
|
|
|
|
(like OSS on Unix). It provides the core of playback/record
|
|
|
|
|
using fine grain objects (audio/midi streams...).
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Mid level (MCI) and high level layers must be written independently from
|
|
|
|
|
the hardware and OS services.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
MCI level provides some coarser grain operations (like playing
|
|
|
|
|
a Midi file, or playing a video stream).
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
</sect1>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<sect1 id="mm-arch">
|
|
|
|
|
<title>Multimedia architecture</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title>Windows 95 multimedia architecture</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<screen>
|
|
|
|
|
|
|
|
|
|
|
Kernel space | Client applications
|
|
|
|
|
|
|
|
|
|
|
| | | ^ ^ | | | |
|
|
|
|
|
| 16>| |<32 16>| |<32 16>| |<32 16>| |<32
|
|
|
|
|
| | v | | | v | v
|
|
|
|
|
| +----|-----------|---------|------------|-------+
|
|
|
|
|
| | | | | | | WinMM.dll
|
|
|
|
|
| | | | | | | 32 bit
|
|
|
|
|
| +----|-----------|---------|------------|-------+
|
|
|
|
|
| | | | ^ | | |
|
|
|
|
|
| +------+ | |<16 | | | |<16 |
|
|
|
|
|
| | 16>| | | | | | | |
|
|
|
|
|
| | v v v | | v v v
|
|
|
|
|
| | +---------------+---+-------------+-------------+
|
|
|
|
|
| | | waveInXXX | | mciXXX | *playSound* |
|
|
|
|
|
| | | waveOutXXX | | | mmioXXX |
|
|
|
|
|
| | | midiInXXX | | | timeXXX |
|
|
|
|
|
| | | midiOutXXX | | | driverXXX |
|
|
|
|
|
| | | midiStreamXXX | | | | MMSystem.dll
|
|
|
|
|
| | | mixerXXX | | | | 16 bit
|
|
|
|
|
+--------+ | | | auxXXX +---+ +---+ mmThread| |
|
|
|
|
|
|MMDEVLDR|<------->| joyXXX | Call back | mmTask | |
|
|
|
|
|
+--------+ | | +-----------+-----------+---------+-------------+
|
|
|
|
|
^ | | | ^ ^ | ^
|
|
|
|
|
| | | 16>| |<16>| 16>| |<16
|
|
|
|
|
v | | v | | v |
|
|
|
|
|
+--------+ | | +-------------+ +----------+
|
|
|
|
|
| VxD |<------->| *.drv | | mci*.drv |
|
|
|
|
|
+--------+ | | +--------------+ +-----------+
|
|
|
|
|
| | | msacm.drv | | mciwave |
|
|
|
|
|
| | +--------------+ +-----------+
|
|
|
|
|
| | | midimap.drv | | mcimidi |
|
|
|
|
|
| | +-------------+ +-----------+
|
|
|
|
|
| | Low-level drivers | ... | MCI drivers
|
|
|
|
|
| | +----------+
|
|
|
|
|
| | |
|
|
|
|
|
| | |<16
|
|
|
|
|
| +-------------------------------+
|
|
|
|
|
|
|
|
|
|
|
</screen>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
The important points to notice are:
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
all drivers (and most of the core code) is 16 bit
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
all hardware (or most of it) dependent code reside in the kernel
|
|
|
|
|
space (which is not surprising)
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</sect2>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title>Windows NT multimedia architecture</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Note that Win 98 has mixed 95/NT architecture, so when
|
|
|
|
|
speaking about Windows 95 (resp. NT) architecture, it refers
|
|
|
|
|
to the type of architecture, not what's actually
|
|
|
|
|
implemented. For example, Windows 98 implements both types
|
|
|
|
|
of architectures.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
The important points to notice (compared to the Windows 95
|
|
|
|
|
architecture) are:
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
drivers (low level, MCIs...) are 32 bit and Unicode
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
the interfaces between kernel and user drivers has
|
|
|
|
|
changed, but it doesn't impact much Wine. Those
|
|
|
|
|
changes allow some good things (like kernel mixing,
|
|
|
|
|
where different apps share the audio hardware) and of
|
|
|
|
|
course bad things (like kernel mixing, which adds
|
|
|
|
|
latency).
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</sect2>
|
|
|
|
|
|
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title>Wine multimedia architecture</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<screen>
|
|
|
|
|
|
|
|
|
|
|
Kernel space | Client applications
|
|
|
|
|
|
|
|
|
|
|
| | | ^ ^ | | | |
|
|
|
|
|
| 16>| |<32 16>| |<32 16>| |<32 16>| |<32
|
|
|
|
|
| | | | | | | | |
|
|
|
|
|
| +------+ | | | | | | | |
|
|
|
|
|
| |32/16>| | | | | | | | |
|
|
|
|
|
| | v v v | | v v v v
|
|
|
|
|
| | +---------------+---+-------------+-------------+
|
|
|
|
|
| | | waveInXXX | | mciXXX | *playSound* |
|
|
|
|
|
| | | waveOutXXX | | | mmioXXX | WinMM.dll
|
|
|
|
|
| | | midiInXXX | | | timeXXX | 32 bit
|
|
|
|
|
| | | midiOutXXX | | | driverXXX |
|
|
|
|
|
| | | midiStreamXXX | | | | MMSystem.dll
|
|
|
|
|
| | | mixerXXX | | | | 16 bit
|
|
|
|
|
| | | auxXXX +---+ +---+ mmThread| |
|
|
|
|
|
| | | joyXXX | Call back | mmTask | |
|
|
|
|
|
| | +-----------+-----------+---------+-------------+
|
|
|
|
|
| | || ^ ^ | ^
|
|
|
|
|
| | 16>||<32 |<16>| 16>| |<16
|
|
|
|
|
| | vv |<32>| 32>v |<32
|
|
|
|
|
+---------+ | | +-------------+ +----------+
|
|
|
|
|
|HW driver|<------->| *.drv | | mci*.drv |
|
|
|
|
|
+---------+ | | +--------------+ +-----------+
|
|
|
|
|
| | | msacm.drv | | mciwave |
|
|
|
|
|
| | +--------------+ +-----------+
|
|
|
|
|
| | | midimap.drv | | mcimidi |
|
|
|
|
|
| | +-------------+ +-----------+
|
|
|
|
|
| | Low-level drivers | ... | MCI drivers
|
|
|
|
|
| | +----------+
|
|
|
|
|
| | |
|
|
|
|
|
| | |<32/16
|
|
|
|
|
| +-------------------------------+
|
|
|
|
|
|
|
|
|
|
|
</screen>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<para>
|
|
|
|
|
From the previous drawings, the most noticeable differences are:
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
low-level drivers can either be 16 or 32 bit (in fact,
|
|
|
|
|
Wine supports only native wave and audio mappers).
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
MCI drivers can either be 16 or 32 bit
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
all built-in drivers (low-level and MCI) will be written as 32 bit
|
|
|
|
|
drivers
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Wine's WinMM automatically adapts the messages to be sent to
|
|
|
|
|
a driver so that it can convert it to 16 or 32 bit
|
|
|
|
|
interfaces.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</sect2>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</sect1>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<sect1 id="mm-low">
|
|
|
|
|
<title>Low level layers</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
The low level drivers abstract the hardware specific features
|
|
|
|
|
from the rest of the multimedia code. Those are implemented with a
|
|
|
|
|
well defined set of APIs, as windows do.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Please note that native low level drivers are not currently supported
|
|
|
|
|
in Wine, because they either access hardware components or require
|
|
|
|
|
VxDs to be loaded; Wine does not correctly supports those two so far.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<para>
|
|
|
|
|
There are two specific low level drivers (msacm.drv for wave input/output,
|
|
|
|
|
midimap.drv for MIDI output only). These drivers (also present
|
|
|
|
|
in Windows) allow:
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
choosing one low level driver between many (we'll
|
|
|
|
|
discuss how the choice is made later on)
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
add the possibility to convert stream's format (ie ADPCM =>
|
|
|
|
|
PCM) (this is useful if the format required by the
|
|
|
|
|
application for playback isn't supported by the soundcard).
|
|
|
|
|
</para>
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
add the possibility to filter a stream (adding echo, equalizer...
|
|
|
|
|
to a wave stream, or modify the instruments that have to be
|
|
|
|
|
played for a MIDI stream).
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title>Hardware-bound low level drivers</title>
|
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Each low lever driver has to implement at least one of the
|
|
|
|
|
following functionality, through the named function:
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Waveform audio: out for playback, and in for
|
|
|
|
|
recording. MMSYSTEM and WINMM call the real low level
|
|
|
|
|
audio driver using the driver's
|
|
|
|
|
<function>wodMessage</function> and
|
|
|
|
|
<function>widMessage</function> functions which handle
|
|
|
|
|
the different requests.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
MIDI (Musical Instrument Digital Interface): out for
|
|
|
|
|
playback, and in for recording. MMSYSTEM and WINMM
|
|
|
|
|
call the low level driver functions using the driver's
|
|
|
|
|
<function>midMessage</function> and the
|
|
|
|
|
<function>modMessage</function> functions.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Mixer: this allows setting the volume for each one of
|
|
|
|
|
the other functionnality (and also some specific
|
|
|
|
|
attributes, like left/right balance for stereo
|
|
|
|
|
streams...). MMSYSTEM and WINMM call the low level
|
|
|
|
|
driver functions using the
|
|
|
|
|
<function>mxdMessage</function> function.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Aux: this is the predecessor of the mixer
|
|
|
|
|
functionnality (introduced in Win 95). Its usage has
|
|
|
|
|
been deprecated in favor of mixer interfaces.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Wine currently supports the following (kernel) multimedia
|
|
|
|
|
interfaces.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Open Sound System (OSS) as supplied in the Linux and
|
|
|
|
|
FreeBSD kernels by <ulink
|
|
|
|
|
url="http://www.4front-tech.com/">4Front
|
|
|
|
|
Technologies</ulink>. The presence of this driver is
|
|
|
|
|
checked by configure (depends on the
|
|
|
|
|
<sys/soundcard.h> file). Source code resides in
|
|
|
|
|
<filename>dlls/winmm/wineoss</filename>.
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
Advanced Linux Sound Architecture (<ulink
|
|
|
|
|
url="http://www.alsa-project.org/">ALSA</ulink>) as
|
|
|
|
|
supplied in the Linux kernel. Source code resides in
|
|
|
|
|
<filename>dlls/winmm/winealsa</filename>.
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
Analog RealTime Synthetizer (<ulink
|
|
|
|
|
url="http://www.arts-project.org/">aRts</ulink>): a
|
|
|
|
|
network server (and virtual mixer) used in the KDE project.
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
Network Audio Server (<ulink
|
|
|
|
|
url="http://radscan.com/nas.html">NAS</ulink>): an
|
|
|
|
|
audio server.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<ulink
|
|
|
|
|
url="http://jackit.sourceforge.net/">Jack</ulink>: a
|
|
|
|
|
low latency audio server.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
AudioIO: the native Solaris audio interface.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<para>
|
|
|
|
|
The supported functionnalities per driver is as follows
|
|
|
|
|
(this table lists the available features of the products,
|
|
|
|
|
not exactly what's actually implemented on Wine):
|
|
|
|
|
<table frame="all">
|
|
|
|
|
<title>Wine multimedia drivers' functionalities</title>
|
|
|
|
|
<tgroup cols="6" align="left" colsep="1" rowsep="1">
|
|
|
|
|
<thead>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>Driver</entry>
|
|
|
|
|
<entry>Wave Out</entry>
|
|
|
|
|
<entry>Wave In</entry>
|
|
|
|
|
<entry>Midi Out</entry>
|
|
|
|
|
<entry>Midi In</entry>
|
|
|
|
|
<entry>Mixer (and Aux)</entry>
|
|
|
|
|
</row>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>OSS</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>ALSA</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>aRts</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>NAS</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>AudioIO</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>Jack</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
</row>
|
|
|
|
|
</tbody>
|
|
|
|
|
</tgroup>
|
|
|
|
|
</table>
|
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Lots of listed drivers won't support Midi (in a short time)
|
|
|
|
|
because the exposed "Un*x" native interfaces don't. This
|
|
|
|
|
would require using some kind as software synthesis (as
|
|
|
|
|
Timidity), but we cannot incorporate as it's GPL'ed.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</sect2>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title>Wave mapper (msacm.drv)</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
The Wave mapper device allows to load on-demand audio codecs
|
|
|
|
|
in order to perform software conversion for the types the
|
|
|
|
|
actual low level driver (hardware). Those codecs are
|
|
|
|
|
provided through the standard ACM drivers in MSACM32.DLL.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Wave mapper driver implementation can be found in
|
|
|
|
|
<filename>dlls/winmm/wavemap/</filename> directory. This
|
|
|
|
|
driver heavily relies on MSACM and MSACM32 DLLs which can be
|
|
|
|
|
found in <filename>dlls/msacm</filename> and
|
|
|
|
|
<filename>dlls/msacm32</filename>. Those DLLs load ACM
|
|
|
|
|
drivers which provide the conversion to PCM format (which is
|
|
|
|
|
normally supported by low level drivers). A Law, uLaw,
|
|
|
|
|
ADPCM, MP3... fit into the category of non PCM formats.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</sect2>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title>MIDI mapper (midimap.drv)</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Midi mapper allows to map each one of 16 MIDI channels to a
|
|
|
|
|
specific instrument on an installed sound card. This allows
|
|
|
|
|
for example to support different MIDI instrument definitions
|
|
|
|
|
(XM, GM...). It also permits to output on a per channel
|
|
|
|
|
basis to different MIDI renderers.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
A built-in MIDI mapper can be found in
|
|
|
|
|
<filename>dlls/winmm/midimap/</filename>. It partly provides
|
|
|
|
|
the same functionality as the Windows' one. It allows to
|
|
|
|
|
pick up destination channels: you can map a given channel to
|
|
|
|
|
a specific playback device channel (see the configuration
|
|
|
|
|
bits for more details).
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
</sect2>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="mm-mci">
|
|
|
|
|
<title>Mid level drivers (MCI)</title>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
The mid level drivers are represented by some common API
|
|
|
|
|
functions, mostly <function>mciSendCommand</function> and
|
|
|
|
|
<function>mciSendString</function>. Wine implements several
|
|
|
|
|
MCI mid level drivers.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
<table frame="all">
|
|
|
|
|
<title>Wine MCI drivers</title>
|
|
|
|
|
<tgroup cols="4" align="left" colsep="1" rowsep="1">
|
|
|
|
|
<thead>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>MCI Name</entry>
|
|
|
|
|
<entry>DLL Name</entry>
|
|
|
|
|
<entry>Role</entry>
|
|
|
|
|
<entry>Location</entry>
|
|
|
|
|
<entry>Comments</entry>
|
|
|
|
|
</row>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>CdAudio</entry>
|
|
|
|
|
<entry>MciCDA.drv</entry>
|
|
|
|
|
<entry>MCI interface to a CD audio player</entry>
|
|
|
|
|
<entry><filename>dlls/winmm/mcicda/</filename></entry>
|
|
|
|
|
<entry>
|
|
|
|
|
Relies on NTDLL CdRom raw interface (through
|
|
|
|
|
<function>DeviceIoControl</function>).
|
|
|
|
|
</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>WaveAudio</entry>
|
|
|
|
|
<entry>MciWave.drv</entry>
|
|
|
|
|
<entry>
|
|
|
|
|
MCI interface for wave playback and record
|
|
|
|
|
</entry>
|
|
|
|
|
<entry><filename>dlls/winmm/mciwave/</filename></entry>
|
|
|
|
|
<entry>It uses the low level audio API.</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>Sequencer</entry>
|
|
|
|
|
<entry>MciSeq.drv</entry>
|
|
|
|
|
<entry>Midi Sequencer (playback)</entry>
|
|
|
|
|
<entry><filename>dlls/winmm/mciseq/</filename></entry>
|
|
|
|
|
<entry>It uses the low level midi APIs</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>AviVideo</entry>
|
|
|
|
|
<entry>MciAvi.drv</entry>
|
|
|
|
|
<entry>AVI playback and record</entry>
|
|
|
|
|
<entry><filename>dlls/winmm/mciavi/</filename></entry>
|
|
|
|
|
<entry>
|
|
|
|
|
It rather heavily relies on MSVIDEO/MSVFW32 DLLs
|
|
|
|
|
pair to work.
|
|
|
|
|
</entry>
|
|
|
|
|
</row>
|
|
|
|
|
</tbody>
|
|
|
|
|
</tgroup>
|
|
|
|
|
</table>
|
|
|
|
|
The MCI Name column is the name of the MCI driver, as it is
|
|
|
|
|
searched in configuration. The DLL Name column is the name of
|
|
|
|
|
the DLL the configuration provides as a value. The name listed
|
|
|
|
|
here is the default one (see the configuration section for the
|
|
|
|
|
details).
|
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<para>
|
|
|
|
|
Adding a new MCI driver is just a matter of writing the
|
|
|
|
|
corresponding DLL with the correct interface (see existing MCI
|
|
|
|
|
drivers for the details), and to provide the relevant setup
|
|
|
|
|
information for <filename>wine.inf</filename>
|
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
</sect1>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<sect1 id="mm-high">
|
|
|
|
|
<title>High level layers</title>
|
2001-05-22 21:26:31 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<sect2>
|
|
|
|
|
<title>WINMM (and MMSYSTEM)</title>
|
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
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).
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
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.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
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 <filename>.drv</filename> extension to be
|
|
|
|
|
correctly understood.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
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.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</sect2>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title>DSOUND</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Wine also provide a DSound (DirectX) DLL with the proper
|
|
|
|
|
COM implementation.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Note that a Wine specific flag has been added to the
|
|
|
|
|
<function>wodOpen</function> 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.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</sect2>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</sect1>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<sect1 id="msacm">
|
|
|
|
|
<title>MS ACM Dlls</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title>Contents</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<para>
|
|
|
|
|
The MSACM32 (and its 16 bit sibbling MSACM) provide a way to
|
|
|
|
|
map a given wave format to another format. It also provides
|
|
|
|
|
filtering capabilities. Those DLLs only implement the proper
|
|
|
|
|
switch between a caller and a driver providing the
|
|
|
|
|
implementation of the requested format change or filter
|
|
|
|
|
operation.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
There's nothing specific in Wine's implementation compared
|
|
|
|
|
to Windows' one. Here's however a list of the builtin format
|
|
|
|
|
change drivers (there's no filter driver yet):
|
|
|
|
|
<table frame="all">
|
|
|
|
|
<title>Wine ACM drivers</title>
|
|
|
|
|
<tgroup cols="2" align="left" colsep="1" rowsep="1">
|
|
|
|
|
<thead>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>Name</entry>
|
|
|
|
|
<entry>Provides</entry>
|
|
|
|
|
</row>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>imaadp32</entry>
|
|
|
|
|
<entry>IMA ADPCM (adaptative PCM)</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>msadp32</entry>
|
|
|
|
|
<entry>Microsoft's ADPCM (adaptative PCM)</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>msg711</entry>
|
|
|
|
|
<entry>Microsoft's G.711 (A-Law and <20>-Law)</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>winemp3</entry>
|
|
|
|
|
<entry>
|
|
|
|
|
Wine's MP3 (MPEG Layer 3), based on mpglib library
|
|
|
|
|
</entry>
|
|
|
|
|
</row>
|
|
|
|
|
</tbody>
|
|
|
|
|
</tgroup>
|
|
|
|
|
</table>
|
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Note that Wine also supports native audio codecs as
|
|
|
|
|
well.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
All builtin ACM drivers are 32 bit Unicode DLLs
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</sect2>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title>Caching</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
The MSACM/MSACM32 keeps some data cached for all known ACM
|
|
|
|
|
drivers. Under the key
|
|
|
|
|
<screen>
|
|
|
|
|
Software\Microsoft\AudioCompressionManager\DriverCache\<driver name>
|
|
|
|
|
</screen>
|
|
|
|
|
, are kept for values:
|
2001-05-22 21:26:31 +02:00
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<literal>aFormatTagCache</literal> which
|
|
|
|
|
contains an array of <literal>DWORD</literal>. There
|
|
|
|
|
are two <literal>DWORD</literal>s per <literal>cFormatTags</literal>
|
|
|
|
|
entry. The first <literal>DWORD</literal> contains a
|
|
|
|
|
format tag value, and the second the associated
|
|
|
|
|
maximum size for a <literal>WAVEFORMATEX</literal> structure.
|
|
|
|
|
(Fields <literal>dwFormatTag</literal> and <literal>cbFormatSize</literal> from
|
|
|
|
|
ACMFORMATDETAILS)
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<literal>cFilterTags</literal> contains the number of tags supported by the driver
|
|
|
|
|
for filtering.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<literal>cFormatTags</literal> contains the number of tags support
|
|
|
|
|
by the driver for conversions.
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<literal>fdwSupport</literal> (the same as the one returned from
|
|
|
|
|
<function>acmDriverDetails</function>).
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</para>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<para>
|
|
|
|
|
The <literal>cFilterTags</literal>,
|
|
|
|
|
<literal>cFormatTags</literal>,
|
|
|
|
|
<literal>fdwSupport</literal> are the same values as the
|
|
|
|
|
ones returned from <function>acmDriverDetails</function>
|
|
|
|
|
function.
|
|
|
|
|
</para>
|
2001-05-22 21:26:31 +02:00
|
|
|
|
</sect2>
|
|
|
|
|
</sect1>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<sect1 id="msvfw32">
|
|
|
|
|
<title>MS Video Dlls</title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2003-09-22 23:15:12 +02:00
|
|
|
|
<sect2>
|
|
|
|
|
<title>Contents</title>
|
2001-05-22 21:26:31 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<para>
|
|
|
|
|
The MSVFW32 (and its 16 bit sibbling MSVIDEO) provide
|
|
|
|
|
encode/decode video streams. Those DLLs only implement the
|
|
|
|
|
proper switch between a caller and a driver providing the
|
|
|
|
|
implementation of the requested format coding/decoding
|
|
|
|
|
operation.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
There's nothing specific in Wine's implementation compared
|
|
|
|
|
to Windows' one. Here's however a list of the builtin
|
|
|
|
|
decoding drivers:
|
|
|
|
|
<table frame="all">
|
|
|
|
|
<title>Wine VIDC drivers</title>
|
|
|
|
|
<tgroup cols="2" align="left" colsep="1" rowsep="1">
|
|
|
|
|
<thead>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>Name</entry>
|
|
|
|
|
<entry>Provides</entry>
|
|
|
|
|
</row>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>msrle32</entry>
|
|
|
|
|
<entry>Microsoft's RLE (Run-Length encoded)</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>msvidc32</entry>
|
|
|
|
|
<entry>Microsoft's Video-1</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>iccvid</entry>
|
|
|
|
|
<entry>Radius Cinepak Video Decoder</entry>
|
|
|
|
|
</row>
|
|
|
|
|
</tbody>
|
|
|
|
|
</tgroup>
|
|
|
|
|
</table>
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Note that Wine also supports native video codecs as well.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
All builtin VIDC drivers are 32 bit Unicode DLLs
|
|
|
|
|
</para>
|
|
|
|
|
|
2003-09-22 23:15:12 +02:00
|
|
|
|
</sect2>
|
2001-05-22 21:26:31 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
<sect1 id="mm-conf">
|
|
|
|
|
<title>Multimedia configuration</title>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Unfortunately, multimedia configuration evolved over time:
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
In the early days on Windows 3.x, configuration was
|
|
|
|
|
stored in <filename>system.in</filename> file, under
|
|
|
|
|
various sections (<literal>[drivers]</literal> for low
|
|
|
|
|
level drivers, <literal>[mci]</literal>
|
|
|
|
|
(resp. <literal>[mci32]</literal>) for 16 bit (resp. 32
|
|
|
|
|
bit) MCI drivers...).
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
With the apparition of the registry, in Windows 95,
|
|
|
|
|
configuration as been duplicated there, under the key
|
|
|
|
|
<screen>
|
|
|
|
|
HKLM\System\CurrentControlSet\Control\MediaResources
|
|
|
|
|
</screen>
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
Windows NT also adopted the registry, but decided to
|
|
|
|
|
store the configuration information under another key
|
|
|
|
|
than Windows 9x did.
|
|
|
|
|
<screen>
|
|
|
|
|
HKLM\Software\Microsoft\Windows NT\CurrentVersion
|
|
|
|
|
</screen>
|
|
|
|
|
And with a different layout of keys and values beneath
|
|
|
|
|
this key.
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Currently, Wine tries to load first a driver (low-level or
|
|
|
|
|
MCI) from the NT registry settings. If it fails, it will try
|
|
|
|
|
the <filename>system.ini</filename> configuration.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
An out-of-the-box configuration is provided in
|
|
|
|
|
<filename>wine.inf</filename>, and shall be stored in registry
|
|
|
|
|
and <filename>system.ini</filename> at Wine installation
|
|
|
|
|
time. It will setup correctly the MCI drivers' configuration
|
|
|
|
|
(as well as the wave and MIDI mappers). As the low-level
|
|
|
|
|
drivers depend on hardware, their setup will be handled by
|
|
|
|
|
<filename>winecfg</filename>.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<table frame="all">
|
|
|
|
|
<title>Wine multimedia configuration scheme</title>
|
|
|
|
|
<tgroup cols="5" align="left" colsep="1" rowsep="1">
|
|
|
|
|
<thead>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>Driver</entry>
|
|
|
|
|
<entry>Read from NT registry</entry>
|
|
|
|
|
<entry>Read from <filename>system.ini</filename></entry>
|
|
|
|
|
<entry>Setup by <filename>wine.inf</filename></entry>
|
|
|
|
|
<entry>Setup by <filename>winecfg</filename></entry>
|
|
|
|
|
</row>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>MCI drivers</entry>
|
|
|
|
|
<entry>Yes (1)</entry>
|
|
|
|
|
<entry>Yes (2)</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>Wave and MIDI mappers</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>Hardware-bound low level drivers</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry>ACM and VIDC drivers (audio & video codecs)</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>Yes</entry>
|
|
|
|
|
<entry>No</entry>
|
|
|
|
|
</row>
|
|
|
|
|
</tbody>
|
|
|
|
|
</tgroup>
|
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
This will allow most settings to be correctly loaded and
|
|
|
|
|
handled. However, it won't if an app tries to search directly
|
|
|
|
|
the registry for the actual configuration, as the three
|
|
|
|
|
potential configuration places may not be in sync.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
It still lacks a correct installation scheme (as any
|
|
|
|
|
multimedia device under Windows), so that all the correct
|
|
|
|
|
keys are created in the registry. This requires an advanced
|
|
|
|
|
model since, for example, the number of wave out devices can
|
|
|
|
|
only be known on the destination system (depends on the
|
|
|
|
|
sound card driven by the OSS interface).
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
The following sections describe which type of information
|
|
|
|
|
(depending on the location) Wine's multimedia DLLs understand.
|
|
|
|
|
</para>
|
|
|
|
|
|
2003-09-22 23:15:12 +02:00
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title>NT configuration</title>
|
2001-05-22 21:26:31 +02:00
|
|
|
|
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<para>
|
|
|
|
|
Under the
|
|
|
|
|
<screen>
|
|
|
|
|
HKLM\Software\Microsoft\Windows NT\CurrentVersion
|
|
|
|
|
</screen>
|
|
|
|
|
key, are stored the names of the DLLs to be loaded for each
|
|
|
|
|
MCI driver name:
|
|
|
|
|
<screen>
|
|
|
|
|
"cdaudio"="mcicda.drv"
|
|
|
|
|
"sequencer"="mciseq.drv"
|
|
|
|
|
"waveaudio"="mciwave.drv"
|
|
|
|
|
"avivideo"="mciavi.drv"
|
|
|
|
|
"videodisc"="mcipionr.drv"
|
|
|
|
|
"vcr"="mcivisca.drv"
|
|
|
|
|
"MPEGVideo"="mciqtz.drv"
|
|
|
|
|
</screen>
|
|
|
|
|
</para>
|
2003-09-22 23:15:12 +02:00
|
|
|
|
</sect2>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2003-09-22 23:15:12 +02:00
|
|
|
|
<sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
<title><filename>system.ini</filename></title>
|
2002-07-24 05:00:02 +02:00
|
|
|
|
|
2003-09-22 23:15:12 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
Wine will read the MCI drivers from the
|
|
|
|
|
<literal>[mci]</literal> or <literal>[mci32]</literal>
|
|
|
|
|
section. Wine won't make any difference between the two.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Here's a sample configuration:
|
|
|
|
|
<screen>
|
|
|
|
|
[mci]
|
|
|
|
|
cdaudio=mcicda.drv
|
|
|
|
|
sequencer=mciseq.drv
|
|
|
|
|
waveaudio=mciwave.drv
|
|
|
|
|
avivideo=mciavi.drv
|
|
|
|
|
videodisc=mcipionr.drv
|
|
|
|
|
vcr=mcivisca.drv
|
|
|
|
|
MPEGVideo=mciqtz.drv
|
2003-09-22 23:15:12 +02:00
|
|
|
|
</screen>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
ACM drivers' configuration is read (only so far) from the
|
|
|
|
|
<filename>system.ini</filename> (and setup at Wine
|
|
|
|
|
installation from the <filename>wine.inf</filename> file).
|
|
|
|
|
<screen>
|
|
|
|
|
[drivers32]
|
|
|
|
|
MSACM.imaadpcm=imaadp32.acm
|
|
|
|
|
MSACM.msadpcm=msadp32.acm
|
|
|
|
|
MSACM.msg711=msg711.acm
|
|
|
|
|
MSACM.winemp3=winemp3.acm
|
|
|
|
|
</screen>
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Video (aka vidc) drivers' configuration is read (only so
|
|
|
|
|
far) from the <filename>system.ini</filename> (and setup at
|
|
|
|
|
Wine installation from the <filename>wine.inf</filename>
|
|
|
|
|
file).
|
|
|
|
|
<screen>
|
|
|
|
|
[drivers32]
|
|
|
|
|
VIDC.MRLE=msrle32.dll
|
|
|
|
|
VIDC.MSVC=msvidc32.dll
|
|
|
|
|
VIDC.CVID=iccvid.dll
|
|
|
|
|
</screen>
|
|
|
|
|
</para>
|
2001-05-22 21:26:31 +02:00
|
|
|
|
|
2003-09-22 23:15:12 +02:00
|
|
|
|
<para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
See also the configuration part of the User's Guide for
|
|
|
|
|
other information on low level drivers.
|
2003-09-22 23:15:12 +02:00
|
|
|
|
</para>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
|
|
|
|
|
</sect2>
|
|
|
|
|
|
|
|
|
|
<sect2>
|
|
|
|
|
<title>Per driver/DLL configuration</title>
|
|
|
|
|
|
|
|
|
|
<sect3>
|
|
|
|
|
<title>Midi mapper</title>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
The Midi mapper configuration is the same as on Windows
|
|
|
|
|
9x. Under the key:
|
|
|
|
|
<screen>
|
|
|
|
|
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Multimedia\MIDIMap
|
|
|
|
|
</screen>
|
|
|
|
|
if the <literal>UseScheme</literal> value is not set, or
|
|
|
|
|
is set to a null value, the MIDI mapper will always use
|
|
|
|
|
the driver identified by the
|
|
|
|
|
<literal>CurrentInstrument</literal> value. Note: Wine
|
|
|
|
|
(for simplicity while installing) allows to define
|
|
|
|
|
<literal>CurrentInstrument</literal> as
|
|
|
|
|
<literal>#n</literal> (where n is a number), whereas
|
|
|
|
|
Windows only allows the real device name here. If
|
|
|
|
|
<literal>UseScheme</literal> is set to a non null value,
|
|
|
|
|
<literal>CurrentScheme</literal> defines the name of the
|
|
|
|
|
scheme to map the different channels. All the schemes are
|
|
|
|
|
available with keys like
|
|
|
|
|
<screen>
|
|
|
|
|
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Midi\Schemes\%name_of_scheme%
|
|
|
|
|
</screen>
|
|
|
|
|
For every scheme, under this key, will be a sub-key (which
|
|
|
|
|
name is usually a two digit index, starting at 00). Its
|
|
|
|
|
default value is the name of the output driver, and the
|
|
|
|
|
value <literal>Channels</literal> lists all channels (of
|
|
|
|
|
the 16 standard MIDI ones) which have to be copied to this
|
|
|
|
|
driver.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
To provide enhanced configuration and mapping
|
|
|
|
|
capabilities, each driver can define under the key
|
|
|
|
|
<screen>
|
|
|
|
|
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Midi\Ports\%driver_name%
|
|
|
|
|
</screen>
|
|
|
|
|
a link to and <filename>.IDF</filename> file which allows
|
|
|
|
|
to remap channels internally (for example 9 -> 16), to
|
|
|
|
|
change instruments identification, event controllers
|
|
|
|
|
values. See the source file
|
|
|
|
|
<filename>dlls/winmm/midimap/midimap.c</filename> for the
|
|
|
|
|
details (this isn't implemented yet).
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
</sect3>
|
|
|
|
|
|
2003-09-22 23:15:12 +02:00
|
|
|
|
</sect2>
|
2004-10-11 21:57:10 +02:00
|
|
|
|
|
2003-09-22 23:15:12 +02:00
|
|
|
|
</sect1>
|
2001-05-22 21:26:31 +02:00
|
|
|
|
|
|
|
|
|
</chapter>
|
|
|
|
|
|
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
|
|
|
Local variables:
|
|
|
|
|
mode: sgml
|
2003-04-19 04:50:57 +02:00
|
|
|
|
sgml-parent-document:("wine-devel.sgml" "set" "book" "part" "chapter" "")
|
2001-05-22 21:26:31 +02:00
|
|
|
|
End:
|
|
|
|
|
-->
|