Cinepak is a lossy video codec developed by Peter Barrett at SuperMac Technologies, and released in 1991 with the Video Spigot, and then in 1992 as part of Apple Computer's QuickTime video suite. It was designed to encode 320×240 resolution video at 1× (150 kbyte/s) CD-ROM transfer rates. The original name of this codec was CompactVideo, which is why its FourCC identifier is CVID. The codec was ported to the Microsoft Windows platform in 1993. It was also used on first-generation and some second-generation CD-ROM game consoles, such as the Atari Jaguar CD, Sega CD, Sega Saturn, and 3DO.
It was the primary video codec of early versions of QuickTime and Microsoft Video for Windows, but was later superseded by Sorenson Video, Intel Indeo, and most recently MPEG-4 Part 2 and H.264/MPEG-4 AVC. However, movies compressed with Cinepak are generally still playable in most media players.
Cinepak is based on vector quantization, which is a significantly different algorithm from the discrete cosine transform (DCT) algorithm used by most current codecs (in particular the MPEG family, as well as JPEG). This permitted implementation on relatively slow CPUs (video encoded in Cinepak will usually play fine even on a 25 MHz Motorola 68030, consoles like the Sega CD usually used even slower CPUs, e.g. a 12.5 MHz 68000), but tended to result in blocky artifacting at low bitrates, which explained the criticism levelled at the FMV-based video games. Cinepak files tend to be about 70% larger than similar quality MPEG-4 Part 2 or Theora files.
Cinepak performs vector quantization using two codebooks, named V1 and V4, each with 256 entries. Each codebook entry is a block of 2×2 pixels. In both codebooks, a codebook entry can either contain 4 luminance values (grayscale) or 4 luminance and 2 chrominance values (4:2:0 chroma subsampling). Cinepak divides a movie into key (intra-coded) images and inter-coded images. Each image is divided into a number of horizontal bands which have individual codebooks. In key images complete codebooks have to be transmitted, while in inter-coded images codebook entries are selectively updated. Each band is subdivided into 4×4 pixel blocks. Each block can be coded either from the V1 or from the V4 codebook. When coding from the V1 codebook, one codebook index per 4×4 block is written to the bitstream, and the corresponding 2×2 codebook entry is upscaled to 4×4 pixels. When coding from the V4 codebook, four codebook indices per 4×4 block are written to the bitstream, one for each 2×2 subblock. Additionally, in an inter-coded frame, a 4×4 block can be skipped and copied from the previous frame in a conditional replenishment fashion. The data rate can be controlled by adjusting the rate of key versus intra-coded frames and by adjusting the permitted error in each block.
External links