xref: /aosp_15_r20/external/libhevc/common/ihevc_common_tables.c (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar *
3*c83a76b0SSuyog Pawar * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
4*c83a76b0SSuyog Pawar *
5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar *
9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar *
11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar * limitations under the License.
16*c83a76b0SSuyog Pawar *
17*c83a76b0SSuyog Pawar ******************************************************************************/
18*c83a76b0SSuyog Pawar /**
19*c83a76b0SSuyog Pawar *******************************************************************************
20*c83a76b0SSuyog Pawar * @file
21*c83a76b0SSuyog Pawar *  ihevc_common_tables.c
22*c83a76b0SSuyog Pawar *
23*c83a76b0SSuyog Pawar * @brief
24*c83a76b0SSuyog Pawar *  Contains common global tables
25*c83a76b0SSuyog Pawar *
26*c83a76b0SSuyog Pawar * @author
27*c83a76b0SSuyog Pawar *  Harish M
28*c83a76b0SSuyog Pawar *
29*c83a76b0SSuyog Pawar * @par List of Tables:
30*c83a76b0SSuyog Pawar * gai4_ihevc_max_luma_pic_size
31*c83a76b0SSuyog Pawar * gai4_ihevc_max_wd_ht
32*c83a76b0SSuyog Pawar * gai4_ihevc_min_wd_ht
33*c83a76b0SSuyog Pawar * gai4_ihevc_ang_table
34*c83a76b0SSuyog Pawar * col_for_intra_luma
35*c83a76b0SSuyog Pawar * col_for_intra_chroma
36*c83a76b0SSuyog Pawar * idx_neg_vals_3_9
37*c83a76b0SSuyog Pawar * idx_neg_idx_3_9
38*c83a76b0SSuyog Pawar * idx_neg_idx_chroma_3_9
39*c83a76b0SSuyog Pawar * idx_neg_idx_11_17
40*c83a76b0SSuyog Pawar * idx_neg_idx_chroma_11_17
41*c83a76b0SSuyog Pawar * gai4_ihevc_inv_ang_table
42*c83a76b0SSuyog Pawar * gau1_ihevc_invscan8x8
43*c83a76b0SSuyog Pawar * gau1_ihevc_invscan4x4
44*c83a76b0SSuyog Pawar * gau1_ihevc_invscan2x2
45*c83a76b0SSuyog Pawar * gau1_ihevc_scan8x8
46*c83a76b0SSuyog Pawar * gau1_ihevc_scan4x4
47*c83a76b0SSuyog Pawar * gau1_ihevc_scan2x2
48*c83a76b0SSuyog Pawar * *gapv_ihevc_scan
49*c83a76b0SSuyog Pawar * *gapv_ihevc_invscan
50*c83a76b0SSuyog Pawar * gau1_ihevc_chroma_qp_scale
51*c83a76b0SSuyog Pawar * gai1_ihevc_chroma_qp_scale
52*c83a76b0SSuyog Pawar * gau1_ihevc_planar_factor
53*c83a76b0SSuyog Pawar * gau1_ihevc_planar_factor_1
54*c83a76b0SSuyog Pawar * gai4_ihevc_ang_table_chroma
55*c83a76b0SSuyog Pawar * gai4_ihevc_inv_ang_table_chroma
56*c83a76b0SSuyog Pawar * gau1_ihevc_planar_factor_chroma
57*c83a76b0SSuyog Pawar * gau1_intra_pred_ref_filter
58*c83a76b0SSuyog Pawar * gi1_table_edge_idx
59*c83a76b0SSuyog Pawar * gu1_table_band_idx
60*c83a76b0SSuyog Pawar * gu2_table_band_idx
61*c83a76b0SSuyog Pawar *
62*c83a76b0SSuyog Pawar * @remarks
63*c83a76b0SSuyog Pawar *  None
64*c83a76b0SSuyog Pawar *
65*c83a76b0SSuyog Pawar *******************************************************************************
66*c83a76b0SSuyog Pawar */
67*c83a76b0SSuyog Pawar 
68*c83a76b0SSuyog Pawar #include "ihevc_typedefs.h"
69*c83a76b0SSuyog Pawar #include "ihevc_platform_macros.h"
70*c83a76b0SSuyog Pawar #include "ihevc_common_tables.h"
71*c83a76b0SSuyog Pawar 
72*c83a76b0SSuyog Pawar /*****************************************************************************/
73*c83a76b0SSuyog Pawar /* Level specific tables                                                     */
74*c83a76b0SSuyog Pawar /*****************************************************************************/
75*c83a76b0SSuyog Pawar 
76*c83a76b0SSuyog Pawar /**
77*c83a76b0SSuyog Pawar  * Array giving size of max luma samples in a picture for a given level
78*c83a76b0SSuyog Pawar  */
79*c83a76b0SSuyog Pawar const WORD32 gai4_ihevc_max_luma_pic_size[] =
80*c83a76b0SSuyog Pawar {
81*c83a76b0SSuyog Pawar     /* Level 1 */
82*c83a76b0SSuyog Pawar     36864,
83*c83a76b0SSuyog Pawar     /* Level 2 */
84*c83a76b0SSuyog Pawar     122880,
85*c83a76b0SSuyog Pawar     /* Level 2.1 */
86*c83a76b0SSuyog Pawar     245760,
87*c83a76b0SSuyog Pawar     /* Level 3 */
88*c83a76b0SSuyog Pawar     552960,
89*c83a76b0SSuyog Pawar     /* Level 3.1 */
90*c83a76b0SSuyog Pawar     983040,
91*c83a76b0SSuyog Pawar     /* Level 4 */
92*c83a76b0SSuyog Pawar     2228224,
93*c83a76b0SSuyog Pawar     /* Level 4.1 */
94*c83a76b0SSuyog Pawar     2228224,
95*c83a76b0SSuyog Pawar     /* Level 5 */
96*c83a76b0SSuyog Pawar     8912896,
97*c83a76b0SSuyog Pawar     /* Level 5.1 */
98*c83a76b0SSuyog Pawar     8912896,
99*c83a76b0SSuyog Pawar     /* Level 5.2 */
100*c83a76b0SSuyog Pawar     8912896,
101*c83a76b0SSuyog Pawar     /* Level 6 */
102*c83a76b0SSuyog Pawar     33423360,
103*c83a76b0SSuyog Pawar     /* Level 6.1 */
104*c83a76b0SSuyog Pawar     33423360,
105*c83a76b0SSuyog Pawar     /* Level 6.2 */
106*c83a76b0SSuyog Pawar     33423360
107*c83a76b0SSuyog Pawar };
108*c83a76b0SSuyog Pawar /** Max width and height allowed for a given level */
109*c83a76b0SSuyog Pawar /** This is derived as SQRT(8 * gai4_ihevc_max_luma_pic_size[]) */
110*c83a76b0SSuyog Pawar const WORD32 gai4_ihevc_max_wd_ht[] =
111*c83a76b0SSuyog Pawar {
112*c83a76b0SSuyog Pawar     /* Level 1 */
113*c83a76b0SSuyog Pawar     543,
114*c83a76b0SSuyog Pawar     /* Level 2 */
115*c83a76b0SSuyog Pawar     991,
116*c83a76b0SSuyog Pawar     /* Level 2.1 */
117*c83a76b0SSuyog Pawar     1402,
118*c83a76b0SSuyog Pawar     /* Level 3 */
119*c83a76b0SSuyog Pawar     2103,
120*c83a76b0SSuyog Pawar     /* Level 3.1 */
121*c83a76b0SSuyog Pawar     2804,
122*c83a76b0SSuyog Pawar     /* Level 4 */
123*c83a76b0SSuyog Pawar     4222,
124*c83a76b0SSuyog Pawar     /* Level 4.1 */
125*c83a76b0SSuyog Pawar     4222,
126*c83a76b0SSuyog Pawar     /* Level 5 */
127*c83a76b0SSuyog Pawar     8444,
128*c83a76b0SSuyog Pawar     /* Level 5.1 */
129*c83a76b0SSuyog Pawar     8444,
130*c83a76b0SSuyog Pawar     /* Level 5.2 */
131*c83a76b0SSuyog Pawar     8444,
132*c83a76b0SSuyog Pawar     /* Level 6 */
133*c83a76b0SSuyog Pawar     16888,
134*c83a76b0SSuyog Pawar     /* Level 6.1 */
135*c83a76b0SSuyog Pawar     16888,
136*c83a76b0SSuyog Pawar     /* Level 6.2 */
137*c83a76b0SSuyog Pawar     16888
138*c83a76b0SSuyog Pawar };
139*c83a76b0SSuyog Pawar 
140*c83a76b0SSuyog Pawar /** Min width and height allowed for a given level */
141*c83a76b0SSuyog Pawar /** This is derived as gai4_ihevc_max_luma_pic_size[]/gai4_ihevc_max_wd_ht[] */
142*c83a76b0SSuyog Pawar const WORD32 gai4_ihevc_min_wd_ht[] =
143*c83a76b0SSuyog Pawar {
144*c83a76b0SSuyog Pawar     /* Level 1 */
145*c83a76b0SSuyog Pawar     67,
146*c83a76b0SSuyog Pawar     /* Level 2 */
147*c83a76b0SSuyog Pawar     123,
148*c83a76b0SSuyog Pawar     /* Level 2.1 */
149*c83a76b0SSuyog Pawar     175,
150*c83a76b0SSuyog Pawar     /* Level 3 */
151*c83a76b0SSuyog Pawar     262,
152*c83a76b0SSuyog Pawar     /* Level 3.1 */
153*c83a76b0SSuyog Pawar     350,
154*c83a76b0SSuyog Pawar     /* Level 4 */
155*c83a76b0SSuyog Pawar     527,
156*c83a76b0SSuyog Pawar     /* Level 4.1 */
157*c83a76b0SSuyog Pawar     527,
158*c83a76b0SSuyog Pawar     /* Level 5 */
159*c83a76b0SSuyog Pawar     1055,
160*c83a76b0SSuyog Pawar     /* Level 5.1 */
161*c83a76b0SSuyog Pawar     1055,
162*c83a76b0SSuyog Pawar     /* Level 5.2 */
163*c83a76b0SSuyog Pawar     1055,
164*c83a76b0SSuyog Pawar     /* Level 6 */
165*c83a76b0SSuyog Pawar     2111,
166*c83a76b0SSuyog Pawar     /* Level 6.1 */
167*c83a76b0SSuyog Pawar     2111,
168*c83a76b0SSuyog Pawar     /* Level 6.2 */
169*c83a76b0SSuyog Pawar     2111
170*c83a76b0SSuyog Pawar };
171*c83a76b0SSuyog Pawar /*****************************************************************************/
172*c83a76b0SSuyog Pawar /* Intra prediction tables                                                   */
173*c83a76b0SSuyog Pawar /*****************************************************************************/
174*c83a76b0SSuyog Pawar /**
175*c83a76b0SSuyog Pawar  * Intra pred angles
176*c83a76b0SSuyog Pawar  */
177*c83a76b0SSuyog Pawar /* g_ang_table = tan(actual angle) in Q5 format for all 33 modes */
178*c83a76b0SSuyog Pawar const WORD32 gai4_ihevc_ang_table[35] =
179*c83a76b0SSuyog Pawar     { 0, 0, 32, 26, 21, 17, 13, 9, 5, 2, 0, -2, -5, -9, -13, -17, -21, -26, -32,
180*c83a76b0SSuyog Pawar                     -26, -21, -17, -13, -9, -5, -2, 0, 2, 5, 9, 13, 17, 21, 26, 32 };
181*c83a76b0SSuyog Pawar 
182*c83a76b0SSuyog Pawar const WORD8 col_for_intra_luma[32] =
183*c83a76b0SSuyog Pawar     { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
184*c83a76b0SSuyog Pawar                     29, 30, 31, 32 };
185*c83a76b0SSuyog Pawar 
186*c83a76b0SSuyog Pawar const WORD8 col_for_intra_chroma[32] =
187*c83a76b0SSuyog Pawar     { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16 };
188*c83a76b0SSuyog Pawar 
189*c83a76b0SSuyog Pawar const WORD8 idx_neg_vals_3_9[7] =
190*c83a76b0SSuyog Pawar     { 26, 21, 17, 13, 9, 5, 2 };
191*c83a76b0SSuyog Pawar 
192*c83a76b0SSuyog Pawar const WORD32 idx_neg_idx_3_9[28] =
193*c83a76b0SSuyog Pawar     { 6, 13, 19, 26, 5, 10, 15, 21, 4, 8, 12, 17, 3, 6, 9, 13, 2, 4, 6, 9,
194*c83a76b0SSuyog Pawar                     1, 2, 3, 5, 0, 0, 1, 2 };
195*c83a76b0SSuyog Pawar 
196*c83a76b0SSuyog Pawar 
197*c83a76b0SSuyog Pawar const WORD32 idx_neg_idx_chroma_3_9[28] =
198*c83a76b0SSuyog Pawar   { 3, 6, 9, 13,
199*c83a76b0SSuyog Pawar     2, 5, 7, 10,
200*c83a76b0SSuyog Pawar     2, 4, 6, 8,
201*c83a76b0SSuyog Pawar     1, 3, 4, 6,
202*c83a76b0SSuyog Pawar     1, 2, 3, 4,
203*c83a76b0SSuyog Pawar     0, 1, 1, 2,
204*c83a76b0SSuyog Pawar     0, 0, 0, 1 };
205*c83a76b0SSuyog Pawar const WORD32 idx_neg_idx_11_17[28] =
206*c83a76b0SSuyog Pawar     { -1, -1, -2, -2, -2, -3, -4, -5, -3, -5, -7, -9, -4, -7, -10, -13, -5, -9, -13, -17, -6, -11,
207*c83a76b0SSuyog Pawar                     -16, -21, -7, -13, -20, -26 };
208*c83a76b0SSuyog Pawar 
209*c83a76b0SSuyog Pawar const WORD32 idx_neg_idx_chroma_11_17[28] =
210*c83a76b0SSuyog Pawar   { -1, -1, -1, -1,
211*c83a76b0SSuyog Pawar     -1, -2, -2, -3,
212*c83a76b0SSuyog Pawar     -2, -3, -4, -5,
213*c83a76b0SSuyog Pawar     -2, -4, -5, -7,
214*c83a76b0SSuyog Pawar     -3, -5, -7, -9,
215*c83a76b0SSuyog Pawar     -3, -6, -8, -11,
216*c83a76b0SSuyog Pawar     -4, -7, -10, -13 };
217*c83a76b0SSuyog Pawar 
218*c83a76b0SSuyog Pawar /**
219*c83a76b0SSuyog Pawar  * Intra pred inverse angles
220*c83a76b0SSuyog Pawar  */
221*c83a76b0SSuyog Pawar /* g_invAngTable = Inverse angle in Q5 format, required for negative angles */
222*c83a76b0SSuyog Pawar const WORD32 gai4_ihevc_inv_ang_table[14] =
223*c83a76b0SSuyog Pawar     { 4096, 1638, 910, 630, 482, 390, 315, 315, 390, 482, 630, 910, 1638, 4096 };
224*c83a76b0SSuyog Pawar 
225*c83a76b0SSuyog Pawar /*****************************************************************************/
226*c83a76b0SSuyog Pawar /* Scan matrices                                                             */
227*c83a76b0SSuyog Pawar /*****************************************************************************/
228*c83a76b0SSuyog Pawar /**
229*c83a76b0SSuyog Pawar  * Inverse Scan matrix for 8x8 Section 6.5.3
230*c83a76b0SSuyog Pawar  */
231*c83a76b0SSuyog Pawar const UWORD8  gau1_ihevc_invscan8x8[][64] =
232*c83a76b0SSuyog Pawar {
233*c83a76b0SSuyog Pawar     /* Upright diagonal */
234*c83a76b0SSuyog Pawar     {
235*c83a76b0SSuyog Pawar         0,  8,  1,  16, 9,  2,  24, 17,
236*c83a76b0SSuyog Pawar         10, 3,  32, 25, 18, 11, 4,  40,
237*c83a76b0SSuyog Pawar         33, 26, 19, 12, 5,  48, 41, 34,
238*c83a76b0SSuyog Pawar         27, 20, 13, 6,  56, 49, 42, 35,
239*c83a76b0SSuyog Pawar         28, 21, 14, 7,  57, 50, 43, 36,
240*c83a76b0SSuyog Pawar         29, 22, 15, 58, 51, 44, 37, 30,
241*c83a76b0SSuyog Pawar         23, 59, 52, 45, 38, 31, 60, 53,
242*c83a76b0SSuyog Pawar         46, 39, 61, 54, 47, 62, 55, 63
243*c83a76b0SSuyog Pawar     },
244*c83a76b0SSuyog Pawar     /* Horizontal */
245*c83a76b0SSuyog Pawar     {
246*c83a76b0SSuyog Pawar         0,  1,  2,  3,  4,  5,  6,  7,
247*c83a76b0SSuyog Pawar         8,  9,  10, 11, 12, 13, 14, 15,
248*c83a76b0SSuyog Pawar         16, 17, 18, 19, 20, 21, 22, 23,
249*c83a76b0SSuyog Pawar         24, 25, 26, 27, 28, 29, 30, 31,
250*c83a76b0SSuyog Pawar         32, 33, 34, 35, 36, 37, 38, 39,
251*c83a76b0SSuyog Pawar         40, 41, 42, 43, 44, 45, 46, 47,
252*c83a76b0SSuyog Pawar         48, 49, 50, 51, 52, 53, 54, 55,
253*c83a76b0SSuyog Pawar         56, 57, 58, 59, 60, 61, 62, 63
254*c83a76b0SSuyog Pawar     },
255*c83a76b0SSuyog Pawar     /* Vertical */
256*c83a76b0SSuyog Pawar     {
257*c83a76b0SSuyog Pawar         0,  8,  16, 24, 32, 40, 48, 56,
258*c83a76b0SSuyog Pawar         1,  9,  17, 25, 33, 41, 49, 57,
259*c83a76b0SSuyog Pawar         2,  10, 18, 26, 34, 42, 50, 58,
260*c83a76b0SSuyog Pawar         3,  11, 19, 27, 35, 43, 51, 59,
261*c83a76b0SSuyog Pawar         4,  12, 20, 28, 36, 44, 52, 60,
262*c83a76b0SSuyog Pawar         5,  13, 21, 29, 37, 45, 53, 61,
263*c83a76b0SSuyog Pawar         6,  14, 22, 30, 38, 46, 54, 62,
264*c83a76b0SSuyog Pawar         7,  15, 23, 31, 39, 47, 55, 63
265*c83a76b0SSuyog Pawar     }
266*c83a76b0SSuyog Pawar };
267*c83a76b0SSuyog Pawar 
268*c83a76b0SSuyog Pawar /**
269*c83a76b0SSuyog Pawar  * Inverse Scan matrix for 4x4 Section 6.5.3
270*c83a76b0SSuyog Pawar  */
271*c83a76b0SSuyog Pawar const UWORD8  gau1_ihevc_invscan4x4[][16] =
272*c83a76b0SSuyog Pawar {
273*c83a76b0SSuyog Pawar     /* Upright diagonal */
274*c83a76b0SSuyog Pawar     {
275*c83a76b0SSuyog Pawar         0, 4,  1,  8,
276*c83a76b0SSuyog Pawar         5, 2,  12, 9,
277*c83a76b0SSuyog Pawar         6, 3,  13, 10,
278*c83a76b0SSuyog Pawar         7, 14, 11, 15
279*c83a76b0SSuyog Pawar     },
280*c83a76b0SSuyog Pawar     /* Horizontal */
281*c83a76b0SSuyog Pawar     {
282*c83a76b0SSuyog Pawar         0,  1,  2,  3,
283*c83a76b0SSuyog Pawar         4,  5,  6,  7,
284*c83a76b0SSuyog Pawar         8,  9,  10, 11,
285*c83a76b0SSuyog Pawar         12, 13, 14, 15
286*c83a76b0SSuyog Pawar     },
287*c83a76b0SSuyog Pawar     /* Vertical */
288*c83a76b0SSuyog Pawar     {
289*c83a76b0SSuyog Pawar         0,  4,  8,  12,
290*c83a76b0SSuyog Pawar         1,  5,  9,  13,
291*c83a76b0SSuyog Pawar         2,  6,  10, 14,
292*c83a76b0SSuyog Pawar         3,  7,  11, 15
293*c83a76b0SSuyog Pawar     }
294*c83a76b0SSuyog Pawar };
295*c83a76b0SSuyog Pawar 
296*c83a76b0SSuyog Pawar /**
297*c83a76b0SSuyog Pawar  * Inverse Scan matrix for 4x4 Section 6.5.3
298*c83a76b0SSuyog Pawar  */
299*c83a76b0SSuyog Pawar const UWORD8  gau1_ihevc_invscan2x2[][4] =
300*c83a76b0SSuyog Pawar {
301*c83a76b0SSuyog Pawar     /* Upright diagonal */
302*c83a76b0SSuyog Pawar     {
303*c83a76b0SSuyog Pawar         0,  2,
304*c83a76b0SSuyog Pawar         1,  3
305*c83a76b0SSuyog Pawar     },
306*c83a76b0SSuyog Pawar     /* Horizontal */
307*c83a76b0SSuyog Pawar     {
308*c83a76b0SSuyog Pawar         0,  1,
309*c83a76b0SSuyog Pawar         2,  3
310*c83a76b0SSuyog Pawar     },
311*c83a76b0SSuyog Pawar     /* Vertical */
312*c83a76b0SSuyog Pawar     {
313*c83a76b0SSuyog Pawar         0,  2,
314*c83a76b0SSuyog Pawar         1,  3,
315*c83a76b0SSuyog Pawar     }
316*c83a76b0SSuyog Pawar };
317*c83a76b0SSuyog Pawar 
318*c83a76b0SSuyog Pawar /**
319*c83a76b0SSuyog Pawar  * Scan matrix for 8x8 Section 6.5.3
320*c83a76b0SSuyog Pawar  */
321*c83a76b0SSuyog Pawar 
322*c83a76b0SSuyog Pawar const UWORD8  gau1_ihevc_scan8x8[][64] =
323*c83a76b0SSuyog Pawar {
324*c83a76b0SSuyog Pawar     /* Upright diagonal */
325*c83a76b0SSuyog Pawar     {
326*c83a76b0SSuyog Pawar         0,  2,  5,  9,  14, 20, 27, 35,
327*c83a76b0SSuyog Pawar         1,  4,  8,  13, 19, 26, 34, 42,
328*c83a76b0SSuyog Pawar         3,  7,  12, 18, 25, 33, 41, 48,
329*c83a76b0SSuyog Pawar         6,  11, 17, 24, 32, 40, 47, 53,
330*c83a76b0SSuyog Pawar         10, 16, 23, 31, 39, 46, 52, 57,
331*c83a76b0SSuyog Pawar         15, 22, 30, 38, 45, 51, 56, 60,
332*c83a76b0SSuyog Pawar         21, 29, 37, 44, 50, 55, 59, 62,
333*c83a76b0SSuyog Pawar         28, 36, 43, 49, 54, 58, 61, 63
334*c83a76b0SSuyog Pawar     },
335*c83a76b0SSuyog Pawar     /* Horizontal */
336*c83a76b0SSuyog Pawar     {
337*c83a76b0SSuyog Pawar         0,  1,  2,  3,  4,  5,  6,  7,
338*c83a76b0SSuyog Pawar         8,  9,  10, 11, 12, 13, 14, 15,
339*c83a76b0SSuyog Pawar         16, 17, 18, 19, 20, 21, 22, 23,
340*c83a76b0SSuyog Pawar         24, 25, 26, 27, 28, 29, 30, 31,
341*c83a76b0SSuyog Pawar         32, 33, 34, 35, 36, 37, 38, 39,
342*c83a76b0SSuyog Pawar         40, 41, 42, 43, 44, 45, 46, 47,
343*c83a76b0SSuyog Pawar         48, 49, 50, 51, 52, 53, 54, 55,
344*c83a76b0SSuyog Pawar         56, 57, 58, 59, 60, 61, 62, 63
345*c83a76b0SSuyog Pawar     },
346*c83a76b0SSuyog Pawar     /* Vertical */
347*c83a76b0SSuyog Pawar     {
348*c83a76b0SSuyog Pawar         0,  8,  16, 24, 32, 40, 48, 56,
349*c83a76b0SSuyog Pawar         1,  9,  17, 25, 33, 41, 49, 57,
350*c83a76b0SSuyog Pawar         2,  10, 18, 26, 34, 42, 50, 58,
351*c83a76b0SSuyog Pawar         3,  11, 19, 27, 35, 43, 51, 59,
352*c83a76b0SSuyog Pawar         4,  12, 20, 28, 36, 44, 52, 60,
353*c83a76b0SSuyog Pawar         5,  13, 21, 29, 37, 45, 53, 61,
354*c83a76b0SSuyog Pawar         6,  14, 22, 30, 38, 46, 54, 62,
355*c83a76b0SSuyog Pawar         7,  15, 23, 31, 39, 47, 55, 63
356*c83a76b0SSuyog Pawar     }
357*c83a76b0SSuyog Pawar };
358*c83a76b0SSuyog Pawar 
359*c83a76b0SSuyog Pawar /**
360*c83a76b0SSuyog Pawar  * Scan matrix for 4x4 Section 6.5.3
361*c83a76b0SSuyog Pawar  */
362*c83a76b0SSuyog Pawar const UWORD8  gau1_ihevc_scan4x4[][16] =
363*c83a76b0SSuyog Pawar {
364*c83a76b0SSuyog Pawar     /* Upright diagonal */
365*c83a76b0SSuyog Pawar     {
366*c83a76b0SSuyog Pawar         0,  2,  5,  9,
367*c83a76b0SSuyog Pawar         1,  4,  8,  12,
368*c83a76b0SSuyog Pawar         3,  7,  11, 14,
369*c83a76b0SSuyog Pawar         6,  10, 13, 15
370*c83a76b0SSuyog Pawar     },
371*c83a76b0SSuyog Pawar     /* Horizontal */
372*c83a76b0SSuyog Pawar     {
373*c83a76b0SSuyog Pawar         0,  1,  2,  3,
374*c83a76b0SSuyog Pawar         4,  5,  6,  7,
375*c83a76b0SSuyog Pawar         8,  9,  10, 11,
376*c83a76b0SSuyog Pawar         12, 13, 14, 15
377*c83a76b0SSuyog Pawar     },
378*c83a76b0SSuyog Pawar     /* Vertical */
379*c83a76b0SSuyog Pawar     {
380*c83a76b0SSuyog Pawar         0,  4,  8,  12,
381*c83a76b0SSuyog Pawar         1,  5,  9,  13,
382*c83a76b0SSuyog Pawar         2,  6,  10, 14,
383*c83a76b0SSuyog Pawar         3,  7,  11, 15
384*c83a76b0SSuyog Pawar     }
385*c83a76b0SSuyog Pawar };
386*c83a76b0SSuyog Pawar 
387*c83a76b0SSuyog Pawar /**
388*c83a76b0SSuyog Pawar  * Scan matrix for 4x4 Section 6.5.3
389*c83a76b0SSuyog Pawar  */
390*c83a76b0SSuyog Pawar const UWORD8  gau1_ihevc_scan2x2[][4] =
391*c83a76b0SSuyog Pawar {
392*c83a76b0SSuyog Pawar     /* Upright diagonal */
393*c83a76b0SSuyog Pawar     {
394*c83a76b0SSuyog Pawar         0,  2,
395*c83a76b0SSuyog Pawar         1,  3
396*c83a76b0SSuyog Pawar     },
397*c83a76b0SSuyog Pawar     /* Horizontal */
398*c83a76b0SSuyog Pawar     {
399*c83a76b0SSuyog Pawar         0,  1,
400*c83a76b0SSuyog Pawar         2,  3
401*c83a76b0SSuyog Pawar     },
402*c83a76b0SSuyog Pawar     /* Vertical */
403*c83a76b0SSuyog Pawar     {
404*c83a76b0SSuyog Pawar         0,  2,
405*c83a76b0SSuyog Pawar         1,  3,
406*c83a76b0SSuyog Pawar     }
407*c83a76b0SSuyog Pawar };
408*c83a76b0SSuyog Pawar 
409*c83a76b0SSuyog Pawar /**
410*c83a76b0SSuyog Pawar  * Table containing all the scan matrices
411*c83a76b0SSuyog Pawar  */
412*c83a76b0SSuyog Pawar const void *gapv_ihevc_scan[] =
413*c83a76b0SSuyog Pawar {
414*c83a76b0SSuyog Pawar     gau1_ihevc_scan2x2[0],
415*c83a76b0SSuyog Pawar     gau1_ihevc_scan4x4[0],
416*c83a76b0SSuyog Pawar     gau1_ihevc_scan8x8[0],
417*c83a76b0SSuyog Pawar 
418*c83a76b0SSuyog Pawar     gau1_ihevc_scan2x2[1],
419*c83a76b0SSuyog Pawar     gau1_ihevc_scan4x4[1],
420*c83a76b0SSuyog Pawar     gau1_ihevc_scan8x8[1],
421*c83a76b0SSuyog Pawar 
422*c83a76b0SSuyog Pawar     gau1_ihevc_scan2x2[2],
423*c83a76b0SSuyog Pawar     gau1_ihevc_scan4x4[2],
424*c83a76b0SSuyog Pawar     gau1_ihevc_scan8x8[2],
425*c83a76b0SSuyog Pawar 
426*c83a76b0SSuyog Pawar };
427*c83a76b0SSuyog Pawar 
428*c83a76b0SSuyog Pawar const void *gapv_ihevc_invscan[] =
429*c83a76b0SSuyog Pawar {
430*c83a76b0SSuyog Pawar     gau1_ihevc_invscan2x2[0],
431*c83a76b0SSuyog Pawar     gau1_ihevc_invscan4x4[0],
432*c83a76b0SSuyog Pawar     gau1_ihevc_invscan8x8[0],
433*c83a76b0SSuyog Pawar 
434*c83a76b0SSuyog Pawar     gau1_ihevc_invscan2x2[1],
435*c83a76b0SSuyog Pawar     gau1_ihevc_invscan4x4[1],
436*c83a76b0SSuyog Pawar     gau1_ihevc_invscan8x8[1],
437*c83a76b0SSuyog Pawar 
438*c83a76b0SSuyog Pawar     gau1_ihevc_invscan2x2[2],
439*c83a76b0SSuyog Pawar     gau1_ihevc_invscan4x4[2],
440*c83a76b0SSuyog Pawar     gau1_ihevc_invscan8x8[2],
441*c83a76b0SSuyog Pawar };
442*c83a76b0SSuyog Pawar /**
443*c83a76b0SSuyog Pawar  * Table for luma to chroma qp conversion
444*c83a76b0SSuyog Pawar  */
445*c83a76b0SSuyog Pawar 
446*c83a76b0SSuyog Pawar // FOR MAIN branch encoder ( 8 bit)
447*c83a76b0SSuyog Pawar const UWORD8 gau1_ihevc_chroma_qp_scale[58] =
448*c83a76b0SSuyog Pawar {
449*c83a76b0SSuyog Pawar 
450*c83a76b0SSuyog Pawar      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
451*c83a76b0SSuyog Pawar     17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 29, 30, 31, 32,
452*c83a76b0SSuyog Pawar     33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44,
453*c83a76b0SSuyog Pawar     45, 46, 47, 48, 49, 50, 51
454*c83a76b0SSuyog Pawar };
455*c83a76b0SSuyog Pawar 
456*c83a76b0SSuyog Pawar // FOR HBD branch encoder ( 8, 10 and 12 bit)
457*c83a76b0SSuyog Pawar const WORD8 gai1_ihevc_chroma_qp_scale[82]=  //EXTENDED for 12 bit
458*c83a76b0SSuyog Pawar {
459*c83a76b0SSuyog Pawar   -24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,
460*c83a76b0SSuyog Pawar   -12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,
461*c83a76b0SSuyog Pawar   0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,
462*c83a76b0SSuyog Pawar   17,18,19,20,21,22,23,24,25,26,27,28,29,29,30,31,32,
463*c83a76b0SSuyog Pawar   33,33,34,34,35,35,36,36,37,37,38,39,40,41,42,43,44,
464*c83a76b0SSuyog Pawar   45,46,47,48,49,50,51
465*c83a76b0SSuyog Pawar };
466*c83a76b0SSuyog Pawar 
467*c83a76b0SSuyog Pawar 
468*c83a76b0SSuyog Pawar /** constant planar factor values table */
469*c83a76b0SSuyog Pawar const UWORD8 gau1_ihevc_planar_factor[65] = {    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
470*c83a76b0SSuyog Pawar     11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
471*c83a76b0SSuyog Pawar     21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
472*c83a76b0SSuyog Pawar     31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
473*c83a76b0SSuyog Pawar     41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
474*c83a76b0SSuyog Pawar     51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
475*c83a76b0SSuyog Pawar     61, 62, 63, 64 };
476*c83a76b0SSuyog Pawar //AX CHANGES
477*c83a76b0SSuyog Pawar const UWORD8 gau1_ihevc_planar_factor_1[32] = {    1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9,
478*c83a76b0SSuyog Pawar     17, 17, 17, 17, 17, 17, 17, 17, 25, 25, 25, 25, 25, 25,
479*c83a76b0SSuyog Pawar     25, 25 };
480*c83a76b0SSuyog Pawar //AX CHANGES
481*c83a76b0SSuyog Pawar 
482*c83a76b0SSuyog Pawar /** g_ang_table = tan(actual angle) in Q5 format for all 33 modes */
483*c83a76b0SSuyog Pawar const WORD32 gai4_ihevc_ang_table_chroma[35] = { 0, 0, 32, 26, 21, 17, 13, 9, 5, 2, 0, -2,  -5, -9,
484*c83a76b0SSuyog Pawar     -13, -17, -21, -26, -32, -26, -21, -17, -13, -9, -5,
485*c83a76b0SSuyog Pawar     -2, 0, 2, 5, 9, 13, 17, 21, 26, 32 };
486*c83a76b0SSuyog Pawar /** g_invAngTable = Inverse angle in Q5 format, required for negative angles */
487*c83a76b0SSuyog Pawar const WORD32 gai4_ihevc_inv_ang_table_chroma[14] = { 4096, 1638, 910, 630, 482, 390, 315,
488*c83a76b0SSuyog Pawar     315, 390, 482, 630, 910, 1638, 4096 };
489*c83a76b0SSuyog Pawar 
490*c83a76b0SSuyog Pawar 
491*c83a76b0SSuyog Pawar /** constant planar factor values table */
492*c83a76b0SSuyog Pawar const UWORD8 gau1_ihevc_planar_factor_chroma[33] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
493*c83a76b0SSuyog Pawar     11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
494*c83a76b0SSuyog Pawar     21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
495*c83a76b0SSuyog Pawar     31, 32  };
496*c83a76b0SSuyog Pawar 
497*c83a76b0SSuyog Pawar 
498*c83a76b0SSuyog Pawar 
499*c83a76b0SSuyog Pawar /** Filter flag values for intra pred referenece filtering - intra pred mode is the index
500*c83a76b0SSuyog Pawar *   flag for nt = 4 is the Bit 0, nt = 8 is Bit 1, nt = 16 is Bit 2, nt = 32 is Bit 3
501*c83a76b0SSuyog Pawar */
502*c83a76b0SSuyog Pawar const UWORD8 gau1_intra_pred_ref_filter[] =
503*c83a76b0SSuyog Pawar {
504*c83a76b0SSuyog Pawar     14,  0, 14, 12, 12, 12, 12,
505*c83a76b0SSuyog Pawar     12, 12,  8,  0,  8, 12, 12,
506*c83a76b0SSuyog Pawar     12, 12, 12, 12, 14, 12, 12,
507*c83a76b0SSuyog Pawar     12, 12, 12, 12,  8,  0,  8,
508*c83a76b0SSuyog Pawar     12, 12, 12, 12, 12, 12, 14
509*c83a76b0SSuyog Pawar };
510*c83a76b0SSuyog Pawar 
511*c83a76b0SSuyog Pawar 
512*c83a76b0SSuyog Pawar const WORD8 gi1_table_edge_idx[8] = { 1, 2, 0, 3, 4, 0, 0, 0 }; /* First 5 values are valid. Last 3 dummy values are added to help SIMD load*/
513*c83a76b0SSuyog Pawar 
514*c83a76b0SSuyog Pawar const UWORD8 gu1_table_band_idx[32] = {  0,  1,  2,  3,  4,  5,  6,  7,
515*c83a76b0SSuyog Pawar                                          8,  9, 10, 11, 12, 13, 14, 15,
516*c83a76b0SSuyog Pawar                                         16, 17, 18, 19, 20, 21, 22, 23,
517*c83a76b0SSuyog Pawar                                         24, 25, 26, 27, 28, 29, 30, 31
518*c83a76b0SSuyog Pawar };
519*c83a76b0SSuyog Pawar 
520*c83a76b0SSuyog Pawar const UWORD16 gu2_table_band_idx[32] = {  0,  1,  2,  3,  4,  5,  6,  7,
521*c83a76b0SSuyog Pawar                                          8,  9, 10, 11, 12, 13, 14, 15,
522*c83a76b0SSuyog Pawar                                         16, 17, 18, 19, 20, 21, 22, 23,
523*c83a76b0SSuyog Pawar                                         24, 25, 26, 27, 28, 29, 30, 31
524*c83a76b0SSuyog Pawar };
525*c83a76b0SSuyog Pawar 
526*c83a76b0SSuyog Pawar #ifdef ENABLE_SSE4_1_INTR
527*c83a76b0SSuyog Pawar /*Used as a lookup table to have popcnt instruction working for SSE4.1 platform.
528*c83a76b0SSuyog Pawar Each unit indicates number of 1s the index at which it is persent
529*c83a76b0SSuyog Pawar */
530*c83a76b0SSuyog Pawar const WORD8   gi1_popcnt_byte_table[] =
531*c83a76b0SSuyog Pawar {
532*c83a76b0SSuyog Pawar     0,  1,  1,  2,  1,  2,  2,  3,  1,  2,  2,  3,  2,  3,  3,  4,
533*c83a76b0SSuyog Pawar     1,  2,  2,  3,  2,  3,  3,  4,  2,  3,  3,  4,  3,  4,  4,  5,
534*c83a76b0SSuyog Pawar     1,  2,  2,  3,  2,  3,  3,  4,  2,  3,  3,  4,  3,  4,  4,  5,
535*c83a76b0SSuyog Pawar     2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
536*c83a76b0SSuyog Pawar     1,  2,  2,  3,  2,  3,  3,  4,  2,  3,  3,  4,  3,  4,  4,  5,
537*c83a76b0SSuyog Pawar     2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
538*c83a76b0SSuyog Pawar     2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
539*c83a76b0SSuyog Pawar     3,  4,  4,  5,  4,  5,  5,  6,  4,  5,  5,  6,  5,  6,  6,  7,
540*c83a76b0SSuyog Pawar     1,  2,  2,  3,  2,  3,  3,  4,  2,  3,  3,  4,  3,  4,  4,  5,
541*c83a76b0SSuyog Pawar     2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
542*c83a76b0SSuyog Pawar     2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
543*c83a76b0SSuyog Pawar     3,  4,  4,  5,  4,  5,  5,  6,  4,  5,  5,  6,  5,  6,  6,  7,
544*c83a76b0SSuyog Pawar     2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
545*c83a76b0SSuyog Pawar     3,  4,  4,  5,  4,  5,  5,  6,  4,  5,  5,  6,  5,  6,  6,  7,
546*c83a76b0SSuyog Pawar     3,  4,  4,  5,  4,  5,  5,  6,  4,  5,  5,  6,  5,  6,  6,  7,
547*c83a76b0SSuyog Pawar     4,  5,  5,  6,  5,  6,  6,  7,  5,  6,  6,  7,  6,  7,  7,  8
548*c83a76b0SSuyog Pawar };
549*c83a76b0SSuyog Pawar #endif
550