Difference between revisions of "AMF"

From MultimediaWiki
Jump to navigation Jump to search
m (Update samples link)
Line 2: Line 2:
* Samples: [http://samples.mplayerhq.hu/game-formats/amf/ http://samples.mplayerhq.hu/game-formats/amf/]
* Samples: [http://samples.mplayerhq.hu/game-formats/amf/ http://samples.mplayerhq.hu/game-formats/amf/]


AMF is suspected to be a multimedia format used in the game [http://www.mobygames.com/game/dos/manic-karts Manic Karts].
AMF is a very simple video file format used in the game [http://www.mobygames.com/game/dos/manic-karts 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
  repeat
    delta = next byte of input
    length += delta
  until delta != 0xFF
 
== Trivia ==
 
The MANIC.AMF file has several [[BMP]] files attached at the end.


[[Category:Game Formats]]
[[Category:Game Formats]]
[[Category:Formats missing in FFmpeg]]

Revision as of 12:20, 23 July 2011

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
 repeat
   delta = next byte of input
   length += delta
 until delta != 0xFF

Trivia

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