xref: /aosp_15_r20/external/libgav1/src/utils/constants.cc (revision 095378508e87ed692bf8dfeb34008b65b3735891)
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