module

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

decode(io : IO) : CrImage::Image

Decodes VP8L image from IO stream.

Parses VP8L bitstream, decodes transforms, Huffman codes, and reconstructs the image.

Returns: Decoded NRGBA image

Source
decode_config(io : IO) : CrImage::Config

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

Source
distance_map(width : Int32, code : UInt32) : Int32

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.

Source
n_tiles(size : Int32, bits : UInt32) : Int32

Calculates number of tiles needed to cover size pixels.

Used for transform metadata (predictor, color transform).

Source

Nested types