CrImage::WEBP::VP8L
VP8L lossless decoder for WEBP.
Implements the VP8L lossless image format used in WebP. Handles:
- Bitstream parsing
- Huffman decoding
- LZ77 backward references
- Color cache
- Transform decoding (predictor, color, subtract green, palette)
Constants
CODE_LENGTH_CODE_ORDER = StaticArray[17_u8, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
COLOR_CACHE_MULTIPLIER = 506832829_u32
DISTANCE_MAP_TABLE = StaticArray[24_u8, 7, 23, 25, 40, 6, 39, 41, 22, 26, 38, 42, 56, 5, 55, 57, 21, 27, 54, 58, 37, 43, 72, 4, 71, 73, 20, 28, 53, 59, 70, 74, 36, 44, 88, 69, 75, 52, 60, 3, 87, 89, 19, 29, 86, 90, 35, 45, 68, 76, 85, 91, 51, 61, 104, 2, 103, 105, 18, 30, 102, 106, 34, 46, 84, 92, 67, 77, 101, 107, 50, 62, 120, 1, 119, 121, 83, 93, 17, 31, 100, 108, 66, 78, 118, 122, 33, 47, 117, 123, 49, 63, 99, 109, 82, 94, 0, 116, 124, 65, 79, 16, 32, 98, 110, 48, 115, 125, 81, 95, 64, 114, 126, 97, 111, 80, 113, 127, 96, 112]
Distance map table for LZ77 backwards references
LEAF_NODE = -1
LUT_MASK = (1_u32 << LUT_SIZE) - 1
LUT_SIZE = 7_u32
N_DISTANCE_CODES = 40
N_LENGTH_CODES = 24
N_LITERAL_CODES = 256
Huffman alphabet sizes
REPEAT_BITS = StaticArray[2_u8, 3, 7]
REPEAT_OFFSETS = StaticArray[3_u8, 3, 11]
REPEATS_CODE_LENGTH = 16_u32
Code length decoding constants
REVERSE_BITS = StaticArray[0_u8, 128, 64, 192, 32, 160, 96, 224, 16, 144, 80, 208, 48, 176, 112, 240, 8, 136, 72, 200, 40, 168, 104, 232, 24, 152, 88, 216, 56, 184, 120, 248, 4, 132, 68, 196, 36, 164, 100, 228, 20, 148, 84, 212, 52, 180, 116, 244, 12, 140, 76, 204, 44, 172, 108, 236, 28, 156, 92, 220, 60, 188, 124, 252, 2, 130, 66, 194, 34, 162, 98, 226, 18, 146, 82, 210, 50, 178, 114, 242, 10, 138, 74, 202, 42, 170, 106, 234, 26, 154, 90, 218, 58, 186, 122, 250, 6, 134, 70, 198, 38, 166, 102, 230, 22, 150, 86, 214, 54, 182, 118, 246, 14, 142, 78, 206, 46, 174, 110, 238, 30, 158, 94, 222, 62, 190, 126, 254, 1, 129, 65, 193, 33, 161, 97, 225, 17, 145, 81, 209, 49, 177, 113, 241, 9, 137, 73, 201, 41, 169, 105, 233, 25, 153, 89, 217, 57, 185, 121, 249, 5, 133, 69, 197, 37, 165, 101, 229, 21, 149, 85, 213, 53, 181, 117, 245, 13, 141, 77, 205, 45, 173, 109, 237, 29, 157, 93, 221, 61, 189, 125, 253, 3, 131, 67, 195, 35, 163, 99, 227, 19, 147, 83, 211, 51, 179, 115, 243, 11, 139, 75, 203, 43, 171, 107, 235, 27, 155, 91, 219, 59, 187, 123, 251, 7, 135, 71, 199, 39, 167, 103, 231, 23, 151, 87, 215, 55, 183, 119, 247, 15, 143, 79, 207, 47, 175, 111, 239, 31, 159, 95, 223, 63, 191, 127, 255]
Reverse bits lookup table
Class methods
Decodes VP8L image from IO stream.
Parses VP8L bitstream, decodes transforms, Huffman codes, and reconstructs the image.
Returns: Decoded NRGBA image
Decodes VP8L configuration (dimensions and color model).
Reads only the VP8L header to extract image metadata without decoding the full image data.
Returns: Config with dimensions and NRGBA color model
Maps distance code to pixel offset.
VP8L uses special distance codes for nearby pixels to improve compression. Specified in section 4.2.2 of the VP8L spec.
Nested types
- CrImage::WEBP::VP8L::BitReader
- CrImage::WEBP::VP8L::BufferedReader
- CrImage::WEBP::VP8L::ColorIndexingTransform
- CrImage::WEBP::VP8L::CrossColorTransform
- CrImage::WEBP::VP8L::Decoder
- CrImage::WEBP::VP8L::HNode
- CrImage::WEBP::VP8L::HTree
- CrImage::WEBP::VP8L::HuffmanGroup
- CrImage::WEBP::VP8L::PredictorTransform
- CrImage::WEBP::VP8L::SubtractGreenTransform
- CrImage::WEBP::VP8L::Transform