1*09537850SAkhilesh Sanikop // Copyright 2019 The libgav1 Authors 2*09537850SAkhilesh Sanikop // 3*09537850SAkhilesh Sanikop // Licensed under the Apache License, Version 2.0 (the "License"); 4*09537850SAkhilesh Sanikop // you may not use this file except in compliance with the License. 5*09537850SAkhilesh Sanikop // You may obtain a copy of the License at 6*09537850SAkhilesh Sanikop // 7*09537850SAkhilesh Sanikop // http://www.apache.org/licenses/LICENSE-2.0 8*09537850SAkhilesh Sanikop // 9*09537850SAkhilesh Sanikop // Unless required by applicable law or agreed to in writing, software 10*09537850SAkhilesh Sanikop // distributed under the License is distributed on an "AS IS" BASIS, 11*09537850SAkhilesh Sanikop // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*09537850SAkhilesh Sanikop // See the License for the specific language governing permissions and 13*09537850SAkhilesh Sanikop // limitations under the License. 14*09537850SAkhilesh Sanikop 15*09537850SAkhilesh Sanikop #include "src/utils/constants.h" 16*09537850SAkhilesh Sanikop 17*09537850SAkhilesh Sanikop namespace libgav1 { 18*09537850SAkhilesh Sanikop 19*09537850SAkhilesh Sanikop const uint8_t k4x4WidthLog2[kMaxBlockSizes] = {0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 20*09537850SAkhilesh Sanikop 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5}; 21*09537850SAkhilesh Sanikop 22*09537850SAkhilesh Sanikop const uint8_t k4x4HeightLog2[kMaxBlockSizes] = { 23*09537850SAkhilesh Sanikop 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 3, 4, 1, 2, 3, 4, 2, 3, 4, 5, 4, 5}; 24*09537850SAkhilesh Sanikop 25*09537850SAkhilesh Sanikop const uint8_t kNum4x4BlocksWide[kMaxBlockSizes] = { 26*09537850SAkhilesh Sanikop 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 8, 8, 8, 8, 16, 16, 16, 16, 32, 32}; 27*09537850SAkhilesh Sanikop 28*09537850SAkhilesh Sanikop const uint8_t kNum4x4BlocksHigh[kMaxBlockSizes] = { 29*09537850SAkhilesh Sanikop 1, 2, 4, 1, 2, 4, 8, 1, 2, 4, 8, 16, 2, 4, 8, 16, 4, 8, 16, 32, 16, 32}; 30*09537850SAkhilesh Sanikop 31*09537850SAkhilesh Sanikop const uint8_t kBlockWidthPixels[kMaxBlockSizes] = { 32*09537850SAkhilesh Sanikop 4, 4, 4, 8, 8, 8, 8, 16, 16, 16, 16, 33*09537850SAkhilesh Sanikop 16, 32, 32, 32, 32, 64, 64, 64, 64, 128, 128}; 34*09537850SAkhilesh Sanikop 35*09537850SAkhilesh Sanikop const uint8_t kBlockHeightPixels[kMaxBlockSizes] = { 36*09537850SAkhilesh Sanikop 4, 8, 16, 4, 8, 16, 32, 4, 8, 16, 32, 37*09537850SAkhilesh Sanikop 64, 8, 16, 32, 64, 16, 32, 64, 128, 64, 128}; 38*09537850SAkhilesh Sanikop 39*09537850SAkhilesh Sanikop // 9.3 -- Partition_Subsize[] 40*09537850SAkhilesh Sanikop const BlockSize kSubSize[kMaxPartitionTypes][kMaxBlockSizes] = { 41*09537850SAkhilesh Sanikop // kPartitionNone 42*09537850SAkhilesh Sanikop {kBlock4x4, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock8x8, 43*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock16x16, 44*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock32x32, 45*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock64x64, kBlockInvalid, 46*09537850SAkhilesh Sanikop kBlockInvalid, kBlock128x128}, 47*09537850SAkhilesh Sanikop // kPartitionHorizontal 48*09537850SAkhilesh Sanikop {kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock8x4, 49*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock16x8, 50*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock32x16, 51*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock64x32, kBlockInvalid, 52*09537850SAkhilesh Sanikop kBlockInvalid, kBlock128x64}, 53*09537850SAkhilesh Sanikop // kPartitionVertical 54*09537850SAkhilesh Sanikop {kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock4x8, 55*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock8x16, 56*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock16x32, 57*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock32x64, kBlockInvalid, 58*09537850SAkhilesh Sanikop kBlockInvalid, kBlock64x128}, 59*09537850SAkhilesh Sanikop // kPartitionSplit 60*09537850SAkhilesh Sanikop {kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock4x4, 61*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock8x8, 62*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock16x16, 63*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock32x32, kBlockInvalid, 64*09537850SAkhilesh Sanikop kBlockInvalid, kBlock64x64}, 65*09537850SAkhilesh Sanikop // kPartitionHorizontalWithTopSplit 66*09537850SAkhilesh Sanikop {kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock8x4, 67*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock16x8, 68*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock32x16, 69*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock64x32, kBlockInvalid, 70*09537850SAkhilesh Sanikop kBlockInvalid, kBlock128x64}, 71*09537850SAkhilesh Sanikop // kPartitionHorizontalWithBottomSplit 72*09537850SAkhilesh Sanikop {kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock8x4, 73*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock16x8, 74*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock32x16, 75*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock64x32, kBlockInvalid, 76*09537850SAkhilesh Sanikop kBlockInvalid, kBlock128x64}, 77*09537850SAkhilesh Sanikop // kPartitionVerticalWithLeftSplit 78*09537850SAkhilesh Sanikop {kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock4x8, 79*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock8x16, 80*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock16x32, 81*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock32x64, kBlockInvalid, 82*09537850SAkhilesh Sanikop kBlockInvalid, kBlock64x128}, 83*09537850SAkhilesh Sanikop // kPartitionVerticalWithRightSplit 84*09537850SAkhilesh Sanikop {kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock4x8, 85*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock8x16, 86*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock16x32, 87*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock32x64, kBlockInvalid, 88*09537850SAkhilesh Sanikop kBlockInvalid, kBlock64x128}, 89*09537850SAkhilesh Sanikop // kPartitionHorizontal4 90*09537850SAkhilesh Sanikop {kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, 91*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock16x4, 92*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock32x8, 93*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock64x16, kBlockInvalid, 94*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid}, 95*09537850SAkhilesh Sanikop // kPartitionVertical4 96*09537850SAkhilesh Sanikop {kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, 97*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock4x16, 98*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock8x32, 99*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid, kBlockInvalid, kBlock16x64, kBlockInvalid, 100*09537850SAkhilesh Sanikop kBlockInvalid, kBlockInvalid}}; 101*09537850SAkhilesh Sanikop 102*09537850SAkhilesh Sanikop // 5.11.38 (implemented as a simple look up. first dimension is block size, 103*09537850SAkhilesh Sanikop // second and third are subsampling_x and subsampling_y). 104*09537850SAkhilesh Sanikop const BlockSize kPlaneResidualSize[kMaxBlockSizes][2][2] = { 105*09537850SAkhilesh Sanikop {{kBlock4x4, kBlock4x4}, {kBlock4x4, kBlock4x4}}, 106*09537850SAkhilesh Sanikop {{kBlock4x8, kBlock4x4}, {kBlockInvalid, kBlock4x4}}, 107*09537850SAkhilesh Sanikop {{kBlock4x16, kBlock4x8}, {kBlockInvalid, kBlock4x8}}, 108*09537850SAkhilesh Sanikop {{kBlock8x4, kBlockInvalid}, {kBlock4x4, kBlock4x4}}, 109*09537850SAkhilesh Sanikop {{kBlock8x8, kBlock8x4}, {kBlock4x8, kBlock4x4}}, 110*09537850SAkhilesh Sanikop {{kBlock8x16, kBlock8x8}, {kBlockInvalid, kBlock4x8}}, 111*09537850SAkhilesh Sanikop {{kBlock8x32, kBlock8x16}, {kBlockInvalid, kBlock4x16}}, 112*09537850SAkhilesh Sanikop {{kBlock16x4, kBlockInvalid}, {kBlock8x4, kBlock8x4}}, 113*09537850SAkhilesh Sanikop {{kBlock16x8, kBlockInvalid}, {kBlock8x8, kBlock8x4}}, 114*09537850SAkhilesh Sanikop {{kBlock16x16, kBlock16x8}, {kBlock8x16, kBlock8x8}}, 115*09537850SAkhilesh Sanikop {{kBlock16x32, kBlock16x16}, {kBlockInvalid, kBlock8x16}}, 116*09537850SAkhilesh Sanikop {{kBlock16x64, kBlock16x32}, {kBlockInvalid, kBlock8x32}}, 117*09537850SAkhilesh Sanikop {{kBlock32x8, kBlockInvalid}, {kBlock16x8, kBlock16x4}}, 118*09537850SAkhilesh Sanikop {{kBlock32x16, kBlockInvalid}, {kBlock16x16, kBlock16x8}}, 119*09537850SAkhilesh Sanikop {{kBlock32x32, kBlock32x16}, {kBlock16x32, kBlock16x16}}, 120*09537850SAkhilesh Sanikop {{kBlock32x64, kBlock32x32}, {kBlockInvalid, kBlock16x32}}, 121*09537850SAkhilesh Sanikop {{kBlock64x16, kBlockInvalid}, {kBlock32x16, kBlock32x8}}, 122*09537850SAkhilesh Sanikop {{kBlock64x32, kBlockInvalid}, {kBlock32x32, kBlock32x16}}, 123*09537850SAkhilesh Sanikop {{kBlock64x64, kBlock64x32}, {kBlock32x64, kBlock32x32}}, 124*09537850SAkhilesh Sanikop {{kBlock64x128, kBlock64x64}, {kBlockInvalid, kBlock32x64}}, 125*09537850SAkhilesh Sanikop {{kBlock128x64, kBlockInvalid}, {kBlock64x64, kBlock64x32}}, 126*09537850SAkhilesh Sanikop {{kBlock128x128, kBlock128x64}, {kBlock64x128, kBlock64x64}}}; 127*09537850SAkhilesh Sanikop 128*09537850SAkhilesh Sanikop const int16_t kProjectionMvDivisionLookup[kMaxFrameDistance + 1] = { 129*09537850SAkhilesh Sanikop 0, 16384, 8192, 5461, 4096, 3276, 2730, 2340, 2048, 1820, 1638, 130*09537850SAkhilesh Sanikop 1489, 1365, 1260, 1170, 1092, 1024, 963, 910, 862, 819, 780, 131*09537850SAkhilesh Sanikop 744, 712, 682, 655, 630, 606, 585, 564, 546, 528}; 132*09537850SAkhilesh Sanikop 133*09537850SAkhilesh Sanikop const uint8_t kTransformWidth[kNumTransformSizes] = { 134*09537850SAkhilesh Sanikop 4, 4, 4, 8, 8, 8, 8, 16, 16, 16, 16, 16, 32, 32, 32, 32, 64, 64, 64}; 135*09537850SAkhilesh Sanikop 136*09537850SAkhilesh Sanikop const uint8_t kTransformHeight[kNumTransformSizes] = { 137*09537850SAkhilesh Sanikop 4, 8, 16, 4, 8, 16, 32, 4, 8, 16, 32, 64, 8, 16, 32, 64, 16, 32, 64}; 138*09537850SAkhilesh Sanikop 139*09537850SAkhilesh Sanikop const uint8_t kTransformWidth4x4[kNumTransformSizes] = { 140*09537850SAkhilesh Sanikop 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 8, 8, 8, 8, 16, 16, 16}; 141*09537850SAkhilesh Sanikop 142*09537850SAkhilesh Sanikop const uint8_t kTransformHeight4x4[kNumTransformSizes] = { 143*09537850SAkhilesh Sanikop 1, 2, 4, 1, 2, 4, 8, 1, 2, 4, 8, 16, 2, 4, 8, 16, 4, 8, 16}; 144*09537850SAkhilesh Sanikop 145*09537850SAkhilesh Sanikop const uint8_t kTransformWidthLog2[kNumTransformSizes] = { 146*09537850SAkhilesh Sanikop 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6}; 147*09537850SAkhilesh Sanikop 148*09537850SAkhilesh Sanikop const uint8_t kTransformHeightLog2[kNumTransformSizes] = { 149*09537850SAkhilesh Sanikop 2, 3, 4, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 4, 5, 6}; 150*09537850SAkhilesh Sanikop 151*09537850SAkhilesh Sanikop // 9.3 -- Split_Tx_Size[] 152*09537850SAkhilesh Sanikop const TransformSize kSplitTransformSize[kNumTransformSizes] = { 153*09537850SAkhilesh Sanikop kTransformSize4x4, kTransformSize4x4, kTransformSize4x8, 154*09537850SAkhilesh Sanikop kTransformSize4x4, kTransformSize4x4, kTransformSize8x8, 155*09537850SAkhilesh Sanikop kTransformSize8x16, kTransformSize8x4, kTransformSize8x8, 156*09537850SAkhilesh Sanikop kTransformSize8x8, kTransformSize16x16, kTransformSize16x32, 157*09537850SAkhilesh Sanikop kTransformSize16x8, kTransformSize16x16, kTransformSize16x16, 158*09537850SAkhilesh Sanikop kTransformSize32x32, kTransformSize32x16, kTransformSize32x32, 159*09537850SAkhilesh Sanikop kTransformSize32x32}; 160*09537850SAkhilesh Sanikop 161*09537850SAkhilesh Sanikop // Square transform of size min(w,h). 162*09537850SAkhilesh Sanikop const TransformSize kTransformSizeSquareMin[kNumTransformSizes] = { 163*09537850SAkhilesh Sanikop kTransformSize4x4, kTransformSize4x4, kTransformSize4x4, 164*09537850SAkhilesh Sanikop kTransformSize4x4, kTransformSize8x8, kTransformSize8x8, 165*09537850SAkhilesh Sanikop kTransformSize8x8, kTransformSize4x4, kTransformSize8x8, 166*09537850SAkhilesh Sanikop kTransformSize16x16, kTransformSize16x16, kTransformSize16x16, 167*09537850SAkhilesh Sanikop kTransformSize8x8, kTransformSize16x16, kTransformSize32x32, 168*09537850SAkhilesh Sanikop kTransformSize32x32, kTransformSize16x16, kTransformSize32x32, 169*09537850SAkhilesh Sanikop kTransformSize64x64}; 170*09537850SAkhilesh Sanikop 171*09537850SAkhilesh Sanikop // Square transform of size max(w,h). 172*09537850SAkhilesh Sanikop const TransformSize kTransformSizeSquareMax[kNumTransformSizes] = { 173*09537850SAkhilesh Sanikop kTransformSize4x4, kTransformSize8x8, kTransformSize16x16, 174*09537850SAkhilesh Sanikop kTransformSize8x8, kTransformSize8x8, kTransformSize16x16, 175*09537850SAkhilesh Sanikop kTransformSize32x32, kTransformSize16x16, kTransformSize16x16, 176*09537850SAkhilesh Sanikop kTransformSize16x16, kTransformSize32x32, kTransformSize64x64, 177*09537850SAkhilesh Sanikop kTransformSize32x32, kTransformSize32x32, kTransformSize32x32, 178*09537850SAkhilesh Sanikop kTransformSize64x64, kTransformSize64x64, kTransformSize64x64, 179*09537850SAkhilesh Sanikop kTransformSize64x64}; 180*09537850SAkhilesh Sanikop 181*09537850SAkhilesh Sanikop const uint8_t kNumTransformTypesInSet[kNumTransformSets] = {1, 7, 5, 16, 12, 2}; 182*09537850SAkhilesh Sanikop 183*09537850SAkhilesh Sanikop const uint8_t kSgrProjParams[1 << kSgrProjParamsBits][4] = { 184*09537850SAkhilesh Sanikop {2, 12, 1, 4}, {2, 15, 1, 6}, {2, 18, 1, 8}, {2, 21, 1, 9}, 185*09537850SAkhilesh Sanikop {2, 24, 1, 10}, {2, 29, 1, 11}, {2, 36, 1, 12}, {2, 45, 1, 13}, 186*09537850SAkhilesh Sanikop {2, 56, 1, 14}, {2, 68, 1, 15}, {0, 0, 1, 5}, {0, 0, 1, 8}, 187*09537850SAkhilesh Sanikop {0, 0, 1, 11}, {0, 0, 1, 14}, {2, 30, 0, 0}, {2, 75, 0, 0}}; 188*09537850SAkhilesh Sanikop 189*09537850SAkhilesh Sanikop const int8_t kSgrProjMultiplierMin[2] = {-96, -32}; 190*09537850SAkhilesh Sanikop 191*09537850SAkhilesh Sanikop const int8_t kSgrProjMultiplierMax[2] = {31, 95}; 192*09537850SAkhilesh Sanikop 193*09537850SAkhilesh Sanikop const int8_t kWienerTapsMin[3] = {-5, -23, -17}; 194*09537850SAkhilesh Sanikop 195*09537850SAkhilesh Sanikop const int8_t kWienerTapsMax[3] = {10, 8, 46}; 196*09537850SAkhilesh Sanikop 197*09537850SAkhilesh Sanikop // This was modified from Upscale_Filter as defined in AV1 Section 7.16, in 198*09537850SAkhilesh Sanikop // order to support 16-bit packed NEON operations. 199*09537850SAkhilesh Sanikop // The sign of each tap is: - + - + + - + - 200*09537850SAkhilesh Sanikop alignas(16) const uint8_t 201*09537850SAkhilesh Sanikop kUpscaleFilterUnsigned[kSuperResFilterShifts][kSuperResFilterTaps] = { 202*09537850SAkhilesh Sanikop {0, 0, 0, 128, 0, 0, 0, 0}, {0, 0, 1, 128, 2, 1, 0, 0}, 203*09537850SAkhilesh Sanikop {0, 1, 3, 127, 4, 2, 1, 0}, {0, 1, 4, 127, 6, 3, 1, 0}, 204*09537850SAkhilesh Sanikop {0, 2, 6, 126, 8, 3, 1, 0}, {0, 2, 7, 125, 11, 4, 1, 0}, 205*09537850SAkhilesh Sanikop {1, 2, 8, 125, 13, 5, 2, 0}, {1, 3, 9, 124, 15, 6, 2, 0}, 206*09537850SAkhilesh Sanikop {1, 3, 10, 123, 18, 6, 2, 1}, {1, 3, 11, 122, 20, 7, 3, 1}, 207*09537850SAkhilesh Sanikop {1, 4, 12, 121, 22, 8, 3, 1}, {1, 4, 13, 120, 25, 9, 3, 1}, 208*09537850SAkhilesh Sanikop {1, 4, 14, 118, 28, 9, 3, 1}, {1, 4, 15, 117, 30, 10, 4, 1}, 209*09537850SAkhilesh Sanikop {1, 5, 16, 116, 32, 11, 4, 1}, {1, 5, 16, 114, 35, 12, 4, 1}, 210*09537850SAkhilesh Sanikop {1, 5, 17, 112, 38, 12, 4, 1}, {1, 5, 18, 111, 40, 13, 5, 1}, 211*09537850SAkhilesh Sanikop {1, 5, 18, 109, 43, 14, 5, 1}, {1, 6, 19, 107, 45, 14, 5, 1}, 212*09537850SAkhilesh Sanikop {1, 6, 19, 105, 48, 15, 5, 1}, {1, 6, 19, 103, 51, 16, 5, 1}, 213*09537850SAkhilesh Sanikop {1, 6, 20, 101, 53, 16, 6, 1}, {1, 6, 20, 99, 56, 17, 6, 1}, 214*09537850SAkhilesh Sanikop {1, 6, 20, 97, 58, 17, 6, 1}, {1, 6, 20, 95, 61, 18, 6, 1}, 215*09537850SAkhilesh Sanikop {2, 7, 20, 93, 64, 18, 6, 2}, {2, 7, 20, 91, 66, 19, 6, 1}, 216*09537850SAkhilesh Sanikop {2, 7, 20, 88, 69, 19, 6, 1}, {2, 7, 20, 86, 71, 19, 6, 1}, 217*09537850SAkhilesh Sanikop {2, 7, 20, 84, 74, 20, 7, 2}, {2, 7, 20, 81, 76, 20, 7, 1}, 218*09537850SAkhilesh Sanikop {2, 7, 20, 79, 79, 20, 7, 2}, {1, 7, 20, 76, 81, 20, 7, 2}, 219*09537850SAkhilesh Sanikop {2, 7, 20, 74, 84, 20, 7, 2}, {1, 6, 19, 71, 86, 20, 7, 2}, 220*09537850SAkhilesh Sanikop {1, 6, 19, 69, 88, 20, 7, 2}, {1, 6, 19, 66, 91, 20, 7, 2}, 221*09537850SAkhilesh Sanikop {2, 6, 18, 64, 93, 20, 7, 2}, {1, 6, 18, 61, 95, 20, 6, 1}, 222*09537850SAkhilesh Sanikop {1, 6, 17, 58, 97, 20, 6, 1}, {1, 6, 17, 56, 99, 20, 6, 1}, 223*09537850SAkhilesh Sanikop {1, 6, 16, 53, 101, 20, 6, 1}, {1, 5, 16, 51, 103, 19, 6, 1}, 224*09537850SAkhilesh Sanikop {1, 5, 15, 48, 105, 19, 6, 1}, {1, 5, 14, 45, 107, 19, 6, 1}, 225*09537850SAkhilesh Sanikop {1, 5, 14, 43, 109, 18, 5, 1}, {1, 5, 13, 40, 111, 18, 5, 1}, 226*09537850SAkhilesh Sanikop {1, 4, 12, 38, 112, 17, 5, 1}, {1, 4, 12, 35, 114, 16, 5, 1}, 227*09537850SAkhilesh Sanikop {1, 4, 11, 32, 116, 16, 5, 1}, {1, 4, 10, 30, 117, 15, 4, 1}, 228*09537850SAkhilesh Sanikop {1, 3, 9, 28, 118, 14, 4, 1}, {1, 3, 9, 25, 120, 13, 4, 1}, 229*09537850SAkhilesh Sanikop {1, 3, 8, 22, 121, 12, 4, 1}, {1, 3, 7, 20, 122, 11, 3, 1}, 230*09537850SAkhilesh Sanikop {1, 2, 6, 18, 123, 10, 3, 1}, {0, 2, 6, 15, 124, 9, 3, 1}, 231*09537850SAkhilesh Sanikop {0, 2, 5, 13, 125, 8, 2, 1}, {0, 1, 4, 11, 125, 7, 2, 0}, 232*09537850SAkhilesh Sanikop {0, 1, 3, 8, 126, 6, 2, 0}, {0, 1, 3, 6, 127, 4, 1, 0}, 233*09537850SAkhilesh Sanikop {0, 1, 2, 4, 127, 3, 1, 0}, {0, 0, 1, 2, 128, 1, 0, 0}, 234*09537850SAkhilesh Sanikop }; 235*09537850SAkhilesh Sanikop 236*09537850SAkhilesh Sanikop alignas(8) const int8_t 237*09537850SAkhilesh Sanikop kWarpedFilters8[3 * kWarpedPixelPrecisionShifts + 1][8] = { 238*09537850SAkhilesh Sanikop // [-1, 0). 239*09537850SAkhilesh Sanikop {0, 0, 127, 1, 0, 0, 0, 0}, 240*09537850SAkhilesh Sanikop {0, -1, 127, 2, 0, 0, 0, 0}, 241*09537850SAkhilesh Sanikop {1, -3, 127, 4, -1, 0, 0, 0}, 242*09537850SAkhilesh Sanikop {1, -4, 126, 6, -2, 1, 0, 0}, 243*09537850SAkhilesh Sanikop {1, -5, 126, 8, -3, 1, 0, 0}, 244*09537850SAkhilesh Sanikop {1, -6, 125, 11, -4, 1, 0, 0}, 245*09537850SAkhilesh Sanikop {1, -7, 124, 13, -4, 1, 0, 0}, 246*09537850SAkhilesh Sanikop {2, -8, 123, 15, -5, 1, 0, 0}, 247*09537850SAkhilesh Sanikop {2, -9, 122, 18, -6, 1, 0, 0}, 248*09537850SAkhilesh Sanikop {2, -10, 121, 20, -6, 1, 0, 0}, 249*09537850SAkhilesh Sanikop {2, -11, 120, 22, -7, 2, 0, 0}, 250*09537850SAkhilesh Sanikop {2, -12, 119, 25, -8, 2, 0, 0}, 251*09537850SAkhilesh Sanikop {3, -13, 117, 27, -8, 2, 0, 0}, 252*09537850SAkhilesh Sanikop {3, -13, 116, 29, -9, 2, 0, 0}, 253*09537850SAkhilesh Sanikop {3, -14, 114, 32, -10, 3, 0, 0}, 254*09537850SAkhilesh Sanikop {3, -15, 113, 35, -10, 2, 0, 0}, 255*09537850SAkhilesh Sanikop {3, -15, 111, 37, -11, 3, 0, 0}, 256*09537850SAkhilesh Sanikop {3, -16, 109, 40, -11, 3, 0, 0}, 257*09537850SAkhilesh Sanikop {3, -16, 108, 42, -12, 3, 0, 0}, 258*09537850SAkhilesh Sanikop {4, -17, 106, 45, -13, 3, 0, 0}, 259*09537850SAkhilesh Sanikop {4, -17, 104, 47, -13, 3, 0, 0}, 260*09537850SAkhilesh Sanikop {4, -17, 102, 50, -14, 3, 0, 0}, 261*09537850SAkhilesh Sanikop {4, -17, 100, 52, -14, 3, 0, 0}, 262*09537850SAkhilesh Sanikop {4, -18, 98, 55, -15, 4, 0, 0}, 263*09537850SAkhilesh Sanikop {4, -18, 96, 58, -15, 3, 0, 0}, 264*09537850SAkhilesh Sanikop {4, -18, 94, 60, -16, 4, 0, 0}, 265*09537850SAkhilesh Sanikop {4, -18, 91, 63, -16, 4, 0, 0}, 266*09537850SAkhilesh Sanikop {4, -18, 89, 65, -16, 4, 0, 0}, 267*09537850SAkhilesh Sanikop {4, -18, 87, 68, -17, 4, 0, 0}, 268*09537850SAkhilesh Sanikop {4, -18, 85, 70, -17, 4, 0, 0}, 269*09537850SAkhilesh Sanikop {4, -18, 82, 73, -17, 4, 0, 0}, 270*09537850SAkhilesh Sanikop {4, -18, 80, 75, -17, 4, 0, 0}, 271*09537850SAkhilesh Sanikop {4, -18, 78, 78, -18, 4, 0, 0}, 272*09537850SAkhilesh Sanikop {4, -17, 75, 80, -18, 4, 0, 0}, 273*09537850SAkhilesh Sanikop {4, -17, 73, 82, -18, 4, 0, 0}, 274*09537850SAkhilesh Sanikop {4, -17, 70, 85, -18, 4, 0, 0}, 275*09537850SAkhilesh Sanikop {4, -17, 68, 87, -18, 4, 0, 0}, 276*09537850SAkhilesh Sanikop {4, -16, 65, 89, -18, 4, 0, 0}, 277*09537850SAkhilesh Sanikop {4, -16, 63, 91, -18, 4, 0, 0}, 278*09537850SAkhilesh Sanikop {4, -16, 60, 94, -18, 4, 0, 0}, 279*09537850SAkhilesh Sanikop {3, -15, 58, 96, -18, 4, 0, 0}, 280*09537850SAkhilesh Sanikop {4, -15, 55, 98, -18, 4, 0, 0}, 281*09537850SAkhilesh Sanikop {3, -14, 52, 100, -17, 4, 0, 0}, 282*09537850SAkhilesh Sanikop {3, -14, 50, 102, -17, 4, 0, 0}, 283*09537850SAkhilesh Sanikop {3, -13, 47, 104, -17, 4, 0, 0}, 284*09537850SAkhilesh Sanikop {3, -13, 45, 106, -17, 4, 0, 0}, 285*09537850SAkhilesh Sanikop {3, -12, 42, 108, -16, 3, 0, 0}, 286*09537850SAkhilesh Sanikop {3, -11, 40, 109, -16, 3, 0, 0}, 287*09537850SAkhilesh Sanikop {3, -11, 37, 111, -15, 3, 0, 0}, 288*09537850SAkhilesh Sanikop {2, -10, 35, 113, -15, 3, 0, 0}, 289*09537850SAkhilesh Sanikop {3, -10, 32, 114, -14, 3, 0, 0}, 290*09537850SAkhilesh Sanikop {2, -9, 29, 116, -13, 3, 0, 0}, 291*09537850SAkhilesh Sanikop {2, -8, 27, 117, -13, 3, 0, 0}, 292*09537850SAkhilesh Sanikop {2, -8, 25, 119, -12, 2, 0, 0}, 293*09537850SAkhilesh Sanikop {2, -7, 22, 120, -11, 2, 0, 0}, 294*09537850SAkhilesh Sanikop {1, -6, 20, 121, -10, 2, 0, 0}, 295*09537850SAkhilesh Sanikop {1, -6, 18, 122, -9, 2, 0, 0}, 296*09537850SAkhilesh Sanikop {1, -5, 15, 123, -8, 2, 0, 0}, 297*09537850SAkhilesh Sanikop {1, -4, 13, 124, -7, 1, 0, 0}, 298*09537850SAkhilesh Sanikop {1, -4, 11, 125, -6, 1, 0, 0}, 299*09537850SAkhilesh Sanikop {1, -3, 8, 126, -5, 1, 0, 0}, 300*09537850SAkhilesh Sanikop {1, -2, 6, 126, -4, 1, 0, 0}, 301*09537850SAkhilesh Sanikop {0, -1, 4, 127, -3, 1, 0, 0}, 302*09537850SAkhilesh Sanikop {0, 0, 2, 127, -1, 0, 0, 0}, 303*09537850SAkhilesh Sanikop // [0, 1). 304*09537850SAkhilesh Sanikop {0, 0, 0, 127, 1, 0, 0, 0}, 305*09537850SAkhilesh Sanikop {0, 0, -1, 127, 2, 0, 0, 0}, 306*09537850SAkhilesh Sanikop {0, 1, -3, 127, 4, -2, 1, 0}, 307*09537850SAkhilesh Sanikop {0, 1, -5, 127, 6, -2, 1, 0}, 308*09537850SAkhilesh Sanikop {0, 2, -6, 126, 8, -3, 1, 0}, 309*09537850SAkhilesh Sanikop {-1, 2, -7, 126, 11, -4, 2, -1}, 310*09537850SAkhilesh Sanikop {-1, 3, -8, 125, 13, -5, 2, -1}, 311*09537850SAkhilesh Sanikop {-1, 3, -10, 124, 16, -6, 3, -1}, 312*09537850SAkhilesh Sanikop {-1, 4, -11, 123, 18, -7, 3, -1}, 313*09537850SAkhilesh Sanikop {-1, 4, -12, 122, 20, -7, 3, -1}, 314*09537850SAkhilesh Sanikop {-1, 4, -13, 121, 23, -8, 3, -1}, 315*09537850SAkhilesh Sanikop {-2, 5, -14, 120, 25, -9, 4, -1}, 316*09537850SAkhilesh Sanikop {-1, 5, -15, 119, 27, -10, 4, -1}, 317*09537850SAkhilesh Sanikop {-1, 5, -16, 118, 30, -11, 4, -1}, 318*09537850SAkhilesh Sanikop {-2, 6, -17, 116, 33, -12, 5, -1}, 319*09537850SAkhilesh Sanikop {-2, 6, -17, 114, 35, -12, 5, -1}, 320*09537850SAkhilesh Sanikop {-2, 6, -18, 113, 38, -13, 5, -1}, 321*09537850SAkhilesh Sanikop {-2, 7, -19, 111, 41, -14, 6, -2}, 322*09537850SAkhilesh Sanikop {-2, 7, -19, 110, 43, -15, 6, -2}, 323*09537850SAkhilesh Sanikop {-2, 7, -20, 108, 46, -15, 6, -2}, 324*09537850SAkhilesh Sanikop {-2, 7, -20, 106, 49, -16, 6, -2}, 325*09537850SAkhilesh Sanikop {-2, 7, -21, 104, 51, -16, 7, -2}, 326*09537850SAkhilesh Sanikop {-2, 7, -21, 102, 54, -17, 7, -2}, 327*09537850SAkhilesh Sanikop {-2, 8, -21, 100, 56, -18, 7, -2}, 328*09537850SAkhilesh Sanikop {-2, 8, -22, 98, 59, -18, 7, -2}, 329*09537850SAkhilesh Sanikop {-2, 8, -22, 96, 62, -19, 7, -2}, 330*09537850SAkhilesh Sanikop {-2, 8, -22, 94, 64, -19, 7, -2}, 331*09537850SAkhilesh Sanikop {-2, 8, -22, 91, 67, -20, 8, -2}, 332*09537850SAkhilesh Sanikop {-2, 8, -22, 89, 69, -20, 8, -2}, 333*09537850SAkhilesh Sanikop {-2, 8, -22, 87, 72, -21, 8, -2}, 334*09537850SAkhilesh Sanikop {-2, 8, -21, 84, 74, -21, 8, -2}, 335*09537850SAkhilesh Sanikop {-2, 8, -22, 82, 77, -21, 8, -2}, 336*09537850SAkhilesh Sanikop {-2, 8, -21, 79, 79, -21, 8, -2}, 337*09537850SAkhilesh Sanikop {-2, 8, -21, 77, 82, -22, 8, -2}, 338*09537850SAkhilesh Sanikop {-2, 8, -21, 74, 84, -21, 8, -2}, 339*09537850SAkhilesh Sanikop {-2, 8, -21, 72, 87, -22, 8, -2}, 340*09537850SAkhilesh Sanikop {-2, 8, -20, 69, 89, -22, 8, -2}, 341*09537850SAkhilesh Sanikop {-2, 8, -20, 67, 91, -22, 8, -2}, 342*09537850SAkhilesh Sanikop {-2, 7, -19, 64, 94, -22, 8, -2}, 343*09537850SAkhilesh Sanikop {-2, 7, -19, 62, 96, -22, 8, -2}, 344*09537850SAkhilesh Sanikop {-2, 7, -18, 59, 98, -22, 8, -2}, 345*09537850SAkhilesh Sanikop {-2, 7, -18, 56, 100, -21, 8, -2}, 346*09537850SAkhilesh Sanikop {-2, 7, -17, 54, 102, -21, 7, -2}, 347*09537850SAkhilesh Sanikop {-2, 7, -16, 51, 104, -21, 7, -2}, 348*09537850SAkhilesh Sanikop {-2, 6, -16, 49, 106, -20, 7, -2}, 349*09537850SAkhilesh Sanikop {-2, 6, -15, 46, 108, -20, 7, -2}, 350*09537850SAkhilesh Sanikop {-2, 6, -15, 43, 110, -19, 7, -2}, 351*09537850SAkhilesh Sanikop {-2, 6, -14, 41, 111, -19, 7, -2}, 352*09537850SAkhilesh Sanikop {-1, 5, -13, 38, 113, -18, 6, -2}, 353*09537850SAkhilesh Sanikop {-1, 5, -12, 35, 114, -17, 6, -2}, 354*09537850SAkhilesh Sanikop {-1, 5, -12, 33, 116, -17, 6, -2}, 355*09537850SAkhilesh Sanikop {-1, 4, -11, 30, 118, -16, 5, -1}, 356*09537850SAkhilesh Sanikop {-1, 4, -10, 27, 119, -15, 5, -1}, 357*09537850SAkhilesh Sanikop {-1, 4, -9, 25, 120, -14, 5, -2}, 358*09537850SAkhilesh Sanikop {-1, 3, -8, 23, 121, -13, 4, -1}, 359*09537850SAkhilesh Sanikop {-1, 3, -7, 20, 122, -12, 4, -1}, 360*09537850SAkhilesh Sanikop {-1, 3, -7, 18, 123, -11, 4, -1}, 361*09537850SAkhilesh Sanikop {-1, 3, -6, 16, 124, -10, 3, -1}, 362*09537850SAkhilesh Sanikop {-1, 2, -5, 13, 125, -8, 3, -1}, 363*09537850SAkhilesh Sanikop {-1, 2, -4, 11, 126, -7, 2, -1}, 364*09537850SAkhilesh Sanikop {0, 1, -3, 8, 126, -6, 2, 0}, 365*09537850SAkhilesh Sanikop {0, 1, -2, 6, 127, -5, 1, 0}, 366*09537850SAkhilesh Sanikop {0, 1, -2, 4, 127, -3, 1, 0}, 367*09537850SAkhilesh Sanikop {0, 0, 0, 2, 127, -1, 0, 0}, 368*09537850SAkhilesh Sanikop // [1, 2). 369*09537850SAkhilesh Sanikop {0, 0, 0, 1, 127, 0, 0, 0}, 370*09537850SAkhilesh Sanikop {0, 0, 0, -1, 127, 2, 0, 0}, 371*09537850SAkhilesh Sanikop {0, 0, 1, -3, 127, 4, -1, 0}, 372*09537850SAkhilesh Sanikop {0, 0, 1, -4, 126, 6, -2, 1}, 373*09537850SAkhilesh Sanikop {0, 0, 1, -5, 126, 8, -3, 1}, 374*09537850SAkhilesh Sanikop {0, 0, 1, -6, 125, 11, -4, 1}, 375*09537850SAkhilesh Sanikop {0, 0, 1, -7, 124, 13, -4, 1}, 376*09537850SAkhilesh Sanikop {0, 0, 2, -8, 123, 15, -5, 1}, 377*09537850SAkhilesh Sanikop {0, 0, 2, -9, 122, 18, -6, 1}, 378*09537850SAkhilesh Sanikop {0, 0, 2, -10, 121, 20, -6, 1}, 379*09537850SAkhilesh Sanikop {0, 0, 2, -11, 120, 22, -7, 2}, 380*09537850SAkhilesh Sanikop {0, 0, 2, -12, 119, 25, -8, 2}, 381*09537850SAkhilesh Sanikop {0, 0, 3, -13, 117, 27, -8, 2}, 382*09537850SAkhilesh Sanikop {0, 0, 3, -13, 116, 29, -9, 2}, 383*09537850SAkhilesh Sanikop {0, 0, 3, -14, 114, 32, -10, 3}, 384*09537850SAkhilesh Sanikop {0, 0, 3, -15, 113, 35, -10, 2}, 385*09537850SAkhilesh Sanikop {0, 0, 3, -15, 111, 37, -11, 3}, 386*09537850SAkhilesh Sanikop {0, 0, 3, -16, 109, 40, -11, 3}, 387*09537850SAkhilesh Sanikop {0, 0, 3, -16, 108, 42, -12, 3}, 388*09537850SAkhilesh Sanikop {0, 0, 4, -17, 106, 45, -13, 3}, 389*09537850SAkhilesh Sanikop {0, 0, 4, -17, 104, 47, -13, 3}, 390*09537850SAkhilesh Sanikop {0, 0, 4, -17, 102, 50, -14, 3}, 391*09537850SAkhilesh Sanikop {0, 0, 4, -17, 100, 52, -14, 3}, 392*09537850SAkhilesh Sanikop {0, 0, 4, -18, 98, 55, -15, 4}, 393*09537850SAkhilesh Sanikop {0, 0, 4, -18, 96, 58, -15, 3}, 394*09537850SAkhilesh Sanikop {0, 0, 4, -18, 94, 60, -16, 4}, 395*09537850SAkhilesh Sanikop {0, 0, 4, -18, 91, 63, -16, 4}, 396*09537850SAkhilesh Sanikop {0, 0, 4, -18, 89, 65, -16, 4}, 397*09537850SAkhilesh Sanikop {0, 0, 4, -18, 87, 68, -17, 4}, 398*09537850SAkhilesh Sanikop {0, 0, 4, -18, 85, 70, -17, 4}, 399*09537850SAkhilesh Sanikop {0, 0, 4, -18, 82, 73, -17, 4}, 400*09537850SAkhilesh Sanikop {0, 0, 4, -18, 80, 75, -17, 4}, 401*09537850SAkhilesh Sanikop {0, 0, 4, -18, 78, 78, -18, 4}, 402*09537850SAkhilesh Sanikop {0, 0, 4, -17, 75, 80, -18, 4}, 403*09537850SAkhilesh Sanikop {0, 0, 4, -17, 73, 82, -18, 4}, 404*09537850SAkhilesh Sanikop {0, 0, 4, -17, 70, 85, -18, 4}, 405*09537850SAkhilesh Sanikop {0, 0, 4, -17, 68, 87, -18, 4}, 406*09537850SAkhilesh Sanikop {0, 0, 4, -16, 65, 89, -18, 4}, 407*09537850SAkhilesh Sanikop {0, 0, 4, -16, 63, 91, -18, 4}, 408*09537850SAkhilesh Sanikop {0, 0, 4, -16, 60, 94, -18, 4}, 409*09537850SAkhilesh Sanikop {0, 0, 3, -15, 58, 96, -18, 4}, 410*09537850SAkhilesh Sanikop {0, 0, 4, -15, 55, 98, -18, 4}, 411*09537850SAkhilesh Sanikop {0, 0, 3, -14, 52, 100, -17, 4}, 412*09537850SAkhilesh Sanikop {0, 0, 3, -14, 50, 102, -17, 4}, 413*09537850SAkhilesh Sanikop {0, 0, 3, -13, 47, 104, -17, 4}, 414*09537850SAkhilesh Sanikop {0, 0, 3, -13, 45, 106, -17, 4}, 415*09537850SAkhilesh Sanikop {0, 0, 3, -12, 42, 108, -16, 3}, 416*09537850SAkhilesh Sanikop {0, 0, 3, -11, 40, 109, -16, 3}, 417*09537850SAkhilesh Sanikop {0, 0, 3, -11, 37, 111, -15, 3}, 418*09537850SAkhilesh Sanikop {0, 0, 2, -10, 35, 113, -15, 3}, 419*09537850SAkhilesh Sanikop {0, 0, 3, -10, 32, 114, -14, 3}, 420*09537850SAkhilesh Sanikop {0, 0, 2, -9, 29, 116, -13, 3}, 421*09537850SAkhilesh Sanikop {0, 0, 2, -8, 27, 117, -13, 3}, 422*09537850SAkhilesh Sanikop {0, 0, 2, -8, 25, 119, -12, 2}, 423*09537850SAkhilesh Sanikop {0, 0, 2, -7, 22, 120, -11, 2}, 424*09537850SAkhilesh Sanikop {0, 0, 1, -6, 20, 121, -10, 2}, 425*09537850SAkhilesh Sanikop {0, 0, 1, -6, 18, 122, -9, 2}, 426*09537850SAkhilesh Sanikop {0, 0, 1, -5, 15, 123, -8, 2}, 427*09537850SAkhilesh Sanikop {0, 0, 1, -4, 13, 124, -7, 1}, 428*09537850SAkhilesh Sanikop {0, 0, 1, -4, 11, 125, -6, 1}, 429*09537850SAkhilesh Sanikop {0, 0, 1, -3, 8, 126, -5, 1}, 430*09537850SAkhilesh Sanikop {0, 0, 1, -2, 6, 126, -4, 1}, 431*09537850SAkhilesh Sanikop {0, 0, 0, -1, 4, 127, -3, 1}, 432*09537850SAkhilesh Sanikop {0, 0, 0, 0, 2, 127, -1, 0}, 433*09537850SAkhilesh Sanikop // dummy, replicate row index 191. 434*09537850SAkhilesh Sanikop {0, 0, 0, 0, 2, 127, -1, 0}}; 435*09537850SAkhilesh Sanikop 436*09537850SAkhilesh Sanikop alignas(16) const int16_t 437*09537850SAkhilesh Sanikop kWarpedFilters[3 * kWarpedPixelPrecisionShifts + 1][8] = { 438*09537850SAkhilesh Sanikop // [-1, 0). 439*09537850SAkhilesh Sanikop {0, 0, 127, 1, 0, 0, 0, 0}, 440*09537850SAkhilesh Sanikop {0, -1, 127, 2, 0, 0, 0, 0}, 441*09537850SAkhilesh Sanikop {1, -3, 127, 4, -1, 0, 0, 0}, 442*09537850SAkhilesh Sanikop {1, -4, 126, 6, -2, 1, 0, 0}, 443*09537850SAkhilesh Sanikop {1, -5, 126, 8, -3, 1, 0, 0}, 444*09537850SAkhilesh Sanikop {1, -6, 125, 11, -4, 1, 0, 0}, 445*09537850SAkhilesh Sanikop {1, -7, 124, 13, -4, 1, 0, 0}, 446*09537850SAkhilesh Sanikop {2, -8, 123, 15, -5, 1, 0, 0}, 447*09537850SAkhilesh Sanikop {2, -9, 122, 18, -6, 1, 0, 0}, 448*09537850SAkhilesh Sanikop {2, -10, 121, 20, -6, 1, 0, 0}, 449*09537850SAkhilesh Sanikop {2, -11, 120, 22, -7, 2, 0, 0}, 450*09537850SAkhilesh Sanikop {2, -12, 119, 25, -8, 2, 0, 0}, 451*09537850SAkhilesh Sanikop {3, -13, 117, 27, -8, 2, 0, 0}, 452*09537850SAkhilesh Sanikop {3, -13, 116, 29, -9, 2, 0, 0}, 453*09537850SAkhilesh Sanikop {3, -14, 114, 32, -10, 3, 0, 0}, 454*09537850SAkhilesh Sanikop {3, -15, 113, 35, -10, 2, 0, 0}, 455*09537850SAkhilesh Sanikop {3, -15, 111, 37, -11, 3, 0, 0}, 456*09537850SAkhilesh Sanikop {3, -16, 109, 40, -11, 3, 0, 0}, 457*09537850SAkhilesh Sanikop {3, -16, 108, 42, -12, 3, 0, 0}, 458*09537850SAkhilesh Sanikop {4, -17, 106, 45, -13, 3, 0, 0}, 459*09537850SAkhilesh Sanikop {4, -17, 104, 47, -13, 3, 0, 0}, 460*09537850SAkhilesh Sanikop {4, -17, 102, 50, -14, 3, 0, 0}, 461*09537850SAkhilesh Sanikop {4, -17, 100, 52, -14, 3, 0, 0}, 462*09537850SAkhilesh Sanikop {4, -18, 98, 55, -15, 4, 0, 0}, 463*09537850SAkhilesh Sanikop {4, -18, 96, 58, -15, 3, 0, 0}, 464*09537850SAkhilesh Sanikop {4, -18, 94, 60, -16, 4, 0, 0}, 465*09537850SAkhilesh Sanikop {4, -18, 91, 63, -16, 4, 0, 0}, 466*09537850SAkhilesh Sanikop {4, -18, 89, 65, -16, 4, 0, 0}, 467*09537850SAkhilesh Sanikop {4, -18, 87, 68, -17, 4, 0, 0}, 468*09537850SAkhilesh Sanikop {4, -18, 85, 70, -17, 4, 0, 0}, 469*09537850SAkhilesh Sanikop {4, -18, 82, 73, -17, 4, 0, 0}, 470*09537850SAkhilesh Sanikop {4, -18, 80, 75, -17, 4, 0, 0}, 471*09537850SAkhilesh Sanikop {4, -18, 78, 78, -18, 4, 0, 0}, 472*09537850SAkhilesh Sanikop {4, -17, 75, 80, -18, 4, 0, 0}, 473*09537850SAkhilesh Sanikop {4, -17, 73, 82, -18, 4, 0, 0}, 474*09537850SAkhilesh Sanikop {4, -17, 70, 85, -18, 4, 0, 0}, 475*09537850SAkhilesh Sanikop {4, -17, 68, 87, -18, 4, 0, 0}, 476*09537850SAkhilesh Sanikop {4, -16, 65, 89, -18, 4, 0, 0}, 477*09537850SAkhilesh Sanikop {4, -16, 63, 91, -18, 4, 0, 0}, 478*09537850SAkhilesh Sanikop {4, -16, 60, 94, -18, 4, 0, 0}, 479*09537850SAkhilesh Sanikop {3, -15, 58, 96, -18, 4, 0, 0}, 480*09537850SAkhilesh Sanikop {4, -15, 55, 98, -18, 4, 0, 0}, 481*09537850SAkhilesh Sanikop {3, -14, 52, 100, -17, 4, 0, 0}, 482*09537850SAkhilesh Sanikop {3, -14, 50, 102, -17, 4, 0, 0}, 483*09537850SAkhilesh Sanikop {3, -13, 47, 104, -17, 4, 0, 0}, 484*09537850SAkhilesh Sanikop {3, -13, 45, 106, -17, 4, 0, 0}, 485*09537850SAkhilesh Sanikop {3, -12, 42, 108, -16, 3, 0, 0}, 486*09537850SAkhilesh Sanikop {3, -11, 40, 109, -16, 3, 0, 0}, 487*09537850SAkhilesh Sanikop {3, -11, 37, 111, -15, 3, 0, 0}, 488*09537850SAkhilesh Sanikop {2, -10, 35, 113, -15, 3, 0, 0}, 489*09537850SAkhilesh Sanikop {3, -10, 32, 114, -14, 3, 0, 0}, 490*09537850SAkhilesh Sanikop {2, -9, 29, 116, -13, 3, 0, 0}, 491*09537850SAkhilesh Sanikop {2, -8, 27, 117, -13, 3, 0, 0}, 492*09537850SAkhilesh Sanikop {2, -8, 25, 119, -12, 2, 0, 0}, 493*09537850SAkhilesh Sanikop {2, -7, 22, 120, -11, 2, 0, 0}, 494*09537850SAkhilesh Sanikop {1, -6, 20, 121, -10, 2, 0, 0}, 495*09537850SAkhilesh Sanikop {1, -6, 18, 122, -9, 2, 0, 0}, 496*09537850SAkhilesh Sanikop {1, -5, 15, 123, -8, 2, 0, 0}, 497*09537850SAkhilesh Sanikop {1, -4, 13, 124, -7, 1, 0, 0}, 498*09537850SAkhilesh Sanikop {1, -4, 11, 125, -6, 1, 0, 0}, 499*09537850SAkhilesh Sanikop {1, -3, 8, 126, -5, 1, 0, 0}, 500*09537850SAkhilesh Sanikop {1, -2, 6, 126, -4, 1, 0, 0}, 501*09537850SAkhilesh Sanikop {0, -1, 4, 127, -3, 1, 0, 0}, 502*09537850SAkhilesh Sanikop {0, 0, 2, 127, -1, 0, 0, 0}, 503*09537850SAkhilesh Sanikop // [0, 1). 504*09537850SAkhilesh Sanikop {0, 0, 0, 127, 1, 0, 0, 0}, 505*09537850SAkhilesh Sanikop {0, 0, -1, 127, 2, 0, 0, 0}, 506*09537850SAkhilesh Sanikop {0, 1, -3, 127, 4, -2, 1, 0}, 507*09537850SAkhilesh Sanikop {0, 1, -5, 127, 6, -2, 1, 0}, 508*09537850SAkhilesh Sanikop {0, 2, -6, 126, 8, -3, 1, 0}, 509*09537850SAkhilesh Sanikop {-1, 2, -7, 126, 11, -4, 2, -1}, 510*09537850SAkhilesh Sanikop {-1, 3, -8, 125, 13, -5, 2, -1}, 511*09537850SAkhilesh Sanikop {-1, 3, -10, 124, 16, -6, 3, -1}, 512*09537850SAkhilesh Sanikop {-1, 4, -11, 123, 18, -7, 3, -1}, 513*09537850SAkhilesh Sanikop {-1, 4, -12, 122, 20, -7, 3, -1}, 514*09537850SAkhilesh Sanikop {-1, 4, -13, 121, 23, -8, 3, -1}, 515*09537850SAkhilesh Sanikop {-2, 5, -14, 120, 25, -9, 4, -1}, 516*09537850SAkhilesh Sanikop {-1, 5, -15, 119, 27, -10, 4, -1}, 517*09537850SAkhilesh Sanikop {-1, 5, -16, 118, 30, -11, 4, -1}, 518*09537850SAkhilesh Sanikop {-2, 6, -17, 116, 33, -12, 5, -1}, 519*09537850SAkhilesh Sanikop {-2, 6, -17, 114, 35, -12, 5, -1}, 520*09537850SAkhilesh Sanikop {-2, 6, -18, 113, 38, -13, 5, -1}, 521*09537850SAkhilesh Sanikop {-2, 7, -19, 111, 41, -14, 6, -2}, 522*09537850SAkhilesh Sanikop {-2, 7, -19, 110, 43, -15, 6, -2}, 523*09537850SAkhilesh Sanikop {-2, 7, -20, 108, 46, -15, 6, -2}, 524*09537850SAkhilesh Sanikop {-2, 7, -20, 106, 49, -16, 6, -2}, 525*09537850SAkhilesh Sanikop {-2, 7, -21, 104, 51, -16, 7, -2}, 526*09537850SAkhilesh Sanikop {-2, 7, -21, 102, 54, -17, 7, -2}, 527*09537850SAkhilesh Sanikop {-2, 8, -21, 100, 56, -18, 7, -2}, 528*09537850SAkhilesh Sanikop {-2, 8, -22, 98, 59, -18, 7, -2}, 529*09537850SAkhilesh Sanikop {-2, 8, -22, 96, 62, -19, 7, -2}, 530*09537850SAkhilesh Sanikop {-2, 8, -22, 94, 64, -19, 7, -2}, 531*09537850SAkhilesh Sanikop {-2, 8, -22, 91, 67, -20, 8, -2}, 532*09537850SAkhilesh Sanikop {-2, 8, -22, 89, 69, -20, 8, -2}, 533*09537850SAkhilesh Sanikop {-2, 8, -22, 87, 72, -21, 8, -2}, 534*09537850SAkhilesh Sanikop {-2, 8, -21, 84, 74, -21, 8, -2}, 535*09537850SAkhilesh Sanikop {-2, 8, -22, 82, 77, -21, 8, -2}, 536*09537850SAkhilesh Sanikop {-2, 8, -21, 79, 79, -21, 8, -2}, 537*09537850SAkhilesh Sanikop {-2, 8, -21, 77, 82, -22, 8, -2}, 538*09537850SAkhilesh Sanikop {-2, 8, -21, 74, 84, -21, 8, -2}, 539*09537850SAkhilesh Sanikop {-2, 8, -21, 72, 87, -22, 8, -2}, 540*09537850SAkhilesh Sanikop {-2, 8, -20, 69, 89, -22, 8, -2}, 541*09537850SAkhilesh Sanikop {-2, 8, -20, 67, 91, -22, 8, -2}, 542*09537850SAkhilesh Sanikop {-2, 7, -19, 64, 94, -22, 8, -2}, 543*09537850SAkhilesh Sanikop {-2, 7, -19, 62, 96, -22, 8, -2}, 544*09537850SAkhilesh Sanikop {-2, 7, -18, 59, 98, -22, 8, -2}, 545*09537850SAkhilesh Sanikop {-2, 7, -18, 56, 100, -21, 8, -2}, 546*09537850SAkhilesh Sanikop {-2, 7, -17, 54, 102, -21, 7, -2}, 547*09537850SAkhilesh Sanikop {-2, 7, -16, 51, 104, -21, 7, -2}, 548*09537850SAkhilesh Sanikop {-2, 6, -16, 49, 106, -20, 7, -2}, 549*09537850SAkhilesh Sanikop {-2, 6, -15, 46, 108, -20, 7, -2}, 550*09537850SAkhilesh Sanikop {-2, 6, -15, 43, 110, -19, 7, -2}, 551*09537850SAkhilesh Sanikop {-2, 6, -14, 41, 111, -19, 7, -2}, 552*09537850SAkhilesh Sanikop {-1, 5, -13, 38, 113, -18, 6, -2}, 553*09537850SAkhilesh Sanikop {-1, 5, -12, 35, 114, -17, 6, -2}, 554*09537850SAkhilesh Sanikop {-1, 5, -12, 33, 116, -17, 6, -2}, 555*09537850SAkhilesh Sanikop {-1, 4, -11, 30, 118, -16, 5, -1}, 556*09537850SAkhilesh Sanikop {-1, 4, -10, 27, 119, -15, 5, -1}, 557*09537850SAkhilesh Sanikop {-1, 4, -9, 25, 120, -14, 5, -2}, 558*09537850SAkhilesh Sanikop {-1, 3, -8, 23, 121, -13, 4, -1}, 559*09537850SAkhilesh Sanikop {-1, 3, -7, 20, 122, -12, 4, -1}, 560*09537850SAkhilesh Sanikop {-1, 3, -7, 18, 123, -11, 4, -1}, 561*09537850SAkhilesh Sanikop {-1, 3, -6, 16, 124, -10, 3, -1}, 562*09537850SAkhilesh Sanikop {-1, 2, -5, 13, 125, -8, 3, -1}, 563*09537850SAkhilesh Sanikop {-1, 2, -4, 11, 126, -7, 2, -1}, 564*09537850SAkhilesh Sanikop {0, 1, -3, 8, 126, -6, 2, 0}, 565*09537850SAkhilesh Sanikop {0, 1, -2, 6, 127, -5, 1, 0}, 566*09537850SAkhilesh Sanikop {0, 1, -2, 4, 127, -3, 1, 0}, 567*09537850SAkhilesh Sanikop {0, 0, 0, 2, 127, -1, 0, 0}, 568*09537850SAkhilesh Sanikop // [1, 2). 569*09537850SAkhilesh Sanikop {0, 0, 0, 1, 127, 0, 0, 0}, 570*09537850SAkhilesh Sanikop {0, 0, 0, -1, 127, 2, 0, 0}, 571*09537850SAkhilesh Sanikop {0, 0, 1, -3, 127, 4, -1, 0}, 572*09537850SAkhilesh Sanikop {0, 0, 1, -4, 126, 6, -2, 1}, 573*09537850SAkhilesh Sanikop {0, 0, 1, -5, 126, 8, -3, 1}, 574*09537850SAkhilesh Sanikop {0, 0, 1, -6, 125, 11, -4, 1}, 575*09537850SAkhilesh Sanikop {0, 0, 1, -7, 124, 13, -4, 1}, 576*09537850SAkhilesh Sanikop {0, 0, 2, -8, 123, 15, -5, 1}, 577*09537850SAkhilesh Sanikop {0, 0, 2, -9, 122, 18, -6, 1}, 578*09537850SAkhilesh Sanikop {0, 0, 2, -10, 121, 20, -6, 1}, 579*09537850SAkhilesh Sanikop {0, 0, 2, -11, 120, 22, -7, 2}, 580*09537850SAkhilesh Sanikop {0, 0, 2, -12, 119, 25, -8, 2}, 581*09537850SAkhilesh Sanikop {0, 0, 3, -13, 117, 27, -8, 2}, 582*09537850SAkhilesh Sanikop {0, 0, 3, -13, 116, 29, -9, 2}, 583*09537850SAkhilesh Sanikop {0, 0, 3, -14, 114, 32, -10, 3}, 584*09537850SAkhilesh Sanikop {0, 0, 3, -15, 113, 35, -10, 2}, 585*09537850SAkhilesh Sanikop {0, 0, 3, -15, 111, 37, -11, 3}, 586*09537850SAkhilesh Sanikop {0, 0, 3, -16, 109, 40, -11, 3}, 587*09537850SAkhilesh Sanikop {0, 0, 3, -16, 108, 42, -12, 3}, 588*09537850SAkhilesh Sanikop {0, 0, 4, -17, 106, 45, -13, 3}, 589*09537850SAkhilesh Sanikop {0, 0, 4, -17, 104, 47, -13, 3}, 590*09537850SAkhilesh Sanikop {0, 0, 4, -17, 102, 50, -14, 3}, 591*09537850SAkhilesh Sanikop {0, 0, 4, -17, 100, 52, -14, 3}, 592*09537850SAkhilesh Sanikop {0, 0, 4, -18, 98, 55, -15, 4}, 593*09537850SAkhilesh Sanikop {0, 0, 4, -18, 96, 58, -15, 3}, 594*09537850SAkhilesh Sanikop {0, 0, 4, -18, 94, 60, -16, 4}, 595*09537850SAkhilesh Sanikop {0, 0, 4, -18, 91, 63, -16, 4}, 596*09537850SAkhilesh Sanikop {0, 0, 4, -18, 89, 65, -16, 4}, 597*09537850SAkhilesh Sanikop {0, 0, 4, -18, 87, 68, -17, 4}, 598*09537850SAkhilesh Sanikop {0, 0, 4, -18, 85, 70, -17, 4}, 599*09537850SAkhilesh Sanikop {0, 0, 4, -18, 82, 73, -17, 4}, 600*09537850SAkhilesh Sanikop {0, 0, 4, -18, 80, 75, -17, 4}, 601*09537850SAkhilesh Sanikop {0, 0, 4, -18, 78, 78, -18, 4}, 602*09537850SAkhilesh Sanikop {0, 0, 4, -17, 75, 80, -18, 4}, 603*09537850SAkhilesh Sanikop {0, 0, 4, -17, 73, 82, -18, 4}, 604*09537850SAkhilesh Sanikop {0, 0, 4, -17, 70, 85, -18, 4}, 605*09537850SAkhilesh Sanikop {0, 0, 4, -17, 68, 87, -18, 4}, 606*09537850SAkhilesh Sanikop {0, 0, 4, -16, 65, 89, -18, 4}, 607*09537850SAkhilesh Sanikop {0, 0, 4, -16, 63, 91, -18, 4}, 608*09537850SAkhilesh Sanikop {0, 0, 4, -16, 60, 94, -18, 4}, 609*09537850SAkhilesh Sanikop {0, 0, 3, -15, 58, 96, -18, 4}, 610*09537850SAkhilesh Sanikop {0, 0, 4, -15, 55, 98, -18, 4}, 611*09537850SAkhilesh Sanikop {0, 0, 3, -14, 52, 100, -17, 4}, 612*09537850SAkhilesh Sanikop {0, 0, 3, -14, 50, 102, -17, 4}, 613*09537850SAkhilesh Sanikop {0, 0, 3, -13, 47, 104, -17, 4}, 614*09537850SAkhilesh Sanikop {0, 0, 3, -13, 45, 106, -17, 4}, 615*09537850SAkhilesh Sanikop {0, 0, 3, -12, 42, 108, -16, 3}, 616*09537850SAkhilesh Sanikop {0, 0, 3, -11, 40, 109, -16, 3}, 617*09537850SAkhilesh Sanikop {0, 0, 3, -11, 37, 111, -15, 3}, 618*09537850SAkhilesh Sanikop {0, 0, 2, -10, 35, 113, -15, 3}, 619*09537850SAkhilesh Sanikop {0, 0, 3, -10, 32, 114, -14, 3}, 620*09537850SAkhilesh Sanikop {0, 0, 2, -9, 29, 116, -13, 3}, 621*09537850SAkhilesh Sanikop {0, 0, 2, -8, 27, 117, -13, 3}, 622*09537850SAkhilesh Sanikop {0, 0, 2, -8, 25, 119, -12, 2}, 623*09537850SAkhilesh Sanikop {0, 0, 2, -7, 22, 120, -11, 2}, 624*09537850SAkhilesh Sanikop {0, 0, 1, -6, 20, 121, -10, 2}, 625*09537850SAkhilesh Sanikop {0, 0, 1, -6, 18, 122, -9, 2}, 626*09537850SAkhilesh Sanikop {0, 0, 1, -5, 15, 123, -8, 2}, 627*09537850SAkhilesh Sanikop {0, 0, 1, -4, 13, 124, -7, 1}, 628*09537850SAkhilesh Sanikop {0, 0, 1, -4, 11, 125, -6, 1}, 629*09537850SAkhilesh Sanikop {0, 0, 1, -3, 8, 126, -5, 1}, 630*09537850SAkhilesh Sanikop {0, 0, 1, -2, 6, 126, -4, 1}, 631*09537850SAkhilesh Sanikop {0, 0, 0, -1, 4, 127, -3, 1}, 632*09537850SAkhilesh Sanikop {0, 0, 0, 0, 2, 127, -1, 0}, 633*09537850SAkhilesh Sanikop // dummy, replicate row index 191. 634*09537850SAkhilesh Sanikop {0, 0, 0, 0, 2, 127, -1, 0}}; 635*09537850SAkhilesh Sanikop 636*09537850SAkhilesh Sanikop // Every value in |kSubPixelFilters| is even. Divide by 2 to simplify 637*09537850SAkhilesh Sanikop // calculations by reducing the range by 1 bit. 638*09537850SAkhilesh Sanikop alignas(8) const int8_t kHalfSubPixelFilters[6][16][8] = { 639*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 640*09537850SAkhilesh Sanikop {0, 1, -3, 63, 4, -1, 0, 0}, 641*09537850SAkhilesh Sanikop {0, 1, -5, 61, 9, -2, 0, 0}, 642*09537850SAkhilesh Sanikop {0, 1, -6, 58, 14, -4, 1, 0}, 643*09537850SAkhilesh Sanikop {0, 1, -7, 55, 19, -5, 1, 0}, 644*09537850SAkhilesh Sanikop {0, 1, -7, 51, 24, -6, 1, 0}, 645*09537850SAkhilesh Sanikop {0, 1, -8, 47, 29, -6, 1, 0}, 646*09537850SAkhilesh Sanikop {0, 1, -7, 42, 33, -6, 1, 0}, 647*09537850SAkhilesh Sanikop {0, 1, -7, 38, 38, -7, 1, 0}, 648*09537850SAkhilesh Sanikop {0, 1, -6, 33, 42, -7, 1, 0}, 649*09537850SAkhilesh Sanikop {0, 1, -6, 29, 47, -8, 1, 0}, 650*09537850SAkhilesh Sanikop {0, 1, -6, 24, 51, -7, 1, 0}, 651*09537850SAkhilesh Sanikop {0, 1, -5, 19, 55, -7, 1, 0}, 652*09537850SAkhilesh Sanikop {0, 1, -4, 14, 58, -6, 1, 0}, 653*09537850SAkhilesh Sanikop {0, 0, -2, 9, 61, -5, 1, 0}, 654*09537850SAkhilesh Sanikop {0, 0, -1, 4, 63, -3, 1, 0}}, 655*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 656*09537850SAkhilesh Sanikop {0, 1, 14, 31, 17, 1, 0, 0}, 657*09537850SAkhilesh Sanikop {0, 0, 13, 31, 18, 2, 0, 0}, 658*09537850SAkhilesh Sanikop {0, 0, 11, 31, 20, 2, 0, 0}, 659*09537850SAkhilesh Sanikop {0, 0, 10, 30, 21, 3, 0, 0}, 660*09537850SAkhilesh Sanikop {0, 0, 9, 29, 22, 4, 0, 0}, 661*09537850SAkhilesh Sanikop {0, 0, 8, 28, 23, 5, 0, 0}, 662*09537850SAkhilesh Sanikop {0, -1, 8, 27, 24, 6, 0, 0}, 663*09537850SAkhilesh Sanikop {0, -1, 7, 26, 26, 7, -1, 0}, 664*09537850SAkhilesh Sanikop {0, 0, 6, 24, 27, 8, -1, 0}, 665*09537850SAkhilesh Sanikop {0, 0, 5, 23, 28, 8, 0, 0}, 666*09537850SAkhilesh Sanikop {0, 0, 4, 22, 29, 9, 0, 0}, 667*09537850SAkhilesh Sanikop {0, 0, 3, 21, 30, 10, 0, 0}, 668*09537850SAkhilesh Sanikop {0, 0, 2, 20, 31, 11, 0, 0}, 669*09537850SAkhilesh Sanikop {0, 0, 2, 18, 31, 13, 0, 0}, 670*09537850SAkhilesh Sanikop {0, 0, 1, 17, 31, 14, 1, 0}}, 671*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 672*09537850SAkhilesh Sanikop {-1, 1, -3, 63, 4, -1, 1, 0}, 673*09537850SAkhilesh Sanikop {-1, 3, -6, 62, 8, -3, 2, -1}, 674*09537850SAkhilesh Sanikop {-1, 4, -9, 60, 13, -5, 3, -1}, 675*09537850SAkhilesh Sanikop {-2, 5, -11, 58, 19, -7, 3, -1}, 676*09537850SAkhilesh Sanikop {-2, 5, -11, 54, 24, -9, 4, -1}, 677*09537850SAkhilesh Sanikop {-2, 5, -12, 50, 30, -10, 4, -1}, 678*09537850SAkhilesh Sanikop {-2, 5, -12, 45, 35, -11, 5, -1}, 679*09537850SAkhilesh Sanikop {-2, 6, -12, 40, 40, -12, 6, -2}, 680*09537850SAkhilesh Sanikop {-1, 5, -11, 35, 45, -12, 5, -2}, 681*09537850SAkhilesh Sanikop {-1, 4, -10, 30, 50, -12, 5, -2}, 682*09537850SAkhilesh Sanikop {-1, 4, -9, 24, 54, -11, 5, -2}, 683*09537850SAkhilesh Sanikop {-1, 3, -7, 19, 58, -11, 5, -2}, 684*09537850SAkhilesh Sanikop {-1, 3, -5, 13, 60, -9, 4, -1}, 685*09537850SAkhilesh Sanikop {-1, 2, -3, 8, 62, -6, 3, -1}, 686*09537850SAkhilesh Sanikop {0, 1, -1, 4, 63, -3, 1, -1}}, 687*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 688*09537850SAkhilesh Sanikop {0, 0, 0, 60, 4, 0, 0, 0}, 689*09537850SAkhilesh Sanikop {0, 0, 0, 56, 8, 0, 0, 0}, 690*09537850SAkhilesh Sanikop {0, 0, 0, 52, 12, 0, 0, 0}, 691*09537850SAkhilesh Sanikop {0, 0, 0, 48, 16, 0, 0, 0}, 692*09537850SAkhilesh Sanikop {0, 0, 0, 44, 20, 0, 0, 0}, 693*09537850SAkhilesh Sanikop {0, 0, 0, 40, 24, 0, 0, 0}, 694*09537850SAkhilesh Sanikop {0, 0, 0, 36, 28, 0, 0, 0}, 695*09537850SAkhilesh Sanikop {0, 0, 0, 32, 32, 0, 0, 0}, 696*09537850SAkhilesh Sanikop {0, 0, 0, 28, 36, 0, 0, 0}, 697*09537850SAkhilesh Sanikop {0, 0, 0, 24, 40, 0, 0, 0}, 698*09537850SAkhilesh Sanikop {0, 0, 0, 20, 44, 0, 0, 0}, 699*09537850SAkhilesh Sanikop {0, 0, 0, 16, 48, 0, 0, 0}, 700*09537850SAkhilesh Sanikop {0, 0, 0, 12, 52, 0, 0, 0}, 701*09537850SAkhilesh Sanikop {0, 0, 0, 8, 56, 0, 0, 0}, 702*09537850SAkhilesh Sanikop {0, 0, 0, 4, 60, 0, 0, 0}}, 703*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 704*09537850SAkhilesh Sanikop {0, 0, -2, 63, 4, -1, 0, 0}, 705*09537850SAkhilesh Sanikop {0, 0, -4, 61, 9, -2, 0, 0}, 706*09537850SAkhilesh Sanikop {0, 0, -5, 58, 14, -3, 0, 0}, 707*09537850SAkhilesh Sanikop {0, 0, -6, 55, 19, -4, 0, 0}, 708*09537850SAkhilesh Sanikop {0, 0, -6, 51, 24, -5, 0, 0}, 709*09537850SAkhilesh Sanikop {0, 0, -7, 47, 29, -5, 0, 0}, 710*09537850SAkhilesh Sanikop {0, 0, -6, 42, 33, -5, 0, 0}, 711*09537850SAkhilesh Sanikop {0, 0, -6, 38, 38, -6, 0, 0}, 712*09537850SAkhilesh Sanikop {0, 0, -5, 33, 42, -6, 0, 0}, 713*09537850SAkhilesh Sanikop {0, 0, -5, 29, 47, -7, 0, 0}, 714*09537850SAkhilesh Sanikop {0, 0, -5, 24, 51, -6, 0, 0}, 715*09537850SAkhilesh Sanikop {0, 0, -4, 19, 55, -6, 0, 0}, 716*09537850SAkhilesh Sanikop {0, 0, -3, 14, 58, -5, 0, 0}, 717*09537850SAkhilesh Sanikop {0, 0, -2, 9, 61, -4, 0, 0}, 718*09537850SAkhilesh Sanikop {0, 0, -1, 4, 63, -2, 0, 0}}, 719*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 720*09537850SAkhilesh Sanikop {0, 0, 15, 31, 17, 1, 0, 0}, 721*09537850SAkhilesh Sanikop {0, 0, 13, 31, 18, 2, 0, 0}, 722*09537850SAkhilesh Sanikop {0, 0, 11, 31, 20, 2, 0, 0}, 723*09537850SAkhilesh Sanikop {0, 0, 10, 30, 21, 3, 0, 0}, 724*09537850SAkhilesh Sanikop {0, 0, 9, 29, 22, 4, 0, 0}, 725*09537850SAkhilesh Sanikop {0, 0, 8, 28, 23, 5, 0, 0}, 726*09537850SAkhilesh Sanikop {0, 0, 7, 27, 24, 6, 0, 0}, 727*09537850SAkhilesh Sanikop {0, 0, 6, 26, 26, 6, 0, 0}, 728*09537850SAkhilesh Sanikop {0, 0, 6, 24, 27, 7, 0, 0}, 729*09537850SAkhilesh Sanikop {0, 0, 5, 23, 28, 8, 0, 0}, 730*09537850SAkhilesh Sanikop {0, 0, 4, 22, 29, 9, 0, 0}, 731*09537850SAkhilesh Sanikop {0, 0, 3, 21, 30, 10, 0, 0}, 732*09537850SAkhilesh Sanikop {0, 0, 2, 20, 31, 11, 0, 0}, 733*09537850SAkhilesh Sanikop {0, 0, 2, 18, 31, 13, 0, 0}, 734*09537850SAkhilesh Sanikop {0, 0, 1, 17, 31, 15, 0, 0}}}; 735*09537850SAkhilesh Sanikop 736*09537850SAkhilesh Sanikop // Absolute values of |kHalfSubPixelFilters|. Used in situations where we know 737*09537850SAkhilesh Sanikop // the pattern of the signs and account for it in other ways. 738*09537850SAkhilesh Sanikop const uint8_t kAbsHalfSubPixelFilters[6][16][8] = { 739*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 740*09537850SAkhilesh Sanikop {0, 1, 3, 63, 4, 1, 0, 0}, 741*09537850SAkhilesh Sanikop {0, 1, 5, 61, 9, 2, 0, 0}, 742*09537850SAkhilesh Sanikop {0, 1, 6, 58, 14, 4, 1, 0}, 743*09537850SAkhilesh Sanikop {0, 1, 7, 55, 19, 5, 1, 0}, 744*09537850SAkhilesh Sanikop {0, 1, 7, 51, 24, 6, 1, 0}, 745*09537850SAkhilesh Sanikop {0, 1, 8, 47, 29, 6, 1, 0}, 746*09537850SAkhilesh Sanikop {0, 1, 7, 42, 33, 6, 1, 0}, 747*09537850SAkhilesh Sanikop {0, 1, 7, 38, 38, 7, 1, 0}, 748*09537850SAkhilesh Sanikop {0, 1, 6, 33, 42, 7, 1, 0}, 749*09537850SAkhilesh Sanikop {0, 1, 6, 29, 47, 8, 1, 0}, 750*09537850SAkhilesh Sanikop {0, 1, 6, 24, 51, 7, 1, 0}, 751*09537850SAkhilesh Sanikop {0, 1, 5, 19, 55, 7, 1, 0}, 752*09537850SAkhilesh Sanikop {0, 1, 4, 14, 58, 6, 1, 0}, 753*09537850SAkhilesh Sanikop {0, 0, 2, 9, 61, 5, 1, 0}, 754*09537850SAkhilesh Sanikop {0, 0, 1, 4, 63, 3, 1, 0}}, 755*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 756*09537850SAkhilesh Sanikop {0, 1, 14, 31, 17, 1, 0, 0}, 757*09537850SAkhilesh Sanikop {0, 0, 13, 31, 18, 2, 0, 0}, 758*09537850SAkhilesh Sanikop {0, 0, 11, 31, 20, 2, 0, 0}, 759*09537850SAkhilesh Sanikop {0, 0, 10, 30, 21, 3, 0, 0}, 760*09537850SAkhilesh Sanikop {0, 0, 9, 29, 22, 4, 0, 0}, 761*09537850SAkhilesh Sanikop {0, 0, 8, 28, 23, 5, 0, 0}, 762*09537850SAkhilesh Sanikop {0, 1, 8, 27, 24, 6, 0, 0}, 763*09537850SAkhilesh Sanikop {0, 1, 7, 26, 26, 7, 1, 0}, 764*09537850SAkhilesh Sanikop {0, 0, 6, 24, 27, 8, 1, 0}, 765*09537850SAkhilesh Sanikop {0, 0, 5, 23, 28, 8, 0, 0}, 766*09537850SAkhilesh Sanikop {0, 0, 4, 22, 29, 9, 0, 0}, 767*09537850SAkhilesh Sanikop {0, 0, 3, 21, 30, 10, 0, 0}, 768*09537850SAkhilesh Sanikop {0, 0, 2, 20, 31, 11, 0, 0}, 769*09537850SAkhilesh Sanikop {0, 0, 2, 18, 31, 13, 0, 0}, 770*09537850SAkhilesh Sanikop {0, 0, 1, 17, 31, 14, 1, 0}}, 771*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 772*09537850SAkhilesh Sanikop {1, 1, 3, 63, 4, 1, 1, 0}, 773*09537850SAkhilesh Sanikop {1, 3, 6, 62, 8, 3, 2, 1}, 774*09537850SAkhilesh Sanikop {1, 4, 9, 60, 13, 5, 3, 1}, 775*09537850SAkhilesh Sanikop {2, 5, 11, 58, 19, 7, 3, 1}, 776*09537850SAkhilesh Sanikop {2, 5, 11, 54, 24, 9, 4, 1}, 777*09537850SAkhilesh Sanikop {2, 5, 12, 50, 30, 10, 4, 1}, 778*09537850SAkhilesh Sanikop {2, 5, 12, 45, 35, 11, 5, 1}, 779*09537850SAkhilesh Sanikop {2, 6, 12, 40, 40, 12, 6, 2}, 780*09537850SAkhilesh Sanikop {1, 5, 11, 35, 45, 12, 5, 2}, 781*09537850SAkhilesh Sanikop {1, 4, 10, 30, 50, 12, 5, 2}, 782*09537850SAkhilesh Sanikop {1, 4, 9, 24, 54, 11, 5, 2}, 783*09537850SAkhilesh Sanikop {1, 3, 7, 19, 58, 11, 5, 2}, 784*09537850SAkhilesh Sanikop {1, 3, 5, 13, 60, 9, 4, 1}, 785*09537850SAkhilesh Sanikop {1, 2, 3, 8, 62, 6, 3, 1}, 786*09537850SAkhilesh Sanikop {0, 1, 1, 4, 63, 3, 1, 1}}, 787*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 788*09537850SAkhilesh Sanikop {0, 0, 0, 60, 4, 0, 0, 0}, 789*09537850SAkhilesh Sanikop {0, 0, 0, 56, 8, 0, 0, 0}, 790*09537850SAkhilesh Sanikop {0, 0, 0, 52, 12, 0, 0, 0}, 791*09537850SAkhilesh Sanikop {0, 0, 0, 48, 16, 0, 0, 0}, 792*09537850SAkhilesh Sanikop {0, 0, 0, 44, 20, 0, 0, 0}, 793*09537850SAkhilesh Sanikop {0, 0, 0, 40, 24, 0, 0, 0}, 794*09537850SAkhilesh Sanikop {0, 0, 0, 36, 28, 0, 0, 0}, 795*09537850SAkhilesh Sanikop {0, 0, 0, 32, 32, 0, 0, 0}, 796*09537850SAkhilesh Sanikop {0, 0, 0, 28, 36, 0, 0, 0}, 797*09537850SAkhilesh Sanikop {0, 0, 0, 24, 40, 0, 0, 0}, 798*09537850SAkhilesh Sanikop {0, 0, 0, 20, 44, 0, 0, 0}, 799*09537850SAkhilesh Sanikop {0, 0, 0, 16, 48, 0, 0, 0}, 800*09537850SAkhilesh Sanikop {0, 0, 0, 12, 52, 0, 0, 0}, 801*09537850SAkhilesh Sanikop {0, 0, 0, 8, 56, 0, 0, 0}, 802*09537850SAkhilesh Sanikop {0, 0, 0, 4, 60, 0, 0, 0}}, 803*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 804*09537850SAkhilesh Sanikop {0, 0, 2, 63, 4, 1, 0, 0}, 805*09537850SAkhilesh Sanikop {0, 0, 4, 61, 9, 2, 0, 0}, 806*09537850SAkhilesh Sanikop {0, 0, 5, 58, 14, 3, 0, 0}, 807*09537850SAkhilesh Sanikop {0, 0, 6, 55, 19, 4, 0, 0}, 808*09537850SAkhilesh Sanikop {0, 0, 6, 51, 24, 5, 0, 0}, 809*09537850SAkhilesh Sanikop {0, 0, 7, 47, 29, 5, 0, 0}, 810*09537850SAkhilesh Sanikop {0, 0, 6, 42, 33, 5, 0, 0}, 811*09537850SAkhilesh Sanikop {0, 0, 6, 38, 38, 6, 0, 0}, 812*09537850SAkhilesh Sanikop {0, 0, 5, 33, 42, 6, 0, 0}, 813*09537850SAkhilesh Sanikop {0, 0, 5, 29, 47, 7, 0, 0}, 814*09537850SAkhilesh Sanikop {0, 0, 5, 24, 51, 6, 0, 0}, 815*09537850SAkhilesh Sanikop {0, 0, 4, 19, 55, 6, 0, 0}, 816*09537850SAkhilesh Sanikop {0, 0, 3, 14, 58, 5, 0, 0}, 817*09537850SAkhilesh Sanikop {0, 0, 2, 9, 61, 4, 0, 0}, 818*09537850SAkhilesh Sanikop {0, 0, 1, 4, 63, 2, 0, 0}}, 819*09537850SAkhilesh Sanikop {{0, 0, 0, 64, 0, 0, 0, 0}, 820*09537850SAkhilesh Sanikop {0, 0, 15, 31, 17, 1, 0, 0}, 821*09537850SAkhilesh Sanikop {0, 0, 13, 31, 18, 2, 0, 0}, 822*09537850SAkhilesh Sanikop {0, 0, 11, 31, 20, 2, 0, 0}, 823*09537850SAkhilesh Sanikop {0, 0, 10, 30, 21, 3, 0, 0}, 824*09537850SAkhilesh Sanikop {0, 0, 9, 29, 22, 4, 0, 0}, 825*09537850SAkhilesh Sanikop {0, 0, 8, 28, 23, 5, 0, 0}, 826*09537850SAkhilesh Sanikop {0, 0, 7, 27, 24, 6, 0, 0}, 827*09537850SAkhilesh Sanikop {0, 0, 6, 26, 26, 6, 0, 0}, 828*09537850SAkhilesh Sanikop {0, 0, 6, 24, 27, 7, 0, 0}, 829*09537850SAkhilesh Sanikop {0, 0, 5, 23, 28, 8, 0, 0}, 830*09537850SAkhilesh Sanikop {0, 0, 4, 22, 29, 9, 0, 0}, 831*09537850SAkhilesh Sanikop {0, 0, 3, 21, 30, 10, 0, 0}, 832*09537850SAkhilesh Sanikop {0, 0, 2, 20, 31, 11, 0, 0}, 833*09537850SAkhilesh Sanikop {0, 0, 2, 18, 31, 13, 0, 0}, 834*09537850SAkhilesh Sanikop {0, 0, 1, 17, 31, 15, 0, 0}}}; 835*09537850SAkhilesh Sanikop 836*09537850SAkhilesh Sanikop // 9.3 -- Dr_Intra_Derivative[] 837*09537850SAkhilesh Sanikop // This is a more compact version of the table from the spec. angle / 2 - 1 is 838*09537850SAkhilesh Sanikop // used as the lookup. Note angle / 3 - 1 would work too, but the calculation 839*09537850SAkhilesh Sanikop // becomes more costly. 840*09537850SAkhilesh Sanikop const int16_t kDirectionalIntraPredictorDerivative[44] = { 841*09537850SAkhilesh Sanikop // Approx angle 842*09537850SAkhilesh Sanikop 1023, 0, // 3, ... 843*09537850SAkhilesh Sanikop 547, // 6, ... 844*09537850SAkhilesh Sanikop 372, 0, 0, // 9, ... 845*09537850SAkhilesh Sanikop 273, // 14, ... 846*09537850SAkhilesh Sanikop 215, 0, // 17, ... 847*09537850SAkhilesh Sanikop 178, // 20, ... 848*09537850SAkhilesh Sanikop 151, 0, // 23, ... (113 & 203 are base angles) 849*09537850SAkhilesh Sanikop 132, // 26, ... 850*09537850SAkhilesh Sanikop 116, 0, // 29, ... 851*09537850SAkhilesh Sanikop 102, 0, // 32, ... 852*09537850SAkhilesh Sanikop 90, // 36, ... 853*09537850SAkhilesh Sanikop 80, 0, // 39, ... 854*09537850SAkhilesh Sanikop 71, // 42, ... 855*09537850SAkhilesh Sanikop 64, 0, // 45, ... (45 & 135 are base angles) 856*09537850SAkhilesh Sanikop 57, // 48, ... 857*09537850SAkhilesh Sanikop 51, 0, // 51, ... 858*09537850SAkhilesh Sanikop 45, 0, // 54, ... 859*09537850SAkhilesh Sanikop 40, // 58, ... 860*09537850SAkhilesh Sanikop 35, 0, // 61, ... 861*09537850SAkhilesh Sanikop 31, // 64, ... 862*09537850SAkhilesh Sanikop 27, 0, // 67, ... (67 & 157 are base angles) 863*09537850SAkhilesh Sanikop 23, // 70, ... 864*09537850SAkhilesh Sanikop 19, 0, // 73, ... 865*09537850SAkhilesh Sanikop 15, 0, // 76, ... 866*09537850SAkhilesh Sanikop 11, 0, // 81, ... 867*09537850SAkhilesh Sanikop 7, // 84, ... 868*09537850SAkhilesh Sanikop 3, // 87, ... 869*09537850SAkhilesh Sanikop }; 870*09537850SAkhilesh Sanikop 871*09537850SAkhilesh Sanikop const uint8_t kDeblockFilterLevelIndex[kMaxPlanes][kNumLoopFilterTypes] = { 872*09537850SAkhilesh Sanikop {0, 1}, {2, 2}, {3, 3}}; 873*09537850SAkhilesh Sanikop 874*09537850SAkhilesh Sanikop } // namespace libgav1 875