SIFF: Difference between revisions
(Fill the known information from anonymous contributor) |
m (general English edits and formatting) |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
* Extentions: vb, son | * Extentions: vb, son | ||
* Samples: http://samples.mplayerhq.hu/game-formats/SIFF/ | |||
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). | 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). | ||
Line 20: | Line 21: | ||
bytes 10-11 video width | bytes 10-11 video width | ||
bytes 12-13 video height | bytes 12-13 video height | ||
bytes 14-17 | bytes 14-17 reserved, set to 0 | ||
bytes 18-19 number of frames | bytes 18-19 number of frames | ||
bytes 20-21 bits per audio sample? | bytes 20-21 bits per audio sample? | ||
bytes 22-23 audio sample rate | bytes 22-23 audio sample rate | ||
bytes 24-39 | bytes 24-39 reserved, set to 0 | ||
All data is stored in 'BODY' chunk in blocks. Block format: | All data is stored in 'BODY' chunk in blocks. Block format: | ||
bytes 0-3 | bytes 0-3 block size (with header) | ||
bytes 4-5 | bytes 4-5 flags | ||
bytes 6.. block payload | bytes 6.. block payload | ||
The flags are defined as: | |||
bit 0 - frame has global motion vector | bit 0 - frame has global motion vector | ||
Line 40: | Line 41: | ||
bit 5 - block has frame duration | bit 5 - block has frame duration | ||
Global motion vector is stored as two signed words. | Global motion vector is stored as two signed words (16 bits each). | ||
Palette change data: | Palette change data: | ||
byte 0 - start index | byte 0 - start index | ||
byte 1 - number of entries to change | byte 1 - number of entries to change | ||
bytes 2.. - RGB entry, 3 bytes per entry | bytes 2.. - RGB entry, 3 bytes per entry | ||
=== Video Frame Format === | === Video Frame Format === | ||
A 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: | Block types: |
Revision as of 14:04, 19 October 2007
- Extentions: vb, son
- Samples: http://samples.mplayerhq.hu/game-formats/SIFF/
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 reserved, set to 0 bytes 18-19 number of frames bytes 20-21 bits per audio sample? bytes 22-23 audio sample rate bytes 24-39 reserved, set to 0
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
The flags are defined as:
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 (16 bits each).
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
A 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)