From MultimediaWiki
Revision as of 12:20, 23 July 2011 by VAG (talk | contribs)
Jump to navigation Jump to search

AMF is a very simple video file format used in the game Manic Karts. Contains only RLE-encoded palettized video.

File Format

All numbers are little-endian. File begins with an 8-byte header:

u16  numframes    -- number of frames
u16  width        -- frame width
u16  height       -- frame height
u16  unknown      -- unknown/unused, always 2

and is followed by at least numframes + 1 frame chunks. Each frame chunk begins with a short header:

u8   type         -- chunk type
u16  size         -- chunk payload size (w/o this header)

and then followed by a chunk payload.

Observed chunk types:

  • 0x3E - palette chunk (always first chunk in file) Payload format:
u8  firstcolor                -- first color of palette to update (always 64)
RGB palette[256-firstcolor]   -- new palette entries (always 256-64 = 192 triplets), 6-bits DAC values
  • 0x3F - video frame chunk (a video file has total num_frames chunks of this type) Contains compressed video data
  • all other chunk types are ignored/skipped.

Note: palette can not be changed during playback. Playback rate is about 10 fps.

Video Decompression

while input buffer is not exhausted
  tag = next byte of input
  tag is:
    <  0x20 : skip (tag) pixels
    == 0x20 : skip (DecodeLength) pixels
    <  0x3F : fill (tag - 0x21 + 2) pixels with the next byte of input
    == 0x3F : fill (DecodeLength) pixels with the next byte of input
    >= 0x40 : draw (tag)

DecodeLength loads variable-sized length value:

 length = 32
   delta = next byte of input
   length += delta
 until delta != 0xFF


The MANIC.AMF file has several BMP files attached at the end.