John McGowan's AVI Overview: Programming and Other Technical Topics

John McGowan's AVI Overview: Programming and Other Technical Topics

Windows Multimedia System

In Win16 and Win32, Microsoft created a partially unified system
for handling multimedia. This system consists of the high level
Media Control Interface or MCI Application Programming Interface (API)
and associated MCI drivers. Playback of AVI files can be controlled
through the high level MCI API and the MCIAVI.DRV MCI driver.

The Windows Multimedia System also provides a number of low level
API's such as the WAVE API for waveform audio and associated
device drivers such as the WAVE device drivers for sound cards.

Under Windows NT 4.0, the MCI and low level API's are stored in
the file WINMM.DLL

The API's are:

MCI (high level API - useful for AVI playback)
joy (joystick devices)
midi (MIDI devices)
mixer (MIXER devices)
wave (waveform audio input and output devices)
mmio (low level functions to parse RIFF files)
time (timers etc.)
aux (auxiliary sound device)

When a program loads the MCIAVI driver, the Multimedia
System has the intelligence to locate and invoke the
appropriate MCI driver (MCIAVI.DRV in 16-bit
Windows or MCIAVI32.DLL in 32 bit windows) and pass the MCI
commands such as MCI_PLAY to the MCI driver.

The MCIAVI driver then calls Video for Windows to decompress
the video, GDI (or another graphics API) to display the
decoded frames, and WAVE to output the decoded audio samples.

A dump of the functions exported by winmm.dll under NT 4.0
generated with the Microsoft DUMPBIN.EXE utility follows:

Microsoft (R) COFF Binary File Dumper Version 5.00.7022
Copyright (C) Microsoft Corp 1992-1997. All rights reserved.

Dump of file winmm.dll

File Type: DLL

Section contains the following Exports for WINMM.dll

0 characteristics
31EC70B4 time date stamp Tue Jul 16 21:48:52 1996
0.00 version
2 ordinal base
197 number of functions
197 number of names

ordinal hint name

3 0 CloseDriver (000026CE)
4 1 DefDriverProc (00005AF4)
5 2 DriverCallback (0000254E)
6 3 DrvGetModuleHandle (00001D37)
7 4 GetDriverModuleHandle (00001D37)
8 5 MigrateAllDrivers (00013E79)
9 6 MigrateMidiUser (00013E60)
10 7 MigrateSoundEvents (00011A3C)
11 8 NotifyCallbackData (0000B2C2)
12 9 OpenDriver (00002036)
13 A PlaySound (00008ACB)
2 B PlaySoundA (00008ACB)
14 C PlaySoundW (00009AE1)
15 D SendDriverMessage (00001000)
16 E WOW32DriverCallback (0000C448)
17 F WOW32ResolveMultiMediaHandle (0000CC3C)
18 10 WOWAppExit (00009D3F)
19 11 aux32Message (0000C507)
20 12 auxGetDevCapsA (0000A3FD)
21 13 auxGetDevCapsW (00008C77)
22 14 auxGetNumDevs (00006AE4)
23 15 auxGetVolume (0000A4A1)
24 16 auxOutMessage (00008BFF)
25 17 auxSetVolume (0000A4C9)
26 18 joy32Message (0000C768)
27 19 joyConfigChanged (0000AE40)
28 1A joyGetDevCapsA (0000A99A)
29 1B joyGetDevCapsW (0000AB40)
30 1C joyGetNumDevs (0000AB96)
31 1D joyGetPos (0000ABAA)
32 1E joyGetPosEx (0000ABFD)
33 1F joyGetThreshold (0000AC5C)
34 20 joyReleaseCapture (0000ACA8)
35 21 joySetCapture (0000ACFC)
36 22 joySetThreshold (0000AE06)
37 23 mci32Message (00007566)
38 24 mciDriverNotify (00007006)
39 25 mciDriverYield (00008727)
40 26 mciExecute (0000D92C)
41 27 mciFreeCommandResource (000035CE)
42 28 mciGetCreatorTask (0000DCD5)
43 29 mciGetDeviceIDA (0000DCA3)
44 2A mciGetDeviceIDFromElementIDA (0000DBC6)
45 2B mciGetDeviceIDFromElementIDW (0000DBF5)
46 2C mciGetDeviceIDW (00005372)
47 2D mciGetDriverData (0000158B)
48 2E mciGetErrorStringA (0000DA46)
49 2F mciGetErrorStringW (0000352F)
50 30 mciGetYieldProc (0000E1F3)
51 31 mciLoadCommandResource (00002A75)
52 32 mciSendCommandA (000015D4)
53 33 mciSendCommandW (000014A1)
54 34 mciSendStringA (00004927)
55 35 mciSendStringW (00004A24)
56 36 mciSetDriverData (000058BD)
57 37 mciSetYieldProc (000034C9)
58 38 mid32Message (0000BDFD)
59 39 midiConnect (0001019E)
60 3A midiDisconnect (0001018C)
61 3B midiInAddBuffer (0001004A)
62 3C midiInClose (0000FF42)
63 3D midiInGetDevCapsA (0000FCCC)
64 3E midiInGetDevCapsW (0000FC71)
65 3F midiInGetErrorTextA (0000FDEB)
66 40 midiInGetErrorTextW (0000FDB2)
SetInfo (0000EBF4)
140 8A mmioStringToFOURCCA (0000ED9A)

Under Windows 3.x and Windows 95, the DLL MMSYSTEM.DLL (short for
MultiMedia System) contains the multimedia API's.

Return to Top

Video for Windows

Video for Windows is an entire system for handling video
in Microsoft Windows. It was part of MS Windows 3.1 The
original Video for Windows is a collection of 16 bit
windows utilities, dynamic link libraries, and other

The AVI file and file format is a central part of Video
for Windows.

Microsoft Visual C++ 5.0 has a Video for Windows
include file Vfw.h which contains the various API's that
make up Video for Windows:

* COMPMAN - Installable Compression Manager.
* DRAWDIB - Routines for drawing to the display.
* VIDEO - Video Capture Driver Interface
* AVIFMT - AVI File Format structure definitions.
* MMREG - FOURCC and other things
* AVIFile - Interface for reading AVI Files and AVI Streams
* MCIWND - MCI/AVI window class
* AVICAP - AVI Capture Window class
* MSACM - Audio compression manager.

Microsoft released a Video for Windows 1.0 for
Windows 3.1 in November 1992, followed by Video for Windows 1.1. There
have been several versions of Video for Windows 1.1
identified by a trailing alphabetical character such as
1.1e The last and most recent version of Video for
Windows 1.1 for Windows 3.x is Video for Windows 1.1e
This is available by ftp from Microsoft.

Microsoft has provided a 32-bit version of Video for Windows
for Windows 95, while threatening to replace Video for Windows with
ActiveMovie. This version has 32 bit versions of the Video
for Windows codecs such as Cinepak. Other DLL's in the
Video for Windows 95 are also 32-bit How much of the Video for
Windows in Windows 95 is 32 bit code is not clear; many of the
codecs are clearly 32 bit codecs. Nor is it clear how much has been
changed or modified besides the convesion to 32-bit code.

Windows NT 3.5, 3.51 and Windows NT 4.0 include a Video for Windows for
NT. Presumably this is strictly 32-bit. It is not clear how
much code is shared between the NT Video for Windows and the
Windows 95 Video for Windows. Note that hardware device
drivers are different between Windows 95 and NT 3.5/3.51/4.0.

ActiveMovie 1.0 and DirectShow (formerly ActiveMovie 2.0) are
32-bit successors to Video for Windows for both Windows 95
and Windows NT. These support AVI files. ActiveMovie started
out life under the code name Quartz; early Beta releases of
ActiveMovie were known as Quartz.

ActiveMovie 1.0 is bundled with Windows 95b (OEM Service Release 2.x)
and Internet Explorer 3.x/4.x for Windows 95. It can also be downloaded
and installed in Windows 95 separately. Note that ActiveMovie 1.0
does NOT completely replace Video for Windows. For example, ActiveMovie
1.0 does not provide a video capture mechanism. Video capture still
uses Video for Windows capture drivers.

ActiveMovie 1.0 is a 32 bit software component that can run in NT's
user mode. It runs under Windows NT 4.0 as well as Windows 95.

DirectShow (ActiveMovie 2.0) will supposedly add a number of new
features including video capture support, kernel mode streaming, and
miscellaneous other features.


Under NT 4.0, Video for Windows is implemented as a collection of
32-bit DLL's in the Microsoft 32-bit Common Object File Format or COFF
format. These are usually located in the /WINNT/SYSTEM32 directory
where Windows NT stores most of the system DLL's, drivers, and so

MSVFW32.DLL ( Microsoft Video for Windows DLL - NT 4.0 )
AVIFIL32.DLL ( AVIFILE API for Reading and Writing AVI Files and Streams )
AVICAP32.DLL ( AVI Capture Window Class )
MCIAVI32.DLL ( Video for Windows MCI Driver )
MSACM32.DRV ( Microsoft Audio Compression Manager )
MSACM32.DLL ( more Microsoft Audio Compression Manager )

MSRLE32.DLL ( Microsoft RLE Video Codec )
IR32_32.DLL ( Intel Indeo 3.2 Video Codec )
MSVIDC32.DLL ( Microsoft Video 1 Codec )
ICCVID.DLL ( Cinepak for Windows 32 - Radius )

What is in MSVFW32.DLL?

MSVFW32.DLL includes the DRAWDIB, Installable Compression
Manager or ICM, and MCI Windows components of Video for
Windows. Other components are stored in other DLL's.

This is a dump of the functions exported by MSVFW32.DLL
Version 4.00

Microsoft (R) COFF Binary File Dumper Version 5.00.7022
Copyright (C) Microsoft Corp 1992-1997. All rights reserved.

Dump of file msvfw32.dll

File Type: DLL

Section contains the following Exports for MSVFW32.dll

0 characteristics
31EC70E9 time date stamp Tue Jul 16 21:49:45 1996
0.00 version
2 ordinal base
47 number of functions
47 number of names

ordinal hint name

3 0 DrawDibBegin (00001E14)
4 1 DrawDibChangePalette (00008C30)
5 2 DrawDibClose (0000888A)
6 3 DrawDibDraw (000010A6)
7 4 DrawDibEnd (00008BEC)
8 5 DrawDibGetBuffer (00008EFC)
9 6 DrawDibGetPalette (00002F97)
10 7 DrawDibOpen (00003E0A)
11 8 DrawDibProfileDisplay (00003EBA)
12 9 DrawDibRealize (00001D49)
13 A DrawDibSetPalette (00001C0D)
14 B DrawDibStart (00002EEB)
15 C DrawDibStop (00002F42)
16 D DrawDibTime (00008C2B)
17 E GetOpenFileNamePreview (0000C7DC)
18 F GetOpenFileNamePreviewA (0000C7DC)
19 10 GetOpenFileNamePreviewW (0000C6A5)
20 11 GetSaveFileNamePreviewA (0000C7EC)
21 12 GetSaveFileNamePreviewW (0000C7CC)
22 13 ICClose (000035E0)
23 14 ICCompress (00004CE5)
24 15 ICCompressorChoose (00005F61)
25 16 ICCompressorFree (00005615)
26 17 ICDecompress (00004D4B)
27 18 ICDraw (0000106A)
28 19 ICDrawBegin (00001B95)
29 1A ICGetDisplayFormat (00004D8E)
30 1B ICGetInfo (00004C60)
31 1C ICImageCompress (00005A96)
32 1D ICImageDecompress (00005D2A)
33 1E ICInfo (00002FEB)
34 1F ICInstall (00004574)
35 20 ICLocate (0000372E)
36 21 ICMThunk32 (0000841C)
37 22 ICOpen (0000337C)
38 23 ICOpenFunction (00003B53)
39 24
  • 0
  • 1
    觉得还不错? 一键收藏
  • 打赏
  • 0


  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助




当前余额3.43前往充值 >
领取后你会自动成为博主和红包主的粉丝 规则




¥1 ¥2 ¥4 ¥6 ¥10 ¥20



钱包余额 0