SIFF: Difference between revisions

From MultimediaWiki
Jump to navigation Jump to search
(add KKND2 to the list)
(Fill the known information from anonymous contributor)
Line 8: Line 8:


   bytes 0-3  chunk type
   bytes 0-3  chunk type
   bytes 4-7  chunk size (not including 8-byte chunk preamble)
   bytes 4-7  chunk size (not including 8-byte chunk preamble and usually in MSB format)
   bytes 8..  chunk payload
   bytes 8..  chunk payload


Line 20: Line 20:
   bytes 10-11  video width
   bytes 10-11  video width
   bytes 12-13  video height
   bytes 12-13  video height
  bytes 14-17 zeroes
  bytes 18-19 number of frames
  bytes 20-21 bits per audio sample?
  bytes 22-23 audio sample rate
  bytes 24-39 zeroes
All data is stored in 'BODY' chunk in blocks. Block format:
  bytes 0-3  block size (with header)
  bytes 4-5  flags
  bytes 6..    block payload
Flags meaning:
  bit 0 - frame has global motion vector
  bit 2 - block contains audio
  bit 3 - block contains video
  bit 4 - palette change
  bit 5 - block has frame duration
Global motion vector is stored as two signed words.
Palette change data:
 
  byte 0 - start index
  byte 1 - number of entries to change
  bytes 2.. - RGB entry, 3 bytes per entry
=== Video Frame Format ===
Frame is divided into 4x4 blocks. Block type is stored in two bits, which are grouped into one byte for four consequent blocks.
Block types:
* 0 - skip block
* 1 - motion compensated block, next byte contains motion vector (with values -8..7). If motion vector is zero then block is uncompressed and its data is contained in the next 16 bytes.
* 2 - block is filled with color stored in the next byte
* 3 - pattern fill, pattern method and value is stored in the next byte.
Pattern type (for block type 3) is stores in high two bits, pattern index is stored in 6 low bits. Pattern type meanings:
* 0 - read 2 bytes and paint block with them
* 1 - read one bytes and paint only pixels where pattern bit is zero
* 2 - read one bytes and paint only pixels where pattern bit is one
* 3 - invalid value
Motion compensation may wrap, i.e. pixels from the previous or next line may be read.
There are 64 possible patterns:
    0x0660, 0xFF00, 0xCCCC, 0xF000, 0x8888, 0x000F, 0x1111, 0xFEC8,
    0x8CEF, 0x137F, 0xF731, 0xC800, 0x008C, 0x0013, 0x3100, 0xCC00,
    0x00CC, 0x0033, 0x3300, 0x0FF0, 0x6666, 0x00F0, 0x0F00, 0x2222,
    0x4444, 0xF600, 0x8CC8, 0x006F, 0x1331, 0x318C, 0xC813, 0x33CC,
    0x6600, 0x0CC0, 0x0066, 0x0330, 0xF900, 0xC88C, 0x009F, 0x3113,
    0x6000, 0x0880, 0x0006, 0x0110, 0xCC88, 0xFC00, 0x00CF, 0x88CC,
    0x003F, 0x1133, 0x3311, 0xF300, 0x6FF6, 0x0603, 0x08C6, 0x8C63,
    0xC631, 0x6310, 0xC060, 0x0136, 0x136C, 0x36C8, 0x6C80, 0x324C


== Games That Use The SIFF Format ==
== Games That Use The SIFF Format ==

Revision as of 00:30, 13 October 2007

  • Extentions: vb, son

Certain PC games developed by Beam Software use a multimedia format with the file signature 'SIFF'. The format can transport audio and video (which are .vb files) or just audio (which are .son files).

File Format

The general fourcc chunk format is as follows:

 bytes 0-3   chunk type
 bytes 4-7   chunk size (not including 8-byte chunk preamble and usually in MSB format)
 bytes 8..   chunk payload

It is important to note that in the fourcc chunk preamble, the size field is big-endian. However, all other multi-byte numbers in the file are little-endian.

A VB file begins with a 'SIFF' file signature, followed by the total length of the file, minus 8 bytes. Bytes 8-11 contain the version fourcc, e.g. 'VBV1'. Then comes the header, which is laid out as follows:

 bytes 0-3    header fourcc ('VBHD')
 bytes 4-7    header length (should be 32 == 0x20)
 bytes 8-9    unknown, but might be header version
 bytes 10-11  video width
 bytes 12-13  video height
 bytes 14-17 zeroes
 bytes 18-19 number of frames
 bytes 20-21 bits per audio sample?
 bytes 22-23 audio sample rate
 bytes 24-39 zeroes

All data is stored in 'BODY' chunk in blocks. Block format:

 bytes 0-3   block size (with header)
 bytes 4-5  flags
 bytes 6..    block payload

Flags meaning:

 bit 0 - frame has global motion vector
 bit 2 - block contains audio
 bit 3 - block contains video
 bit 4 - palette change
 bit 5 - block has frame duration

Global motion vector is stored as two signed words.

Palette change data:

 byte 0 - start index
 byte 1 - number of entries to change
 bytes 2.. - RGB entry, 3 bytes per entry

Video Frame Format

Frame is divided into 4x4 blocks. Block type is stored in two bits, which are grouped into one byte for four consequent blocks.

Block types:

  • 0 - skip block
  • 1 - motion compensated block, next byte contains motion vector (with values -8..7). If motion vector is zero then block is uncompressed and its data is contained in the next 16 bytes.
  • 2 - block is filled with color stored in the next byte
  • 3 - pattern fill, pattern method and value is stored in the next byte.

Pattern type (for block type 3) is stores in high two bits, pattern index is stored in 6 low bits. Pattern type meanings:

  • 0 - read 2 bytes and paint block with them
  • 1 - read one bytes and paint only pixels where pattern bit is zero
  • 2 - read one bytes and paint only pixels where pattern bit is one
  • 3 - invalid value

Motion compensation may wrap, i.e. pixels from the previous or next line may be read.

There are 64 possible patterns:

    0x0660, 0xFF00, 0xCCCC, 0xF000, 0x8888, 0x000F, 0x1111, 0xFEC8,
    0x8CEF, 0x137F, 0xF731, 0xC800, 0x008C, 0x0013, 0x3100, 0xCC00,
    0x00CC, 0x0033, 0x3300, 0x0FF0, 0x6666, 0x00F0, 0x0F00, 0x2222,
    0x4444, 0xF600, 0x8CC8, 0x006F, 0x1331, 0x318C, 0xC813, 0x33CC,
    0x6600, 0x0CC0, 0x0066, 0x0330, 0xF900, 0xC88C, 0x009F, 0x3113,
    0x6000, 0x0880, 0x0006, 0x0110, 0xCC88, 0xFC00, 0x00CF, 0x88CC,
    0x003F, 0x1133, 0x3311, 0xF300, 0x6FF6, 0x0603, 0x08C6, 0x8C63,
    0xC631, 0x6310, 0xC060, 0x0136, 0x136C, 0x36C8, 0x6C80, 0x324C

Games That Use The SIFF Format