[docs] winedev: Update wine multimedia chapter

Frédéric Delanoy frederic.delanoy at gmail.com
Thu Aug 22 12:05:41 CDT 2013


---
 en/winedev-multimedia.sgml | 180 ++++++++++++++++++++++++---------------------
 1 file changed, 97 insertions(+), 83 deletions(-)

diff --git a/en/winedev-multimedia.sgml b/en/winedev-multimedia.sgml
index ba7635b..ea6cb8c 100644
--- a/en/winedev-multimedia.sgml
+++ b/en/winedev-multimedia.sgml
@@ -7,26 +7,56 @@
     </para>
 
     <para>
-      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).
+      The implementation can be mainly found in a number of directories:
+      <itemizedlist>
+        <listitem>
+          <para>
+            <filename class="directory">dlls/mmdevapi</filename>,
+            <filename class="directory">dlls/dsound</filename> and
+            <filename class="directory">dlls/winmm</filename> for the main sound APIs.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            <filename class="directory">dlls/msacm32</filename> (for the audio compression/decompression
+            manager)
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            <filename class="directory">dlls/msvfw32</filename> (for the video
+            compression/decompression manager).
+          </para>
+        </listitem>
+      </itemizedlist>
     </para>
 
     <sect1 id="mm-overview">
       <title>Overview</title>
 
       <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>
-
-      <para>
-	All of those components are defined as DLLs (one by one).
+        The multimedia stuff is split into 3 layers:
+        <itemizedlist>
+          <listitem>
+            <para>
+              the high level abstraction layer: mmdevapi, dsound and winmm DLLs.
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              the mid level layer: handles MCI commands, providing coarser grain operations (like
+              playing a MIDI file, or playing a video stream).
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              the low level layer: device drivers, currently implemented in winealsa.drv,
+              winecoreaudio.drv, and wineoss.drv DLLs. It also has some helper DLLs (like msacm32
+              and msvfw32), which can make use of external DLLs like mciavi32 or
+              application-provided DLLs.
+            </para>
+          </listitem>
+        </itemizedlist>
       </para>
 
       <para>
@@ -34,14 +64,10 @@
         (like OSS on Unix). It provides the core of playback/record
 	using fine grain objects (audio/midi streams...).
       </para>
-      <para>
-	Mid level (MCI) and high level layers must be written independently from
-	the hardware and OS services.
-      </para>
 
       <para>
-	MCI level provides some coarser grain operations (like playing
-	a Midi file, or playing a video stream).
+        The dsound and winmm legacy APIs are implemented on top of mmdevapi, the new Windows audio
+        system introduced with Windows Vista (Multimedia Device API).
       </para>
 
     </sect1>
@@ -163,10 +189,10 @@ Kernel space |                    Client applications
              |  |      v v v         | |       v v          v v
              |  |   +---------------+---+-------------+-------------+
              |  |   | waveInXXX     |   | mciXXX      | *playSound* |
-             |  |   | waveOutXXX    |   |             | mmioXXX     | WinMM.dll
+             |  |   | waveOutXXX    |   |             | mmioXXX     | winmm.dll
              |  |   | midiInXXX     |   |             | timeXXX     |   32-bit
              |  |   | midiOutXXX    |   |             | driverXXX   |
-             |  |   | midiStreamXXX |   |             |             | MMSystem.dll
+             |  |   | midiStreamXXX |   |             |             | mmsystem.dll16
              |  |   | mixerXXX      |   |             |             |   16-bit
              |  |   | auxXXX    +---+   +---+ mmThread|             |
              |  |   | joyXXX    | Call back | mmTask  |             |
@@ -177,7 +203,7 @@ Kernel space |                    Client applications
 +---------+  |  |   +-------------+    +----------+
 |HW driver|<------->|    *.drv    |    | mci*.drv |
 +---------+  |  |   +--------------+   +-----------+
-             |  |    |  msacm.drv  |    | mciwave  |
+             |  |    | msacm32.drv |    | mciwave  |
              |  |    +--------------+   +-----------+
              |  |     | midimap.drv |    | mcimidi  |
              |  |     +-------------+    +-----------+
@@ -238,7 +264,7 @@ Kernel space |                    Client applications
       </para>
 
       <para>
-	There are two specific low level drivers (msacm.drv for wave input/output,
+        There are two specific low level drivers (msacm32.drv for wave input/output,
         midimap.drv for MIDI output only). These drivers (also present
         in Windows):
 	<itemizedlist>
@@ -303,21 +329,21 @@ Kernel space |                    Client applications
       </sect2>
 
       <sect2>
-	<title>Wave mapper (msacm.drv)</title>
+        <title>Wave mapper (msacm32.drv)</title>
 
 	<para>
 	  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.
+          provided through the standard ACM drivers in msacm32 DLL.
 	</para>
 
 	<para>
 	  Wave mapper driver implementation can be found in
-          <filename class="directory">dlls/winmm/wavemap/</filename> directory. This
-	  driver heavily relies on MSACM and MSACM32 DLLs which can be
-          found in <filename class="directory">dlls/msacm</filename> and
-          <filename class="directory">dlls/msacm32</filename>. Those DLLs load ACM
+          <filename class="directory">dlls/msacm32.drv/</filename> directory. This
+          driver heavily relies on msacm DLL found in
+          <filename class="directory">dlls/msacm32</filename>.
+          This DLL loads 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. 
@@ -326,7 +352,7 @@ Kernel space |                    Client applications
       </sect2>
 
       <sect2>
-	<title>MIDI mapper (midimap.drv)</title>
+        <title>MIDI mapper (midimap)</title>
 
 	<para>
 	  Midi mapper allows to map each one of 16 MIDI channels to a
@@ -338,7 +364,7 @@ Kernel space |                    Client applications
 
 	<para>
 	  A built-in MIDI mapper can be found in
-          <filename class="directory">dlls/winmm/midimap/</filename>. It partly provides
+          <filename class="directory">dlls/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
@@ -375,9 +401,9 @@ Kernel space |                    Client applications
 	    <tbody>
 	      <row>
 		<entry>CdAudio</entry>
-		<entry>MciCDA.drv</entry>
+                <entry>mcicda</entry>
 		<entry>MCI interface to a CD audio player</entry>
-                <entry><filename class="directory">dlls/winmm/mcicda/</filename></entry>
+                <entry><filename class="directory">dlls/mcicda/</filename></entry>
 		<entry>
 		  Relies on NTDLL CdRom raw interface (through
 		  <function>DeviceIoControl</function>). 
@@ -385,28 +411,27 @@ Kernel space |                    Client applications
 	      </row>
 	      <row>
 		<entry>WaveAudio</entry>
-		<entry>MciWave.drv</entry>
+                <entry>mciwave</entry>
 		<entry>
 		  MCI interface for wave playback and record
 		</entry>
-                <entry><filename class="directory">dlls/winmm/mciwave/</filename></entry>
+                <entry><filename class="directory">dlls/mciwave/</filename></entry> 
 		<entry>It uses the low level audio API.</entry>
 	      </row>
 	      <row>
 		<entry>Sequencer</entry>
-		<entry>MciSeq.drv</entry>
+                <entry>mciseq</entry>
 		<entry>Midi Sequencer (playback)</entry>
-                <entry><filename class="directory">dlls/winmm/mciseq/</filename></entry>
+                <entry><filename class="directory">dlls/mciseq/</filename></entry>
 		<entry>It uses the low level midi APIs</entry>
 	      </row>
 	      <row>
 		<entry>AviVideo</entry>
-		<entry>MciAvi.drv</entry>
+                <entry>mciavi32</entry>
 		<entry>AVI playback and record</entry>
-                <entry><filename class="directory">dlls/winmm/mciavi/</filename></entry>
+                <entry><filename class="directory">dlls/mciavi32/</filename></entry>
 		<entry>
-		  It rather heavily relies on MSVIDEO/MSVFW32 DLLs
-		  pair to work.
+                  It rather heavily relies on msvfw32 DLL to work.
 		</entry>
 	      </row>
 	    </tbody>
@@ -435,33 +460,30 @@ Kernel space |                    Client applications
       <title>High level layers</title>
 
       <sect2>
-	<title>WINMM (and MMSYSTEM)</title>
-	
+        <title>winmm</title>
+
 	<para>
-	  The high level layers encompass basically the MMSYSTEM and
-	  WINMM DLLs exported APIs. It also provides the skeleton for
+          The high level layers encompass basically the winmm
+          DLL exported APIs. It also provides the skeleton for
 	  the core functionality for multimedia playback and
-	  recording. Note that native MMSYSTEM and WINMM do not
+          recording. Note that native WINMM and MMSYSTEM 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).
 	</para>
       
 	<para>
-	  WINMM and MMSYSTEM in Wine can handle both 16- 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-
-	  or 32-bit) and it manages the information sent
-	  accordingly.
+          winmm and mmsystem.dll16 in Wine can handle both 32- and 16-bit
+          drivers (for low level and MCI drivers). Wine will handle all
+          the conversions transparently for all the calls to winmm
+          and mmsystem.dll16, as it knows what the driver interface is (32-
+          or 16-bit) and it manages the information sent accordingly.
 	</para>
 
 	<para>
 	  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.
+          as any other DLL.
 	</para>
 
 	<para>
@@ -482,14 +504,6 @@ Kernel space |                    Client applications
 	  COM implementation.
 	</para>
 
-	<para>
-	  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.
-	</para>
-
       </sect2>
 
     </sect1>
@@ -501,7 +515,7 @@ Kernel space |                    Client applications
 	<title>Contents</title>
 
 	<para>
-	  The MSACM32 (and its 16-bit sibling MSACM) provide a way to
+          The msacm32 DLL provides 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
@@ -565,7 +579,7 @@ Kernel space |                    Client applications
 	<title>Caching</title>
 
 	<para>
-	  The MSACM/MSACM32 keeps some data cached for all known ACM
+          msacm32 keeps some data cached for all known ACM
 	  drivers. Under the key
           <screen>
           Software\Microsoft\AudioCompressionManager\DriverCache\<replaceable>driver_name</replaceable>
@@ -622,7 +636,7 @@ Kernel space |                    Client applications
 	<title>Contents</title>
 
 	<para>
-	  The MSVFW32 (and its 16-bit sibling MSVIDEO) provide
+          msvfw32 provides
 	  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
@@ -829,13 +843,13 @@ HKLM\Software\Microsoft\Windows NT\CurrentVersion
 	  Here's a sample configuration:
 	  <screen>
    [mci]
-   cdaudio=mcicda.drv
-   sequencer=mciseq.drv
-   waveaudio=mciwave.drv
-   avivideo=mciavi.drv
-   videodisc=mcipionr.drv
+   MPEGVideo=mciqtz32.dll
+   MPEGVideo2=mciqtz32.dll
+   avivideo=mciavi32.dll
+   cdaudio=mcicda.dll
+   sequencer=mciseq.dll
    vcr=mcivisca.drv
-   MPEGVideo=mciqtz.drv
+   waveaudio=mciwave.dll
 	  </screen>
 	</para>
 
@@ -845,23 +859,24 @@ HKLM\Software\Microsoft\Windows NT\CurrentVersion
 	  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
+    msacm.imaadpcm=imaadp32.acm
+    msacm.msadpcm=msadp32.acm
+    msacm.msg711=msg711.acm
+    msacm.winemp3=winemp3.acm
+    msacm.msgsm610=msgsm32.acm
 	  </screen>
 	</para>
 
 	<para>
-	  Video (aka vidc) drivers configuration is read (only so
+          Video (aka <literal>vidc</literal>) 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
+    vidc.mrle=msrle32.dll
+    vidc.msvc=msvidc32.dll
+    vidc.cvid=iccvid.dll
 	  </screen>
 	</para>
 
@@ -916,8 +931,7 @@ HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\MediaProperties\PrivatePrope
 	    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
+            values. See <filename>dlls/midimap/midimap.c</filename> for the
 	    details (this isn't implemented yet).
 	  </para>
 
-- 
1.8.3.4




More information about the wine-patches mailing list