SIFF: Difference between revisions
(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
- KKND2: Krossfire
- The Lost Vikings II (a.k.a. Norse By Norse West: The Return of the Lost Vikings)