Creative YUV

From MultimediaWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This page is based on the document 'Simple YUV Coding Formats' by Mike Melanson found at http://multimedia.cx/simple-yuv.txt.

Creative YUV is a constant-rate, differentially coded, packed YUV compression method. The codec essentially codes each Y, U, and V sample as 4 bits with some overhead at the start of each line. The codec operates on a YUV 4:1:1 colorspace which means that each group of 4 pixels on a line has 1 Y sample per pixel, but only 1 of each C sample for the entire group.

Data Format

A chunk of CYUV-encoded data is laid out as:

 bytes 0-15    signed Y predictor byte values
 bytes 16-31   signed U predictor byte values
 bytes 32-47   signed V predictor byte values
 bytes 48..    lines of CYUV-encoded data

The format of each line is as follows:

 byte 0
   bits 7-4  initial U sample and predictor for line
   bits 3-0  initial Y sample and predictor for line
 byte 1
   bits 7-4  initial V sample and predictor for line
   bits 3-0  next Y predictor index
 byte 2
   bits 7-4  next Y predictor index
   bits 3-0  next Y predictor index
 bytes 3..   remaining predictor indices for line

The first 3 bytes contain the setup information for the line. Each initial sample (Y, U, and V) actually represents the top 4 bits of the initial 8-bit sample. The initial sample also serves as the initial predictor. For each of the 3 Y predictor indices, use the 4-bit value to index into the table of 16 Y predictors, encoded at the start of the frame. Apply each predictor to the previous Y value.

At this point, the first group of 4 pixels will be decoded. For each group of 4 pixels remaining on the line:

 byte 0
   bits 7-4  next U predictor index
   bits 3-0  next Y predictor index
 byte 1
   bits 7-4  next V predictor index
   bits 3-0  next Y predictor index
 byte 2
   bits 7-4  next Y predictor index
   bits 3-0  next Y predictor index

For each predictor index, use the 4 bits to index into the appropriate predictor table and apply the predictor to the previous sample of the same type (Y, U, or V) and output the sample.