YLC

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.

The website names it as "YUY2 Lossless Codec".

Format

bytes  0- 3 'YLC0'
bytes  4- 7 zero
bytes  8-11 offset to the Huffman table descriptors (should be 16)
bytes 12-15 offset to the compressed YUY2 data

Bitstream is read as 32-bit little-endian words MSB.

Table descriptors contain 256 gamma'-coded weights for each of the four Huffman tables (special, Y delta, U delta, V delta)

Delta values are decoded in the following way:

 if (get_bit()) {
     val = decode_sym(tree1);
     if (val < 0xE1) {
         output predefined YUYV quad from the constant table;
     } else {
         for (i = 0; i < (val - 0xDF); i++)
             output {0, 0, 0, 0}
     }
 } else {
     u0 = decode_sym(tree2);
     v0 = decode_sym(tree3);
     u1 = decode_sym(tree2);
     v1 = decode_sym(tree4);

     output { u0, v0, u0 + u1, v1 }
 }

Then the reconstruction stage follows: first left-predict top line (each component independently), then use left + top - topleft prediction on the rest of pixel components. Unlike many other codecs, prediction here wraps around (i.e. left predictor for the first pixel is the last pixel on a previous line) and the initial left and top-left predictors are set to 128 for all components.