YLC
Jump to navigation
Jump to search
- Website: http://spring-fragrance.mints.ne.jp/aviutl/ (Japanese)
- FourCC: YLC0
- Sample: http://samples.libav.org/V-codecs/ylc0.avi
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.