blob: 7efd94a78f8474ac7f78f37ebf7781055d7524ef [file] [log] [blame]
/*
* Copyright (c) 2021, Alliance for Open Media. All rights reserved
*
* This source code is subject to the terms of the BSD 3-Clause Clear License
* and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
* License was not distributed with this source code in the LICENSE file, you
* can obtain it at aomedia.org/license/software-license/bsd-3-c-c/. If the
* Alliance for Open Media Patent License 1.0 was not distributed with this
* source code in the PATENTS file, you can obtain it at
* aomedia.org/license/patent-license/.
*/
#ifndef AV1_COMMON_PC_WIENER_FILTERS_H_
#define AV1_COMMON_PC_WIENER_FILTERS_H_
#define NUM_PC_WIENER_LUT_CLASSES 256
#define NUM_PC_WIENER_FILTERS 64
#define PC_WIENER_BLOCK_SIZE 4
#define PC_WIENER_BLOCK_ROW_OFFSET 0
#define PC_WIENER_BLOCK_COL_OFFSET 0
#define PC_WIENER_FEATURE_LEAD_LUMA (PC_WIENER_BLOCK_SIZE > 3 ? 1 : 1)
#define PC_WIENER_FEATURE_LAG_LUMA (PC_WIENER_BLOCK_SIZE > 3 ? 4 : 3)
#define PC_WIENER_FEATURE_LENGTH_LUMA \
(PC_WIENER_FEATURE_LEAD_LUMA + PC_WIENER_FEATURE_LAG_LUMA + 1)
#define PC_WIENER_TSKIP_LEAD_LUMA (PC_WIENER_BLOCK_SIZE > 3 ? 1 : 1)
#define PC_WIENER_TSKIP_LAG_LUMA (PC_WIENER_BLOCK_SIZE > 3 ? 4 : 3)
#define PC_WIENER_TSKIP_LENGTH_LUMA \
(PC_WIENER_TSKIP_LEAD_LUMA + PC_WIENER_TSKIP_LAG_LUMA + 1)
#define NUM_PC_WIENER_TSKIP_TAPS_LUMA \
(PC_WIENER_TSKIP_LENGTH_LUMA * PC_WIENER_TSKIP_LENGTH_LUMA)
#define NUM_PC_WIENER_FEATURES 4
#define PC_WIENER_PREC_FILTER 12
#define PC_WIENER_PREC_FEATURE 14
#define PC_WIENER_LUT_SIZE 4096
#define USE_CONVOLVE_SYM 1
#define PC_WIENER_FEATURE_AREA_LUMA \
(PC_WIENER_FEATURE_LENGTH_LUMA * PC_WIENER_FEATURE_LENGTH_LUMA)
#define MAX_FEATURE_LENGTH PC_WIENER_FEATURE_LENGTH_LUMA
#define NUM_FEATURE_LINE_BUFFERS (NUM_PC_WIENER_FEATURES * MAX_FEATURE_LENGTH)
// Vector size needed to hold feature accumulator values at 4x4 level.
#define PC_WIENER_FEATURE_ACC_SIZE \
(RESTORATION_PROC_UNIT_SIZE + PC_WIENER_FEATURE_LENGTH_LUMA) / \
PC_WIENER_BLOCK_SIZE
#define SCALE_LUMA(x) \
(((x)*25 + PC_WIENER_FEATURE_AREA_LUMA / 2) / PC_WIENER_FEATURE_AREA_LUMA)
// Should be positive numbers.
static const int32_t feature_normalizers_luma[NUM_PC_WIENER_FEATURES] = {
SCALE_LUMA(13), SCALE_LUMA(5384), SCALE_LUMA(4713), SCALE_LUMA(4426)
};
static const int32_t tskip_normalizer =
(int)(256 / NUM_PC_WIENER_TSKIP_TAPS_LUMA);
static const int32_t mode_weights[NUM_PC_WIENER_FEATURES][3] = {
{ -527, 15325, 321 },
{ 26436, -17705, 17905 },
{ 366, -147, -194 },
{ 202, -267, -179 }
};
static const int32_t mode_offsets[NUM_PC_WIENER_FEATURES] = { -547, -21565,
-573, -680 };
typedef struct PcwienerBuffers {
int buffer_width;
int16_t *feature_line_buffers[NUM_FEATURE_LINE_BUFFERS];
int *feature_sum_buffers[NUM_PC_WIENER_FEATURES];
int8_t *tskip_sum_buffer;
int directional_feature_accumulator[NUM_PC_WIENER_FEATURES]
[PC_WIENER_FEATURE_ACC_SIZE];
int16_t tskip_feature_accumulator[PC_WIENER_FEATURE_ACC_SIZE];
int feature_normalizers[NUM_PC_WIENER_FEATURES + 1];
// Lookup table useful in calculating the filter indices within
// get_pcwiener_index().
int qval_given_tskip_lut[256][NUM_PC_WIENER_FEATURES];
// Prevent repeated calculation of qval_given_tskip_lut when qindex and
// bit_depth do not change.
int prev_qindex;
int prev_bit_depth;
} PcwienerBuffers;
// clang-format off
static const int16_t
pcwiener_filters_luma_0[NUM_PC_WIENER_FILTERS][NUM_PC_WIENER_TAPS_LUMA] = {
// 0 ---------------------------------------------------------------
{ 427, 934, -73, 73, 10, 189, -25, -115, -204, -192, 46, 40, -2221, },
// 1 ---------------------------------------------------------------
{ -16, 152, 25, -54, -91, 58, 30, -27, 13, -42, -3, 26, -144, },
// 2 ---------------------------------------------------------------
{ 421, 453, -163, -156, -187, 118, 27, -48, 7, -57, 42, 47, -1009, },
// 3 ---------------------------------------------------------------
{ 946, 448, 108, -90, -98, 89, -258, -211, 67, -36, 100, 33, -2198, },
// 4 ---------------------------------------------------------------
{ 257, 290, -26, 8, -236, 715, 33, -185, 23, -195, 17, 8, -1419, },
// 5 ---------------------------------------------------------------
{ 286, 283, -112, -99, 13, -160, -18, 32, -31, 35, 28, 26, -567, },
// 6 ---------------------------------------------------------------
{ 260, 250, -106, -93, -101, -150, 22, 37, 9, 30, 17, 21, -393, },
// 7 ---------------------------------------------------------------
{ 463, 547, -153, -151, 465, -261, -112, 43, -113, 41, 32, 24, -1651, },
// 8 ---------------------------------------------------------------
{ 207, 853, 85, -44, 358, -239, -281, 90, -19, -145, 18, 29, -1825, },
// 9 ---------------------------------------------------------------
{ 516, 161, -152, 16, 73, -280, -59, 46, -53, 57, 41, 2, -737, },
// 10 ---------------------------------------------------------------
{ -119, 393, 150, -65, -177, 412, 24, -166, 13, -125, -7, 36, -739, },
// 11 ---------------------------------------------------------------
{ 553, 610, -131, -139, -260, 416, 2, -145, -11, -124, 43, 43, -1715, },
// 12 ---------------------------------------------------------------
{ 223, 209, -90, -71, -148, -22, 41, -5, 28, -16, 17, 20, -373, },
// 13 ---------------------------------------------------------------
{ 422, 463, -182, -174, -71, -22, 8, -6, -19, -22, 40, 48, -971, },
// 14 ---------------------------------------------------------------
{ 326, 335, -128, -115, -199, 47, 48, -31, 27, -43, 30, 36, -667, },
// 15 ---------------------------------------------------------------
{ 754, 502, -153, -108, -293, -197, -16, -29, 59, 19, 48, 23, -1220, },
// 16 ---------------------------------------------------------------
{ 405, 453, -156, -152, 199, -232, -65, 45, -82, 43, 40, 37, -1071, },
// 17 ---------------------------------------------------------------
{ 193, 330, -68, -125, -123, -188, 37, 65, 6, 14, 0, 42, -368, },
// 18 ---------------------------------------------------------------
{ 272, 755, -53, -233, -282, 278, 70, -157, 5, -82, 37, 61, -1343, },
// 19 ---------------------------------------------------------------
{ 11, 11, -3, -7, -42, -33, 14, 12, 15, 11, -5, -1, 32, },
// 20 ---------------------------------------------------------------
{ 360, 358, -161, -146, -78, -122, 17, 22, -8, 12, 34, 42, -661, },
// 21 ---------------------------------------------------------------
{ 25, 632, 109, -167, 427, -322, -190, 71, -87, 26, 1, 57, -1165, },
// 22 ---------------------------------------------------------------
{ 747, 467, -93, -44, -36, -378, -65, -33, -42, 79, 44, 16, -1326, },
// 23 ---------------------------------------------------------------
{ 756, 665, -126, -125, 483, -203, -187, -61, -175, -59, 53, 65, -2173, },
// 24 ---------------------------------------------------------------
{ 291, 302, -123, -124, -127, -110, 30, 19, 16, 15, 23, 32, -489, },
// 25 ---------------------------------------------------------------
{ 596, 579, -190, -176, 180, -209, -68, 0, -85, -2, 49, 54, -1457, },
// 26 ---------------------------------------------------------------
{ 344, 811, -126, -79, -153, 6, 98, 18, -151, -140, 10, 79, -1436, },
// 27 ---------------------------------------------------------------
{ 274, 507, -95, -169, -170, -183, 55, 62, -6, -10, 5, 56, -654, },
// 28 ---------------------------------------------------------------
{ 437, 302, -169, -96, -246, -136, 47, 15, 54, 10, 41, 23, -566, },
// 29 ---------------------------------------------------------------
{ 485, 353, -179, -121, -159, -269, 12, 53, 26, 56, 43, 25, -652, },
// 30 ---------------------------------------------------------------
{ 171, 191, -55, 45, -132, 550, 28, -123, 8, -203, 21, 12, -1027, },
// 31 ---------------------------------------------------------------
{ 131, 176, -17, 47, -87, 852, -9, -143, -10, -197, 38, 20, -1603, },
// 32 ---------------------------------------------------------------
{ 334, 392, -119, -122, 545, -114, -144, 10, -160, 39, 36, 28, -1451, },
// 33 ---------------------------------------------------------------
{ 593, 511, 245, 125, 354, 370, -96, -56, -106, -85, -263, -57, -3071, },
// 34 ---------------------------------------------------------------
{ 487, 527, -193, -192, -236, -171, 49, 25, 25, 1, 46, 55, -848, },
// 35 ---------------------------------------------------------------
{ 335, 336, -83, -47, -259, 352, 42, -121, 29, -143, 32, 29, -1005, },
// 36 ---------------------------------------------------------------
{ 529, 475, 64, 25, 245, 312, -186, -185, -137, -168, 31, 37, -2085, },
// 37 ---------------------------------------------------------------
{ 829, 335, -259, -52, -282, 343, -7, -40, 53, -189, 63, 44, -1677, },
// 38 ---------------------------------------------------------------
{ 50, 68, -14, -34, -87, -88, 24, 28, 23, 21, -3, 9, 4, },
// 39 ---------------------------------------------------------------
{ 377, 384, -161, -149, 30, -161, -16, 30, -32, 19, 37, 41, -799, },
// 40 ---------------------------------------------------------------
{ 345, 293, -166, -140, -155, -112, 39, 15, 38, 21, 40, 34, -505, },
// 41 ---------------------------------------------------------------
{ 250, 561, -60, -167, -25, -279, -22, 101, -33, -4, 2, 62, -773, },
// 42 ---------------------------------------------------------------
{ 433, 795, -176, -214, 30, -249, -28, 83, -69, -50, 42, 75, -1345, },
// 43 ---------------------------------------------------------------
{ 128, 160, -47, -58, -140, -107, 47, 35, 25, 10, -2, 18, -140, },
// 44 ---------------------------------------------------------------
{ 540, 660, -18, -11, 142, 209, -105, -118, -116, -122, 7, 8, -2153, },
// 45 ---------------------------------------------------------------
{ 255, 321, -103, -105, 226, -116, -70, 21, -97, 29, 31, 28, -841, },
// 46 ---------------------------------------------------------------
{ 187, 446, -61, -163, -228, -14, 76, -5, 24, -49, 7, 57, -556, },
// 47 ---------------------------------------------------------------
{ 1, 263, 41, -100, 83, -133, -45, 42, -42, 12, -6, 44, -321, },
// 48 ---------------------------------------------------------------
{ 186, 195, -39, -11, -164, 229, 32, -78, 25, -104, 14, 12, -595, },
// 49 ---------------------------------------------------------------
{ 521, 414, -132, -118, -261, -217, 16, -4, 67, 56, 38, 9, -779, },
// 50 ---------------------------------------------------------------
{ 576, 558, -220, -213, -214, -67, 39, -20, 13, -21, 51, 65, -1095, },
// 51 ---------------------------------------------------------------
{ 903, 447, -256, -159, 150, -298, -50, -38, -88, 80, 75, 55, -1643, },
// 52 ---------------------------------------------------------------
{ 522, 92, -172, 97, 547, -227, -132, 34, -214, 9, 63, 22, -1283, },
// 53 ---------------------------------------------------------------
{ 545, 464, -215, -152, -7, -248, -14, 42, -54, 31, 51, 52, -991, },
// 54 ---------------------------------------------------------------
{ 566, 534, 146, 94, 314, 377, -187, -155, -164, -183, -17, -17, -2617, },
// 55 ---------------------------------------------------------------
{ 482, 96, -128, 84, -250, 206, 30, -93, 24, -117, 51, 9, -789, },
// 56 ---------------------------------------------------------------
{ 489, 785, -151, -177, -123, -9, 4, -41, -58, -91, 57, 54, -1479, },
// 57 ---------------------------------------------------------------
{ 735, 619, -238, -168, 703, -119, -132, -55, -57, -60, 70, 62, -2722, },
// 58 ---------------------------------------------------------------
{ 814, 66, -265, 237, -359, 451, 81, 61, -8, -285, 43, 5, -1684, },
// 59 ---------------------------------------------------------------
{ 139, 138, -59, -61, -94, -79, 26, 18, 26, 19, 8, 10, -183, },
// 60 ---------------------------------------------------------------
{ -27, 392, 144, -110, 560, -181, -214, -11, -95, 47, 15, 33, -1106, },
// 61 ---------------------------------------------------------------
{ 637, 665, 69, 91, 264, 366, -172, -173, -160, -167, -34, -16, -2741, },
// 62 ---------------------------------------------------------------
{ 244, 183, -99, -68, -154, -143, 33, 29, 41, 34, 22, 9, -264, },
// 63 ---------------------------------------------------------------
{ 683, 671, -206, -212, -97, 54, -29, -83, -36, -68, 62, 75, -1629, },
};
static const int16_t
pcwiener_filters_luma_1[NUM_PC_WIENER_FILTERS][NUM_PC_WIENER_TAPS_LUMA] = {
// 0 ---------------------------------------------------------------
{ 665, 682, -151, -163, -212, 374, -18, -185, -50, -126, 66, 60, -1885, },
// 1 ---------------------------------------------------------------
{ 615, 599, -121, -75, -336, 633, 13, -194, -39, -182, 43, 49, -2011, },
// 2 ---------------------------------------------------------------
{ 368, 276, -141, -93, -219, -144, 43, 18, 59, 30, 32, 10, -480, },
// 3 ---------------------------------------------------------------
{ 162, 336, -31, -107, -9, -221, -15, 78, -29, 11, -3, 46, -438, },
// 4 ---------------------------------------------------------------
{ 576, 191, -209, 17, -262, 73, 52, -40, 36, -80, 51, 14, -839, },
// 5 ---------------------------------------------------------------
{ 599, 576, 85, 62, 293, 361, -196, -183, -166, -190, 3, 14, -2517, },
// 6 ---------------------------------------------------------------
{ 718, 578, -84, -113, -292, -165, -72, -112, 80, 50, 78, 6, -1346, },
// 7 ---------------------------------------------------------------
{ 750, 634, -276, -156, 684, -151, -139, -30, -130, -18, 77, 49, -2592, },
// 8 ---------------------------------------------------------------
{ 947, 186, -278, 97, 500, -284, 239, 46, -352, 46, -27, 30, -2302, },
// 9 ---------------------------------------------------------------
{ 863, 463, 71, -21, -279, 150, -229, -199, 104, -68, 104, 13, -1945, },
// 10 ---------------------------------------------------------------
{ 235, 333, -75, -115, -138, -216, 35, 76, 9, 15, -2, 39, -394, },
// 11 ---------------------------------------------------------------
{ 166, 381, -61, -121, -214, 42, 84, -18, 4, -65, 6, 55, -519, },
// 12 ---------------------------------------------------------------
{ 796, 641, -168, -142, 452, -241, -171, -57, -167, -29, 69, 72, -2111, },
// 13 ---------------------------------------------------------------
{ 141, 204, -43, -75, -169, -88, 56, 26, 25, -2, -3, 29, -204, },
// 14 ---------------------------------------------------------------
{ 553, 531, -233, -214, -235, -129, 52, 1, 33, 2, 55, 59, -952, },
// 15 ---------------------------------------------------------------
{ 908, -29, -256, 306, -369, 540, 68, 170, 4, -361, 38, -2, -2036, },
// 16 ---------------------------------------------------------------
{ 154, 820, 82, -75, 242, -297, -220, 132, 5, -122, -2, 55, -1549, },
// 17 ---------------------------------------------------------------
{ 599, 523, -193, -140, -279, 262, 39, -106, 4, -131, 51, 60, -1378, },
// 18 ---------------------------------------------------------------
{ 460, 427, -227, -113, 522, -143, -129, 51, -185, 7, 61, 50, -1562, },
// 19 ---------------------------------------------------------------
{ 563, 521, 168, 90, 313, 387, -179, -149, -164, -182, -24, -15, -2660, },
// 20 ---------------------------------------------------------------
{ 354, 405, -156, -157, -190, -121, 47, 31, 23, -10, 34, 47, -616, },
// 21 ---------------------------------------------------------------
{ 483, 832, -187, -128, 164, -209, -82, 74, -98, -106, 52, 50, -1691, },
// 22 ---------------------------------------------------------------
{ 916, 179, -232, 133, -360, 232, 55, -25, 25, -191, 22, 9, -1527, },
// 23 ---------------------------------------------------------------
{ 684, 586, -248, -209, 725, -78, -48, -101, 117, -120, 107, 98, -3027, },
// 24 ---------------------------------------------------------------
{ 345, 273, -85, -2, -252, 621, 43, -165, 21, -195, 32, 21, -1315, },
// 25 ---------------------------------------------------------------
{ -101, 367, 190, -11, -235, 580, 30, -229, 25, -128, -14, 18, -986, },
// 26 ---------------------------------------------------------------
{ 540, 426, -173, -143, -232, -209, 14, 23, 46, 29, 42, 33, -794, },
// 27 ---------------------------------------------------------------
{ 893, 164, -276, 100, 299, -369, -60, 51, -167, 52, 53, 4, -1490, },
// 28 ---------------------------------------------------------------
{ 420, 801, -34, 113, 42, 203, -53, -139, -212, -207, 54, 33, -2043, },
// 29 ---------------------------------------------------------------
{ 745, 695, -50, -76, 561, -77, -224, -117, -114, -155, 33, 41, -2524, },
// 30 ---------------------------------------------------------------
{ 614, 419, -173, -121, -263, -229, 19, 6, 64, 55, 40, 12, -888, },
// 31 ---------------------------------------------------------------
{ 58, 432, 63, -110, 182, -233, -98, 70, -81, -3, -8, 58, -661, },
// 32 ---------------------------------------------------------------
{ 352, 821, -131, -85, -162, 1, 104, 22, -149, -140, 9, 76, -1437, },
// 33 ---------------------------------------------------------------
{ 669, 671, -229, -252, -170, -53, 1, -39, -5, -33, 62, 81, -1407, },
// 34 ---------------------------------------------------------------
{ 335, 525, -128, -148, -212, -185, 80, 77, -14, -33, 2, 58, -715, },
// 35 ---------------------------------------------------------------
{ 576, 694, -231, -166, -180, -19, 31, -7, -37, -91, 60, 54, -1370, },
// 36 ---------------------------------------------------------------
{ 852, 341, -252, -86, -255, 612, -37, -16, 66, -275, 58, 54, -2126, },
// 37 ---------------------------------------------------------------
{ 46, 578, 142, -111, 394, -343, -207, 75, -99, 13, -4, 48, -1064, },
// 38 ---------------------------------------------------------------
{ 584, 497, 254, 149, 350, 375, -105, -68, -108, -93, -246, -45, -3089, },
// 39 ---------------------------------------------------------------
{ 314, 278, -131, -108, -102, -184, 14, 48, 7, 32, 29, 29, -454, },
// 40 ---------------------------------------------------------------
{ 967, 442, 193, -134, 49, 95, -292, -308, 20, 23, 121, 44, -2443, },
// 41 ---------------------------------------------------------------
{ 599, 590, 118, 110, 321, 378, -171, -165, -147, -174, -56, -21, -2765, },
// 42 ---------------------------------------------------------------
{ 15, 28, -2, -12, -53, -48, 20, 19, 16, 10, -8, 1, 26, },
// 43 ---------------------------------------------------------------
{ 8, 380, 74, -120, 808, -209, -223, 38, -35, 28, 19, 42, -1620, },
// 44 ---------------------------------------------------------------
{ 416, 44, -291, 124, -29, 923, 60, -54, -56, -312, 64, 30, -1840, },
// 45 ---------------------------------------------------------------
{ 575, 501, -296, -108, 645, -228, -106, 81, -181, 5, 61, 42, -1983, },
// 46 ---------------------------------------------------------------
{ 588, 505, -221, -150, 178, -259, -77, 44, -111, 25, 62, 56, -1281, },
// 47 ---------------------------------------------------------------
{ 382, 708, -159, -178, -64, -247, 15, 111, -53, -59, 17, 65, -1077, },
// 48 ---------------------------------------------------------------
{ 889, 503, -154, -160, -194, -84, -90, -82, 54, -6, 69, 49, -1590, },
// 49 ---------------------------------------------------------------
{ 653, 667, 195, 75, 217, 382, -153, -269, -267, -215, -66, 27, -2488, },
// 50 ---------------------------------------------------------------
{ 469, 385, -215, -173, -184, -142, 44, 17, 37, 25, 47, 45, -711, },
// 51 ---------------------------------------------------------------
{ 593, 574, 62, 44, 233, 314, -199, -215, -192, -194, 38, 53, -2223, },
// 52 ---------------------------------------------------------------
{ -24, 288, 85, -44, -183, 249, 46, -101, 5, -104, -10, 38, -491, },
// 53 ---------------------------------------------------------------
{ 193, 216, -51, 27, -77, 987, -3, -232, 1, -173, 57, 7, -1905, },
// 54 ---------------------------------------------------------------
{ 113, 136, -38, -51, -113, -98, 38, 31, 23, 15, -4, 12, -130, },
// 55 ---------------------------------------------------------------
{ 648, 614, -234, -238, -193, -115, 31, -20, 9, -18, 50, 78, -1225, },
// 56 ---------------------------------------------------------------
{ 678, 722, -209, -243, -123, 55, -12, -104, -19, -65, 66, 80, -1653, },
// 57 ---------------------------------------------------------------
{ 592, 515, -228, -174, -46, -261, -13, 43, -37, 28, 54, 55, -1057, },
// 58 ---------------------------------------------------------------
{ 532, 424, -214, -126, -269, 112, 58, -49, 26, -90, 53, 53, -1021, },
// 59 ---------------------------------------------------------------
{ 717, 614, -226, -173, 217, -247, -89, -1, -123, -10, 64, 75, -1637, },
// 60 ---------------------------------------------------------------
{ 936, 443, -44, -26, 48, -301, -91, -155, -85, 111, 53, 15, -1810, },
// 61 ---------------------------------------------------------------
{ 664, 321, -234, -74, -97, -297, -9, 48, 0, 64, 51, 14, -904, },
// 62 ---------------------------------------------------------------
{ 76, 102, -18, -28, -118, -100, 40, 29, 18, 14, -9, 8, -30, },
// 63 ---------------------------------------------------------------
{ 215, 770, -1, -203, -291, 350, 71, -197, 2, -75, 29, 37, -1415, },
};
static const int16_t
pcwiener_filters_luma_2[NUM_PC_WIENER_FILTERS][NUM_PC_WIENER_TAPS_LUMA] = {
// 0 ---------------------------------------------------------------
{ 775, 232, -232, -80, -307, 820, -5, 404, 174, -475, 29, 33, -2739, },
// 1 ---------------------------------------------------------------
{ 405, 529, -184, -61, -198, -157, 94, 95, -59, -80, 13, 40, -875, },
// 2 ---------------------------------------------------------------
{ 731, 386, -544, -176, 923, -337, 56, 261, -134, 129, -10, -38, -2496, },
// 3 ---------------------------------------------------------------
{ 709, 416, -176, -88, -175, -301, -4, 20, 7, 57, 38, 23, -1054, },
// 4 ---------------------------------------------------------------
{ 370, 469, -150, -62, -102, -319, 41, 130, -49, -25, 13, 43, -720, },
// 5 ---------------------------------------------------------------
{ 863, 459, 367, -56, 475, 88, -281, -473, -169, -30, 127, 72, -2887, },
// 6 ---------------------------------------------------------------
{ 534, 540, 131, 14, 653, 21, -52, -134, 138, -223, -92, -43, -2968, },
// 7 ---------------------------------------------------------------
{ 281, 523, -92, -99, -270, 118, 127, -55, -69, -94, 12, 78, -921, },
// 8 ---------------------------------------------------------------
{ 794, 393, 468, 128, 211, 412, -497, -226, -71, -363, 129, 86, -2931, },
// 9 ---------------------------------------------------------------
{ 315, 223, -139, -79, -171, -145, 41, 36, 40, 26, 27, 14, -377, },
// 10 ---------------------------------------------------------------
{ 572, 598, -178, -137, -145, 102, 4, -74, -40, -97, 58, 52, -1431, },
// 11 ---------------------------------------------------------------
{ 739, 645, -165, -137, 373, -222, -158, -31, -145, -41, 62, 63, -1967, },
// 12 ---------------------------------------------------------------
{ 327, 67, -140, -319, 966, -316, -233, 78, 396, 138, 88, 5, -2121, },
// 13 ---------------------------------------------------------------
{ 648, 520, -144, -136, -192, -131, -35, -31, 17, -9, 48, 39, -1189, },
// 14 ---------------------------------------------------------------
{ 259, 506, -66, -106, 34, -346, -30, 117, -35, -6, 6, 53, -774, },
// 15 ---------------------------------------------------------------
{ 654, 516, -105, 2, 113, 140, -98, -84, -127, -138, 47, 19, -1879, },
// 16 ---------------------------------------------------------------
{ 408, 373, -176, -149, -167, -146, 37, 28, 24, 14, 37, 38, -643, },
// 17 ---------------------------------------------------------------
{ 552, 478, -223, -175, -257, -70, 49, -4, 42, -27, 52, 52, -940, },
// 18 ---------------------------------------------------------------
{ 948, 364, -47, -8, 136, -275, -58, -86, -141, 66, 10, 26, -1871, },
// 19 ---------------------------------------------------------------
{ 73, 442, 112, -1, -253, 549, 80, -272, -108, -138, 10, 92, -1172, },
// 20 ---------------------------------------------------------------
{ 820, 539, 36, -119, -28, 20, -184, -153, -6, -45, 47, 48, -1952, },
// 21 ---------------------------------------------------------------
{ 574, 581, 402, 312, 447, 439, -263, -346, -341, -346, -34, -1, -2843, },
// 22 ---------------------------------------------------------------
{ 436, 515, 368, 204, 19, 737, -143, -263, -309, -93, -113, -20, -2672, },
// 23 ---------------------------------------------------------------
{ 464, 741, -154, -26, 163, -54, -112, 46, -126, -184, 52, 55, -1731, },
// 24 ---------------------------------------------------------------
{ 482, 453, 256, 144, 332, 363, -156, -95, -162, -181, -44, -45, -2696, },
// 25 ---------------------------------------------------------------
{ 354, 351, -102, -72, -285, -266, 84, 71, 26, 44, -2, 14, -440, },
// 26 ---------------------------------------------------------------
{ 1025, 314, -26, 130, -190, -145, -13, -82, -106, -11, -3, 20, -1828, },
// 27 ---------------------------------------------------------------
{ 601, 576, -214, -209, -126, -85, 2, -13, -9, -22, 48, 62, -1222, },
// 28 ---------------------------------------------------------------
{ 128, 743, 213, 1, -252, 706, 61, -520, -111, 191, 39, -37, -2324, },
// 29 ---------------------------------------------------------------
{ 547, 417, 399, 170, 337, 308, 38, 91, -63, -13, -447, -98, -3372, },
// 30 ---------------------------------------------------------------
{ 694, 480, 356, 350, -203, 132, -216, -301, -159, -160, 203, 13, -2375, },
// 31 ---------------------------------------------------------------
{ 427, 418, -79, -56, -219, 733, 25, -243, -27, -170, 43, 24, -1750, },
// 32 ---------------------------------------------------------------
{ 820, -120, -112, 215, -328, 670, 4, -227, 18, -224, 54, 5, -1550, },
// 33 ---------------------------------------------------------------
{ 2, 268, 83, -23, -182, 263, 40, -111, 7, -107, -5, 25, -522, },
// 34 ---------------------------------------------------------------
{ 321, 791, 5, 207, 105, 234, 12, -116, -402, -274, 31, 172, -2173, },
// 35 ---------------------------------------------------------------
{ 84, 33, 23, 3, -184, 1229, 157, -338, -61, 48, -5, 15, -2010, },
// 36 ---------------------------------------------------------------
{ 978, 240, -277, 212, 506, -375, 119, 90, -406, -20, -32, 44, -2158, },
// 37 ---------------------------------------------------------------
{ 184, 500, 154, 69, 528, -217, -507, 197, 421, -220, 26, -71, -2127, },
// 38 ---------------------------------------------------------------
{ 482, 744, 131, 429, 283, 445, -230, -290, -299, -290, 73, 66, -3089, },
// 39 ---------------------------------------------------------------
{ 912, 317, -318, 50, -380, 201, 79, -7, 6, -166, 45, 33, -1544, },
// 40 ---------------------------------------------------------------
{ 868, 274, 337, 348, 255, -95, 19, -589, -447, 168, 121, -8, -2505, },
// 41 ---------------------------------------------------------------
{ 616, 535, -209, -151, 190, -242, -82, 24, -124, 16, 59, 63, -1391, },
// 42 ---------------------------------------------------------------
{ 248, 742, 46, 174, 265, -54, -309, 159, 11, -390, 20, 95, -2014, },
// 43 ---------------------------------------------------------------
{ 594, 578, 88, 68, 284, 358, -195, -186, -170, -188, 0, 18, -2499, },
// 44 ---------------------------------------------------------------
{ 855, 394, 401, 51, 91, 313, -511, -317, 65, -199, 215, 51, -2820, },
// 45 ---------------------------------------------------------------
{ 392, 586, -145, -6, -36, -179, -10, 128, -96, -150, 14, 64, -1125, },
// 46 ---------------------------------------------------------------
{ 186, 499, 68, -48, 313, -403, -178, 100, -56, -23, 12, 50, -1042, },
// 47 ---------------------------------------------------------------
{ 26, 42, -6, -18, -61, -54, 22, 20, 16, 11, -7, 4, 8, },
// 48 ---------------------------------------------------------------
{ 131, 168, -47, -62, -130, -94, 44, 29, 24, 9, -1, 16, -176, },
// 49 ---------------------------------------------------------------
{ 96, 267, -6, -109, -20, -169, -17, 58, -6, 20, -4, 40, -301, },
// 50 ---------------------------------------------------------------
{ 822, 333, -234, -38, 44, -371, -14, 73, -73, 64, 14, 17, -1277, },
// 51 ---------------------------------------------------------------
{ 887, 165, -233, 222, -337, 536, 75, 150, 3, -415, -34, 19, -2078, },
// 52 ---------------------------------------------------------------
{ 109, -112, -267, -168, -7, 1476, 48, 131, 63, -100, 45, 50, -2535, },
// 53 ---------------------------------------------------------------
{ 380, 384, -161, -28, 222, -108, -77, 58, -60, -45, 21, -16, -1142, },
// 54 ---------------------------------------------------------------
{ 547, 641, -71, 172, 515, 16, -244, -80, -132, -267, 94, -11, -2360, },
// 55 ---------------------------------------------------------------
{ 398, 689, -167, -9, -161, 26, 147, -8, -214, -136, 20, 92, -1356, },
// 56 ---------------------------------------------------------------
{ 578, 444, -172, -143, -253, -243, 14, 13, 63, 66, 42, 17, -855, },
// 57 ---------------------------------------------------------------
{ 462, 420, -148, -60, -234, 390, 28, -124, 19, -168, 43, 24, -1305, },
// 58 ---------------------------------------------------------------
{ 641, 544, -305, -172, 697, -228, -164, 90, 55, 27, 58, -56, -2374, },
// 59 ---------------------------------------------------------------
{ 453, 433, -234, -74, 538, -225, -101, 97, -168, 3, 37, 19, -1557, },
// 60 ---------------------------------------------------------------
{ 764, 350, -583, -141, 873, -301, 536, 253, -318, 186, -104, -30, -2970, },
// 61 ---------------------------------------------------------------
{ 842, 208, 159, -4, 579, -165, 473, -163, -525, 164, -116, 47, -3001, },
// 62 ---------------------------------------------------------------
{ 183, 474, 49, -75, 585, -371, -338, 157, 32, -111, 49, 81, -1431, },
// 63 ---------------------------------------------------------------
{ 555, 485, -219, -167, -15, -270, -13, 53, -42, 30, 54, 52, -1007, },
};
static const int16_t
pcwiener_filters_luma_3[NUM_PC_WIENER_FILTERS][NUM_PC_WIENER_TAPS_LUMA] = {
// 0 ---------------------------------------------------------------
{ 711, 342, -359, -63, -55, 180, 92, -220, -188, 38, 249, -1, -1428, },
// 1 ---------------------------------------------------------------
{ 534, 377, -161, -95, -52, -290, 0, 29, -30, 63, 55, 30, -925, },
// 2 ---------------------------------------------------------------
{ 473, 450, -212, -81, -143, -125, 67, -16, -104, -31, 101, 142, -1054, },
// 3 ---------------------------------------------------------------
{ 358, 488, 732, 349, 375, 420, -215, -118, -306, -87, -442, 154, -3410, },
// 4 ---------------------------------------------------------------
{ 274, 442, -215, -82, -180, 25, 81, 55, -61, -37, 74, 99, -971, },
// 5 ---------------------------------------------------------------
{ 21, 430, 168, -135, -221, 478, 34, -216, -2, 28, -63, 114, -1275, },
// 6 ---------------------------------------------------------------
{ 264, 335, 79, 53, 17, 177, -40, -114, -210, 248, -7, -25, -1570, },
// 7 ---------------------------------------------------------------
{ 464, 312, -122, -11, -230, 417, 31, -105, -20, -127, 31, 30, -1344, },
// 8 ---------------------------------------------------------------
{ 446, 432, 304, 493, 567, 332, -434, -311, -553, -261, 704, -19, -3405, },
// 9 ---------------------------------------------------------------
{ 484, 265, -115, 275, 164, 240, -114, 49, -112, -72, 68, -160, -1933, },
// 10 ---------------------------------------------------------------
{ 298, 465, -116, -5, -166, 95, 80, -8, -76, -98, 10, 67, -1097, },
// 11 ---------------------------------------------------------------
{ -173, -623, 177, 272, 550, 196, 496, 46, 730, -221, -418, -248, -1593, },
// 12 ---------------------------------------------------------------
{ 209, 259, 287, 306, 211, 378, 131, -180, 194, -354, -263, -82, -2179, },
// 13 ---------------------------------------------------------------
{ 590, 494, -198, -173, -201, -185, -2, -17, 51, 64, 134, 59, -1239, },
// 14 ---------------------------------------------------------------
{ -123, 87, 308, -143, 146, 92, 131, -100, -479, 1124, -227, 293, -2230, },
// 15 ---------------------------------------------------------------
{ 372, 478, -125, -120, -135, -221, 26, 39, -3, -25, 48, 122, -916, },
// 16 ---------------------------------------------------------------
{ 589, 567, 93, 64, 281, 350, -188, -178, -162, -179, -13, 17, -2483, },
// 17 ---------------------------------------------------------------
{ 207, 184, -96, 30, -238, 758, 83, 47, -91, -34, -10, 47, -1785, },
// 18 ---------------------------------------------------------------
{ 324, 320, 786, 350, 543, 248, -35, 33, 146, -309, -478, -105, -3642, },
// 19 ---------------------------------------------------------------
{ -81, 181, 108, -31, 491, -157, 203, 201, 440, -283, -280, 101, -1797, },
// 20 ---------------------------------------------------------------
{ 789, -448, -856, 1528, 57, 808, 1193, -972, -1089, -355, 1083, -180, -3060, },
// 21 ---------------------------------------------------------------
{ 723, 451, -78, -63, 53, -94, -109, -147, -95, 45, 208, 50, -1896, },
// 22 ---------------------------------------------------------------
{ 366, 278, -134, -88, -212, -122, 35, 12, 56, 13, 30, 16, -501, },
// 23 ---------------------------------------------------------------
{ 303, -597, -447, 185, -14, -446, -483, 2182, 132, 432, 487, -302, -2856, },
// 24 ---------------------------------------------------------------
{ 119, 562, 727, 250, 387, 373, -277, -420, -760, 474, -207, 369, -3197, },
// 25 ---------------------------------------------------------------
{ 343, 408, -95, -83, 49, -181, -19, 39, 36, -71, 45, 89, -1117, },
// 26 ---------------------------------------------------------------
{ 392, 353, 999, 663, 722, 737, -301, -459, -502, -379, -200, -58, -3912, },
// 27 ---------------------------------------------------------------
{ -143, -854, -298, 183, 57, 740, -127, 1184, -51, 649, 53, -138, -2520, },
// 28 ---------------------------------------------------------------
{ 562, 603, 110, -76, 31, 344, -339, -212, -195, -82, 154, 102, -2005, },
// 29 ---------------------------------------------------------------
{ 147, 707, 230, -231, 308, 210, -264, -172, 74, -308, -13, 427, -2231, },
// 30 ---------------------------------------------------------------
{ -76, -84, 35, -111, 705, -506, 368, 459, 635, 29, -403, 55, -2258, },
// 31 ---------------------------------------------------------------
{ 688, -19, -215, 105, -6, 110, -272, 285, 107, -13, 177, -131, -1651, },
// 32 ---------------------------------------------------------------
{ 368, 378, -162, -117, 608, 74, 159, -165, 15, -42, 15, 29, -2323, },
// 33 ---------------------------------------------------------------
{ 596, 577, -202, -171, 95, -265, -67, 26, -92, 28, 58, 59, -1285, },
// 34 ---------------------------------------------------------------
{ 562, 215, -21, 316, 207, 292, 189, -485, -242, -189, 770, -6, -3215, },
// 35 ---------------------------------------------------------------
{ 480, 333, 470, 235, 263, 293, 52, 235, -39, 139, -524, -140, -3592, },
// 36 ---------------------------------------------------------------
{ 401, 387, -76, 187, 185, 10, -15, -49, -115, -98, 56, -74, -1593, },
// 37 ---------------------------------------------------------------
{ 807, 385, -78, -1, -23, 99, -329, -121, 44, -69, 332, 4, -2094, },
// 38 ---------------------------------------------------------------
{ 462, 152, 542, 557, 260, 754, 173, -589, -48, -596, 149, -142, -3352, },
// 39 ---------------------------------------------------------------
{ 646, 99, -273, 197, 422, -217, 151, 82, -211, -116, 51, -2, -1671, },
// 40 ---------------------------------------------------------------
{ 363, 309, 421, 284, 298, 315, 10, 116, -33, 41, -349, -371, -2809, },
// 41 ---------------------------------------------------------------
{ 467, 409, -211, -177, -190, -118, 46, 9, 31, 12, 47, 48, -747, },
// 42 ---------------------------------------------------------------
{ 464, -161, 58, 370, 324, -57, -616, 1385, -127, 54, 59, -208, -3084, },
// 43 ---------------------------------------------------------------
{ 427, 389, 713, 487, 669, 598, -344, -440, -451, -311, -45, -38, -3311, },
// 44 ---------------------------------------------------------------
{ 640, 619, -234, -235, -173, -23, 18, -46, -1, -37, 57, 76, -1323, },
// 45 ---------------------------------------------------------------
{ 161, 541, 636, -144, 348, 173, -393, -62, 390, -503, -298, 318, -2334, },
// 46 ---------------------------------------------------------------
{ 212, 549, 308, 106, 458, 374, -185, -205, -545, -22, -87, 210, -2348, },
// 47 ---------------------------------------------------------------
{ 185, 179, -80, -78, -101, -121, 21, 32, 26, 28, 15, 15, -243, },
// 48 ---------------------------------------------------------------
{ 884, 302, -212, -17, -331, 38, 32, -19, 33, -73, 63, 36, -1476, },
// 49 ---------------------------------------------------------------
{ -43, -44, -201, -303, 72, 958, -250, 462, -39, 341, 203, 188, -2683, },
// 50 ---------------------------------------------------------------
{ 205, 400, -26, -66, 80, -243, -36, 69, -24, -21, 14, 38, -779, },
// 51 ---------------------------------------------------------------
{ 215, 248, 434, 183, 229, 547, -215, -115, -419, 351, -155, -66, -2478, },
// 52 ---------------------------------------------------------------
{ -355, -570, 112, 120, 194, 519, -73, 565, -260, 1019, -79, -147, -2094, },
// 53 ---------------------------------------------------------------
{ 570, 320, 284, 246, -244, 305, -181, -137, 175, -410, -215, -3, -1450, },
// 54 ---------------------------------------------------------------
{ 37, 61, -11, -28, -72, -54, 27, 18, 18, 10, -6, 7, -16, },
// 55 ---------------------------------------------------------------
{ 156, 264, -60, -97, -156, -103, 54, 36, 15, 0, 2, 35, -293, },
// 56 ---------------------------------------------------------------
{ 290, 664, 14, -91, 293, -29, -110, -55, -372, 49, 15, 286, -1915, },
// 57 ---------------------------------------------------------------
{ 634, 424, -176, -88, -193, -213, -6, -8, 25, 30, 93, 24, -1095, },
// 58 ---------------------------------------------------------------
{ 255, 704, -48, -235, 133, -9, -28, -18, 37, -205, -8, 233, -1629, },
// 59 ---------------------------------------------------------------
{ 757, 625, -191, -154, 379, -216, -160, -42, -154, -22, 71, 78, -1943, },
// 60 ---------------------------------------------------------------
{ 538, -287, -120, 755, 210, 152, 1155, -321, -369, -292, 268, -255, -2882, },
// 61 ---------------------------------------------------------------
{ 449, 448, -141, -144, -243, -188, 43, 17, 47, 39, 57, 51, -876, },
// 62 ---------------------------------------------------------------
{ 572, 190, 234, 531, 503, 494, -845, -51, -201, -651, 716, 73, -3148, },
// 63 ---------------------------------------------------------------
{ 276, 310, -96, -85, -185, -125, 54, 3, 1, 37, 50, 57, -591, },
};
// clang-format on
static const int32_t pc_wiener_thresholds[NUM_PC_WIENER_FEATURES] = { 512, 64,
8, 1 };
static const int32_t pc_wiener_threshold_shift = 5;
static const uint8_t pc_wiener_sub_classify_to_1[NUM_PC_WIENER_LUT_CLASSES] = {
0
};
static const uint8_t
pc_wiener_sub_classify_to_64_0[NUM_PC_WIENER_LUT_CLASSES] = {
7, 54, 38, 45, 57, 51, 11, 57, 52, 51, 16, 52, 60, 6, 45, 32, 63, 27,
29, 23, 22, 23, 55, 57, 58, 32, 25, 23, 22, 31, 35, 57, 9, 22, 16, 23,
41, 53, 44, 7, 53, 9, 9, 45, 23, 13, 52, 52, 8, 7, 31, 23, 50, 32,
41, 23, 10, 16, 21, 41, 42, 21, 29, 20, 35, 23, 34, 23, 43, 30, 18, 63,
27, 53, 36, 33, 32, 25, 15, 17, 4, 29, 49, 44, 7, 18, 2, 14, 1, 10,
61, 33, 37, 12, 61, 11, 6, 39, 39, 51, 24, 20, 20, 50, 17, 27, 5, 41,
11, 7, 10, 3, 8, 42, 56, 25, 15, 63, 63, 25, 41, 42, 54, 36, 4, 4,
11, 18, 23, 15, 3, 22, 11, 22, 63, 46, 3, 3, 3, 54, 15, 9, 42, 15,
33, 53, 62, 37, 28, 60, 29, 33, 3, 8, 11, 63, 47, 18, 10, 4, 57, 15,
26, 22, 12, 51, 18, 4, 21, 52, 47, 21, 57, 51, 3, 16, 21, 0, 14, 19,
50, 39, 37, 25, 59, 8, 58, 8, 33, 60, 49, 33, 15, 62, 55, 20, 14, 28,
55, 52, 13, 26, 40, 8, 56, 27, 55, 2, 47, 13, 37, 54, 37, 37, 43, 35,
58, 0, 30, 0, 58, 62, 11, 11, 43, 34, 49, 34, 28, 14, 28, 48, 43, 27,
38, 58, 46, 10, 1, 30, 42, 56, 27, 36, 58, 11, 50, 34, 6, 26, 35, 23,
58, 31, 4, 30
};
static const uint8_t
pc_wiener_sub_classify_to_16_0[NUM_PC_WIENER_LUT_CLASSES] = {
14, 1, 11, 12, 14, 14, 0, 14, 12, 14, 12, 12, 10, 3, 12, 12, 7, 13,
3, 14, 10, 14, 5, 14, 2, 12, 14, 14, 10, 2, 2, 14, 10, 10, 12, 14,
13, 12, 1, 14, 12, 10, 10, 12, 14, 7, 12, 12, 15, 14, 2, 14, 7, 12,
13, 14, 5, 12, 12, 13, 15, 12, 3, 4, 2, 14, 4, 14, 11, 2, 7, 7,
13, 12, 1, 6, 12, 14, 5, 11, 2, 3, 10, 1, 14, 7, 7, 5, 9, 5,
6, 6, 0, 8, 6, 0, 3, 12, 12, 14, 3, 4, 4, 7, 11, 13, 10, 13,
0, 14, 5, 5, 15, 15, 15, 14, 5, 7, 7, 14, 13, 15, 1, 1, 2, 2,
0, 7, 14, 5, 5, 10, 0, 10, 7, 5, 5, 5, 5, 1, 5, 10, 15, 5,
6, 12, 8, 0, 3, 10, 3, 6, 5, 15, 0, 7, 11, 7, 5, 2, 14, 5,
13, 10, 8, 14, 7, 2, 12, 12, 11, 12, 14, 14, 5, 12, 12, 0, 5, 9,
7, 12, 0, 14, 8, 15, 2, 15, 6, 10, 10, 6, 5, 8, 5, 4, 5, 3,
5, 12, 7, 13, 3, 15, 15, 13, 5, 7, 11, 7, 0, 1, 0, 0, 11, 2,
2, 0, 2, 0, 2, 8, 0, 0, 11, 4, 10, 4, 3, 5, 3, 5, 11, 13,
11, 2, 5, 5, 9, 2, 15, 15, 13, 1, 2, 0, 7, 4, 3, 13, 2, 14,
2, 2, 2, 2
};
static const uint8_t
pc_wiener_sub_classify_to_12_0[NUM_PC_WIENER_LUT_CLASSES] = {
9, 2, 6, 5, 9, 9, 11, 9, 5, 9, 5, 5, 10, 1, 5, 5, 7, 4, 1,
9, 10, 9, 8, 9, 3, 5, 9, 9, 10, 3, 3, 9, 10, 10, 5, 9, 4, 5,
2, 9, 5, 10, 10, 5, 9, 7, 5, 5, 0, 9, 3, 9, 7, 5, 4, 9, 8,
5, 5, 4, 0, 5, 1, 1, 3, 9, 1, 9, 6, 3, 7, 7, 4, 5, 2, 2,
5, 9, 8, 6, 3, 1, 10, 2, 9, 7, 7, 8, 6, 8, 2, 2, 11, 4, 2,
11, 1, 5, 5, 9, 1, 1, 1, 7, 6, 4, 10, 4, 11, 9, 8, 8, 0, 0,
0, 9, 8, 7, 7, 9, 4, 0, 2, 2, 3, 3, 11, 7, 9, 8, 8, 10, 11,
10, 7, 8, 8, 8, 8, 2, 8, 10, 0, 8, 2, 5, 4, 11, 1, 10, 1, 2,
8, 0, 11, 7, 6, 7, 8, 3, 9, 8, 4, 10, 4, 9, 7, 3, 5, 5, 6,
5, 9, 9, 8, 5, 5, 11, 8, 6, 7, 5, 11, 9, 4, 0, 3, 0, 2, 10,
10, 2, 8, 4, 8, 1, 8, 1, 8, 5, 7, 4, 1, 0, 0, 4, 8, 7, 6,
7, 11, 2, 11, 11, 6, 3, 3, 11, 3, 11, 3, 4, 11, 11, 6, 1, 10, 1,
1, 8, 1, 8, 6, 4, 6, 3, 8, 8, 6, 3, 0, 0, 4, 2, 3, 11, 7,
1, 1, 4, 3, 9, 3, 3, 3, 3,
};
static const uint8_t
pc_wiener_sub_classify_to_8_0[NUM_PC_WIENER_LUT_CLASSES] = {
0, 2, 6, 5, 0, 0, 7, 0, 5, 0, 5, 5, 1, 1, 5, 5, 7, 4, 1, 0, 1, 0, 3, 0,
3, 5, 0, 0, 1, 3, 3, 0, 1, 1, 5, 0, 4, 5, 2, 0, 5, 1, 1, 5, 0, 7, 5, 5,
0, 0, 3, 0, 7, 5, 4, 0, 3, 5, 5, 4, 0, 5, 1, 1, 3, 0, 1, 0, 6, 3, 7, 7,
4, 5, 2, 2, 5, 0, 3, 6, 3, 1, 1, 2, 0, 7, 7, 3, 6, 3, 2, 2, 7, 4, 2, 7,
1, 5, 5, 0, 1, 1, 1, 7, 6, 4, 1, 4, 7, 0, 3, 3, 0, 0, 0, 0, 3, 7, 7, 0,
4, 0, 2, 2, 3, 3, 7, 7, 0, 3, 3, 1, 7, 1, 7, 3, 3, 3, 3, 2, 3, 1, 0, 3,
2, 5, 4, 7, 1, 1, 1, 2, 3, 0, 7, 7, 6, 7, 3, 3, 0, 3, 4, 1, 4, 0, 7, 3,
5, 5, 6, 5, 0, 0, 3, 5, 5, 7, 3, 6, 7, 5, 7, 0, 4, 0, 3, 0, 2, 1, 1, 2,
3, 4, 3, 1, 3, 1, 3, 5, 7, 4, 1, 0, 0, 4, 3, 7, 6, 7, 7, 2, 7, 7, 6, 3,
3, 7, 3, 7, 3, 4, 7, 7, 6, 1, 1, 1, 1, 3, 1, 3, 6, 4, 6, 3, 3, 3, 6, 3,
0, 0, 4, 2, 3, 7, 7, 1, 1, 4, 3, 0, 3, 3, 3, 3
};
static const uint8_t
pc_wiener_sub_classify_to_6_0[NUM_PC_WIENER_LUT_CLASSES] = {
4, 2, 3, 1, 4, 4, 1, 4, 1, 4, 1, 1, 5, 5, 1, 1, 1, 3, 5, 4, 5, 4, 0, 4,
0, 1, 4, 4, 5, 0, 0, 4, 5, 5, 1, 4, 3, 1, 2, 4, 1, 5, 5, 1, 4, 1, 1, 1,
4, 4, 0, 4, 1, 1, 3, 4, 0, 1, 1, 3, 4, 1, 5, 5, 0, 4, 5, 4, 3, 0, 1, 1,
3, 1, 2, 2, 1, 4, 0, 3, 0, 5, 5, 2, 4, 1, 1, 0, 3, 0, 2, 2, 1, 3, 2, 1,
5, 1, 1, 4, 5, 5, 5, 1, 3, 3, 5, 3, 1, 4, 0, 0, 4, 4, 4, 4, 0, 1, 1, 4,
3, 4, 2, 2, 0, 0, 1, 1, 4, 0, 0, 5, 1, 5, 1, 0, 0, 0, 0, 2, 0, 5, 4, 0,
2, 1, 3, 1, 5, 5, 5, 2, 0, 4, 1, 1, 3, 1, 0, 0, 4, 0, 3, 5, 3, 4, 1, 0,
1, 1, 3, 1, 4, 4, 0, 1, 1, 1, 0, 3, 1, 1, 1, 4, 3, 4, 0, 4, 2, 5, 5, 2,
0, 3, 0, 5, 0, 5, 0, 1, 1, 3, 5, 4, 4, 3, 0, 1, 3, 1, 1, 2, 1, 1, 3, 0,
0, 1, 0, 1, 0, 3, 1, 1, 3, 5, 5, 5, 5, 0, 5, 0, 3, 3, 3, 0, 0, 0, 3, 0,
4, 4, 3, 2, 0, 1, 1, 5, 5, 3, 0, 4, 0, 0, 0, 0,
};
static const uint8_t
pc_wiener_sub_classify_to_4_0[NUM_PC_WIENER_LUT_CLASSES] = {
1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 3, 0, 1, 0, 1, 0, 1,
0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 3, 1, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1,
1, 1, 0, 1, 1, 1, 3, 1, 0, 1, 1, 3, 1, 1, 0, 0, 0, 1, 0, 1, 3, 0, 1, 1,
3, 1, 2, 2, 1, 1, 0, 3, 0, 0, 0, 2, 1, 1, 1, 0, 3, 0, 2, 2, 1, 3, 2, 1,
0, 1, 1, 1, 0, 0, 0, 1, 3, 3, 0, 3, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1,
3, 1, 2, 2, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 2, 0, 0, 1, 0,
2, 1, 3, 1, 0, 0, 0, 2, 0, 1, 1, 1, 3, 1, 0, 0, 1, 0, 3, 0, 3, 1, 1, 0,
1, 1, 3, 1, 1, 1, 0, 1, 1, 1, 0, 3, 1, 1, 1, 1, 3, 1, 0, 1, 2, 0, 0, 2,
0, 3, 0, 0, 0, 0, 0, 1, 1, 3, 0, 1, 1, 3, 0, 1, 3, 1, 1, 2, 1, 1, 3, 0,
0, 1, 0, 1, 0, 3, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 3, 0,
1, 1, 3, 2, 0, 1, 1, 0, 0, 3, 0, 1, 0, 0, 0, 0
};
static const uint8_t
pc_wiener_sub_classify_to_3_0[NUM_PC_WIENER_LUT_CLASSES] = {
2, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 2, 0, 2, 0, 2,
0, 2, 2, 2, 0, 0, 0, 2, 0, 0, 2, 2, 0, 2, 1, 2, 2, 0, 0, 2, 2, 2, 2, 2,
2, 2, 0, 2, 2, 2, 0, 2, 0, 2, 2, 0, 2, 2, 0, 0, 0, 2, 0, 2, 0, 0, 2, 2,
0, 2, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 1, 1, 2, 0, 1, 2,
0, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2,
0, 2, 1, 1, 0, 0, 2, 2, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 1, 0, 0, 2, 0,
1, 2, 0, 2, 0, 0, 0, 1, 0, 2, 2, 2, 0, 2, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0,
2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 2, 2, 2, 2, 0, 2, 0, 2, 1, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 0, 2, 2, 1, 2, 2, 0, 0,
0, 2, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 2, 0, 1, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0,
};
static const uint8_t
pc_wiener_sub_classify_to_2_0[NUM_PC_WIENER_LUT_CLASSES] = {
1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1,
0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1,
0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1,
0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1,
0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0,
1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0,
1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0,
0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0
};
static const uint8_t
pc_wiener_sub_classify_to_64_1[NUM_PC_WIENER_LUT_CLASSES] = {
21, 62, 54, 46, 23, 8, 0, 7, 27, 60, 46, 18, 31, 60, 18, 18, 56, 34,
3, 29, 60, 8, 4, 23, 44, 45, 59, 29, 60, 44, 58, 29, 61, 27, 46, 12,
34, 27, 28, 45, 61, 27, 61, 46, 12, 12, 27, 27, 16, 45, 44, 12, 33, 45,
3, 12, 52, 46, 37, 31, 21, 37, 61, 57, 24, 12, 20, 12, 62, 44, 63, 56,
34, 57, 51, 49, 18, 21, 48, 10, 24, 30, 2, 5, 45, 63, 17, 58, 13, 25,
41, 38, 36, 22, 49, 1, 39, 57, 57, 59, 20, 50, 57, 55, 10, 10, 39, 31,
1, 43, 25, 40, 16, 47, 56, 59, 6, 33, 56, 59, 47, 21, 19, 49, 53, 24,
49, 63, 29, 61, 9, 60, 1, 60, 17, 11, 9, 40, 40, 9, 30, 6, 16, 4,
23, 46, 54, 22, 26, 43, 39, 41, 9, 21, 0, 51, 3, 63, 25, 24, 7, 48,
32, 61, 2, 8, 63, 63, 37, 27, 31, 37, 7, 27, 48, 45, 43, 28, 11, 42,
58, 45, 36, 59, 54, 16, 15, 16, 38, 43, 6, 34, 26, 2, 9, 35, 4, 20,
4, 18, 14, 32, 50, 54, 27, 34, 22, 58, 58, 35, 22, 5, 58, 36, 58, 24,
15, 28, 7, 28, 22, 35, 1, 63, 13, 14, 30, 26, 2, 50, 4, 11, 54, 34,
42, 15, 11, 52, 52, 52, 47, 35, 34, 28, 22, 0, 58, 14, 15, 32, 17, 49,
15, 53, 24, 44
};
static const uint8_t
pc_wiener_sub_classify_to_16_1[NUM_PC_WIENER_LUT_CLASSES] = {
7, 4, 4, 13, 15, 2, 3, 15, 2, 2, 13, 13, 12, 2, 13, 13, 5, 14,
12, 15, 2, 2, 10, 15, 0, 2, 7, 15, 2, 0, 9, 15, 10, 2, 13, 15,
14, 2, 5, 2, 10, 2, 10, 13, 15, 15, 2, 2, 6, 2, 0, 15, 5, 2,
12, 15, 14, 13, 6, 12, 7, 6, 10, 13, 0, 15, 14, 15, 4, 0, 1, 5,
14, 13, 8, 3, 13, 7, 9, 12, 0, 10, 10, 8, 2, 1, 5, 9, 4, 1,
8, 8, 0, 0, 3, 3, 10, 13, 13, 7, 14, 10, 13, 9, 12, 12, 10, 12,
3, 6, 1, 0, 6, 11, 5, 7, 10, 5, 5, 7, 11, 7, 8, 3, 1, 0,
3, 1, 15, 10, 0, 2, 3, 2, 5, 14, 0, 0, 0, 0, 10, 10, 6, 10,
15, 13, 4, 0, 10, 6, 10, 8, 0, 7, 3, 8, 12, 1, 1, 0, 15, 9,
11, 10, 10, 2, 1, 1, 6, 2, 12, 6, 15, 2, 9, 2, 6, 5, 14, 4,
9, 2, 0, 7, 4, 6, 0, 6, 8, 6, 10, 14, 10, 10, 0, 5, 10, 14,
10, 13, 9, 11, 10, 4, 2, 14, 0, 9, 9, 5, 0, 8, 9, 0, 9, 0,
0, 5, 15, 5, 0, 5, 3, 1, 4, 9, 10, 10, 10, 10, 10, 14, 4, 14,
4, 0, 14, 14, 14, 14, 11, 5, 14, 5, 0, 3, 9, 9, 0, 11, 5, 3,
0, 1, 0, 0
};
static const uint8_t
pc_wiener_sub_classify_to_12_1[NUM_PC_WIENER_LUT_CLASSES] = {
8, 2, 2, 9, 1, 11, 5, 1, 11, 11, 9, 9, 2, 11, 9, 9, 5, 10, 2,
1, 11, 11, 6, 1, 7, 11, 8, 1, 11, 7, 3, 1, 6, 11, 9, 1, 10, 11,
5, 11, 6, 11, 6, 9, 1, 1, 11, 11, 0, 11, 7, 1, 5, 11, 2, 1, 10,
9, 0, 2, 8, 0, 6, 9, 7, 1, 10, 1, 2, 7, 3, 5, 10, 9, 4, 5,
9, 8, 3, 2, 7, 6, 6, 4, 11, 3, 5, 3, 2, 3, 4, 4, 7, 7, 5,
5, 6, 9, 9, 8, 10, 6, 9, 3, 2, 2, 6, 2, 5, 0, 3, 7, 0, 3,
5, 8, 6, 5, 5, 8, 3, 8, 4, 5, 3, 7, 5, 3, 1, 6, 7, 11, 5,
11, 5, 10, 7, 7, 7, 7, 6, 6, 0, 6, 1, 9, 2, 7, 6, 0, 6, 4,
7, 8, 5, 4, 2, 3, 3, 7, 1, 3, 3, 6, 6, 11, 3, 3, 0, 11, 2,
0, 1, 11, 3, 11, 0, 5, 10, 2, 3, 11, 7, 8, 2, 0, 7, 0, 4, 0,
6, 10, 6, 6, 7, 5, 6, 10, 6, 9, 3, 3, 6, 2, 11, 10, 7, 3, 3,
5, 7, 4, 3, 7, 3, 7, 7, 5, 1, 5, 7, 5, 5, 3, 2, 3, 6, 6,
6, 6, 6, 10, 2, 10, 2, 7, 10, 10, 10, 10, 3, 5, 10, 5, 7, 5, 3,
3, 7, 3, 5, 5, 7, 3, 7, 7,
};
static const uint8_t
pc_wiener_sub_classify_to_8_1[NUM_PC_WIENER_LUT_CLASSES] = {
0, 2, 2, 0, 1, 0, 5, 1, 0, 0, 0, 0, 2, 0, 0, 0, 5, 3, 2, 1, 0, 0, 6, 1,
7, 0, 0, 1, 0, 7, 3, 1, 6, 0, 0, 1, 3, 0, 5, 0, 6, 0, 6, 0, 1, 1, 0, 0,
0, 0, 7, 1, 5, 0, 2, 1, 3, 0, 0, 2, 0, 0, 6, 0, 7, 1, 3, 1, 2, 7, 3, 5,
3, 0, 4, 5, 0, 0, 3, 2, 7, 6, 6, 4, 0, 3, 5, 3, 2, 3, 4, 4, 7, 7, 5, 5,
6, 0, 0, 0, 3, 6, 0, 3, 2, 2, 6, 2, 5, 0, 3, 7, 0, 3, 5, 0, 6, 5, 5, 0,
3, 0, 4, 5, 3, 7, 5, 3, 1, 6, 7, 0, 5, 0, 5, 3, 7, 7, 7, 7, 6, 6, 0, 6,
1, 0, 2, 7, 6, 0, 6, 4, 7, 0, 5, 4, 2, 3, 3, 7, 1, 3, 3, 6, 6, 0, 3, 3,
0, 0, 2, 0, 1, 0, 3, 0, 0, 5, 3, 2, 3, 0, 7, 0, 2, 0, 7, 0, 4, 0, 6, 3,
6, 6, 7, 5, 6, 3, 6, 0, 3, 3, 6, 2, 0, 3, 7, 3, 3, 5, 7, 4, 3, 7, 3, 7,
7, 5, 1, 5, 7, 5, 5, 3, 2, 3, 6, 6, 6, 6, 6, 3, 2, 3, 2, 7, 3, 3, 3, 3,
3, 5, 3, 5, 7, 5, 3, 3, 7, 3, 5, 5, 7, 3, 7, 7
};
static const uint8_t
pc_wiener_sub_classify_to_6_1[NUM_PC_WIENER_LUT_CLASSES] = {
5, 2, 2, 5, 1, 5, 1, 1, 5, 5, 5, 5, 2, 5, 5, 5, 1, 4, 2, 1, 5, 5, 0, 1,
0, 5, 5, 1, 5, 0, 4, 1, 0, 5, 5, 1, 4, 5, 1, 5, 0, 5, 0, 5, 1, 1, 5, 5,
5, 5, 0, 1, 1, 5, 2, 1, 4, 5, 5, 2, 5, 5, 0, 5, 0, 1, 4, 1, 2, 0, 4, 1,
4, 5, 3, 1, 5, 5, 4, 2, 0, 0, 0, 3, 5, 4, 1, 4, 2, 4, 3, 3, 0, 0, 1, 1,
0, 5, 5, 5, 4, 0, 5, 4, 2, 2, 0, 2, 1, 5, 4, 0, 5, 4, 1, 5, 0, 1, 1, 5,
4, 5, 3, 1, 4, 0, 1, 4, 1, 0, 0, 5, 1, 5, 1, 4, 0, 0, 0, 0, 0, 0, 5, 0,
1, 5, 2, 0, 0, 5, 0, 3, 0, 5, 1, 3, 2, 4, 4, 0, 1, 4, 4, 0, 0, 5, 4, 4,
5, 5, 2, 5, 1, 5, 4, 5, 5, 1, 4, 2, 4, 5, 0, 5, 2, 5, 0, 5, 3, 5, 0, 4,
0, 0, 0, 1, 0, 4, 0, 5, 4, 4, 0, 2, 5, 4, 0, 4, 4, 1, 0, 3, 4, 0, 4, 0,
0, 1, 1, 1, 0, 1, 1, 4, 2, 4, 0, 0, 0, 0, 0, 4, 2, 4, 2, 0, 4, 4, 4, 4,
4, 1, 4, 1, 0, 1, 4, 4, 0, 4, 1, 1, 0, 4, 0, 0,
};
static const uint8_t
pc_wiener_sub_classify_to_4_1[NUM_PC_WIENER_LUT_CLASSES] = {
1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 2, 1, 1, 1, 0, 1,
0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,
1, 1, 0, 1, 1, 1, 2, 1, 0, 1, 1, 2, 1, 1, 0, 1, 0, 1, 0, 1, 2, 0, 0, 1,
0, 1, 3, 1, 1, 1, 0, 2, 0, 0, 0, 3, 1, 0, 1, 0, 2, 0, 3, 3, 0, 0, 1, 1,
0, 1, 1, 1, 0, 0, 1, 0, 2, 2, 0, 2, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1,
0, 1, 3, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
1, 1, 2, 0, 0, 1, 0, 3, 0, 1, 1, 3, 2, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0,
1, 1, 2, 1, 1, 1, 0, 1, 1, 1, 0, 2, 0, 1, 0, 1, 2, 1, 0, 1, 3, 1, 0, 0,
0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0,
0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0
};
static const uint8_t
pc_wiener_sub_classify_to_3_1[NUM_PC_WIENER_LUT_CLASSES] = {
1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 2, 1, 1, 1, 0, 1,
0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,
1, 1, 0, 1, 1, 1, 2, 1, 0, 1, 1, 2, 1, 1, 0, 1, 0, 1, 0, 1, 2, 0, 0, 1,
0, 1, 1, 1, 1, 1, 0, 2, 0, 0, 0, 1, 1, 0, 1, 0, 2, 0, 1, 1, 0, 0, 1, 1,
0, 1, 1, 1, 0, 0, 1, 0, 2, 2, 0, 2, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1,
0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
1, 1, 2, 0, 0, 1, 0, 1, 0, 1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0,
1, 1, 2, 1, 1, 1, 0, 1, 1, 1, 0, 2, 0, 1, 0, 1, 2, 1, 0, 1, 1, 1, 0, 0,
0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0,
0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
};
static const uint8_t
pc_wiener_sub_classify_to_2_1[NUM_PC_WIENER_LUT_CLASSES] = {
1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1,
0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,
1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1,
0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1,
0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1,
0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0,
1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0,
0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0
};
static const uint8_t
pc_wiener_sub_classify_to_64_2[NUM_PC_WIENER_LUT_CLASSES] = {
59, 6, 47, 15, 6, 36, 31, 58, 36, 40, 59, 59, 49, 40, 59, 59, 10, 1,
63, 11, 18, 61, 9, 58, 51, 2, 11, 54, 40, 32, 57, 6, 50, 50, 41, 11,
45, 36, 28, 59, 63, 50, 9, 41, 11, 36, 36, 50, 42, 58, 52, 11, 27, 2,
14, 11, 19, 41, 46, 46, 23, 46, 3, 53, 57, 11, 16, 5, 25, 52, 28, 10,
1, 63, 43, 22, 41, 53, 13, 4, 31, 3, 56, 43, 58, 19, 10, 17, 48, 35,
43, 29, 0, 32, 22, 31, 9, 27, 63, 41, 16, 16, 63, 27, 49, 48, 4, 14,
28, 58, 19, 8, 42, 45, 10, 11, 3, 15, 10, 41, 45, 23, 24, 21, 35, 57,
22, 57, 54, 26, 26, 26, 31, 18, 31, 7, 44, 5, 44, 21, 56, 30, 42, 17,
37, 41, 9, 51, 56, 49, 16, 6, 8, 54, 57, 15, 49, 7, 33, 31, 11, 20,
55, 50, 9, 60, 28, 31, 62, 36, 49, 46, 58, 60, 20, 2, 12, 23, 7, 47,
17, 60, 51, 41, 48, 62, 0, 37, 29, 14, 56, 24, 17, 9, 32, 10, 17, 17,
17, 59, 27, 55, 16, 34, 24, 55, 39, 57, 57, 15, 39, 43, 39, 51, 57, 57,
51, 34, 5, 38, 51, 54, 31, 31, 48, 17, 56, 13, 9, 17, 9, 33, 48, 4,
47, 52, 48, 33, 33, 33, 63, 10, 1, 24, 32, 57, 57, 17, 51, 34, 57, 21,
51, 33, 31, 32
};
static const uint8_t
pc_wiener_sub_classify_to_16_2[NUM_PC_WIENER_LUT_CLASSES] = {
6, 0, 9, 1, 0, 7, 10, 0, 7, 7, 6, 6, 9, 7, 6, 6, 12, 14,
14, 1, 7, 7, 9, 0, 15, 0, 1, 1, 7, 13, 10, 0, 13, 13, 12, 1,
14, 7, 8, 6, 14, 13, 9, 12, 1, 7, 7, 13, 5, 0, 15, 1, 12, 0,
14, 1, 10, 12, 6, 6, 1, 6, 13, 1, 10, 1, 13, 7, 9, 15, 8, 12,
14, 14, 11, 11, 12, 1, 12, 14, 10, 13, 13, 11, 0, 10, 12, 13, 9, 8,
11, 4, 15, 13, 11, 10, 9, 12, 14, 12, 13, 13, 14, 12, 9, 9, 14, 14,
8, 0, 10, 2, 5, 14, 12, 1, 13, 1, 12, 12, 14, 1, 3, 11, 8, 10,
11, 10, 1, 6, 6, 6, 10, 7, 10, 10, 2, 7, 2, 11, 13, 6, 5, 13,
6, 12, 9, 15, 13, 9, 13, 0, 2, 1, 10, 1, 9, 10, 9, 10, 1, 12,
10, 13, 9, 0, 8, 10, 6, 7, 9, 6, 0, 0, 12, 0, 6, 1, 10, 9,
13, 0, 15, 12, 9, 6, 15, 6, 4, 14, 13, 3, 13, 9, 13, 12, 13, 13,
13, 6, 12, 10, 13, 5, 3, 10, 13, 10, 10, 1, 13, 11, 13, 15, 10, 10,
15, 5, 7, 5, 15, 1, 10, 10, 9, 13, 13, 12, 9, 13, 9, 9, 9, 14,
9, 15, 9, 9, 9, 9, 14, 12, 14, 3, 13, 10, 10, 13, 15, 5, 10, 11,
15, 9, 10, 13
};
static const uint8_t
pc_wiener_sub_classify_to_12_2[NUM_PC_WIENER_LUT_CLASSES] = {
10, 3, 8, 7, 3, 3, 11, 3, 3, 3, 10, 10, 8, 3, 10, 10, 1, 9, 9,
7, 3, 3, 8, 3, 4, 3, 7, 7, 3, 6, 11, 3, 6, 6, 1, 7, 9, 3,
2, 10, 9, 6, 8, 1, 7, 3, 3, 6, 0, 3, 4, 7, 1, 3, 9, 7, 11,
1, 10, 10, 7, 10, 6, 7, 11, 7, 6, 3, 8, 4, 2, 1, 9, 9, 7, 7,
1, 7, 1, 9, 11, 6, 6, 7, 3, 11, 1, 6, 8, 2, 7, 5, 4, 6, 7,
11, 8, 1, 9, 1, 6, 6, 9, 1, 8, 8, 9, 9, 2, 3, 11, 4, 0, 9,
1, 7, 6, 7, 1, 1, 9, 7, 5, 7, 2, 11, 7, 11, 7, 10, 10, 10, 11,
3, 11, 11, 4, 3, 4, 7, 6, 10, 0, 6, 10, 1, 8, 4, 6, 8, 6, 3,
4, 7, 11, 7, 8, 11, 8, 11, 7, 1, 11, 6, 8, 3, 2, 11, 10, 3, 8,
10, 3, 3, 1, 3, 10, 7, 11, 8, 6, 3, 4, 1, 8, 10, 4, 10, 5, 9,
6, 5, 6, 8, 6, 1, 6, 6, 6, 10, 1, 11, 6, 0, 5, 11, 6, 11, 11,
7, 6, 7, 6, 4, 11, 11, 4, 0, 3, 0, 4, 7, 11, 11, 8, 6, 6, 1,
8, 6, 8, 8, 8, 9, 8, 4, 8, 8, 8, 8, 9, 1, 9, 5, 6, 11, 11,
6, 4, 0, 11, 7, 4, 8, 11, 6,
};
static const uint8_t
pc_wiener_sub_classify_to_8_2[NUM_PC_WIENER_LUT_CLASSES] = {
3, 3, 6, 7, 3, 3, 2, 3, 3, 3, 3, 3, 6, 3, 3, 3, 1, 6, 6, 7, 3, 3, 6, 3,
4, 3, 7, 7, 3, 6, 2, 3, 6, 6, 1, 7, 6, 3, 2, 3, 6, 6, 6, 1, 7, 3, 3, 6,
0, 3, 4, 7, 1, 3, 6, 7, 2, 1, 3, 3, 7, 3, 6, 7, 2, 7, 6, 3, 6, 4, 2, 1,
6, 6, 7, 7, 1, 7, 1, 6, 2, 6, 6, 7, 3, 2, 1, 6, 6, 2, 7, 5, 4, 6, 7, 2,
6, 1, 6, 1, 6, 6, 6, 1, 6, 6, 6, 6, 2, 3, 2, 4, 0, 6, 1, 7, 6, 7, 1, 1,
6, 7, 5, 7, 2, 2, 7, 2, 7, 3, 3, 3, 2, 3, 2, 2, 4, 3, 4, 7, 6, 3, 0, 6,
3, 1, 6, 4, 6, 6, 6, 3, 4, 7, 2, 7, 6, 2, 6, 2, 7, 1, 2, 6, 6, 3, 2, 2,
3, 3, 6, 3, 3, 3, 1, 3, 3, 7, 2, 6, 6, 3, 4, 1, 6, 3, 4, 3, 5, 6, 6, 5,
6, 6, 6, 1, 6, 6, 6, 3, 1, 2, 6, 0, 5, 2, 6, 2, 2, 7, 6, 7, 6, 4, 2, 2,
4, 0, 3, 0, 4, 7, 2, 2, 6, 6, 6, 1, 6, 6, 6, 6, 6, 6, 6, 4, 6, 6, 6, 6,
6, 1, 6, 5, 6, 2, 2, 6, 4, 0, 2, 7, 4, 6, 2, 6
};
static const uint8_t
pc_wiener_sub_classify_to_6_2[NUM_PC_WIENER_LUT_CLASSES] = {
2, 2, 4, 5, 2, 2, 1, 2, 2, 2, 2, 2, 4, 2, 2, 2, 1, 4, 4, 5, 2, 2, 4, 2,
3, 2, 5, 5, 2, 4, 1, 2, 4, 4, 1, 5, 4, 2, 1, 2, 4, 4, 4, 1, 5, 2, 2, 4,
1, 2, 3, 5, 1, 2, 4, 5, 1, 1, 2, 2, 5, 2, 4, 5, 1, 5, 4, 2, 4, 3, 1, 1,
4, 4, 5, 5, 1, 5, 1, 4, 1, 4, 4, 5, 2, 1, 1, 4, 4, 1, 5, 0, 3, 4, 5, 1,
4, 1, 4, 1, 4, 4, 4, 1, 4, 4, 4, 4, 1, 2, 1, 3, 1, 4, 1, 5, 4, 5, 1, 1,
4, 5, 0, 5, 1, 1, 5, 1, 5, 2, 2, 2, 1, 2, 1, 1, 3, 2, 3, 5, 4, 2, 1, 4,
2, 1, 4, 3, 4, 4, 4, 2, 3, 5, 1, 5, 4, 1, 4, 1, 5, 1, 1, 4, 4, 2, 1, 1,
2, 2, 4, 2, 2, 2, 1, 2, 2, 5, 1, 4, 4, 2, 3, 1, 4, 2, 3, 2, 0, 4, 4, 0,
4, 4, 4, 1, 4, 4, 4, 2, 1, 1, 4, 1, 0, 1, 4, 1, 1, 5, 4, 5, 4, 3, 1, 1,
3, 1, 2, 1, 3, 5, 1, 1, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4,
4, 1, 4, 0, 4, 1, 1, 4, 3, 1, 1, 5, 3, 4, 1, 4,
};
static const uint8_t
pc_wiener_sub_classify_to_4_2[NUM_PC_WIENER_LUT_CLASSES] = {
2, 2, 3, 1, 2, 2, 1, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 3, 3, 1, 2, 2, 3, 2,
3, 2, 1, 1, 2, 3, 1, 2, 3, 3, 1, 1, 3, 2, 1, 2, 3, 3, 3, 1, 1, 2, 2, 3,
1, 2, 3, 1, 1, 2, 3, 1, 1, 1, 2, 2, 1, 2, 3, 1, 1, 1, 3, 2, 3, 3, 1, 1,
3, 3, 1, 1, 1, 1, 1, 3, 1, 3, 3, 1, 2, 1, 1, 3, 3, 1, 1, 0, 3, 3, 1, 1,
3, 1, 3, 1, 3, 3, 3, 1, 3, 3, 3, 3, 1, 2, 1, 3, 1, 3, 1, 1, 3, 1, 1, 1,
3, 1, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 3, 2, 3, 1, 3, 2, 1, 3,
2, 1, 3, 3, 3, 3, 3, 2, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 3, 3, 2, 1, 1,
2, 2, 3, 2, 2, 2, 1, 2, 2, 1, 1, 3, 3, 2, 3, 1, 3, 2, 3, 2, 0, 3, 3, 0,
3, 3, 3, 1, 3, 3, 3, 2, 1, 1, 3, 1, 0, 1, 3, 1, 1, 1, 3, 1, 3, 3, 1, 1,
3, 1, 2, 1, 3, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 1, 3, 0, 3, 1, 1, 3, 3, 1, 1, 1, 3, 3, 1, 3
};
static const uint8_t
pc_wiener_sub_classify_to_3_2[NUM_PC_WIENER_LUT_CLASSES] = {
2, 2, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2,
1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1,
1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1,
2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 0, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 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, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
};
static const uint8_t
pc_wiener_sub_classify_to_2_2[NUM_PC_WIENER_LUT_CLASSES] = {
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, 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, 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, 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, 1, 0, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
static const uint8_t
pc_wiener_sub_classify_to_64_3[NUM_PC_WIENER_LUT_CLASSES] = {
33, 38, 54, 36, 18, 39, 6, 59, 39, 34, 25, 50, 50, 20, 1, 39, 44, 15,
1, 58, 39, 60, 22, 32, 17, 11, 59, 32, 21, 49, 7, 32, 1, 1, 33, 59,
15, 39, 24, 59, 1, 1, 1, 50, 59, 39, 0, 1, 45, 12, 27, 59, 44, 39,
50, 59, 5, 33, 25, 25, 36, 25, 1, 25, 7, 59, 61, 38, 63, 49, 14, 44,
2, 33, 16, 40, 33, 33, 48, 15, 17, 57, 22, 16, 25, 6, 44, 41, 55, 5,
16, 16, 42, 53, 51, 7, 47, 13, 41, 59, 22, 41, 1, 44, 55, 55, 47, 50,
51, 11, 5, 8, 29, 25, 0, 59, 57, 37, 44, 33, 22, 33, 40, 26, 52, 7,
51, 7, 59, 48, 28, 57, 28, 21, 9, 4, 62, 8, 62, 46, 22, 37, 58, 48,
35, 33, 47, 31, 61, 50, 47, 18, 62, 12, 7, 59, 47, 41, 5, 17, 59, 21,
10, 1, 22, 60, 14, 6, 15, 39, 50, 50, 32, 32, 48, 19, 30, 33, 10, 54,
44, 11, 7, 33, 47, 25, 23, 19, 35, 33, 57, 51, 57, 22, 48, 10, 22, 61,
22, 50, 44, 10, 41, 35, 12, 2, 48, 10, 53, 9, 48, 16, 48, 31, 31, 7,
31, 46, 18, 3, 31, 3, 7, 5, 55, 41, 22, 13, 22, 41, 22, 22, 54, 55,
54, 27, 55, 55, 54, 55, 33, 57, 55, 16, 48, 28, 7, 41, 31, 56, 7, 43,
48, 54, 17, 7
};
static const uint8_t
pc_wiener_sub_classify_to_16_3[NUM_PC_WIENER_LUT_CLASSES] = {
9, 2, 13, 8, 1, 8, 4, 9, 8, 6, 8, 8, 8, 2, 8, 8, 9, 14,
8, 10, 8, 2, 13, 10, 7, 12, 9, 10, 8, 7, 7, 10, 8, 8, 9, 9,
14, 8, 11, 9, 8, 8, 8, 8, 9, 8, 9, 8, 12, 12, 5, 9, 9, 8,
8, 9, 4, 9, 8, 8, 8, 8, 8, 8, 7, 9, 14, 2, 14, 7, 5, 9,
14, 9, 1, 3, 9, 9, 7, 14, 7, 8, 13, 1, 8, 4, 9, 13, 13, 4,
1, 1, 0, 13, 11, 7, 13, 14, 13, 9, 13, 13, 8, 9, 13, 13, 13, 8,
11, 12, 4, 6, 10, 8, 9, 9, 8, 7, 9, 9, 13, 9, 3, 1, 5, 7,
11, 7, 9, 7, 9, 8, 9, 8, 1, 14, 6, 6, 6, 11, 13, 7, 10, 7,
15, 9, 13, 7, 14, 8, 13, 1, 6, 12, 7, 9, 13, 13, 4, 7, 9, 8,
14, 8, 13, 2, 5, 4, 14, 8, 8, 8, 10, 10, 7, 10, 13, 9, 14, 13,
9, 12, 7, 9, 13, 8, 0, 10, 15, 9, 8, 11, 8, 13, 7, 14, 13, 14,
13, 8, 9, 14, 13, 15, 12, 14, 7, 14, 13, 1, 7, 1, 7, 7, 7, 7,
7, 11, 1, 15, 7, 15, 7, 4, 13, 13, 13, 14, 13, 13, 13, 13, 13, 13,
13, 5, 13, 13, 13, 13, 9, 8, 13, 1, 7, 9, 7, 13, 7, 4, 7, 1,
7, 13, 7, 7
};
static const uint8_t
pc_wiener_sub_classify_to_12_3[NUM_PC_WIENER_LUT_CLASSES] = {
10, 5, 8, 9, 6, 9, 1, 10, 9, 2, 9, 9, 9, 5, 9, 9, 10, 11,
9, 1, 9, 5, 8, 1, 7, 5, 10, 1, 9, 7, 7, 1, 9, 9, 10, 10,
11, 9, 3, 10, 9, 9, 9, 9, 10, 9, 10, 9, 5, 5, 3, 10, 10, 9,
9, 10, 1, 10, 9, 9, 9, 9, 9, 9, 7, 10, 11, 5, 11, 7, 3, 10,
11, 10, 6, 4, 10, 10, 7, 11, 7, 9, 8, 6, 9, 1, 10, 8, 8, 1,
6, 6, 6, 8, 3, 7, 8, 11, 8, 10, 8, 8, 9, 10, 8, 8, 8, 9,
3, 5, 1, 2, 1, 9, 10, 10, 9, 7, 10, 10, 8, 10, 4, 6, 3, 7,
3, 7, 10, 7, 10, 9, 10, 9, 6, 11, 2, 2, 2, 3, 8, 7, 1, 7,
0, 10, 8, 7, 11, 9, 8, 6, 2, 5, 7, 10, 8, 8, 1, 7, 10, 9,
11, 9, 8, 5, 3, 1, 11, 9, 9, 9, 1, 1, 7, 1, 8, 10, 11, 8,
10, 5, 7, 10, 8, 9, 6, 1, 0, 10, 9, 3, 9, 8, 7, 11, 8, 11,
8, 9, 10, 11, 8, 0, 5, 11, 7, 11, 8, 6, 7, 6, 7, 7, 7, 7,
7, 3, 6, 0, 7, 0, 7, 1, 8, 8, 8, 11, 8, 8, 8, 8, 8, 8,
8, 3, 8, 8, 8, 8, 10, 9, 8, 6, 7, 10, 7, 8, 7, 1, 7, 6,
7, 8, 7, 7,
};
static const uint8_t
pc_wiener_sub_classify_to_8_3[NUM_PC_WIENER_LUT_CLASSES] = {
1, 5, 7, 7, 6, 7, 1, 1, 7, 2, 7, 7, 7, 5, 7, 7, 1, 7, 7, 1, 7, 5, 7, 1,
7, 5, 1, 1, 7, 7, 7, 1, 7, 7, 1, 1, 7, 7, 3, 1, 7, 7, 7, 7, 1, 7, 1, 7,
5, 5, 3, 1, 1, 7, 7, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 1, 7, 5, 7, 7, 3, 1,
7, 1, 6, 4, 1, 1, 7, 7, 7, 7, 7, 6, 7, 1, 1, 7, 7, 1, 6, 6, 6, 7, 3, 7,
7, 7, 7, 1, 7, 7, 7, 1, 7, 7, 7, 7, 3, 5, 1, 2, 1, 7, 1, 1, 7, 7, 1, 1,
7, 1, 4, 6, 3, 7, 3, 7, 1, 7, 1, 7, 1, 7, 6, 7, 2, 2, 2, 3, 7, 7, 1, 7,
0, 1, 7, 7, 7, 7, 7, 6, 2, 5, 7, 1, 7, 7, 1, 7, 1, 7, 7, 7, 7, 5, 3, 1,
7, 7, 7, 7, 1, 1, 7, 1, 7, 1, 7, 7, 1, 5, 7, 1, 7, 7, 6, 1, 0, 1, 7, 3,
7, 7, 7, 7, 7, 7, 7, 7, 1, 7, 7, 0, 5, 7, 7, 7, 7, 6, 7, 6, 7, 7, 7, 7,
7, 3, 6, 0, 7, 0, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7,
1, 7, 7, 6, 7, 1, 7, 7, 7, 1, 7, 6, 7, 7, 7, 7
};
static const uint8_t
pc_wiener_sub_classify_to_6_3[NUM_PC_WIENER_LUT_CLASSES] = {
4, 5, 1, 1, 3, 1, 4, 4, 1, 2, 1, 1, 1, 5, 1, 1, 4, 1, 1, 4, 1, 5, 1, 4,
1, 5, 4, 4, 1, 1, 1, 4, 1, 1, 4, 4, 1, 1, 0, 4, 1, 1, 1, 1, 4, 1, 4, 1,
5, 5, 0, 4, 4, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 1, 1, 0, 4,
1, 4, 3, 3, 4, 4, 1, 1, 1, 1, 1, 3, 1, 4, 4, 1, 1, 4, 3, 3, 3, 1, 0, 1,
1, 1, 1, 4, 1, 1, 1, 4, 1, 1, 1, 1, 0, 5, 4, 2, 4, 1, 4, 4, 1, 1, 4, 4,
1, 4, 3, 3, 0, 1, 0, 1, 4, 1, 4, 1, 4, 1, 3, 1, 2, 2, 2, 0, 1, 1, 4, 1,
0, 4, 1, 1, 1, 1, 1, 3, 2, 5, 1, 4, 1, 1, 4, 1, 4, 1, 1, 1, 1, 5, 0, 4,
1, 1, 1, 1, 4, 4, 1, 4, 1, 4, 1, 1, 4, 5, 1, 4, 1, 1, 3, 4, 0, 4, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 0, 5, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1,
1, 0, 3, 0, 1, 0, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
4, 1, 1, 3, 1, 4, 1, 1, 1, 4, 1, 3, 1, 1, 1, 1,
};
static const uint8_t
pc_wiener_sub_classify_to_4_3[NUM_PC_WIENER_LUT_CLASSES] = {
1, 2, 1, 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 0, 1,
1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 3, 3, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, 2, 0, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1, 1, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 3, 1, 0, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1,
1, 0, 3, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1
};
static const uint8_t
pc_wiener_sub_classify_to_3_3[NUM_PC_WIENER_LUT_CLASSES] = {
1, 2, 1, 1, 0, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 0, 1,
1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 2, 2, 0, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1, 1, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1,
1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
};
static const uint8_t
pc_wiener_sub_classify_to_2_3[NUM_PC_WIENER_LUT_CLASSES] = {
1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1,
1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1,
1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1
};
// clang-format off
static const uint8_t pc_wiener_collapse_16_0[7][16] = {
{ 11, 2, 3, 1, 1, 8, 2, 7, 4, 6, 10, 6, 5, 4, 9, 0,}, // to 12
{ 7, 2, 3, 1, 1, 3, 2, 7, 4, 6, 1, 6, 5, 4, 0, 0,}, // to 8
{ 1, 2, 0, 5, 5, 0, 2, 1, 3, 3, 5, 3, 1, 3, 4, 4,}, // to 6
{ 1, 2, 0, 0, 0, 0, 2, 1, 3, 3, 0, 3, 1, 3, 1, 1,}, // to 4
{ 2, 1, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 2, 0, 2, 2,}, // to 3
{ 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_12_0[6][12] = {
{ 0, 1, 2, 3, 4, 5, 6, 7, 3, 0, 1, 7,}, // to 8
{ 4, 5, 2, 0, 3, 1, 3, 1, 0, 4, 5, 1,}, // to 6
{ 1, 0, 2, 0, 3, 1, 3, 1, 0, 1, 0, 1,}, // to 4
{ 2, 0, 1, 0, 0, 2, 0, 2, 0, 2, 0, 2,}, // to 3
{ 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_8_0[5][8] = {
{ 4, 5, 2, 0, 3, 1, 3, 1,}, // to 6
{ 1, 0, 2, 0, 3, 1, 3, 1,}, // to 4
{ 2, 0, 1, 0, 0, 2, 0, 2,}, // to 3
{ 1, 0, 1, 0, 0, 1, 0, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_6_0[4][6] = {
{ 0, 1, 2, 3, 1, 0,}, // to 4
{ 0, 2, 1, 0, 2, 0,}, // to 3
{ 0, 1, 1, 0, 1, 0,}, // to 2
{ 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_4_0[3][4] = {
{ 0, 2, 1, 0,}, // to 3
{ 0, 1, 1, 0,}, // to 2
{ 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_3_0[2][3] = {
{ 0, 1, 1,}, // to 2
{ 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_16_1[7][16] = {
{ 7, 3, 11, 5, 2, 5, 0, 8, 4, 3, 6, 3, 2, 9, 10, 1,}, // to 12
{ 7, 3, 0, 5, 2, 5, 0, 0, 4, 3, 6, 3, 2, 0, 3, 1,}, // to 8
{ 0, 4, 5, 1, 2, 1, 5, 5, 3, 4, 0, 4, 2, 5, 4, 1,}, // to 6
{ 0, 0, 1, 1, 2, 1, 1, 1, 3, 0, 0, 0, 2, 1, 0, 1,}, // to 4
{ 0, 0, 1, 1, 2, 1, 1, 1, 1, 0, 0, 0, 2, 1, 0, 1,}, // to 3
{ 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_12_1[6][12] = {
{ 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 3, 0,}, // to 8
{ 5, 1, 2, 4, 3, 1, 0, 0, 5, 5, 4, 5,}, // to 6
{ 1, 1, 2, 0, 3, 1, 0, 0, 1, 1, 0, 1,}, // to 4
{ 1, 1, 2, 0, 1, 1, 0, 0, 1, 1, 0, 1,}, // to 3
{ 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_8_1[5][8] = {
{ 5, 1, 2, 4, 3, 1, 0, 0,}, // to 6
{ 1, 1, 2, 0, 3, 1, 0, 0,}, // to 4
{ 1, 1, 2, 0, 1, 1, 0, 0,}, // to 3
{ 1, 1, 0, 0, 1, 1, 0, 0,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_6_1[4][6] = {
{ 0, 1, 2, 3, 0, 1,}, // to 4
{ 0, 1, 2, 1, 0, 1,}, // to 3
{ 0, 1, 0, 1, 0, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_4_1[3][4] = {
{ 0, 1, 2, 1,}, // to 3
{ 0, 1, 0, 1,}, // to 2
{ 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_3_1[2][3] = {
{ 0, 1, 0,}, // to 2
{ 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_16_2[7][16] = {
{ 3, 7, 4, 5, 5, 0, 10, 3, 2, 8, 11, 7, 1, 6, 9, 4,}, // to 12
{ 3, 7, 4, 5, 5, 0, 3, 3, 2, 6, 2, 7, 1, 6, 6, 4,}, // to 8
{ 2, 5, 3, 0, 0, 1, 2, 2, 1, 4, 1, 5, 1, 4, 4, 3,}, // to 6
{ 2, 1, 3, 0, 0, 1, 2, 2, 1, 3, 1, 1, 1, 3, 3, 3,}, // to 4
{ 2, 1, 1, 0, 0, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,}, // to 3
{ 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_12_2[6][12] = {
{ 0, 1, 2, 3, 4, 5, 6, 7, 6, 6, 3, 2,}, // to 8
{ 1, 1, 1, 2, 3, 0, 4, 5, 4, 4, 2, 1,}, // to 6
{ 1, 1, 1, 2, 3, 0, 3, 1, 3, 3, 2, 1,}, // to 4
{ 1, 1, 1, 2, 1, 0, 1, 1, 1, 1, 2, 1,}, // to 3
{ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_8_2[5][8] = {
{ 1, 1, 1, 2, 3, 0, 4, 5,}, // to 6
{ 1, 1, 1, 2, 3, 0, 3, 1,}, // to 4
{ 1, 1, 1, 2, 1, 0, 1, 1,}, // to 3
{ 1, 1, 1, 1, 1, 0, 1, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_6_2[4][6] = {
{ 0, 1, 2, 3, 3, 1,}, // to 4
{ 0, 1, 2, 1, 1, 1,}, // to 3
{ 0, 1, 1, 1, 1, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_4_2[3][4] = {
{ 0, 1, 2, 1,}, // to 3
{ 0, 1, 1, 1,}, // to 2
{ 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_3_2[2][3] = {
{ 0, 1, 1,}, // to 2
{ 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_16_3[7][16] = {
{ 6, 6, 5, 4, 1, 3, 2, 7, 9, 10, 1, 3, 5, 8, 11, 0,}, // to 12
{ 6, 6, 5, 4, 1, 3, 2, 7, 7, 1, 1, 3, 5, 7, 7, 0,}, // to 8
{ 3, 3, 5, 3, 4, 0, 2, 1, 1, 4, 4, 0, 5, 1, 1, 0,}, // to 6
{ 3, 3, 2, 3, 1, 0, 2, 1, 1, 1, 1, 0, 2, 1, 1, 0,}, // to 4
{ 0, 0, 2, 0, 1, 0, 2, 1, 1, 1, 1, 0, 2, 1, 1, 0,}, // to 3
{ 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_12_3[6][12] = {
{ 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 1, 7,}, // to 8
{ 0, 4, 2, 0, 3, 5, 3, 1, 1, 1, 4, 1,}, // to 6
{ 0, 1, 2, 0, 3, 2, 3, 1, 1, 1, 1, 1,}, // to 4
{ 0, 1, 2, 0, 0, 2, 0, 1, 1, 1, 1, 1,}, // to 3
{ 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_8_3[5][8] = {
{ 0, 4, 2, 0, 3, 5, 3, 1,}, // to 6
{ 0, 1, 2, 0, 3, 2, 3, 1,}, // to 4
{ 0, 1, 2, 0, 0, 2, 0, 1,}, // to 3
{ 0, 1, 0, 0, 0, 0, 0, 1,}, // to 2
{ 0, 0, 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_6_3[4][6] = {
{ 0, 1, 2, 3, 1, 2,}, // to 4
{ 0, 1, 2, 0, 1, 2,}, // to 3
{ 0, 1, 0, 0, 1, 0,}, // to 2
{ 0, 0, 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_4_3[3][4] = {
{ 0, 1, 2, 0,}, // to 3
{ 0, 1, 0, 0,}, // to 2
{ 0, 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_3_3[2][3] = {
{ 0, 1, 0,}, // to 2
{ 0, 0, 0,}, // to 1
};
static const uint8_t pc_wiener_collapse_2[1][2] = {
{ 0 }, // to 1
};
// clang-format on
// qindex ranges 0 : [0, 130), 1: [130, 190), 2: [190, 220), 3: [220, 270)]
static AOM_INLINE int get_filter_set_index(int base_qindex) {
if (base_qindex < 130)
return 0;
else if (base_qindex < 190)
return 1;
else if (base_qindex < 220)
return 2;
else
return 3;
}
static AOM_INLINE const int16_t (
*get_filter_set(int filter_set_index))[NUM_PC_WIENER_TAPS_LUMA] {
switch (filter_set_index) {
case 0: return pcwiener_filters_luma_0;
case 1: return pcwiener_filters_luma_1;
case 2: return pcwiener_filters_luma_2;
case 3: return pcwiener_filters_luma_3;
default: assert(0); return pcwiener_filters_luma_0;
}
}
static AOM_INLINE const uint8_t *get_filter_selector(int filter_set_index) {
assert(NUM_PC_WIENER_FILTERS == 64);
switch (filter_set_index) {
case 0: return pc_wiener_sub_classify_to_64_0;
case 1: return pc_wiener_sub_classify_to_64_1;
case 2: return pc_wiener_sub_classify_to_64_2;
case 3: return pc_wiener_sub_classify_to_64_3;
default: assert(0); return pc_wiener_sub_classify_to_64_0;
}
}
typedef struct PcWienerSubClassifiers {
const uint8_t *pc_wiener_sub_classify_to_64;
const uint8_t *pc_wiener_sub_classify_to_16;
const uint8_t *pc_wiener_sub_classify_to_12;
const uint8_t *pc_wiener_sub_classify_to_8;
const uint8_t *pc_wiener_sub_classify_to_6;
const uint8_t *pc_wiener_sub_classify_to_4;
const uint8_t *pc_wiener_sub_classify_to_3;
const uint8_t *pc_wiener_sub_classify_to_2;
} PcWienerSubClassifiers;
static const PcWienerSubClassifiers subclass0 = {
.pc_wiener_sub_classify_to_64 = pc_wiener_sub_classify_to_64_0,
.pc_wiener_sub_classify_to_16 = pc_wiener_sub_classify_to_16_0,
.pc_wiener_sub_classify_to_12 = pc_wiener_sub_classify_to_12_0,
.pc_wiener_sub_classify_to_8 = pc_wiener_sub_classify_to_8_0,
.pc_wiener_sub_classify_to_6 = pc_wiener_sub_classify_to_6_0,
.pc_wiener_sub_classify_to_4 = pc_wiener_sub_classify_to_4_0,
.pc_wiener_sub_classify_to_3 = pc_wiener_sub_classify_to_3_0,
.pc_wiener_sub_classify_to_2 = pc_wiener_sub_classify_to_2_0
};
static const PcWienerSubClassifiers subclass1 = {
.pc_wiener_sub_classify_to_64 = pc_wiener_sub_classify_to_64_1,
.pc_wiener_sub_classify_to_16 = pc_wiener_sub_classify_to_16_1,
.pc_wiener_sub_classify_to_12 = pc_wiener_sub_classify_to_12_1,
.pc_wiener_sub_classify_to_8 = pc_wiener_sub_classify_to_8_1,
.pc_wiener_sub_classify_to_6 = pc_wiener_sub_classify_to_6_1,
.pc_wiener_sub_classify_to_4 = pc_wiener_sub_classify_to_4_1,
.pc_wiener_sub_classify_to_3 = pc_wiener_sub_classify_to_3_1,
.pc_wiener_sub_classify_to_2 = pc_wiener_sub_classify_to_2_1
};
static const PcWienerSubClassifiers subclass2 = {
.pc_wiener_sub_classify_to_64 = pc_wiener_sub_classify_to_64_2,
.pc_wiener_sub_classify_to_16 = pc_wiener_sub_classify_to_16_2,
.pc_wiener_sub_classify_to_12 = pc_wiener_sub_classify_to_12_2,
.pc_wiener_sub_classify_to_8 = pc_wiener_sub_classify_to_8_2,
.pc_wiener_sub_classify_to_6 = pc_wiener_sub_classify_to_6_2,
.pc_wiener_sub_classify_to_4 = pc_wiener_sub_classify_to_4_2,
.pc_wiener_sub_classify_to_3 = pc_wiener_sub_classify_to_3_2,
.pc_wiener_sub_classify_to_2 = pc_wiener_sub_classify_to_2_2
};
static const PcWienerSubClassifiers subclass3 = {
.pc_wiener_sub_classify_to_64 = pc_wiener_sub_classify_to_64_3,
.pc_wiener_sub_classify_to_16 = pc_wiener_sub_classify_to_16_3,
.pc_wiener_sub_classify_to_12 = pc_wiener_sub_classify_to_12_3,
.pc_wiener_sub_classify_to_8 = pc_wiener_sub_classify_to_8_3,
.pc_wiener_sub_classify_to_6 = pc_wiener_sub_classify_to_6_3,
.pc_wiener_sub_classify_to_4 = pc_wiener_sub_classify_to_4_3,
.pc_wiener_sub_classify_to_3 = pc_wiener_sub_classify_to_3_3,
.pc_wiener_sub_classify_to_2 = pc_wiener_sub_classify_to_2_3
};
static AOM_INLINE const PcWienerSubClassifiers *get_sub_classifiers(
int filter_set_index) {
assert(NUM_PC_WIENER_FILTERS == 64);
switch (filter_set_index) {
case 0: return &subclass0;
case 1: return &subclass1;
case 2: return &subclass2;
case 3: return &subclass3;
default: assert(0); return &subclass0;
}
}
// Number of bits needed to write the number of classes.
#define NUM_FILTER_CLASSES_BITS 3
// Returns a number to encode for each possible value of num_classes.
static AOM_INLINE int encode_num_filter_classes(int num_classes) {
assert((1 << NUM_FILTER_CLASSES_BITS) > 7);
switch (num_classes) {
case 16: return 7;
case 12: return 6;
case 8: return 5;
case 6: return 4;
case 4: return 3;
case 3: return 2;
case 2: return 1;
case 1: return 0;
default: assert(0); return 0;
}
}
// Returns a number to encode for each possible value of num_classes.
static AOM_INLINE int decode_num_filter_classes(int encoded_num_classes) {
assert((1 << NUM_FILTER_CLASSES_BITS) > 7);
switch (encoded_num_classes) {
case 7: return 16;
case 6: return 12;
case 5: return 8;
case 4: return 6;
case 3: return 4;
case 2: return 3;
case 1: return 2;
case 0: return 1;
default: assert(0); return 1;
}
}
static AOM_INLINE const uint8_t *get_converter(int filter_set_index,
int num_classes,
int target_classes) {
if (num_classes < target_classes) {
assert(0);
// Safe all zeros return.
return pc_wiener_sub_classify_to_1;
}
if (num_classes == 1) return pc_wiener_sub_classify_to_1;
const int allowed_classes[] = { 16, 12, 8, 6, 4, 3, 2, 1 };
const int num_allowed_classes =
sizeof(allowed_classes) / sizeof(*allowed_classes);
int base_idx = -1;
int target_idx = -1;
for (int i = 0; i < num_allowed_classes; ++i) {
if (num_classes == allowed_classes[i]) base_idx = i;
if (target_classes == allowed_classes[i]) target_idx = i;
}
if (base_idx == -1 || target_idx == -1) {
assert(0);
return pc_wiener_sub_classify_to_1;
}
int row = 1;
while (num_classes >> row > target_classes) ++row;
--row;
switch (filter_set_index) {
case 0:
switch (num_classes) {
case 16: return pc_wiener_collapse_16_0[row];
case 12: return pc_wiener_collapse_12_0[row];
case 8: return pc_wiener_collapse_8_0[row];
case 6: return pc_wiener_collapse_6_0[row];
case 4: return pc_wiener_collapse_4_0[row];
case 3: return pc_wiener_collapse_3_0[row];
case 2: return pc_wiener_collapse_2[row];
default: assert(0); return pc_wiener_sub_classify_to_1;
}
case 1:
switch (num_classes) {
case 16: return pc_wiener_collapse_16_1[row];
case 12: return pc_wiener_collapse_12_1[row];
case 8: return pc_wiener_collapse_8_1[row];
case 6: return pc_wiener_collapse_6_1[row];
case 4: return pc_wiener_collapse_4_1[row];
case 3: return pc_wiener_collapse_3_1[row];
case 2: return pc_wiener_collapse_2[row];
default: assert(0); return pc_wiener_sub_classify_to_1;
}
case 2:
switch (num_classes) {
case 16: return pc_wiener_collapse_16_2[row];
case 12: return pc_wiener_collapse_12_2[row];
case 8: return pc_wiener_collapse_8_2[row];
case 6: return pc_wiener_collapse_6_2[row];
case 4: return pc_wiener_collapse_4_2[row];
case 3: return pc_wiener_collapse_3_2[row];
case 2: return pc_wiener_collapse_2[row];
default: assert(0); return pc_wiener_sub_classify_to_1;
}
case 3:
switch (num_classes) {
case 16: return pc_wiener_collapse_16_3[row];
case 12: return pc_wiener_collapse_12_3[row];
case 8: return pc_wiener_collapse_8_3[row];
case 6: return pc_wiener_collapse_6_3[row];
case 4: return pc_wiener_collapse_4_3[row];
case 3: return pc_wiener_collapse_3_3[row];
case 2: return pc_wiener_collapse_2[row];
default: assert(0); return pc_wiener_sub_classify_to_1;
}
default: assert(0); return pc_wiener_sub_classify_to_1;
}
}
static const uint8_t pc_wiener_lut_to_class_index[PC_WIENER_LUT_SIZE] = {
83, 154, 254, 125, 125, 125, 253, 253, 77, 200, 207, 30, 30, 239, 239,
239, 0, 98, 101, 229, 229, 231, 231, 231, 0, 34, 101, 100, 100, 229,
229, 231, 15, 34, 98, 100, 100, 100, 164, 164, 15, 34, 98, 106, 100,
96, 164, 164, 15, 14, 43, 106, 96, 96, 96, 164, 15, 14, 43, 106,
106, 96, 96, 184, 83, 154, 64, 110, 125, 239, 253, 253, 119, 225, 87,
231, 64, 64, 239, 239, 120, 101, 100, 229, 236, 231, 202, 231, 15, 98,
228, 100, 150, 202, 236, 231, 15, 40, 18, 100, 228, 96, 228, 88, 15,
43, 106, 68, 96, 193, 224, 88, 199, 43, 34, 106, 104, 184, 224, 184,
11, 14, 43, 96, 96, 184, 96, 184, 243, 212, 244, 22, 239, 239, 253,
253, 99, 192, 198, 230, 22, 22, 231, 239, 8, 163, 140, 230, 230, 230,
230, 231, 47, 32, 226, 82, 226, 230, 179, 164, 41, 32, 226, 226, 82,
193, 179, 224, 106, 42, 42, 226, 193, 82, 193, 184, 15, 42, 42, 193,
193, 193, 193, 184, 11, 43, 42, 106, 193, 193, 193, 184, 241, 157, 64,
255, 255, 255, 255, 255, 240, 66, 228, 228, 22, 22, 22, 22, 10, 150,
228, 228, 230, 146, 230, 232, 199, 150, 150, 228, 146, 146, 146, 184, 199,
42, 62, 146, 146, 193, 193, 184, 47, 42, 62, 193, 146, 193, 193, 184,
199, 42, 42, 146, 146, 146, 193, 179, 199, 42, 42, 146, 193, 146, 193,
184, 138, 237, 158, 237, 239, 253, 255, 255, 156, 17, 236, 88, 88, 231,
231, 22, 171, 105, 224, 224, 232, 146, 232, 22, 12, 104, 146, 146, 146,
146, 224, 232, 12, 146, 146, 146, 146, 146, 146, 232, 199, 106, 234, 146,
146, 146, 146, 146, 199, 42, 234, 146, 146, 146, 146, 146, 199, 42, 146,
146, 146, 146, 146, 184, 145, 179, 236, 158, 158, 110, 253, 29, 11, 179,
238, 237, 238, 238, 238, 88, 41, 156, 242, 88, 88, 88, 232, 2, 12,
107, 104, 232, 232, 232, 232, 232, 12, 170, 234, 234, 2, 232, 2, 179,
12, 156, 234, 234, 2, 2, 234, 179, 12, 156, 234, 234, 234, 2, 2,
179, 199, 156, 234, 234, 234, 234, 146, 184, 133, 211, 179, 179, 110, 110,
110, 253, 160, 166, 179, 238, 238, 238, 238, 238, 129, 35, 179, 236, 88,
88, 88, 179, 137, 170, 104, 242, 88, 88, 2, 2, 171, 170, 156, 104,
232, 2, 2, 232, 12, 170, 156, 234, 2, 2, 2, 2, 189, 170, 156,
234, 2, 2, 2, 2, 12, 156, 234, 179, 234, 2, 2, 179, 186, 219,
179, 179, 237, 110, 110, 253, 155, 179, 60, 231, 238, 238, 238, 238, 28,
58, 188, 179, 88, 238, 238, 238, 226, 238, 234, 179, 104, 88, 2, 88,
14, 179, 170, 242, 104, 232, 2, 2, 39, 2, 170, 156, 232, 232, 232,
2, 179, 170, 170, 234, 232, 232, 2, 2, 170, 170, 156, 234, 234, 234,
2, 179, 90, 132, 95, 254, 159, 159, 159, 253, 44, 71, 154, 222, 254,
254, 125, 159, 55, 183, 52, 86, 250, 250, 254, 125, 39, 26, 145, 103,
180, 246, 250, 215, 39, 26, 183, 73, 103, 180, 180, 30, 39, 39, 183,
145, 73, 247, 247, 87, 76, 39, 26, 145, 73, 102, 247, 87, 25, 76,
76, 57, 145, 73, 102, 202, 83, 132, 254, 125, 159, 159, 254, 159, 44,
209, 154, 64, 125, 125, 125, 159, 26, 121, 241, 86, 64, 207, 254, 125,
84, 0, 103, 103, 207, 246, 215, 215, 39, 0, 57, 227, 52, 52, 196,
30, 39, 15, 57, 145, 52, 102, 207, 87, 76, 53, 10, 77, 103, 97,
197, 87, 25, 15, 15, 0, 34, 73, 18, 100, 74, 182, 252, 252, 215,
125, 71, 69, 99, 78, 206, 244, 244, 244, 125, 159, 8, 133, 116, 198,
198, 244, 244, 215, 46, 33, 163, 190, 116, 198, 198, 215, 47, 33, 163,
116, 190, 140, 190, 230, 47, 46, 33, 163, 190, 190, 190, 230, 156, 47,
33, 33, 163, 190, 190, 82, 25, 40, 41, 41, 163, 62, 226, 193, 177,
127, 64, 255, 255, 255, 255, 255, 121, 225, 87, 196, 22, 22, 22, 22,
10, 102, 148, 230, 198, 198, 22, 22, 199, 40, 62, 226, 230, 198, 198,
22, 47, 40, 62, 62, 226, 226, 198, 230, 47, 41, 32, 62, 226, 226,
140, 230, 47, 47, 41, 62, 62, 226, 226, 230, 47, 47, 41, 42, 32,
32, 226, 193, 49, 125, 158, 158, 110, 29, 29, 255, 58, 162, 178, 231,
231, 22, 22, 22, 58, 120, 66, 228, 228, 196, 196, 22, 171, 18, 150,
228, 228, 228, 230, 22, 149, 18, 150, 150, 228, 228, 62, 230, 11, 42,
150, 62, 228, 146, 226, 230, 11, 42, 42, 62, 62, 193, 193, 230, 169,
47, 42, 42, 42, 193, 62, 193, 85, 238, 179, 158, 158, 110, 253, 29,
179, 179, 158, 158, 237, 237, 238, 22, 226, 59, 17, 236, 236, 164, 164,
22, 189, 59, 105, 224, 224, 228, 228, 230, 189, 107, 104, 146, 146, 224,
146, 228, 189, 107, 150, 146, 146, 146, 146, 228, 149, 43, 146, 146, 146,
146, 146, 228, 11, 199, 42, 146, 96, 146, 146, 193, 62, 92, 88, 214,
238, 89, 89, 253, 42, 228, 110, 158, 158, 158, 158, 239, 85, 137, 179,
237, 237, 237, 238, 231, 156, 170, 233, 17, 236, 88, 88, 228, 109, 171,
107, 105, 224, 232, 224, 232, 171, 171, 170, 232, 232, 232, 232, 232, 189,
12, 156, 104, 146, 232, 2, 232, 149, 14, 156, 146, 146, 146, 146, 146,
158, 205, 179, 179, 179, 179, 110, 253, 179, 254, 122, 110, 110, 158, 158,
110, 81, 122, 179, 238, 2, 158, 158, 238, 10, 179, 42, 179, 237, 238,
238, 238, 238, 58, 179, 233, 242, 88, 88, 88, 204, 179, 107, 233, 104,
232, 88, 88, 179, 12, 107, 156, 104, 232, 232, 2, 149, 12, 170, 156,
156, 234, 234, 179, 90, 132, 95, 254, 159, 159, 159, 159, 19, 155, 222,
222, 254, 254, 125, 159, 55, 115, 71, 245, 222, 222, 250, 254, 39, 55,
115, 71, 86, 250, 250, 215, 39, 55, 115, 119, 52, 86, 246, 250, 25,
39, 26, 183, 119, 103, 180, 246, 39, 39, 26, 26, 119, 103, 103, 180,
76, 39, 39, 26, 183, 145, 73, 247, 108, 132, 95, 254, 89, 50, 69,
239, 128, 209, 245, 154, 254, 134, 102, 80, 39, 60, 241, 161, 127, 157,
250, 125, 0, 177, 243, 87, 116, 127, 223, 254, 10, 240, 115, 71, 86,
71, 245, 127, 23, 169, 115, 115, 115, 209, 118, 86, 114, 23, 199, 26,
99, 52, 118, 246, 25, 35, 145, 199, 180, 119, 103, 197, 211, 182, 252,
252, 244, 213, 95, 17, 65, 78, 210, 244, 244, 244, 206, 80, 5, 133,
116, 194, 244, 244, 244, 215, 5, 20, 131, 116, 194, 143, 244, 215, 5,
46, 131, 131, 116, 194, 194, 194, 8, 46, 46, 131, 190, 194, 190, 215,
45, 46, 37, 33, 190, 190, 116, 198, 175, 47, 33, 33, 33, 163, 163,
82, 177, 223, 80, 255, 24, 24, 24, 24, 121, 241, 180, 212, 244, 244,
252, 244, 84, 73, 192, 192, 198, 206, 244, 244, 53, 145, 192, 140, 198,
143, 206, 244, 169, 41, 32, 140, 140, 198, 198, 198, 169, 8, 32, 32,
140, 140, 198, 230, 47, 47, 41, 32, 32, 226, 140, 198, 47, 47, 33,
33, 163, 163, 163, 82, 203, 223, 158, 158, 253, 253, 29, 24, 105, 162,
157, 157, 64, 239, 255, 255, 185, 120, 66, 197, 87, 196, 22, 244, 189,
240, 148, 148, 100, 198, 198, 22, 149, 43, 62, 148, 148, 148, 198, 198,
11, 199, 40, 62, 62, 226, 62, 230, 11, 41, 40, 32, 62, 193, 140,
198, 181, 47, 41, 32, 32, 42, 32, 226, 155, 210, 85, 238, 158, 89,
253, 50, 1, 179, 85, 158, 158, 158, 239, 255, 0, 58, 162, 135, 229,
231, 196, 22, 171, 58, 233, 224, 228, 236, 196, 196, 189, 58, 105, 224,
228, 164, 228, 230, 189, 12, 18, 150, 224, 146, 228, 228, 189, 199, 40,
150, 104, 146, 150, 62, 53, 199, 42, 42, 62, 62, 193, 226, 166, 168,
144, 222, 179, 239, 89, 50, 117, 179, 179, 88, 158, 158, 158, 239, 78,
233, 189, 56, 237, 237, 237, 239, 28, 10, 59, 17, 236, 236, 164, 231,
64, 171, 59, 233, 242, 224, 236, 224, 171, 189, 107, 104, 224, 104, 148,
228, 189, 171, 18, 105, 150, 224, 179, 228, 149, 199, 43, 150, 96, 232,
146, 193, 219, 233, 220, 238, 158, 29, 17, 253, 70, 110, 179, 158, 110,
158, 110, 110, 137, 50, 55, 2, 158, 158, 158, 237, 166, 178, 209, 224,
237, 237, 237, 238, 29, 179, 97, 233, 17, 236, 236, 238, 221, 171, 58,
107, 242, 242, 88, 88, 61, 189, 171, 107, 233, 104, 232, 88, 149, 12,
12, 170, 156, 104, 232, 2, 91, 94, 95, 95, 254, 254, 125, 125, 19,
155, 222, 222, 222, 222, 254, 125, 23, 44, 155, 245, 222, 222, 222, 254,
23, 55, 115, 16, 245, 86, 222, 254, 160, 7, 44, 115, 71, 86, 86,
250, 160, 7, 55, 115, 119, 71, 86, 86, 160, 7, 55, 35, 115, 119,
52, 86, 160, 160, 160, 35, 35, 115, 119, 103, 166, 124, 254, 167, 17,
50, 235, 97, 49, 211, 83, 239, 95, 80, 69, 253, 23, 0, 209, 155,
134, 125, 238, 110, 114, 177, 211, 209, 167, 222, 147, 213, 153, 172, 44,
60, 243, 245, 215, 250, 47, 7, 55, 35, 243, 99, 118, 86, 5, 25,
55, 83, 83, 243, 51, 127, 23, 160, 7, 7, 76, 51, 119, 52, 211,
182, 252, 252, 252, 254, 71, 69, 65, 174, 210, 216, 244, 244, 252, 213,
5, 133, 130, 194, 244, 216, 244, 22, 5, 20, 133, 130, 130, 194, 244,
244, 46, 46, 20, 131, 130, 194, 194, 194, 46, 46, 33, 131, 131, 116,
194, 194, 233, 46, 37, 131, 131, 131, 194, 194, 25, 46, 46, 33, 33,
33, 131, 190, 177, 223, 80, 255, 24, 24, 24, 24, 121, 241, 246, 212,
244, 244, 252, 244, 84, 73, 192, 192, 143, 206, 244, 244, 53, 145, 192,
140, 198, 143, 206, 244, 169, 41, 163, 140, 140, 140, 143, 244, 169, 8,
41, 163, 140, 140, 140, 143, 169, 47, 8, 32, 140, 140, 140, 143, 181,
47, 8, 33, 33, 163, 163, 140, 2, 205, 158, 158, 253, 29, 29, 24,
185, 162, 157, 127, 64, 22, 255, 255, 185, 120, 225, 197, 87, 212, 22,
244, 189, 240, 66, 148, 148, 198, 212, 143, 149, 10, 102, 148, 148, 192,
192, 143, 11, 10, 40, 62, 148, 226, 226, 198, 11, 41, 40, 40, 81,
226, 230, 198, 181, 47, 41, 41, 32, 32, 32, 226, 232, 209, 241, 89,
89, 89, 253, 29, 116, 9, 178, 158, 158, 64, 64, 255, 149, 58, 162,
178, 197, 231, 196, 22, 171, 58, 120, 66, 197, 197, 196, 196, 189, 58,
18, 66, 228, 228, 100, 230, 189, 10, 18, 150, 150, 193, 228, 230, 189,
10, 18, 18, 148, 146, 228, 230, 11, 199, 42, 40, 62, 62, 62, 226,
28, 177, 230, 22, 110, 56, 89, 253, 43, 179, 108, 238, 158, 158, 110,
239, 181, 89, 146, 56, 237, 237, 237, 239, 230, 170, 59, 17, 17, 197,
231, 196, 73, 58, 59, 233, 242, 236, 164, 236, 58, 58, 107, 105, 66,
224, 224, 228, 189, 171, 107, 18, 150, 224, 193, 228, 149, 199, 43, 18,
96, 146, 193, 193, 145, 88, 142, 238, 238, 179, 253, 253, 194, 87, 241,
110, 158, 158, 238, 110, 147, 90, 179, 237, 238, 158, 158, 237, 50, 29,
162, 238, 237, 237, 237, 237, 45, 91, 96, 233, 17, 242, 236, 238, 126,
40, 58, 107, 233, 242, 242, 236, 149, 171, 58, 107, 233, 242, 224, 88,
149, 12, 12, 107, 156, 104, 104, 232, 91, 94, 95, 95, 159, 254, 254,
69, 128, 74, 132, 132, 132, 95, 95, 159, 172, 19, 74, 6, 132, 132,
95, 95, 172, 128, 51, 155, 6, 132, 132, 95, 23, 55, 44, 51, 155,
245, 6, 222, 39, 172, 55, 44, 16, 16, 245, 222, 160, 172, 55, 44,
51, 16, 71, 245, 160, 7, 55, 55, 44, 115, 115, 52, 108, 75, 245,
69, 162, 244, 69, 125, 31, 152, 219, 167, 108, 57, 235, 92, 128, 209,
177, 6, 95, 82, 143, 159, 23, 172, 51, 132, 245, 129, 223, 254, 23,
232, 128, 83, 210, 132, 86, 147, 169, 4, 133, 245, 51, 132, 28, 246,
19, 149, 31, 60, 245, 251, 60, 6, 4, 53, 51, 53, 7, 7, 16,
52, 90, 213, 186, 216, 244, 126, 186, 69, 65, 174, 152, 216, 210, 147,
147, 235, 5, 20, 130, 130, 194, 136, 216, 92, 5, 13, 131, 130, 194,
194, 148, 208, 5, 46, 131, 131, 194, 194, 194, 194, 5, 46, 131, 131,
131, 130, 194, 194, 3, 46, 33, 20, 37, 131, 194, 143, 84, 172, 41,
33, 33, 33, 131, 190, 217, 223, 124, 50, 235, 235, 186, 213, 60, 177,
134, 182, 220, 252, 216, 244, 84, 241, 52, 206, 206, 147, 252, 252, 25,
45, 161, 78, 206, 147, 93, 244, 181, 45, 145, 78, 81, 194, 246, 206,
181, 47, 8, 161, 161, 116, 190, 194, 181, 46, 46, 33, 161, 230, 227,
194, 181, 46, 46, 8, 8, 33, 33, 32, 11, 245, 166, 89, 124, 50,
50, 235, 153, 249, 85, 167, 125, 255, 252, 252, 185, 113, 195, 246, 246,
212, 182, 252, 185, 121, 227, 227, 196, 86, 206, 147, 109, 84, 97, 192,
140, 135, 78, 101, 149, 47, 14, 140, 81, 140, 197, 206, 181, 169, 41,
32, 52, 227, 226, 206, 181, 169, 169, 41, 33, 32, 163, 81, 175, 119,
248, 167, 89, 124, 124, 69, 74, 212, 166, 85, 167, 167, 80, 29, 218,
112, 201, 201, 157, 30, 215, 255, 177, 185, 36, 72, 135, 180, 143, 244,
189, 185, 36, 72, 148, 82, 214, 215, 189, 171, 233, 17, 100, 32, 241,
246, 109, 149, 10, 40, 227, 227, 82, 79, 175, 53, 47, 163, 163, 32,
81, 81, 253, 36, 201, 189, 49, 190, 70, 69, 88, 140, 38, 179, 166,
166, 167, 80, 178, 206, 112, 201, 85, 56, 215, 80, 3, 148, 142, 201,
205, 207, 127, 215, 179, 185, 142, 36, 17, 197, 247, 250, 105, 185, 58,
107, 79, 82, 197, 192, 176, 185, 107, 73, 197, 79, 197, 207, 176, 149,
199, 18, 40, 79, 148, 81, 192, 214, 111, 191, 1, 158, 50, 89, 227,
86, 158, 158, 238, 158, 70, 89, 250, 167, 232, 4, 170, 166, 166, 110,
157, 156, 90, 166, 201, 85, 56, 56, 70, 90, 53, 142, 162, 162, 56,
56, 216, 189, 185, 142, 17, 17, 162, 178, 120, 112, 185, 58, 233, 17,
242, 178, 149, 149, 171, 59, 107, 54, 54, 105, 91, 94, 94, 95, 95,
92, 95, 215, 31, 211, 94, 95, 95, 95, 95, 95, 23, 19, 74, 94,
132, 132, 95, 95, 23, 128, 19, 74, 6, 132, 222, 95, 23, 172, 19,
51, 155, 245, 222, 222, 23, 172, 55, 44, 51, 245, 245, 245, 23, 172,
44, 19, 51, 118, 118, 245, 160, 7, 7, 35, 44, 115, 118, 118, 109,
75, 75, 210, 95, 38, 86, 208, 31, 161, 201, 143, 208, 6, 126, 95,
151, 251, 155, 79, 251, 69, 78, 110, 172, 44, 39, 114, 95, 76, 205,
154, 4, 128, 16, 84, 132, 136, 94, 159, 175, 4, 67, 35, 118, 74,
212, 132, 23, 55, 181, 205, 19, 6, 174, 245, 7, 4, 4, 160, 49,
44, 76, 118, 90, 213, 252, 216, 248, 186, 117, 158, 65, 174, 152, 216,
216, 206, 216, 254, 5, 20, 130, 194, 194, 216, 244, 206, 5, 20, 130,
130, 194, 194, 216, 194, 46, 46, 20, 131, 130, 130, 194, 194, 20, 46,
131, 131, 131, 194, 194, 194, 12, 46, 37, 13, 131, 130, 194, 194, 23,
224, 46, 33, 131, 131, 131, 190, 217, 223, 80, 29, 24, 24, 216, 235,
60, 241, 214, 147, 244, 252, 252, 216, 84, 97, 52, 212, 147, 210, 206,
216, 53, 57, 52, 78, 174, 78, 93, 244, 181, 45, 163, 161, 78, 206,
206, 206, 165, 5, 8, 133, 78, 81, 143, 206, 165, 46, 8, 20, 161,
116, 116, 206, 5, 46, 37, 33, 8, 33, 133, 116, 239, 217, 166, 89,
124, 29, 29, 24, 58, 249, 162, 127, 64, 125, 22, 252, 185, 113, 195,
225, 246, 212, 206, 244, 185, 63, 66, 227, 52, 212, 212, 206, 11, 199,
97, 227, 192, 78, 140, 206, 25, 199, 40, 227, 192, 140, 180, 206, 25,
45, 41, 41, 163, 81, 78, 143, 181, 169, 8, 41, 163, 133, 140, 140,
143, 104, 223, 166, 89, 167, 89, 50, 178, 131, 249, 166, 158, 167, 80,
255, 171, 142, 201, 205, 178, 64, 214, 213, 189, 142, 36, 66, 17, 197,
180, 212, 187, 58, 54, 66, 66, 100, 246, 198, 189, 171, 107, 148, 105,
193, 197, 78, 109, 199, 57, 150, 148, 148, 192, 78, 25, 53, 57, 32,
62, 81, 81, 140, 162, 196, 28, 131, 69, 70, 223, 253, 198, 135, 221,
76, 166, 166, 167, 80, 118, 179, 61, 85, 56, 157, 167, 64, 232, 171,
142, 162, 17, 157, 157, 215, 130, 185, 142, 72, 66, 135, 82, 196, 12,
187, 58, 54, 66, 197, 82, 197, 189, 189, 107, 105, 225, 148, 224, 197,
149, 15, 57, 98, 79, 148, 148, 148, 113, 82, 172, 50, 174, 2, 205,
89, 171, 130, 16, 179, 158, 158, 70, 110, 133, 234, 14, 100, 120, 158,
158, 158, 203, 158, 179, 201, 56, 157, 157, 237, 174, 112, 63, 36, 17,
178, 178, 178, 221, 187, 142, 59, 17, 17, 135, 178, 179, 189, 58, 59,
54, 242, 242, 236, 176, 171, 171, 107, 54, 54, 79, 224, 91, 126, 75,
95, 95, 208, 252, 95, 128, 251, 94, 126, 95, 254, 159, 254, 23, 19,
155, 155, 132, 95, 95, 95, 23, 128, 19, 155, 245, 52, 125, 95, 23,
128, 19, 51, 51, 245, 16, 132, 23, 7, 128, 19, 51, 51, 76, 222,
23, 7, 128, 19, 44, 51, 114, 64, 160, 7, 7, 7, 35, 44, 44,
16, 219, 218, 235, 126, 247, 28, 108, 179, 138, 245, 173, 99, 220, 176,
204, 239, 203, 144, 111, 208, 188, 5, 152, 167, 144, 188, 38, 244, 195,
52, 171, 29, 151, 6, 100, 152, 131, 44, 141, 157, 186, 203, 90, 144,
20, 144, 235, 238, 124, 13, 126, 29, 175, 251, 86, 14, 48, 31, 169,
179, 46, 126, 55, 223, 74, 182, 93, 216, 65, 137, 111, 37, 51, 174,
78, 93, 143, 65, 235, 50, 45, 161, 129, 174, 93, 224, 104, 75, 23,
99, 129, 78, 78, 82, 155, 87, 181, 5, 20, 131, 136, 148, 206, 116,
165, 21, 225, 65, 81, 130, 226, 208, 21, 21, 119, 9, 137, 136, 141,
136, 31, 21, 9, 9, 9, 163, 78, 116, 249, 223, 127, 80, 235, 24,
235, 248, 241, 52, 118, 250, 246, 220, 135, 186, 7, 145, 192, 202, 117,
174, 66, 162, 160, 57, 78, 192, 81, 179, 206, 227, 160, 8, 73, 103,
78, 140, 130, 198, 181, 73, 66, 247, 140, 225, 230, 132, 165, 99, 79,
202, 32, 161, 20, 250, 21, 21, 20, 20, 115, 131, 99, 78, 171, 115,
167, 223, 69, 69, 69, 235, 90, 201, 205, 85, 118, 114, 208, 24, 185,
121, 225, 103, 87, 202, 246, 252, 187, 240, 192, 87, 118, 202, 135, 87,
61, 84, 79, 66, 192, 135, 86, 135, 160, 99, 73, 192, 150, 190, 236,
147, 25, 65, 163, 102, 42, 148, 62, 205, 181, 46, 240, 41, 115, 81,
226, 116, 178, 148, 10, 190, 89, 208, 69, 208, 175, 64, 83, 85, 223,
85, 127, 29, 232, 60, 201, 162, 114, 157, 208, 135, 176, 61, 59, 54,
157, 205, 88, 206, 185, 58, 107, 105, 102, 140, 247, 232, 187, 42, 240,
120, 150, 135, 104, 224, 176, 0, 73, 236, 79, 200, 117, 163, 39, 57,
65, 17, 16, 225, 193, 62, 195, 50, 190, 232, 202, 141, 166, 69, 249,
110, 167, 176, 166, 205, 167, 80, 222, 179, 117, 156, 63, 224, 167, 157,
92, 179, 142, 59, 54, 17, 116, 135, 118, 189, 58, 59, 225, 202, 97,
208, 185, 189, 58, 54, 236, 2, 157, 208, 187, 171, 105, 10, 79, 183,
59, 105, 160, 0, 200, 240, 225, 150, 119, 102, 210, 131, 40, 11, 179,
222, 222, 208, 127, 161, 239, 233, 131, 218, 238, 208, 86, 28, 39, 238,
179, 217, 114, 64, 52, 138, 219, 36, 59, 60, 162, 106, 128, 0, 204,
249, 59, 162, 56, 118, 128, 103, 142, 61, 59, 233, 36, 195, 78, 170,
48, 170, 241, 34, 54, 54, 55, 55, 35, 121, 121, 107, 54, 54, 188,
75, 75, 75, 126, 245, 89, 214, 151, 123, 94, 126, 126, 95, 95, 159,
4, 123, 251, 94, 126, 126, 126, 159, 4, 31, 251, 251, 132, 126, 126,
254, 4, 31, 27, 251, 251, 6, 6, 222, 4, 31, 31, 27, 251, 251,
245, 114, 23, 31, 27, 27, 27, 251, 51, 245, 23, 23, 31, 27, 27,
27, 19, 114, 203, 218, 204, 204, 126, 222, 179, 162, 1, 139, 218, 218,
38, 95, 98, 179, 1, 139, 221, 38, 38, 95, 69, 158, 123, 144, 221,
204, 191, 191, 69, 198, 208, 144, 144, 218, 218, 191, 221, 95, 109, 208,
144, 168, 6, 218, 218, 89, 130, 46, 172, 112, 185, 152, 218, 244, 4,
173, 172, 181, 187, 185, 37, 208, 122, 92, 186, 186, 248, 248, 216, 69,
67, 111, 152, 216, 248, 248, 208, 208, 21, 137, 138, 152, 152, 248, 248,
248, 21, 9, 137, 138, 138, 136, 136, 248, 21, 13, 9, 138, 136, 136,
136, 136, 165, 13, 13, 9, 130, 136, 136, 136, 165, 13, 13, 13, 28,
136, 136, 136, 46, 46, 46, 28, 28, 28, 28, 141, 219, 108, 124, 50,
235, 235, 235, 235, 153, 209, 134, 213, 220, 220, 220, 216, 49, 3, 117,
117, 147, 147, 220, 216, 25, 3, 161, 161, 174, 174, 210, 216, 181, 45,
133, 161, 161, 174, 210, 93, 165, 5, 20, 133, 161, 161, 174, 93, 165,
5, 20, 133, 161, 161, 116, 93, 165, 37, 37, 37, 20, 133, 133, 129,
38, 38, 70, 70, 124, 50, 50, 235, 48, 217, 85, 167, 80, 213, 213,
24, 48, 60, 195, 195, 214, 214, 147, 252, 187, 63, 97, 227, 241, 246,
212, 210, 109, 199, 97, 227, 227, 78, 143, 206, 109, 15, 43, 81, 227,
227, 192, 206, 175, 169, 41, 81, 81, 81, 81, 78, 173, 169, 8, 33,
163, 81, 81, 81, 37, 1, 191, 70, 70, 124, 124, 69, 188, 38, 217,
166, 167, 167, 80, 29, 48, 112, 249, 201, 127, 64, 214, 255, 48, 142,
113, 72, 17, 207, 246, 212, 187, 185, 63, 66, 227, 197, 192, 212, 187,
84, 63, 72, 227, 227, 227, 212, 109, 15, 10, 102, 148, 227, 227, 78,
175, 53, 41, 32, 32, 81, 62, 81, 110, 104, 70, 191, 189, 70, 70,
69, 29, 159, 158, 89, 70, 166, 167, 80, 213, 38, 217, 249, 85, 85,
223, 80, 151, 48, 112, 201, 162, 178, 246, 212, 93, 112, 142, 36, 72,
17, 197, 207, 48, 187, 58, 72, 66, 66, 242, 197, 187, 187, 10, 105,
79, 66, 148, 197, 176, 11, 14, 18, 79, 79, 148, 148, 50, 226, 254,
110, 110, 50, 170, 89, 3, 61, 165, 89, 110, 166, 70, 89, 228, 37,
208, 89, 166, 166, 166, 110, 73, 179, 56, 249, 249, 85, 56, 56, 5,
179, 112, 249, 201, 205, 205, 178, 20, 187, 112, 142, 36, 205, 205, 135,
110, 187, 185, 113, 36, 72, 72, 135, 176, 168, 61, 59, 54, 79, 79,
68
};
#endif // AV1_COMMON_PC_WIENER_FILTERS_H_