| // Copyright 2026 The Wuffs Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or |
| // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license |
| // <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your |
| // option. This file may not be copied, modified, or distributed |
| // except according to those terms. |
| // |
| // SPDX-License-Identifier: Apache-2.0 OR MIT |
| |
| // -------- |
| |
| // RENORM_SHIFT[range_m1] is the number of bits to shift the entropy coder |
| // state by, when decoder.read_bit reads an entropy coded bit, so that range_m1 |
| // stays in the range [0x7F ..= 0xFE]. |
| // |
| // It is a look-up table for: |
| // |
| // RENORM_SHIFT[range_m1] = 7 - log2(range_m1 + 1) |
| // |
| // Equivalently: |
| // |
| // RENORM_SHIFT[range_m1] = 24 ^ __builtin_clz((uint32_t)(range_m1 + 1)) |
| // |
| // Note that the final (255th) element is unused. |
| // |
| // If range_m1 >= 0x7F then RENORM_SHIFT[range_m1] is zero, so that shifting or |
| // subtracting RENORM_SHIFT[range_m1], as part of re-normalization, is a no-op. |
| // |
| // In terms of formatting, the line breaks are "off by one" (after 15, 31, 47, |
| // etc instead of 16, 32, 48, etc elements) because the the array is indexed by |
| // a "foobar_m1" expression and the "m1" means "minus 1". |
| pri const RENORM_SHIFT : roarray[256] base.u8[..= 7] = [ |
| 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, |
| 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, |
| 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
| 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
| |
| 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
| 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
| 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
| 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
| |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| |
| // Unused. Set the placeholder equal to the second-last entry. |
| 0, |
| ] |
| |
| // RENORM_RANGE_M1[range_m1] is the re-normalized value of range_m1, used when |
| // decoder.read_bit reads an entropy coded bit. |
| // |
| // - There are 1 entries, matching RENORM_SHIFT[range_m1] == 7, being 128-1. |
| // - There are 2 entries, matching RENORM_SHIFT[range_m1] == 6, being |
| // 128-1, 192-1, incrementing by 64. |
| // - There are 4 entries, matching RENORM_SHIFT[range_m1] == 5, being |
| // 128-1, 160-1, ..., 224-1, incrementing by 32. |
| // - There are 8 entries, matching RENORM_SHIFT[range_m1] == 4, being |
| // 128-1, 144-1, ..., 240-1, incrementing by 16. |
| // - There are 16 entries, matching RENORM_SHIFT[range_m1] == 3, being |
| // 128-1, 136-1, ..., 248-1, incrementing by 8. |
| // - ... |
| // - There are 128 entries, matching RENORM_SHIFT[range_m1] == 0, being |
| // 128-1, 129-1, ..., 255-1, incrementing by 1. |
| // |
| // It is a look-up table for: |
| // |
| // RENORM_RANGE_M1[range_m1] = ((range_m1 + 1) << RENORM_SHIFT[range_m1]) - 1 |
| // |
| // If range_m1 >= 0x7F then RENORM_RANGE_M1[range_m1] is range_m1, so that |
| // assigning "range_m1 = RENORM_RANGE_M1[range_m1]", as part of |
| // re-normalization, is a no-op. |
| // |
| // In terms of formatting, the line breaks are "off by one" (after 15, 31, 47, |
| // etc instead of 16, 32, 48, etc elements) because the the array is indexed by |
| // a "foobar_m1" expression and the "m1" means "minus 1". |
| pri const RENORM_RANGE_M1 : roarray[256] base.u8[127 ..= 254] = [ |
| 127, 127, 191, 127, 159, 191, 223, 127, 143, 159, 175, 191, 207, 223, 239, |
| 127, 135, 143, 151, 159, 167, 175, 183, 191, 199, 207, 215, 223, 231, 239, 247, |
| 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179, 183, 187, |
| 191, 195, 199, 203, 207, 211, 215, 219, 223, 227, 231, 235, 239, 243, 247, 251, |
| |
| 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, |
| 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, |
| 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, |
| 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, |
| |
| 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, |
| 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, |
| 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, |
| 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, |
| |
| 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, |
| 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, |
| 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, |
| 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, |
| |
| // Unused. Set the placeholder equal to the second-last entry. |
| 254, |
| ] |
| |
| pri const CLAMP_NO_MORE_THAN_9 : roarray[16] base.u8[..= 9] = [ |
| 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 9, 9, |
| ] |
| |
| pri const CLAMP : roarray[1024] base.u8 = [ |
| 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, |
| 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, |
| 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, |
| 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, |
| 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, |
| 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, |
| 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, |
| 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, |
| |
| 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, |
| 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, |
| 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, |
| 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, |
| 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, |
| 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, |
| 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, |
| 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, |
| |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
| |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| ] |
| |
| // RFC 6386 Section 11.5. Subblock Mode Probability Table. |
| // |
| // Note that the specification (the RFC) differs from the implementation |
| // (libwebp's src/dec/tree_dec.c). The mode enumeration, ranging in 0 ..= 9, |
| // has been re-ordered. This implementation follows libwebp. |
| // |
| // Here's the sequence of SUBBLOCK_MODE_PROBS[m][0][0] values: |
| // |
| // 231, 134, 88, 193, 125, 138, 104, 102, 164, 190. RFC's kf_bmode_prob. |
| // 231, 134, 88, 193, 138, 104, 125, 102, 164, 190. libwebp's kBModesProba. |
| // ^^^ ^^^ ^^^ Note the difference. |
| // |
| // |
| // A libwebp commit message from 2010 says "lot of cosmetics" and "use HE and |
| // VE naming for prediction mode instead of H and V" but it also does this |
| // re-ordering. It has this diff: |
| // |
| // VP8PredFunc VP8PredLuma4[11] = { |
| // - DC4, TM4, V4, H4, LD4, RD4, VR4, VL4, HD4, HU4 |
| // + DC4, TM4, VE4, HE4, RD4, VR4, LD4, VL4, HD4, HU4 |
| // }; |
| // ^^^ ^^^ ^^^ Note the difference. |
| // |
| // https://chromium.googlesource.com/webm/libwebp/+/f67b5939ad92e608b546b291b29bca1db3b54772%5E%21 |
| pri const SUBBLOCK_MODE_PROBS : roarray[10] roarray[10] roarray[9] base.u8[1 ..=] = [[ |
| [231, 120, 48, 89, 115, 113, 120, 152, 112], |
| [152, 179, 64, 126, 170, 118, 46, 70, 95], |
| [175, 69, 143, 80, 85, 82, 72, 155, 103], |
| [56, 58, 10, 171, 218, 189, 17, 13, 152], |
| [114, 26, 17, 163, 44, 195, 21, 10, 173], |
| [121, 24, 80, 195, 26, 62, 44, 64, 85], |
| [144, 71, 10, 38, 171, 213, 144, 34, 26], |
| [170, 46, 55, 19, 136, 160, 33, 206, 71], |
| [63, 20, 8, 114, 114, 208, 12, 9, 226], |
| [81, 40, 11, 96, 182, 84, 29, 16, 36], |
| ],[ |
| [134, 183, 89, 137, 98, 101, 106, 165, 148], |
| [72, 187, 100, 130, 157, 111, 32, 75, 80], |
| [66, 102, 167, 99, 74, 62, 40, 234, 128], |
| [41, 53, 9, 178, 241, 141, 26, 8, 107], |
| [74, 43, 26, 146, 73, 166, 49, 23, 157], |
| [65, 38, 105, 160, 51, 52, 31, 115, 128], |
| [104, 79, 12, 27, 217, 255, 87, 17, 7], |
| [87, 68, 71, 44, 114, 51, 15, 186, 23], |
| [47, 41, 14, 110, 182, 183, 21, 17, 194], |
| [66, 45, 25, 102, 197, 189, 23, 18, 22], |
| ],[ |
| [88, 88, 147, 150, 42, 46, 45, 196, 205], |
| [43, 97, 183, 117, 85, 38, 35, 179, 61], |
| [39, 53, 200, 87, 26, 21, 43, 232, 171], |
| [56, 34, 51, 104, 114, 102, 29, 93, 77], |
| [39, 28, 85, 171, 58, 165, 90, 98, 64], |
| [34, 22, 116, 206, 23, 34, 43, 166, 73], |
| [107, 54, 32, 26, 51, 1, 81, 43, 31], |
| [68, 25, 106, 22, 64, 171, 36, 225, 114], |
| [34, 19, 21, 102, 132, 188, 16, 76, 124], |
| [62, 18, 78, 95, 85, 57, 50, 48, 51], |
| ],[ |
| [193, 101, 35, 159, 215, 111, 89, 46, 111], |
| [60, 148, 31, 172, 219, 228, 21, 18, 111], |
| [112, 113, 77, 85, 179, 255, 38, 120, 114], |
| [40, 42, 1, 196, 245, 209, 10, 25, 109], |
| [88, 43, 29, 140, 166, 213, 37, 43, 154], |
| [61, 63, 30, 155, 67, 45, 68, 1, 209], |
| [100, 80, 8, 43, 154, 1, 51, 26, 71], |
| [142, 78, 78, 16, 255, 128, 34, 197, 171], |
| [41, 40, 5, 102, 211, 183, 4, 1, 221], |
| [51, 50, 17, 168, 209, 192, 23, 25, 82], |
| ],[ |
| [138, 31, 36, 171, 27, 166, 38, 44, 229], |
| [67, 87, 58, 169, 82, 115, 26, 59, 179], |
| [63, 59, 90, 180, 59, 166, 93, 73, 154], |
| [40, 40, 21, 116, 143, 209, 34, 39, 175], |
| [47, 15, 16, 183, 34, 223, 49, 45, 183], |
| [46, 17, 33, 183, 6, 98, 15, 32, 183], |
| [57, 46, 22, 24, 128, 1, 54, 17, 37], |
| [65, 32, 73, 115, 28, 128, 23, 128, 205], |
| [40, 3, 9, 115, 51, 192, 18, 6, 223], |
| [87, 37, 9, 115, 59, 77, 64, 21, 47], |
| ],[ |
| [104, 55, 44, 218, 9, 54, 53, 130, 226], |
| [64, 90, 70, 205, 40, 41, 23, 26, 57], |
| [54, 57, 112, 184, 5, 41, 38, 166, 213], |
| [30, 34, 26, 133, 152, 116, 10, 32, 134], |
| [39, 19, 53, 221, 26, 114, 32, 73, 255], |
| [31, 9, 65, 234, 2, 15, 1, 118, 73], |
| [75, 32, 12, 51, 192, 255, 160, 43, 51], |
| [88, 31, 35, 67, 102, 85, 55, 186, 85], |
| [56, 21, 23, 111, 59, 205, 45, 37, 192], |
| [55, 38, 70, 124, 73, 102, 1, 34, 98], |
| ],[ |
| [125, 98, 42, 88, 104, 85, 117, 175, 82], |
| [95, 84, 53, 89, 128, 100, 113, 101, 45], |
| [75, 79, 123, 47, 51, 128, 81, 171, 1], |
| [57, 17, 5, 71, 102, 57, 53, 41, 49], |
| [38, 33, 13, 121, 57, 73, 26, 1, 85], |
| [41, 10, 67, 138, 77, 110, 90, 47, 114], |
| [115, 21, 2, 10, 102, 255, 166, 23, 6], |
| [101, 29, 16, 10, 85, 128, 101, 196, 26], |
| [57, 18, 10, 102, 102, 213, 34, 20, 43], |
| [117, 20, 15, 36, 163, 128, 68, 1, 26], |
| ],[ |
| [102, 61, 71, 37, 34, 53, 31, 243, 192], |
| [69, 60, 71, 38, 73, 119, 28, 222, 37], |
| [68, 45, 128, 34, 1, 47, 11, 245, 171], |
| [62, 17, 19, 70, 146, 85, 55, 62, 70], |
| [37, 43, 37, 154, 100, 163, 85, 160, 1], |
| [63, 9, 92, 136, 28, 64, 32, 201, 85], |
| [75, 15, 9, 9, 64, 255, 184, 119, 16], |
| [86, 6, 28, 5, 64, 255, 25, 248, 1], |
| [56, 8, 17, 132, 137, 255, 55, 116, 128], |
| [58, 15, 20, 82, 135, 57, 26, 121, 40], |
| ],[ |
| [164, 50, 31, 137, 154, 133, 25, 35, 218], |
| [51, 103, 44, 131, 131, 123, 31, 6, 158], |
| [86, 40, 64, 135, 148, 224, 45, 183, 128], |
| [22, 26, 17, 131, 240, 154, 14, 1, 209], |
| [45, 16, 21, 91, 64, 222, 7, 1, 197], |
| [56, 21, 39, 155, 60, 138, 23, 102, 213], |
| [83, 12, 13, 54, 192, 255, 68, 47, 28], |
| [85, 26, 85, 85, 128, 128, 32, 146, 171], |
| [18, 11, 7, 63, 144, 171, 4, 4, 246], |
| [35, 27, 10, 146, 174, 171, 12, 26, 128], |
| ],[ |
| [190, 80, 35, 99, 180, 80, 126, 54, 45], |
| [85, 126, 47, 87, 176, 51, 41, 20, 32], |
| [101, 75, 128, 139, 118, 146, 116, 128, 85], |
| [56, 41, 15, 176, 236, 85, 37, 9, 62], |
| [71, 30, 17, 119, 118, 255, 17, 18, 138], |
| [101, 38, 60, 138, 55, 70, 43, 26, 142], |
| [146, 36, 19, 30, 171, 255, 97, 27, 20], |
| [138, 45, 61, 62, 219, 1, 81, 188, 64], |
| [32, 41, 20, 117, 151, 142, 20, 21, 163], |
| [112, 19, 12, 61, 195, 128, 48, 4, 24], |
| ]] |
| |
| // RFC 6386 Section 13.2. Coding of Individual Coefficient Values. |
| // |
| // Categories 1 and 2 are inlined. |
| pri const CATEGORY_PROBS : roarray[4] roarray[16] base.u8 = [[ |
| // Category 3. |
| 173, 148, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| ],[ |
| // Category 4. |
| 176, 155, 140, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| ],[ |
| // Category 5. |
| 180, 157, 141, 134, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| ],[ |
| // Category 6. |
| 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0, 0, 0, 0, 0, |
| ]] |
| |
| // RFC 6386 Section 13.3. Token Probabilities. |
| // |
| // These are the RFC's coeff_bands array values multplied by 33, with an extra |
| // element at the end so we can index by (i+1). |
| pri const COEFF_BANDS_33 : roarray[17] base.u32[..= 231] = [ |
| 0, 33, 66, 99, 198, 132, 165, 198, 198, 198, 198, 198, 198, 198, 198, 231, 0, |
| ] |
| |
| // RFC 6386 Section 13.4. Token Probability Updates. |
| // |
| // 1056 is (4 planes, 8 bands, 3 contexts, 11 tokens) flattened. |
| pri const COEFF_UPDATE_PROBS : roarray[1056] base.u8[1 ..=] = [ |
| // Plane 0: Y beginning at coefficient 1 |
| |
| // Band 0 |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 1 |
| 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255, |
| 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 2 |
| 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255, |
| 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 3 |
| 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 4 |
| 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 5 |
| 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 6 |
| 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255, |
| 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255, |
| 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 7 |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| |
| // Plane 1: Y2 |
| |
| // Band 0 |
| 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255, |
| 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255, |
| // Band 1 |
| 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255, |
| // Band 2 |
| 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 3 |
| 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 4 |
| 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 5 |
| 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 6 |
| 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255, |
| 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 7 |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| |
| // Plane 2: U or V |
| |
| // Band 0 |
| 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255, |
| 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255, |
| 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255, |
| // Band 1 |
| 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255, |
| // Band 2 |
| 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 3 |
| 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 4 |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 5 |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 6 |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 7 |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| |
| // Plane 3: Y beginning at coefficient 0 |
| |
| // Band 0 |
| 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255, |
| 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255, |
| // Band 1 |
| 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, |
| 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, |
| 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255, |
| // Band 2 |
| 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255, |
| 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255, |
| 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, |
| // Band 3 |
| 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 4 |
| 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255, |
| 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 5 |
| 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 6 |
| 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, |
| 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| // Band 7 |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
| ] |
| |
| // RFC 6386 Section 13.5. Default Token Probability Table. |
| // |
| // 1056 is (4 planes, 8 bands, 3 contexts, 11 tokens) flattened. |
| pri const DEFAULT_COEFF_PROBS : roarray[1056] base.u8[1 ..=] = [ |
| // Plane 0: Y beginning at coefficient 1 |
| |
| // Band 0 |
| 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, |
| 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, |
| 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, |
| // Band 1 |
| 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128, |
| 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128, |
| 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128, |
| // Band 2 |
| 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128, |
| 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128, |
| 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128, |
| // Band 3 |
| 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128, |
| 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128, |
| 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128, |
| // Band 4 |
| 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128, |
| 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128, |
| 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128, |
| // Band 5 |
| 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128, |
| 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128, |
| 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128, |
| // Band 6 |
| 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128, |
| 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128, |
| 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128, |
| // Band 7 |
| 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128, |
| 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128, |
| 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, |
| |
| // Plane 1: Y2 |
| |
| // Band 0 |
| 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62, |
| 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1, |
| 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128, |
| // Band 1 |
| 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128, |
| 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128, |
| 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128, |
| // Band 2 |
| 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128, |
| 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128, |
| 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128, |
| // Band 3 |
| 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128, |
| 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128, |
| 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128, |
| // Band 4 |
| 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128, |
| 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128, |
| 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128, |
| // Band 5 |
| 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128, |
| 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128, |
| 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128, |
| // Band 6 |
| 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128, |
| 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128, |
| 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128, |
| // Band 7 |
| 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128, |
| 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128, |
| 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128, |
| |
| // Plane 2: U or V |
| |
| // Band 0 |
| 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128, |
| 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128, |
| 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128, |
| // Band 1 |
| 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128, |
| 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128, |
| 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128, |
| // Band 2 |
| 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128, |
| 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128, |
| 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128, |
| // Band 3 |
| 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128, |
| 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128, |
| 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128, |
| // Band 4 |
| 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128, |
| 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128, |
| 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128, |
| // Band 5 |
| 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128, |
| 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128, |
| 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128, |
| // Band 6 |
| 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128, |
| 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128, |
| 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128, |
| // Band 7 |
| 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, |
| 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, |
| 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, |
| |
| // Plane 3: Y beginning at coefficient 0 |
| |
| // Band 0 |
| 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255, |
| 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128, |
| 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128, |
| // Band 1 |
| 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128, |
| 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128, |
| 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128, |
| // Band 2 |
| 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128, |
| 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128, |
| 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128, |
| // Band 3 |
| 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128, |
| 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128, |
| 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128, |
| // Band 4 |
| 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128, |
| 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128, |
| 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128, |
| // Band 5 |
| 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128, |
| 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128, |
| 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128, |
| // Band 6 |
| 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128, |
| 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128, |
| 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128, |
| // Band 7 |
| 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128, |
| 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128, |
| 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128, |
| ] |
| |
| // RFC 6386 Section 14.1. Dequantization. |
| pri const DEQUANTS : roarray[2] roarray[128] base.u16[..= 284] = [[ |
| 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, |
| 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, |
| 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, |
| 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, |
| 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, |
| 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, |
| 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, |
| 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157, |
| ],[ |
| 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, |
| 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, |
| 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, |
| 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, |
| 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, |
| 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, |
| 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, |
| 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284, |
| ]] |
| |
| // RFC 6386 Section 20.16. tokens.c. |
| pri const ZIGZAG : roarray[16] base.u8[..= 15] = [ |
| 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15, |
| ] |