Also Known As: Magic Software DVM
Type | Animation |
Colors | 16 or 256 |
Compression | Pixel packing |
Maximum Image Size | NA |
Multiple Images Per File | Yes |
Numerical Format | Little-endian |
Originator | Magic Software |
Platform | MS-DOS |
Supporting Applications | Magic Software |
See Also | FLI |
Usage
Storage of small animations and movies.
Comments
A minimal animation format that is of interest
mainly because of its simplicity.
Vendor specifications are available for this format.
Code fragments are available for this format.
Sample images are available for this format.
DVM is an animation format created in support of Magic Software. There are several revisions of the format: 1.0, 2.0, 3.0, and 3.1. Appended to the documentation on which this article was based was the following curious statement:
The DVM format was created by Magic Software and may only be modified by members of Magic Software.
We wish Magic Software well in the enforcement of this policy.
Contents:
File Organization
File Details
For Further Information
DVM files are binary and consist of a header followed by a palette (in v1.0 and higher) and bitmap data organized into a series of frames.
The v1.0 file header consists of the following:
typedef struct _DVM_HEADER { char ID[3]; /* File ID "DVM" */ char Size; /* Q, F, or V */ char Info; /* Flags */ WORD Wait; /* Time (ms) to wait between frames */ WORD Char_count; /* Number of characters in text, if present */ char[]; /* Text string, if present */ } DVM_HEADER;
For v2.0 and higher, the following header is used:
typedef struct _DVM_HEADER { char ID[3]; /* File ID "DVM" */ char Size; /* Q, F, or V */ char Version; /* High nibble is major version, low nibble is minor */ char Info; /* Flags */ WORD Wait; /* Time (ms) to wait between frames */ WORD Char_count; /* Number of characters in text, if present */ char[Char_count]; /* Text string, if present */ } DVM_HEADER;
The Size field may contain either the characters Q, F, or V, representing Quarter screen, Full screen, and higher Versions, respectively.
The Info field consists of the following flags:
Bit 0 |
NA |
Bit 1 |
NA |
Bit 2 |
NA |
Bit 3 |
Set if text exists |
Bit 4 |
Set for 256 color (otherwise 16 color) |
Bit 5 |
Set for enhanced palette (otherwise standard palette) |
Bit 6 |
Set for compressed frames |
Bit 7 |
Set for full screen (320x200), otherwise quarter screen (160x100) |
Versions 2.0 and higher add support for both 320x200 and 160x100 images. Versions 3.0 and higher add support for both 16- and 256-color images, and versions 3.1 and higher support text. Versions 1.0 or higher should use an enhanced palette.
The enhanced palette may contain either 16 or 256 colors. The 16-color palette is organized as 48 consecutive bytes of RGB data. Only the bottom six bits of each byte are significant. The 256-color palette is 768 bytes long and consists of 256 RGB colors. Colors run from 0 to 0xff.
The standard palette is not contained in the file but must be constructed algorithmically by the rendering application. In C pseudocode, this is:
typedef struct _RGB { BYTE r,g,b; } RGB; RGB palette[256]; SHORT i,r,g,b; for(i = 0;i <= 15;i++) { palette[i].r = palette[i].g = palette[i].b = (BYTE)(ROUND((DOUBLE)i * 4.2)); } for(r = 0;r <= 5;r++) { for(g = 0;g <= 5;g++) { for(b = 0;b <= 5;b++) { palette[r*36+g+b+16].r = (BYTE)(ROUND((DOUBLE)r * 12.6)); palette[r*36+g+b+16].g = (BYTE)(ROUND((DOUBLE)g * 12.6)); palette[r*36+g+b+16].b = (BYTE)(ROUND((DOUBLE)b * 12.6)); } } } for(i = 0;i <= 7;i++) { palette[232 + i].r = (BYTE)(i * 9); palette[232 + i].g = (BYTE)0; palette[232 + i].b = (BYTE)0; palette[240 + i].r = (BYTE)0; palette[240 + i].g = (BYTE)(i * 9); palette[240 + i].b = (BYTE)0; palette[248 + i].r = (BYTE)0; palette[248 + i].g = (BYTE)0; palette[248 + i].b = (BYTE)(i * 9); }
Following the palette is the frame data. The frame origin is in the upper left of the image, and lines are stored in order.
Frames may be compressed in a simple version of pixel packing, where bytes of the source data are stored in nibbles of the bytes written to the file. The high-order nibble of the data in the file is extracted first and represents the current byte in the data stream. The low-order nibble of the data byte in the file represents the next byte in the data stream.
For additional information about the DVM movie format, contact:
Bert Greevenbosch
Magic Software Rotterdam
Rotterdam, The Netherlands
Voice: +31-10-4215920
Email: bert@caiw.nl
Copyright © 1996, 1994 O'Reilly & Associates, Inc. All Rights Reserved.