webp-lossless-bitstream-spec.txt (46783B)
1 <!-- 2 3 Although you may be viewing an alternate representation, this document is 4 sourced in Markdown, a light-duty markup scheme, and is optimized for the 5 [kramdown](https://kramdown.gettalong.org/) transformer. 6 7 See the accompanying specs_generation.md. External link targets are referenced 8 at the end of this file. 9 10 --> 11 12 Specification for WebP Lossless Bitstream 13 ========================================= 14 15 _Jyrki Alakuijala, Ph.D., Google, Inc., 2023-03-09_ 16 17 Abstract 18 -------- 19 20 WebP lossless is an image format for lossless compression of ARGB images. The 21 lossless format stores and restores the pixel values exactly, including the 22 color values for fully transparent pixels. A universal algorithm for sequential 23 data compression (LZ77), prefix coding, and a color cache are used for 24 compression of the bulk data. Decoding speeds faster than PNG have been 25 demonstrated, as well as 25% denser compression than can be achieved using 26 today's PNG format. 27 28 * TOC placeholder 29 {:toc} 30 31 1 Introduction 32 -------------- 33 34 This document describes the compressed data representation of a WebP lossless 35 image. It is intended as a detailed reference for the WebP lossless encoder and 36 decoder implementation. 37 38 In this document, we extensively use C programming language syntax to describe 39 the bitstream and assume the existence of a function for reading bits, 40 `ReadBits(n)`. The bytes are read in the natural order of the stream containing 41 them, and bits of each byte are read in least-significant-bit-first order. When 42 multiple bits are read at the same time, the integer is constructed from the 43 original data in the original order. The most significant bits of the returned 44 integer are also the most significant bits of the original data. Thus, the 45 statement 46 47 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 48 b = ReadBits(2); 49 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 50 51 is equivalent with the two statements below: 52 53 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 54 b = ReadBits(1); 55 b |= ReadBits(1) << 1; 56 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 57 58 We assume that each color component, that is, alpha, red, blue, and green, is 59 represented using an 8-bit byte. We define the corresponding type as uint8. A 60 whole ARGB pixel is represented by a type called uint32, which is an unsigned 61 integer consisting of 32 bits. In the code showing the behavior of the 62 transforms, these values are codified in the following bits: alpha in bits 63 31..24, red in bits 23..16, green in bits 15..8, and blue in bits 7..0; however, 64 implementations of the format are free to use another representation internally. 65 66 Broadly, a WebP lossless image contains header data, transform information, and 67 actual image data. Headers contain the width and height of the image. A WebP 68 lossless image can go through four different types of transforms before being 69 entropy encoded. The transform information in the bitstream contains the data 70 required to apply the respective inverse transforms. 71 72 2 Nomenclature 73 -------------- 74 75 ARGB 76 : A pixel value consisting of alpha, red, green, and blue values. 77 78 ARGB image 79 : A two-dimensional array containing ARGB pixels. 80 81 color cache 82 : A small hash-addressed array to store recently used colors to be able to 83 recall them with shorter codes. 84 85 color indexing image 86 : A one-dimensional image of colors that can be indexed using a small integer 87 (up to 256 within WebP lossless). 88 89 color transform image 90 : A two-dimensional subresolution image containing data about correlations of 91 color components. 92 93 distance mapping 94 : Changes LZ77 distances to have the smallest values for pixels in 95 two-dimensional proximity. 96 97 entropy image 98 : A two-dimensional subresolution image indicating which entropy coding should 99 be used in a respective square in the image, that is, each pixel is a meta 100 prefix code. 101 102 LZ77 103 : A dictionary-based sliding window compression algorithm that either emits 104 symbols or describes them as sequences of past symbols. 105 106 meta prefix code 107 : A small integer (up to 16 bits) that indexes an element in the meta prefix 108 table. 109 110 predictor image 111 : A two-dimensional subresolution image indicating which spatial predictor is 112 used for a particular square in the image. 113 114 prefix code 115 : A classic way to do entropy coding where a smaller number of bits are used 116 for more frequent codes. 117 118 prefix coding 119 : A way to entropy code larger integers, which codes a few bits of the integer 120 using an entropy code and codifies the remaining bits raw. This allows for 121 the descriptions of the entropy codes to remain relatively small even when 122 the range of symbols is large. 123 124 scan-line order 125 : A processing order of pixels (left to right and top to bottom), starting 126 from the left-hand-top pixel. Once a row is completed, continue from the 127 left-hand column of the next row. 128 129 3 RIFF Header 130 ------------- 131 132 The beginning of the header has the RIFF container. This consists of the 133 following 21 bytes: 134 135 1. String 'RIFF'. 136 2. A little-endian, 32-bit value of the chunk length, which is the whole size 137 of the chunk controlled by the RIFF header. Normally, this equals 138 the payload size (file size minus 8 bytes: 4 bytes for the 'RIFF' 139 identifier and 4 bytes for storing the value itself). 140 3. String 'WEBP' (RIFF container name). 141 4. String 'VP8L' (FourCC for lossless-encoded image data). 142 5. A little-endian, 32-bit value of the number of bytes in the 143 lossless stream. 144 6. 1-byte signature 0x2f. 145 146 The first 28 bits of the bitstream specify the width and height of the image. 147 Width and height are decoded as 14-bit integers as follows: 148 149 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 150 int image_width = ReadBits(14) + 1; 151 int image_height = ReadBits(14) + 1; 152 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 153 154 The 14-bit precision for image width and height limits the maximum size of a 155 WebP lossless image to 16384✕16384 pixels. 156 157 The alpha_is_used bit is a hint only, and should not impact decoding. It should 158 be set to 0 when all alpha values are 255 in the picture, and 1 otherwise. 159 160 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 161 int alpha_is_used = ReadBits(1); 162 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 163 164 The version_number is a 3 bit code that must be set to 0. Any other value should 165 be treated as an error. 166 167 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 168 int version_number = ReadBits(3); 169 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 170 171 4 Transforms 172 ------------ 173 174 The transforms are reversible manipulations of the image data that can reduce 175 the remaining symbolic entropy by modeling spatial and color correlations. They 176 can make the final compression more dense. 177 178 An image can go through four types of transforms. A 1 bit indicates the 179 presence of a transform. Each transform is allowed to be used only once. The 180 transforms are used only for the main-level ARGB image; the subresolution images 181 (color transform image, entropy image, and predictor image) have no transforms, 182 not even the 0 bit indicating the end of transforms. 183 184 Typically, an encoder would use these transforms to reduce the Shannon entropy 185 in the residual image. Also, the transform data can be decided based on entropy 186 minimization. 187 188 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 189 while (ReadBits(1)) { // Transform present. 190 // Decode transform type. 191 enum TransformType transform_type = ReadBits(2); 192 // Decode transform data. 193 ... 194 } 195 196 // Decode actual image data (Section 5). 197 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 198 199 If a transform is present, then the next two bits specify the transform type. 200 There are four types of transforms. 201 202 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 203 enum TransformType { 204 PREDICTOR_TRANSFORM = 0, 205 COLOR_TRANSFORM = 1, 206 SUBTRACT_GREEN_TRANSFORM = 2, 207 COLOR_INDEXING_TRANSFORM = 3, 208 }; 209 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 210 211 The transform type is followed by the transform data. Transform data contains 212 the information required to apply the inverse transform and depends on the 213 transform type. The inverse transforms are applied in the reverse order that 214 they are read from the bitstream, that is, last one first. 215 216 Next, we describe the transform data for different types. 217 218 ### 4.1 Predictor Transform 219 220 The predictor transform can be used to reduce entropy by exploiting the fact 221 that neighboring pixels are often correlated. In the predictor transform, the 222 current pixel value is predicted from the pixels already decoded (in scan-line 223 order) and only the residual value (actual - predicted) is encoded. The green 224 component of a pixel defines which of the 14 predictors is used within a 225 particular block of the ARGB image. The _prediction mode_ determines the type of 226 prediction to use. We divide the image into squares, and all the pixels in a 227 square use the same prediction mode. 228 229 The first 3 bits of prediction data define the block width and height in number 230 of bits. 231 232 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 233 int size_bits = ReadBits(3) + 2; 234 int block_width = (1 << size_bits); 235 int block_height = (1 << size_bits); 236 #define DIV_ROUND_UP(num, den) (((num) + (den) - 1) / (den)) 237 int transform_width = DIV_ROUND_UP(image_width, 1 << size_bits); 238 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 239 240 The transform data contains the prediction mode for each block of the image. It 241 is a subresolution image where the green component of a pixel defines which of 242 the 14 predictors is used for all the `block_width * block_height` pixels within 243 a particular block of the ARGB image. This subresolution image is encoded using 244 the same techniques described in [Chapter 5](#image-data). 245 246 The number of block columns, `transform_width`, is used in two-dimensional 247 indexing. For a pixel (x, y), one can compute the respective filter block 248 address by: 249 250 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 251 int block_index = (y >> size_bits) * transform_width + 252 (x >> size_bits); 253 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 254 255 There are 14 different prediction modes. In each prediction mode, the current 256 pixel value is predicted from one or more neighboring pixels whose values are 257 already known. 258 259 We chose the neighboring pixels (TL, T, TR, and L) of the current pixel (P) as 260 follows: 261 262 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 263 O O O O O O O O O O O 264 O O O O O O O O O O O 265 O O O O TL T TR O O O O 266 O O O O L P X X X X X 267 X X X X X X X X X X X 268 X X X X X X X X X X X 269 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 270 271 where TL means top-left, T means top, TR means top-right, and L means left. At 272 the time of predicting a value for P, all O, TL, T, TR and L pixels have already 273 been processed, and the P pixel and all X pixels are unknown. 274 275 Given the preceding neighboring pixels, the different prediction modes are 276 defined as follows. 277 278 | Mode | Predicted value of each channel of the current pixel | 279 | ------ | ------------------------------------------------------- | 280 | 0 | 0xff000000 (represents solid black color in ARGB) | 281 | 1 | L | 282 | 2 | T | 283 | 3 | TR | 284 | 4 | TL | 285 | 5 | Average2(Average2(L, TR), T) | 286 | 6 | Average2(L, TL) | 287 | 7 | Average2(L, T) | 288 | 8 | Average2(TL, T) | 289 | 9 | Average2(T, TR) | 290 | 10 | Average2(Average2(L, TL), Average2(T, TR)) | 291 | 11 | Select(L, T, TL) | 292 | 12 | ClampAddSubtractFull(L, T, TL) | 293 | 13 | ClampAddSubtractHalf(Average2(L, T), TL) | 294 295 296 `Average2` is defined as follows for each ARGB component: 297 298 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 299 uint8 Average2(uint8 a, uint8 b) { 300 return (a + b) / 2; 301 } 302 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 303 304 The Select predictor is defined as follows: 305 306 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 307 uint32 Select(uint32 L, uint32 T, uint32 TL) { 308 // L = left pixel, T = top pixel, TL = top-left pixel. 309 310 // ARGB component estimates for prediction. 311 int pAlpha = ALPHA(L) + ALPHA(T) - ALPHA(TL); 312 int pRed = RED(L) + RED(T) - RED(TL); 313 int pGreen = GREEN(L) + GREEN(T) - GREEN(TL); 314 int pBlue = BLUE(L) + BLUE(T) - BLUE(TL); 315 316 // Manhattan distances to estimates for left and top pixels. 317 int pL = abs(pAlpha - ALPHA(L)) + abs(pRed - RED(L)) + 318 abs(pGreen - GREEN(L)) + abs(pBlue - BLUE(L)); 319 int pT = abs(pAlpha - ALPHA(T)) + abs(pRed - RED(T)) + 320 abs(pGreen - GREEN(T)) + abs(pBlue - BLUE(T)); 321 322 // Return either left or top, the one closer to the prediction. 323 if (pL < pT) { 324 return L; 325 } else { 326 return T; 327 } 328 } 329 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 330 331 The functions `ClampAddSubtractFull` and `ClampAddSubtractHalf` are performed 332 for each ARGB component as follows: 333 334 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 335 // Clamp the input value between 0 and 255. 336 int Clamp(int a) { 337 return (a < 0) ? 0 : (a > 255) ? 255 : a; 338 } 339 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 340 341 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 342 int ClampAddSubtractFull(int a, int b, int c) { 343 return Clamp(a + b - c); 344 } 345 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 346 347 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 348 int ClampAddSubtractHalf(int a, int b) { 349 return Clamp(a + (a - b) / 2); 350 } 351 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 352 353 There are special handling rules for some border pixels. If there is a 354 predictor transform, regardless of the mode \[0..13\] for these pixels, the 355 predicted value for the left-topmost pixel of the image is 0xff000000, all 356 pixels on the top row are L-pixel, and all pixels on the leftmost column are 357 T-pixel. 358 359 Addressing the TR-pixel for pixels on the rightmost column is 360 exceptional. The pixels on the rightmost column are predicted by using the modes 361 \[0..13\], just like pixels not on the border, but the leftmost pixel on the 362 same row as the current pixel is instead used as the TR-pixel. 363 364 The final pixel value is obtained by adding each channel of the predicted value 365 to the encoded residual value. 366 367 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 368 void PredictorTransformOutput(uint32 residual, uint32 pred, 369 uint8* alpha, uint8* red, 370 uint8* green, uint8* blue) { 371 *alpha = ALPHA(residual) + ALPHA(pred); 372 *red = RED(residual) + RED(pred); 373 *green = GREEN(residual) + GREEN(pred); 374 *blue = BLUE(residual) + BLUE(pred); 375 } 376 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 377 378 ### 4.2 Color Transform 379 380 The goal of the color transform is to decorrelate the R, G, and B values of each 381 pixel. The color transform keeps the green (G) value as it is, transforms the 382 red (R) value based on the green value, and transforms the blue (B) value based 383 on the green value and then on the red value. 384 385 As is the case for the predictor transform, first the image is divided into 386 blocks, and the same transform mode is used for all the pixels in a block. For 387 each block, there are three types of color transform elements. 388 389 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 390 typedef struct { 391 uint8 green_to_red; 392 uint8 green_to_blue; 393 uint8 red_to_blue; 394 } ColorTransformElement; 395 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 396 397 The actual color transform is done by defining a color transform delta. The 398 color transform delta depends on the `ColorTransformElement`, which is the same 399 for all the pixels in a particular block. The delta is subtracted during the 400 color transform. The inverse color transform then is just adding those deltas. 401 402 The color transform function is defined as follows: 403 404 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 405 void ColorTransform(uint8 red, uint8 blue, uint8 green, 406 ColorTransformElement *trans, 407 uint8 *new_red, uint8 *new_blue) { 408 // Transformed values of red and blue components 409 int tmp_red = red; 410 int tmp_blue = blue; 411 412 // Applying the transform is just subtracting the transform deltas 413 tmp_red -= ColorTransformDelta(trans->green_to_red, green); 414 tmp_blue -= ColorTransformDelta(trans->green_to_blue, green); 415 tmp_blue -= ColorTransformDelta(trans->red_to_blue, red); 416 417 *new_red = tmp_red & 0xff; 418 *new_blue = tmp_blue & 0xff; 419 } 420 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 421 422 `ColorTransformDelta` is computed using a signed 8-bit integer representing a 423 3.5-fixed-point number and a signed 8-bit RGB color channel (c) \[-128..127\] 424 and is defined as follows: 425 426 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 427 int8 ColorTransformDelta(int8 t, int8 c) { 428 return (t * c) >> 5; 429 } 430 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 431 432 A conversion from the 8-bit unsigned representation (uint8) to the 8-bit signed 433 one (int8) is required before calling `ColorTransformDelta()`. The signed value 434 should be interpreted as an 8-bit two's complement number (that is: uint8 range 435 \[128..255\] is mapped to the \[-128..-1\] range of its converted int8 value). 436 437 The multiplication is to be done using more precision (with at least 16-bit 438 precision). The sign extension property of the shift operation does not matter 439 here; only the lowest 8 bits are used from the result, and in these bits, the 440 sign extension shifting and unsigned shifting are consistent with each other. 441 442 Now, we describe the contents of color transform data so that decoding can apply 443 the inverse color transform and recover the original red and blue values. The 444 first 3 bits of the color transform data contain the width and height of the 445 image block in number of bits, just like the predictor transform: 446 447 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 448 int size_bits = ReadBits(3) + 2; 449 int block_width = 1 << size_bits; 450 int block_height = 1 << size_bits; 451 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 452 453 The remaining part of the color transform data contains `ColorTransformElement` 454 instances, corresponding to each block of the image. Each 455 `ColorTransformElement` `'cte'` is treated as a pixel in a subresolution image 456 whose alpha component is `255`, red component is `cte.red_to_blue`, green 457 component is `cte.green_to_blue`, and blue component is `cte.green_to_red`. 458 459 During decoding, `ColorTransformElement` instances of the blocks are decoded and 460 the inverse color transform is applied on the ARGB values of the pixels. As 461 mentioned earlier, that inverse color transform is just adding 462 `ColorTransformElement` values to the red and blue channels. The alpha and green 463 channels are left as is. 464 465 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 466 void InverseTransform(uint8 red, uint8 green, uint8 blue, 467 ColorTransformElement *trans, 468 uint8 *new_red, uint8 *new_blue) { 469 // Transformed values of red and blue components 470 int tmp_red = red; 471 int tmp_blue = blue; 472 473 // Applying the inverse transform is just adding the 474 // color transform deltas 475 tmp_red += ColorTransformDelta(trans->green_to_red, green); 476 tmp_blue += ColorTransformDelta(trans->green_to_blue, green); 477 tmp_blue += 478 ColorTransformDelta(trans->red_to_blue, tmp_red & 0xff); 479 480 *new_red = tmp_red & 0xff; 481 *new_blue = tmp_blue & 0xff; 482 } 483 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 484 485 ### 4.3 Subtract Green Transform 486 487 The subtract green transform subtracts green values from red and blue values of 488 each pixel. When this transform is present, the decoder needs to add the green 489 value to both the red and blue values. There is no data associated with this 490 transform. The decoder applies the inverse transform as follows: 491 492 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 493 void AddGreenToBlueAndRed(uint8 green, uint8 *red, uint8 *blue) { 494 *red = (*red + green) & 0xff; 495 *blue = (*blue + green) & 0xff; 496 } 497 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 498 499 This transform is redundant, as it can be modeled using the color transform, but 500 since there is no additional data here, the subtract green transform can be 501 coded using fewer bits than a full-blown color transform. 502 503 ### 4.4 Color Indexing Transform 504 505 If there are not many unique pixel values, it may be more efficient to create a 506 color index array and replace the pixel values by the array's indices. The color 507 indexing transform achieves this. (In the context of WebP lossless, we 508 specifically do not call this a palette transform because a similar but more 509 dynamic concept exists in WebP lossless encoding: color cache.) 510 511 The color indexing transform checks for the number of unique ARGB values in the 512 image. If that number is below a threshold (256), it creates an array of those 513 ARGB values, which is then used to replace the pixel values with the 514 corresponding index: the green channel of the pixels are replaced with the 515 index, all alpha values are set to 255, and all red and blue values to 0. 516 517 The transform data contains the color table size and the entries in the color 518 table. The decoder reads the color indexing transform data as follows: 519 520 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 521 // 8-bit value for the color table size 522 int color_table_size = ReadBits(8) + 1; 523 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 524 525 The color table is stored using the image storage format itself. The color table 526 can be obtained by reading an image, without the RIFF header, image size, and 527 transforms, assuming the height of 1 pixel and the width of `color_table_size`. 528 The color table is always subtraction-coded to reduce image entropy. The deltas 529 of palette colors contain typically much less entropy than the colors 530 themselves, leading to significant savings for smaller images. In decoding, 531 every final color in the color table can be obtained by adding the previous 532 color component values by each ARGB component separately and storing the least 533 significant 8 bits of the result. 534 535 The inverse transform for the image is simply replacing the pixel values (which 536 are indices to the color table) with the actual color table values. The indexing 537 is done based on the green component of the ARGB color. 538 539 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 540 // Inverse transform 541 argb = color_table[GREEN(argb)]; 542 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 543 544 If the index is equal to or larger than `color_table_size`, the argb color value 545 should be set to 0x00000000 (transparent black). 546 547 When the color table is small (equal to or less than 16 colors), several pixels 548 are bundled into a single pixel. The pixel bundling packs several (2, 4, or 8) 549 pixels into a single pixel, reducing the image width respectively. Pixel 550 bundling allows for a more efficient joint distribution entropy coding of 551 neighboring pixels and gives some arithmetic coding-like benefits to the 552 entropy code, but it can only be used when there are 16 or fewer unique values. 553 554 `color_table_size` specifies how many pixels are combined: 555 556 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 557 int width_bits; 558 if (color_table_size <= 2) { 559 width_bits = 3; 560 } else if (color_table_size <= 4) { 561 width_bits = 2; 562 } else if (color_table_size <= 16) { 563 width_bits = 1; 564 } else { 565 width_bits = 0; 566 } 567 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 568 569 `width_bits` has a value of 0, 1, 2, or 3. A value of 0 indicates no pixel 570 bundling is to be done for the image. A value of 1 indicates that two pixels are 571 combined, and each pixel has a range of \[0..15\]. A value of 2 indicates that 572 four pixels are combined, and each pixel has a range of \[0..3\]. A value of 3 573 indicates that eight pixels are combined and each pixel has a range of \[0..1\], 574 that is, a binary value. 575 576 The values are packed into the green component as follows: 577 578 * `width_bits` = 1: For every x value, where x ≡ 0 (mod 2), a green 579 value at x is positioned into the 4 least significant bits of the 580 green value at x / 2, and a green value at x + 1 is positioned into the 581 4 most significant bits of the green value at x / 2. 582 * `width_bits` = 2: For every x value, where x ≡ 0 (mod 4), a green 583 value at x is positioned into the 2 least-significant bits of the 584 green value at x / 4, and green values at x + 1 to x + 3 are positioned in 585 order to the more significant bits of the green value at x / 4. 586 * `width_bits` = 3: For every x value, where x ≡ 0 (mod 8), a green 587 value at x is positioned into the least significant bit of the green 588 value at x / 8, and green values at x + 1 to x + 7 are positioned in order 589 to the more significant bits of the green value at x / 8. 590 591 After reading this transform, `image_width` is subsampled by `width_bits`. This 592 affects the size of subsequent transforms. The new size can be calculated using 593 `DIV_ROUND_UP`, as defined [earlier](#predictor-transform). 594 595 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 596 image_width = DIV_ROUND_UP(image_width, 1 << width_bits); 597 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 598 599 5 Image Data 600 ------------ 601 602 Image data is an array of pixel values in scan-line order. 603 604 ### 5.1 Roles of Image Data 605 606 We use image data in five different roles: 607 608 1. ARGB image: Stores the actual pixels of the image. 609 1. Entropy image: Stores the meta prefix codes (see 610 ["Decoding of Meta Prefix Codes"](#decoding-of-meta-prefix-codes)). 611 1. Predictor image: Stores the metadata for the predictor transform (see 612 ["Predictor Transform"](#predictor-transform)). 613 1. Color transform image: Created by `ColorTransformElement` values 614 (defined in ["Color Transform"](#color-transform)) for different blocks of 615 the image. 616 1. Color indexing image: An array of the size of `color_table_size` (up to 617 256 ARGB values) that stores metadata for the color indexing transform (see 618 ["Color Indexing Transform"](#color-indexing-transform)). 619 620 ### 5.2 Encoding of Image Data 621 622 The encoding of image data is independent of its role. 623 624 The image is first divided into a set of fixed-size blocks (typically 16x16 625 blocks). Each of these blocks are modeled using their own entropy codes. Also, 626 several blocks may share the same entropy codes. 627 628 **Rationale:** Storing an entropy code incurs a cost. This cost can be minimized 629 if statistically similar blocks share an entropy code, thereby storing that code 630 only once. For example, an encoder can find similar blocks by clustering them 631 using their statistical properties or by repeatedly joining a pair of randomly 632 selected clusters when it reduces the overall amount of bits needed to encode 633 the image. 634 635 Each pixel is encoded using one of the three possible methods: 636 637 1. Prefix-coded literals: Each channel (green, red, blue, and alpha) is 638 entropy-coded independently. 639 2. LZ77 backward reference: A sequence of pixels are copied from elsewhere in 640 the image. 641 3. Color cache code: Using a short multiplicative hash code (color cache 642 index) of a recently seen color. 643 644 The following subsections describe each of these in detail. 645 646 #### 5.2.1 Prefix-Coded Literals 647 648 The pixel is stored as prefix-coded values of green, red, blue, and alpha (in 649 that order). See [Section 6.2.3](#decoding-entropy-coded-image-data) for 650 details. 651 652 #### 5.2.2 LZ77 Backward Reference 653 654 Backward references are tuples of _length_ and _distance code_: 655 656 * Length indicates how many pixels in scan-line order are to be copied. 657 * Distance code is a number indicating the position of a previously seen 658 pixel, from which the pixels are to be copied. The exact mapping is 659 described [below](#distance-mapping). 660 661 The length and distance values are stored using **LZ77 prefix coding**. 662 663 LZ77 prefix coding divides large integer values into two parts: the _prefix 664 code_ and the _extra bits_. The prefix code is stored using an entropy code, 665 while the extra bits are stored as they are (without an entropy code). 666 667 **Rationale**: This approach reduces the storage requirement for the entropy 668 code. Also, large values are usually rare, so extra bits would be used for very 669 few values in the image. Thus, this approach results in better compression 670 overall. 671 672 The following table denotes the prefix codes and extra bits used for storing 673 different ranges of values. 674 675 Note: The maximum backward reference length is limited to 4096. Hence, only the 676 first 24 prefix codes (with the respective extra bits) are meaningful for length 677 values. For distance values, however, all the 40 prefix codes are valid. 678 679 | Value range | Prefix code | Extra bits | 680 | --------------- | ----------- | ---------- | 681 | 1 | 0 | 0 | 682 | 2 | 1 | 0 | 683 | 3 | 2 | 0 | 684 | 4 | 3 | 0 | 685 | 5..6 | 4 | 1 | 686 | 7..8 | 5 | 1 | 687 | 9..12 | 6 | 2 | 688 | 13..16 | 7 | 2 | 689 | ... | ... | ... | 690 | 3072..4096 | 23 | 10 | 691 | ... | ... | ... | 692 | 524289..786432 | 38 | 18 | 693 | 786433..1048576 | 39 | 18 | 694 695 The pseudocode to obtain a (length or distance) value from the prefix code is as 696 follows: 697 698 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 699 if (prefix_code < 4) { 700 return prefix_code + 1; 701 } 702 int extra_bits = (prefix_code - 2) >> 1; 703 int offset = (2 + (prefix_code & 1)) << extra_bits; 704 return offset + ReadBits(extra_bits) + 1; 705 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 706 707 ##### Distance Mapping 708 709 As noted previously, a distance code is a number indicating the position of a 710 previously seen pixel, from which the pixels are to be copied. This subsection 711 defines the mapping between a distance code and the position of a previous 712 pixel. 713 714 Distance codes larger than 120 denote the pixel distance in scan-line order, 715 offset by 120. 716 717 The smallest distance codes \[1..120\] are special and are reserved for a close 718 neighborhood of the current pixel. This neighborhood consists of 120 pixels: 719 720 * Pixels that are 1 to 7 rows above the current pixel and are up to 8 columns 721 to the left or up to 7 columns to the right of the current pixel. \[Total 722 such pixels = `7 * (8 + 1 + 7) = 112`\]. 723 * Pixels that are in the same row as the current pixel and are up to 8 724 columns to the left of the current pixel. \[`8` such pixels\]. 725 726 The mapping between distance code `distance_code` and the neighboring pixel 727 offset `(xi, yi)` is as follows: 728 729 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 730 (0, 1), (1, 0), (1, 1), (-1, 1), (0, 2), (2, 0), (1, 2), 731 (-1, 2), (2, 1), (-2, 1), (2, 2), (-2, 2), (0, 3), (3, 0), 732 (1, 3), (-1, 3), (3, 1), (-3, 1), (2, 3), (-2, 3), (3, 2), 733 (-3, 2), (0, 4), (4, 0), (1, 4), (-1, 4), (4, 1), (-4, 1), 734 (3, 3), (-3, 3), (2, 4), (-2, 4), (4, 2), (-4, 2), (0, 5), 735 (3, 4), (-3, 4), (4, 3), (-4, 3), (5, 0), (1, 5), (-1, 5), 736 (5, 1), (-5, 1), (2, 5), (-2, 5), (5, 2), (-5, 2), (4, 4), 737 (-4, 4), (3, 5), (-3, 5), (5, 3), (-5, 3), (0, 6), (6, 0), 738 (1, 6), (-1, 6), (6, 1), (-6, 1), (2, 6), (-2, 6), (6, 2), 739 (-6, 2), (4, 5), (-4, 5), (5, 4), (-5, 4), (3, 6), (-3, 6), 740 (6, 3), (-6, 3), (0, 7), (7, 0), (1, 7), (-1, 7), (5, 5), 741 (-5, 5), (7, 1), (-7, 1), (4, 6), (-4, 6), (6, 4), (-6, 4), 742 (2, 7), (-2, 7), (7, 2), (-7, 2), (3, 7), (-3, 7), (7, 3), 743 (-7, 3), (5, 6), (-5, 6), (6, 5), (-6, 5), (8, 0), (4, 7), 744 (-4, 7), (7, 4), (-7, 4), (8, 1), (8, 2), (6, 6), (-6, 6), 745 (8, 3), (5, 7), (-5, 7), (7, 5), (-7, 5), (8, 4), (6, 7), 746 (-6, 7), (7, 6), (-7, 6), (8, 5), (7, 7), (-7, 7), (8, 6), 747 (8, 7) 748 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 749 750 For example, the distance code `1` indicates an offset of `(0, 1)` for the 751 neighboring pixel, that is, the pixel above the current pixel (0 pixel 752 difference in the X direction and 1 pixel difference in the Y direction). 753 Similarly, the distance code `3` indicates the top-left pixel. 754 755 The decoder can convert a distance code `distance_code` to a scan-line order 756 distance `dist` as follows: 757 758 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 759 (xi, yi) = distance_map[distance_code - 1] 760 dist = xi + yi * image_width 761 if (dist < 1) { 762 dist = 1 763 } 764 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 765 766 where `distance_map` is the mapping noted above, and `image_width` is the width 767 of the image in pixels. 768 769 #### 5.2.3 Color Cache Coding 770 {:#color-cache-code} 771 772 Color cache stores a set of colors that have been recently used in the image. 773 774 **Rationale:** This way, the recently used colors can sometimes be referred to 775 more efficiently than emitting them using the other two methods (described in 776 Sections [5.2.1](#prefix-coded-literals) and [5.2.2](#lz77-backward-reference)). 777 778 Color cache codes are stored as follows. First, there is a 1-bit value that 779 indicates if the color cache is used. If this bit is 0, no color cache codes 780 exist, and they are not transmitted in the prefix code that decodes the green 781 symbols and the length prefix codes. However, if this bit is 1, the color cache 782 size is read next: 783 784 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 785 int color_cache_code_bits = ReadBits(4); 786 int color_cache_size = 1 << color_cache_code_bits; 787 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 788 789 `color_cache_code_bits` defines the size of the color cache (`1 << 790 color_cache_code_bits`). The range of allowed values for 791 `color_cache_code_bits` is \[1..11\]. Compliant decoders must indicate a 792 corrupted bitstream for other values. 793 794 A color cache is an array of size `color_cache_size`. Each entry stores one ARGB 795 color. Colors are looked up by indexing them by `(0x1e35a7bd * color) >> (32 - 796 color_cache_code_bits)`. Only one lookup is done in a color cache; there is no 797 conflict resolution. 798 799 In the beginning of decoding or encoding of an image, all entries in all color 800 cache values are set to zero. The color cache code is converted to this color at 801 decoding time. The state of the color cache is maintained by inserting every 802 pixel, be it produced by backward referencing or as literals, into the cache in 803 the order they appear in the stream. 804 805 6 Entropy Code 806 -------------- 807 808 ### 6.1 Overview 809 810 Most of the data is coded using a [canonical prefix code][canonical_huff]. 811 Hence, the codes are transmitted by sending the _prefix code lengths_, as 812 opposed to the actual _prefix codes_. 813 814 In particular, the format uses **spatially variant prefix coding**. In other 815 words, different blocks of the image can potentially use different entropy 816 codes. 817 818 **Rationale**: Different areas of the image may have different characteristics. 819 So, allowing them to use different entropy codes provides more flexibility and 820 potentially better compression. 821 822 ### 6.2 Details 823 824 The encoded image data consists of several parts: 825 826 1. Decoding and building the prefix codes. 827 1. Meta prefix codes. 828 1. Entropy-coded image data. 829 830 For any given pixel (x, y), there is a set of five prefix codes associated with 831 it. These codes are (in bitstream order): 832 833 * **Prefix code #1**: Used for green channel, backward-reference length, and 834 color cache. 835 * **Prefix code #2, #3, and #4**: Used for red, blue, and alpha channels, 836 respectively. 837 * **Prefix code #5**: Used for backward-reference distance. 838 839 From here on, we refer to this set as a **prefix code group**. 840 841 #### 6.2.1 Decoding and Building the Prefix Codes 842 843 This section describes how to read the prefix code lengths from the bitstream. 844 845 The prefix code lengths can be coded in two ways. The method used is specified 846 by a 1-bit value. 847 848 * If this bit is 1, it is a _simple code length code_. 849 * If this bit is 0, it is a _normal code length code_. 850 851 In both cases, there can be unused code lengths that are still part of the 852 stream. This may be inefficient, but it is allowed by the format. 853 The described tree must be a complete binary tree. A single leaf node is 854 considered a complete binary tree and can be encoded using either the simple 855 code length code or the normal code length code. When coding a single leaf 856 node using the _normal code length code_, all but one code length are zeros, 857 and the single leaf node value is marked with the length of 1 -- even when no 858 bits are consumed when that single leaf node tree is used. 859 860 ##### Simple Code Length Code 861 862 This variant is used in the special case when only 1 or 2 prefix symbols are in 863 the range \[0..255\] with code length `1`. All other prefix code lengths are 864 implicitly zeros. 865 866 The first bit indicates the number of symbols: 867 868 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 869 int num_symbols = ReadBits(1) + 1; 870 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 871 872 The following are the symbol values. 873 874 This first symbol is coded using 1 or 8 bits, depending on the value of 875 `is_first_8bits`. The range is \[0..1\] or \[0..255\], respectively. The second 876 symbol, if present, is always assumed to be in the range \[0..255\] and coded 877 using 8 bits. 878 879 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 880 int is_first_8bits = ReadBits(1); 881 symbol0 = ReadBits(1 + 7 * is_first_8bits); 882 code_lengths[symbol0] = 1; 883 if (num_symbols == 2) { 884 symbol1 = ReadBits(8); 885 code_lengths[symbol1] = 1; 886 } 887 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 888 889 The two symbols should be different. Duplicate symbols are allowed, but 890 inefficient. 891 892 **Note:** Another special case is when _all_ prefix code lengths are _zeros_ (an 893 empty prefix code). For example, a prefix code for distance can be empty if 894 there are no backward references. Similarly, prefix codes for alpha, red, and 895 blue can be empty if all pixels within the same meta prefix code are produced 896 using the color cache. However, this case doesn't need special handling, as 897 empty prefix codes can be coded as those containing a single symbol `0`. 898 899 ##### Normal Code Length Code 900 901 The code lengths of the prefix code fit in 8 bits and are read as follows. 902 First, `num_code_lengths` specifies the number of code lengths. 903 904 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 905 int num_code_lengths = 4 + ReadBits(4); 906 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 907 908 The code lengths are themselves encoded using prefix codes; lower-level code 909 lengths, `code_length_code_lengths`, first have to be read. The rest of those 910 `code_length_code_lengths` (according to the order in `kCodeLengthCodeOrder`) 911 are zeros. 912 913 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 914 int kCodeLengthCodes = 19; 915 int kCodeLengthCodeOrder[kCodeLengthCodes] = { 916 17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 917 }; 918 int code_length_code_lengths[kCodeLengthCodes] = { 0 }; // All zeros 919 for (i = 0; i < num_code_lengths; ++i) { 920 code_length_code_lengths[kCodeLengthCodeOrder[i]] = ReadBits(3); 921 } 922 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 923 924 Next, if `ReadBits(1) == 0`, the maximum number of different read symbols 925 (`max_symbol`) for each symbol type (A, R, G, B, and distance) is set to its 926 alphabet size: 927 928 * G channel: 256 + 24 + `color_cache_size` 929 * Other literals (A, R, and B): 256 930 * Distance code: 40 931 932 Otherwise, it is defined as: 933 934 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 935 int length_nbits = 2 + 2 * ReadBits(3); 936 int max_symbol = 2 + ReadBits(length_nbits); 937 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 938 939 If `max_symbol` is larger than the size of the alphabet for the symbol type, the 940 bitstream is invalid. 941 942 A prefix table is then built from `code_length_code_lengths` and used to read up 943 to `max_symbol` code lengths. 944 945 * Code \[0..15\] indicates literal code lengths. 946 * Value 0 means no symbols have been coded. 947 * Values \[1..15\] indicate the bit length of the respective code. 948 * Code 16 repeats the previous nonzero value \[3..6\] times, that is, 949 `3 + ReadBits(2)` times. If code 16 is used before a nonzero 950 value has been emitted, a value of 8 is repeated. 951 * Code 17 emits a streak of zeros of length \[3..10\], that is, `3 + 952 ReadBits(3)` times. 953 * Code 18 emits a streak of zeros of length \[11..138\], that is, 954 `11 + ReadBits(7)` times. 955 956 Once code lengths are read, a prefix code for each symbol type (A, R, G, B, and 957 distance) is formed using their respective alphabet sizes. 958 959 The Normal Code Length Code must code a full decision tree, that is, the sum of 960 `2 ^ (-length)` for all non-zero codes must be exactly one. There is however 961 one exception to this rule, the single leaf node tree, where the leaf node 962 value is marked with value 1 and other values are 0s. 963 964 #### 6.2.2 Decoding of Meta Prefix Codes 965 966 As noted earlier, the format allows the use of different prefix codes for 967 different blocks of the image. _Meta prefix codes_ are indexes identifying which 968 prefix codes to use in different parts of the image. 969 970 Meta prefix codes may be used _only_ when the image is being used in the 971 [role](#roles-of-image-data) of an _ARGB image_. 972 973 There are two possibilities for the meta prefix codes, indicated by a 1-bit 974 value: 975 976 * If this bit is zero, there is only one meta prefix code used everywhere in 977 the image. No more data is stored. 978 * If this bit is one, the image uses multiple meta prefix codes. These meta 979 prefix codes are stored as an _entropy image_ (described below). 980 981 The red and green components of a pixel define a 16-bit meta prefix code used in 982 a particular block of the ARGB image. 983 984 ##### Entropy Image 985 986 The entropy image defines which prefix codes are used in different parts of the 987 image. 988 989 The first 3 bits contain the `prefix_bits` value. The dimensions of the entropy 990 image are derived from `prefix_bits`: 991 992 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 993 int prefix_bits = ReadBits(3) + 2; 994 int prefix_image_width = 995 DIV_ROUND_UP(image_width, 1 << prefix_bits); 996 int prefix_image_height = 997 DIV_ROUND_UP(image_height, 1 << prefix_bits); 998 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 999 1000 where `DIV_ROUND_UP` is as defined [earlier](#predictor-transform). 1001 1002 The next bits contain an entropy image of width `prefix_image_width` and height 1003 `prefix_image_height`. 1004 1005 ##### Interpretation of Meta Prefix Codes 1006 1007 The number of prefix code groups in the ARGB image can be obtained by finding 1008 the _largest meta prefix code_ from the entropy image: 1009 1010 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1011 int num_prefix_groups = max(entropy image) + 1; 1012 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1013 where `max(entropy image)` indicates the largest prefix code stored in the 1014 entropy image. 1015 1016 As each prefix code group contains five prefix codes, the total number of prefix 1017 codes is: 1018 1019 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1020 int num_prefix_codes = 5 * num_prefix_groups; 1021 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1022 1023 Given a pixel (x, y) in the ARGB image, we can obtain the corresponding prefix 1024 codes to be used as follows: 1025 1026 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1027 int position = 1028 (y >> prefix_bits) * prefix_image_width + (x >> prefix_bits); 1029 int meta_prefix_code = (entropy_image[position] >> 8) & 0xffff; 1030 PrefixCodeGroup prefix_group = prefix_code_groups[meta_prefix_code]; 1031 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1032 1033 where we have assumed the existence of `PrefixCodeGroup` structure, which 1034 represents a set of five prefix codes. Also, `prefix_code_groups` is an array of 1035 `PrefixCodeGroup` (of size `num_prefix_groups`). 1036 1037 The decoder then uses prefix code group `prefix_group` to decode the pixel 1038 (x, y), as explained in ["Decoding Entropy-Coded Image 1039 Data"](#decoding-entropy-coded-image-data). 1040 1041 #### 6.2.3 Decoding Entropy-Coded Image Data 1042 1043 For the current position (x, y) in the image, the decoder first identifies the 1044 corresponding prefix code group (as explained in the last section). Given the 1045 prefix code group, the pixel is read and decoded as follows. 1046 1047 Next, read the symbol S from the bitstream using prefix code #1. Note that S is 1048 any integer in the range `0` to 1049 `(256 + 24 + ` [`color_cache_size`](#color-cache-code)` - 1)`. 1050 1051 The interpretation of S depends on its value: 1052 1053 1. If S < 256 1054 1. Use S as the green component. 1055 1. Read red from the bitstream using prefix code #2. 1056 1. Read blue from the bitstream using prefix code #3. 1057 1. Read alpha from the bitstream using prefix code #4. 1058 1. If S >= 256 & S < 256 + 24 1059 1. Use S - 256 as a length prefix code. 1060 1. Read extra bits for the length from the bitstream. 1061 1. Determine backward-reference length L from length prefix code and the 1062 extra bits read. 1063 1. Read the distance prefix code from the bitstream using prefix code #5. 1064 1. Read extra bits for the distance from the bitstream. 1065 1. Determine backward-reference distance D from the distance prefix code 1066 and the extra bits read. 1067 1. Copy L pixels (in scan-line order) from the sequence of pixels starting 1068 at the current position minus D pixels. 1069 1. If S >= 256 + 24 1070 1. Use S - (256 + 24) as the index into the color cache. 1071 1. Get ARGB color from the color cache at that index. 1072 1073 7 Overall Structure of the Format 1074 --------------------------------- 1075 1076 Below is a view into the format in Augmented Backus-Naur Form (ABNF) 1077 [RFC 5234][] [RFC 7405][]. It does not cover all details. The end-of-image (EOI) 1078 is only implicitly coded into the number of pixels (image_width * image_height). 1079 1080 Note that `*element` means `element` can be repeated 0 or more times. `5element` 1081 means `element` is repeated exactly 5 times. `%b` represents a binary value. 1082 1083 #### 7.1 Basic Structure 1084 1085 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1086 format = RIFF-header image-header image-stream 1087 RIFF-header = %s"RIFF" 4OCTET %s"WEBPVP8L" 4OCTET 1088 image-header = %x2F image-size alpha-is-used version 1089 image-size = 14BIT 14BIT ; width - 1, height - 1 1090 alpha-is-used = 1BIT 1091 version = 3BIT ; 0 1092 image-stream = optional-transform spatially-coded-image 1093 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 1095 #### 7.2 Structure of Transforms 1096 1097 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 optional-transform = (%b1 transform optional-transform) / %b0 1099 transform = predictor-tx / color-tx / subtract-green-tx 1100 transform =/ color-indexing-tx 1101 1102 predictor-tx = %b00 predictor-image 1103 predictor-image = 3BIT ; sub-pixel code 1104 entropy-coded-image 1105 1106 color-tx = %b01 color-image 1107 color-image = 3BIT ; sub-pixel code 1108 entropy-coded-image 1109 1110 subtract-green-tx = %b10 1111 1112 color-indexing-tx = %b11 color-indexing-image 1113 color-indexing-image = 8BIT ; color count 1114 entropy-coded-image 1115 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 1117 #### 7.3 Structure of the Image Data 1118 1119 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1120 spatially-coded-image = color-cache-info meta-prefix data 1121 entropy-coded-image = color-cache-info data 1122 1123 color-cache-info = %b0 1124 color-cache-info =/ (%b1 4BIT) ; 1 followed by color cache size 1125 1126 meta-prefix = %b0 / (%b1 entropy-image) 1127 1128 data = prefix-codes lz77-coded-image 1129 entropy-image = 3BIT ; subsample value 1130 entropy-coded-image 1131 1132 prefix-codes = prefix-code-group *prefix-codes 1133 prefix-code-group = 1134 5prefix-code ; See "Interpretation of Meta Prefix Codes" to 1135 ; understand what each of these five prefix 1136 ; codes are for. 1137 1138 prefix-code = simple-prefix-code / normal-prefix-code 1139 simple-prefix-code = ; see "Simple Code Length Code" for details 1140 normal-prefix-code = ; see "Normal Code Length Code" for details 1141 1142 lz77-coded-image = 1143 *((argb-pixel / lz77-copy / color-cache-code) lz77-coded-image) 1144 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 1146 The following is a possible example sequence: 1147 1148 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1149 RIFF-header image-size %b1 subtract-green-tx 1150 %b1 predictor-tx %b0 color-cache-info 1151 %b0 prefix-codes lz77-coded-image 1152 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 1154 [RFC 5234]: https://www.rfc-editor.org/rfc/rfc5234 1155 [RFC 7405]: https://www.rfc-editor.org/rfc/rfc7405 1156 [canonical_huff]: https://en.wikipedia.org/wiki/Canonical_Huffman_code