Rendering the Data

The client application sends the following messages to control the driver’s internal clock for rendering the decompressed data.

Message

Description

ICM_DRAW_GETTIME

Obtains the value of the driver’s internal clock if it is handling the timing of drawing frames.

ICM_DRAW_SETTIME

Sets the driver’s internal clock if it is handling the timing of drawing frames.

ICM_DRAW_START

Starts the internal clock of a driver if it handles the timing of drawing frames.

ICM_DRAW_STOP

Stops the internal clock of a driver if it handles the timing of drawing frames.

ICM_DRAW_WINDOW

Informs the driver the display window has been moved, hidden, or displayed.

ICM_DRAW_FLUSH

Flushes any frames that are waiting to be drawn.

ICM_DRAW_RENDERBUFFER

Draws a frame waiting to be drawn.

ICM_DRAW_CHANGEPALETTE

Changes the palette.

The client application sends ICM_DRAW_START to have your driver start (or continue) rendering data at the rate specified by the ICM_DRAW_BEGIN message. The ICM_DRAW_STOP message pauses the internal clock. Neither of these messages use dwParam1, dwParam2, or a return value.

The client application uses ICM_DRAW_GETTIME to obtain the value of the internal clock. Your driver returns the current-time value (this is usually frame numbers for video) in the DWORD pointed to by dwParam1. The current time is relative to the start of drawing.

The client application uses ICM_DRAW_SETTIME to set the value of the internal clock. Typically, the client application uses this message to synchronize the driver’s clock to an external clock. Your driver should set its clock to the value (this is usually frame numbers for video) specified in the DWORD pointed to by dwParam1.

The client application sends ICM_DRAW_FLUSH to have your driver discard any frames that have not been drawn.

The client application sends ICM_DRAW_RENDERBUFFER to have your driver draw the image currently buffered.

The client application sends ICM_DRAW_CHANGEPALETTE when the palette changes in the movie.