Video Codecs

This page contains information on my investigation of various video file formats and video codecs. The purpose of this investigation is to create platform independent (mostly for Unix/Linux based systems) video playback and encoding software. Another project of my own does some of this, but no details/source code/etc have yet been published. Instead, some of the decoders I have worked on are slowly being incorporated into the MPlayer Linux video playback software project.

Id Software Quake Cinematics (.cin and .RoQ)

Some time ago saw the start of a popular series of first person perspective games created by Id Software called Quake. To enhance the single player story in Quake II cinematics were included. In essence, the Quake II cinematics are a audio and visual sequence where the audio is stored in a raw pcm format, and the 8-bit colour lookup table based video is coded using a two-pass loss-less Huffman coder. More detail may be found in the following links:

The third release of the Quake series saw significant improvements in the rendering engine and the inclusion of a more advanced video coding technique. This video coder has also been used in several other earlier games as well as the recent Return to Castle Wolfenstein. In this format, the audio is DPCM coded and the video is coded using motion blocks and vector quantisation.

Radius Cinepak (CVID) for AVI and QT

The Cinepak codec is a relatively old coding technique that is still infrequently used today. Its advantage comes from computational simplicity at the decoder, rather than bit rate versus quality performance. This codec is basically a vector quantiser with adaptive vector density. Each frame is segmented into 4x4 pixel blocks, and each block is coded using either 1 or 4 vectors. For more details, follow these links:

Creative YUV (CYUV) for AVI

Originally designed for the Creative Video Blaster, this video codec stores frames in a predictively coded YUV411 format. This codec looks to have been designed for simplicity and speed.

Microsoft Video 1 (MSVC/CRAM/WHAM) for AVI

Yet another computationally simple codec. A frame may be coded using either eight or sixteen bits per pixel (as determined by the AVI header). Each frame is segmented into 4x4 pixel blocks, and each block is coded using a reduced number of colours (either 1, 2, or 8).

In-depth documentation of this codec can be found on this site.

Indeo Video 3 (IV31/IV32) for AVI and QT - Work in Progress

The Indeo Video 3.2 (IV32) video format is relatively old and has since been superseded by Indeo Video 4 and 5. Apparently this is a proprietary blend of color sampling, vector quantisaion and run-length encoding. Still working on this one - any help would be appreciated.

More to come....

Some colour format info at Video4Linux.