Apple Video
# Apple Video

Apple Video is a lossy video compression and decompression algorithm (codec) developed by Apple Inc. and first released as part of QuickTime 1.0 in 1991. The codec is also known as QuickTime Video, by its FourCC RPZA and the name Road Pizza. (The codename "Road Pizza" is a reference to the idea that "when you run over an animal, you're basically compressing it on the freeway".) When used in the AVI container, the FourCC AZPR is also used.

The bit-stream format of Apple Video has been reverse-engineered and a decoder has been implemented in the projects XAnim and libavcodec.

## Technical Details

The codec operates on 4×4 blocks of pixels in the RGB colorspace. Each frame is segmented into 4×4 blocks in raster-scan order. Each block is coded in one of four coding modes: skip, single color, four color, or 16 color. Colors are represented by 16 bits with a bit-depth of 5 bit for each of the three components red, green, and blue, a format known as RGB555. Because Apple Video operates in the image domain without motion compensation, decoding is much faster than MPEG-style codecs which use motion compensation and perform coding in a transform domain. As a tradeoff, the compression performance of Apple Video is lower.

### Skip mode

The skip mode realizes conditional replenishment. If a block is coded in skip mode, the content of the block at same location in the previous frame is copied to the current frame. Runs of skip blocks are coded in a run-length encoding scheme, enabling a high compression ratio in static areas of the picture.

### Single color mode

In single color mode, all pixels in a block are decoded in the same color. This can be interpreted as a palette with a single color.

### Four color mode

In four color mode, each pixel in a block is decoded as one of four colors which are specified in a palette. To select one of the four entries, 2 bits per pixel are written to the bit-stream. The same palette is used for a run of length between one and 32 blocks. Of the four colors, two are explicitly written to the bit-stream, while the other two are calculated at the decoder by linear interpolation in the RGB colorspace using the following equations:

       $\mathrm {color1} ={\frac {21}{32}}*\mathrm {color0} +{\frac {11}{32}}*\mathrm {color3} \approx {\frac {2}{3}}*\mathrm {color0} +{\frac {1}{3}}*\mathrm {color3}$
       $\mathrm {color2} ={\frac {11}{32}}*\mathrm {color0} +{\frac {21}{32}}*\mathrm {color3} \approx {\frac {1}{3}}*\mathrm {color0} +{\frac {2}{3}}*\mathrm {color3}$

where color0 and color3 are the two colors which are written in the bit-stream. The four colors can be interpreted as lying equidistantly spaced on a line segment in the three-dimensional vector space with the three components red, green, and blue. The end-points of this line are written in the bit-stream. A similar color-interpolation scheme is used in S3 Texture Compression.

Interpreted as vector quantization, a three-dimensional vector with the components red, green, and blue is quantized using a codebook with four entries.

### 16 color mode

In 16-color mode, the color of each pixel in a block is explicitly written in the bit-stream. This mode is lossless and equivalent to raw PCM without any compression.

