Beam Video

From MultimediaWiki
Jump to navigation Jump to search

This is a video compression algorithm used by Beam Software in its SIFF files. There are two video compression flavours: 8-bit (used in FCP and the majority of VBV files) and 15-bit one (used only in Alien Earth game).

The general principle is that the frame is divided into 4x4 blocks. Block type is stored in two bits, which are grouped into one byte for four consequent blocks. Depending on block type it may be either copied from the previous frame or painted.

The main difference between 8- and 15-bit video is that for the former a colour value is always 8-bit palette index while for the latter it may be either a 8-bit palette index (when palette is present in the same frame) or raw 16-bit value (for all other frames).

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 (LSB first):

    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