Compaq Multimedia Services
for OpenVMS Alpha
Programmer's Guide


Previous Contents Index

1.3 Microsoft Multimedia Services Not Implemented in This Release

Table 1-3 shows the services that are part of the Microsoft multimedia programming interface and are not implemented in Multimedia Services for OpenVMS.

Table 1-3 Unimplemented Services and Functions
Category Unsupported Functions
Auxiliary Audio Services All
   
DrawDib Functions All
   
Joystick Services All
   
Loadable Third-Party Device Support Modules All
   
MCI Services All
   
MIDI Services All
   
Multimedia File I/O Services Buffered file I/O
Custom I/O procedures

The following functions:

mmioAdvance
mmioFlush
mmioInstallIOProc
mmioSendMessage
mmioSetBuffer
mmioSetInfo

   
Timer Services All
   
Video Capture and Playback Services The following functions:

videoConfigureStorage
videoDialog
videoMessage
videoUpdate

   
Video Compression and Decompression Services Functions relating to the frame buffer drawing operations:

ICDraw
ICDrawBegin
ICDrawEnd
ICDrawFlush
ICDrawGetTime
ICDrawQuery
ICDrawRealize
ICDrawSetTime
ICDrawStart
ICDrawStop
ICDrawWindow
ICGetBuffersWanted
ICGetDisplayFormat
ICInstall
ICQueryAbout
ICQueryConfigure
ICRemove
ICSendMessage

Functions for displaying dialog boxes:

ICAbout
ICConfigure

   
Waveform Audio Services The following functions:

waveInMessage
waveInPrepareHeader
waveInUnprepareHeader
waveOutGetPitch
waveOutGetPlaybackRate
waveOutMessage
waveOutPrepareHeader
waveOutSetPitch
waveOutSetPlaybackRate
waveOutUnprepareHeader

   
Audio Compression Manager Services Driver Group The following functions:

acmDriverAdd
acmDriverMessage
acmDriverPriority
acmDriverProc
acmDriverRemove

Audio Compression Manager Services Format Group All
Audio Compression Manager Services Filter Group All
Audio Compression Manager Services Stream Group The following function:

acmFormatSuggest

1.4 Multimedia Hardware Support

Audio services are provided by the Microsoft Sound Board driver.

Video services are provided by the FullVideo Supreme and FullVideo Supreme JPEG option modules. The FullVideo Supreme JPEG also supports JPEG compression and decompression of video data.

1.5 Application Development Notes

This section describes characteristics of the multimedia software and hardware environments that application programmers need to understand to ensure successful development and execution of multimedia applications using Multimedia Services for OpenVMS.

Be familiar with these characteristics before beginning application development.

1.5.1 Server Process

The server process, MMOV$SERVER , must be running before executing any application program that uses the multimedia API. The server process is located at SYS$SYSTEM:MMOV$SERVER.EXE . Run the server process from the SYSTEM account.

To start the server process, log in to the SYSTEM account and enter the following command:


$ @SYS$STARTUP:MMOV$STARTUP

To stop the server process, enter the following command:


$ @SYS$STARTUP:MMOV$SHUTDOWN

The server may be delayed briefly, possibly up to two seconds, during the setup of a palette (or colormap) associated with the video capture and playback or video compression and decompression interfaces. Because starting video applications typically involves setting palettes, expect all applications to pause when a video application is started.

1.5.2 Multimedia Services Library

The Multimedia Services library, SYS$LIBRARY:MMOV.OLB , is not thread safe or reentrant. Unpredictable results may occur if multiple threads attempt to use the library functions concurrently.

1.5.3 Header Files

The function prototypes, constants, flags, and data structures required to access Multimedia Services for OpenVMS are provided in header files located in the MMOV$INCLUDE directory. Application programs need to include only the mme_api.h header file, as follows:


#include <mme/mme_api.h> 

1.5.4 Compiling and Linking Applications

Use the following command procedure as a template to compile applications:


$ if p1 .eqs. "" then inquire p1 "Enter path were common library was built"
$ define/nolog mme sys$common:[mmov_includes],'p1',[]
$ define/nolog decc$user_include mme,decw$include:
$ define/nolog sys decc$user_include
$ define/nolog decc$system_include decc$user_include
 
$ cc := "cc/define=(mme_BLD,IPC_VMS,Long_bit=64,DEC)/standard=vaxc"
 
$ set ver
$ cc vidplay
$ cc common
$ cc color_utils
$ cc readavi
$ cc avieasy

Use the following command procedure as a template to link applications. The following example is used to build the example programs provided with the installation kit.


$ link /sysshr /exe=vidplay.exe  -
                    vidplay.obj,-
                    avieasy.obj,-
                    common.obj,-
                    readavi.obj,-
                    color_utils.obj,-
                    'p1'commonlib.olb/lib,-
                    sys$library:mmov.olb/lib, sys$input:/option
                    sys$share:cma$open_rtl.exe/share
                    sys$share:decw$xlibshr.exe/share
                    sys$share:IPC$SHARE.exe/share

In the previous example, p1 is the path to the directory where the common library is built.

In the SYS$COMMON:[SYSHLP.EXAMPLES.MMOV] examples directory, the subdirectories are:

Each subdirectory contains a command procedure that you can use to build the example programs called BUILD_XXX , where XXX is the name of the subdirectory.

1.5.5 Waveform Audio Device Restrictions

Keep in mind the following information about waveform audio devices:

See Appendix B for specific device details.

1.5.6 Video Capture and Playback Restrictions

The following device restrictions apply to video capture and playback:

See Appendix B for specific device details.

1.5.7 Video Compression and Decompression Restrictions

The following device restrictions apply to video compression and decompression, unless otherwise noted:

See Appendix B for specific device details.

Note

The CALLBACK_WINDOW option to the various Open and Initialization routines is not supported. Multimedia Services for OpenVMS supports the CALLBACK_FUNCTION option only.

1.5.8 Memory Optimizations --- Regions and Buffers

Note

This functionality is an extension made by Compaq to the Microsoft video and ICM (Installable Compression Manager) interfaces.

Compaq has extended the Microsoft interfaces for video capture and playback, and compression and decompression to provide an optimization for certain classes of hardware devices. Some hardware devices must lock down physical pages of memory to allow direct memory access (DMA) between the hardware device and the host computer.

The standard compression and decompression interfaces do not require the buffers passed for each call to remain the same over time, and thus the lower layers of software and hardware cannot assume what addresses will be passed. In addition, if the application uses sets of buffers for video capture and playback or compression and decompression, the lower layers have no way of knowing (aside from making intelligent guesses) whether these buffers are from contiguous memory regions and thus can be more efficiently managed at the hardware level.

To facilitate this, the functions ICCompressPrepareHeader and ICDecompressPrepareHeader have been added. They, and the videoStreamPrepareHeader function, can now take on different semantics. Instead of passing individual buffers to each of these functions, an application can pass regions of memory that will be used for multiple buffers. For example, if the video streaming interface is being used and the application is using three buffers, then the application would call videoStreamPrepareHeader with a pointer to a memory region three times the size of a single buffer. The memory buffers must be aligned on a system page boundary and each of the three buffer sizes must be padded to a system page size.

When the videoStreamAddBuffer function is called by the application, the pointer would be set to one of the three subbuffers in the region of memory passed to the videoStreamPrepareHeader function and the size would be the size of a single buffer. This allows the hardware device, if applicable, to lock down and manage one region of memory, while allowing the application to maintain the throughput of three buffers. See the sample program vidstreamin.c in the MMOV$EXAMPLES:[VIDEO] directory for an example.

Each region of memory must be used for the same purpose, that is, for the ICDecompress function, one region of memory must be specified for the input data and one region of memory must be specified for the output data.

Note

The FullVideo Supreme and FullVideo Supreme JPEG option modules manage a finite set of regions of memory and can take advantage of this extension. Applications should strive to use as few regions of memory as possible to reduce overhead to these options, increase the number of applications that can share these options, and increase performance.

Note

If the message "av0:JVLOCKBUF out of contexts" appears in the console window, it means that too many resources are being used with the FullVideo Supreme and FullVideo Supreme JPEG options' video devices. These resources are used by both capture/playback and compress/decompress. Specifically, the message means that there are too many buffers registered (through videoStreamAddBuffer , videoFrame or ICCompress , ICDecompress or any of the PrepareHeader functions). No more video applications can be started until some of the clients using the resources are stopped.


Previous Next Contents Index