Creative YUV: Difference between revisions

From MultimediaWiki
Jump to navigation Jump to search
m (Update samples link)
m (note the mirror)
 
Line 3: Line 3:
* FourCC: CYUV
* FourCC: CYUV
* Company: [[Creative]]
* Company: [[Creative]]
* Alternate Technical Description: [http://www.csse.monash.edu.au/~timf/videocodec/cyuv.txt http://www.csse.monash.edu.au/~timf/videocodec/cyuv.txt]
* Alternate Technical Description: http://www.csse.monash.edu.au/~timf/videocodec/cyuv.txt ([[Mirrored Files|mirrored]])
* Samples: [http://samples.mplayerhq.hu/V-codecs/CYUV/ http://samples.mplayerhq.hu/V-codecs/CYUV/]
* Samples: [http://samples.mplayerhq.hu/V-codecs/CYUV/ http://samples.mplayerhq.hu/V-codecs/CYUV/]



Latest revision as of 19:45, 24 October 2007

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.