xref: /aosp_15_r20/external/libhevc/encoder/ihevce_global_tables.c (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar  *
3*c83a76b0SSuyog Pawar  * Copyright (C) 2018 The Android Open Source Project
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  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*c83a76b0SSuyog Pawar */
20*c83a76b0SSuyog Pawar 
21*c83a76b0SSuyog Pawar /**
22*c83a76b0SSuyog Pawar ******************************************************************************
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * @file ihevce_global_tables.c
25*c83a76b0SSuyog Pawar *
26*c83a76b0SSuyog Pawar * @brief
27*c83a76b0SSuyog Pawar *    This file contains definitions of global tables used by the encoder
28*c83a76b0SSuyog Pawar *
29*c83a76b0SSuyog Pawar * @author
30*c83a76b0SSuyog Pawar *    Ittiam
31*c83a76b0SSuyog Pawar *
32*c83a76b0SSuyog Pawar ******************************************************************************
33*c83a76b0SSuyog Pawar */
34*c83a76b0SSuyog Pawar 
35*c83a76b0SSuyog Pawar /*****************************************************************************/
36*c83a76b0SSuyog Pawar /* File Includes                                                             */
37*c83a76b0SSuyog Pawar /*****************************************************************************/
38*c83a76b0SSuyog Pawar /* System include files */
39*c83a76b0SSuyog Pawar #include <stdio.h>
40*c83a76b0SSuyog Pawar #include <string.h>
41*c83a76b0SSuyog Pawar #include <stdlib.h>
42*c83a76b0SSuyog Pawar #include <assert.h>
43*c83a76b0SSuyog Pawar #include <stdarg.h>
44*c83a76b0SSuyog Pawar #include <math.h>
45*c83a76b0SSuyog Pawar 
46*c83a76b0SSuyog Pawar /* User include files */
47*c83a76b0SSuyog Pawar #include "ihevc_typedefs.h"
48*c83a76b0SSuyog Pawar #include "itt_video_api.h"
49*c83a76b0SSuyog Pawar #include "ihevce_api.h"
50*c83a76b0SSuyog Pawar 
51*c83a76b0SSuyog Pawar #include "rc_cntrl_param.h"
52*c83a76b0SSuyog Pawar #include "rc_frame_info_collector.h"
53*c83a76b0SSuyog Pawar #include "rc_look_ahead_params.h"
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar #include "ihevc_defs.h"
56*c83a76b0SSuyog Pawar #include "ihevc_structs.h"
57*c83a76b0SSuyog Pawar #include "ihevc_platform_macros.h"
58*c83a76b0SSuyog Pawar #include "ihevc_deblk.h"
59*c83a76b0SSuyog Pawar #include "ihevc_itrans_recon.h"
60*c83a76b0SSuyog Pawar #include "ihevc_chroma_itrans_recon.h"
61*c83a76b0SSuyog Pawar #include "ihevc_chroma_intra_pred.h"
62*c83a76b0SSuyog Pawar #include "ihevc_intra_pred.h"
63*c83a76b0SSuyog Pawar #include "ihevc_inter_pred.h"
64*c83a76b0SSuyog Pawar #include "ihevc_mem_fns.h"
65*c83a76b0SSuyog Pawar #include "ihevc_padding.h"
66*c83a76b0SSuyog Pawar #include "ihevc_weighted_pred.h"
67*c83a76b0SSuyog Pawar #include "ihevc_sao.h"
68*c83a76b0SSuyog Pawar #include "ihevc_resi_trans.h"
69*c83a76b0SSuyog Pawar #include "ihevc_quant_iquant_ssd.h"
70*c83a76b0SSuyog Pawar #include "ihevc_cabac_tables.h"
71*c83a76b0SSuyog Pawar 
72*c83a76b0SSuyog Pawar #include "ihevce_defs.h"
73*c83a76b0SSuyog Pawar #include "ihevce_lap_enc_structs.h"
74*c83a76b0SSuyog Pawar #include "ihevce_multi_thrd_structs.h"
75*c83a76b0SSuyog Pawar #include "ihevce_multi_thrd_funcs.h"
76*c83a76b0SSuyog Pawar #include "ihevce_me_common_defs.h"
77*c83a76b0SSuyog Pawar #include "ihevce_had_satd.h"
78*c83a76b0SSuyog Pawar #include "ihevce_error_codes.h"
79*c83a76b0SSuyog Pawar #include "ihevce_bitstream.h"
80*c83a76b0SSuyog Pawar #include "ihevce_cabac.h"
81*c83a76b0SSuyog Pawar #include "ihevce_rdoq_macros.h"
82*c83a76b0SSuyog Pawar #include "ihevce_function_selector.h"
83*c83a76b0SSuyog Pawar #include "ihevce_enc_structs.h"
84*c83a76b0SSuyog Pawar #include "ihevce_cmn_utils_instr_set_router.h"
85*c83a76b0SSuyog Pawar #include "hme_datatype.h"
86*c83a76b0SSuyog Pawar #include "hme_common_defs.h"
87*c83a76b0SSuyog Pawar #include "hme_common_utils.h"
88*c83a76b0SSuyog Pawar #include "hme_interface.h"
89*c83a76b0SSuyog Pawar #include "hme_defs.h"
90*c83a76b0SSuyog Pawar #include "ihevce_me_instr_set_router.h"
91*c83a76b0SSuyog Pawar #include "hme_err_compute.h"
92*c83a76b0SSuyog Pawar #include "hme_globals.h"
93*c83a76b0SSuyog Pawar #include "ihevce_entropy_structs.h"
94*c83a76b0SSuyog Pawar #include "ihevce_enc_loop_structs.h"
95*c83a76b0SSuyog Pawar #include "ihevce_enc_loop_utils.h"
96*c83a76b0SSuyog Pawar #include "ihevce_enc_loop_pass.h"
97*c83a76b0SSuyog Pawar #include "ihevce_global_tables.h"
98*c83a76b0SSuyog Pawar 
99*c83a76b0SSuyog Pawar /*****************************************************************************/
100*c83a76b0SSuyog Pawar /* Globals                                                                   */
101*c83a76b0SSuyog Pawar /*****************************************************************************/
102*c83a76b0SSuyog Pawar const level_data_t g_as_level_data[TOTAL_NUM_LEVELS] = {
103*c83a76b0SSuyog Pawar     /* LEVEL1 */
104*c83a76b0SSuyog Pawar     { LEVEL1, 552960, 36864, { 128, 0 }, { 350, 0 }, 2, 16, 1, 1 },
105*c83a76b0SSuyog Pawar 
106*c83a76b0SSuyog Pawar     /* LEVEL2 */
107*c83a76b0SSuyog Pawar     { LEVEL2, 3686400, 122880, { 1500, 0 }, { 1500, 0 }, 2, 16, 1, 1 },
108*c83a76b0SSuyog Pawar 
109*c83a76b0SSuyog Pawar     /* LEVEL2_1 */
110*c83a76b0SSuyog Pawar     { LEVEL2_1, 7372800, 245760, { 3000, 0 }, { 3000, 0 }, 2, 20, 1, 1 },
111*c83a76b0SSuyog Pawar 
112*c83a76b0SSuyog Pawar     /* LEVEL3 */
113*c83a76b0SSuyog Pawar     { LEVEL3, 16588800, 552960, { 6000, 0 }, { 6000, 0 }, 2, 30, 2, 2 },
114*c83a76b0SSuyog Pawar 
115*c83a76b0SSuyog Pawar     /* LEVEL3_1 */
116*c83a76b0SSuyog Pawar     { LEVEL3_1, 33177600, 983040, { 10000, 0 }, { 10000, 0 }, 2, 40, 3, 3 },
117*c83a76b0SSuyog Pawar 
118*c83a76b0SSuyog Pawar     /* LEVEL4 */
119*c83a76b0SSuyog Pawar     { LEVEL4, 66846720, 2228224, { 12000, 30000 }, { 12000, 30000 }, 4, 75, 5, 5 },
120*c83a76b0SSuyog Pawar 
121*c83a76b0SSuyog Pawar     /* LEVEL4_1 */
122*c83a76b0SSuyog Pawar     { LEVEL4_1, 133693440, 2228224, { 20000, 50000 }, { 20000, 50000 }, 4, 75, 5, 5 },
123*c83a76b0SSuyog Pawar 
124*c83a76b0SSuyog Pawar     /* LEVEL5 */
125*c83a76b0SSuyog Pawar     { LEVEL5, 267386880, 8912896, { 25000, 100000 }, { 25000, 100000 }, 6, 200, 11, 10 },
126*c83a76b0SSuyog Pawar 
127*c83a76b0SSuyog Pawar     /* LEVEL5_1 */
128*c83a76b0SSuyog Pawar     { LEVEL5_1, 534773760, 8912896, { 40000, 160000 }, { 40000, 160000 }, 8, 200, 11, 10 },
129*c83a76b0SSuyog Pawar 
130*c83a76b0SSuyog Pawar     /* LEVEL5_2 */
131*c83a76b0SSuyog Pawar     { LEVEL5_2, 1069547520, 8912896, { 60000, 240000 }, { 60000, 240000 }, 8, 200, 11, 10 },
132*c83a76b0SSuyog Pawar 
133*c83a76b0SSuyog Pawar     /* LEVEL6 */
134*c83a76b0SSuyog Pawar     { LEVEL6, 1069547520, 35651584, { 60000, 240000 }, { 60000, 240000 }, 8, 600, 22, 20 },
135*c83a76b0SSuyog Pawar 
136*c83a76b0SSuyog Pawar     /* LEVEL6_1 */
137*c83a76b0SSuyog Pawar     { LEVEL6_1, 2139095040, 35651584, { 120000, 480000 }, { 120000, 480000 }, 8, 600, 22, 20 },
138*c83a76b0SSuyog Pawar 
139*c83a76b0SSuyog Pawar     /* LEVEL6_2 */
140*c83a76b0SSuyog Pawar     { LEVEL6_2, 4278190080, 35651584, { 240000, 800000 }, { 240000, 800000 }, 6, 600, 22, 20 },
141*c83a76b0SSuyog Pawar 
142*c83a76b0SSuyog Pawar };
143*c83a76b0SSuyog Pawar 
144*c83a76b0SSuyog Pawar /** \brief Default flat Scaling matrix for 4x4 transform */
145*c83a76b0SSuyog Pawar const WORD16 gi2_flat_scale_mat_4x4[] = { 16, 16, 16, 16, 16, 16, 16, 16,
146*c83a76b0SSuyog Pawar                                           16, 16, 16, 16, 16, 16, 16, 16 };
147*c83a76b0SSuyog Pawar 
148*c83a76b0SSuyog Pawar /** \brief Default flat Scaling matrix for 8x8 transform */
149*c83a76b0SSuyog Pawar const WORD16 gi2_flat_scale_mat_8x8[] = { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
150*c83a76b0SSuyog Pawar                                           16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
151*c83a76b0SSuyog Pawar                                           16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
152*c83a76b0SSuyog Pawar                                           16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
153*c83a76b0SSuyog Pawar                                           16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 };
154*c83a76b0SSuyog Pawar 
155*c83a76b0SSuyog Pawar /** \brief Default flat Scaling matrix for 16x16 transform */
156*c83a76b0SSuyog Pawar const WORD16 gi2_flat_scale_mat_16x16[] = {
157*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
158*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
159*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
160*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
161*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
162*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
163*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
164*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
165*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
166*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
167*c83a76b0SSuyog Pawar     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
168*c83a76b0SSuyog Pawar };
169*c83a76b0SSuyog Pawar 
170*c83a76b0SSuyog Pawar /** \brief Default flat ReScaling matrix for 4x4 transform */
171*c83a76b0SSuyog Pawar const WORD16 gi2_flat_rescale_mat_4x4[] = { 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
172*c83a76b0SSuyog Pawar                                             2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048 };
173*c83a76b0SSuyog Pawar 
174*c83a76b0SSuyog Pawar /** \brief Default flat ReScaling matrix for 8x8 transform */
175*c83a76b0SSuyog Pawar const WORD16 gi2_flat_rescale_mat_8x8[] = {
176*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
177*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
178*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
179*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048
180*c83a76b0SSuyog Pawar };
181*c83a76b0SSuyog Pawar 
182*c83a76b0SSuyog Pawar /** \brief Default flat ReScaling matrix for 16x16 transform */
183*c83a76b0SSuyog Pawar const WORD16 gi2_flat_rescale_mat_16x16[] = {
184*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
185*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
186*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
187*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
188*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
189*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
190*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
191*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
192*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
193*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
194*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
195*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
196*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
197*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
198*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048,
199*c83a76b0SSuyog Pawar     2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048
200*c83a76b0SSuyog Pawar };
201*c83a76b0SSuyog Pawar 
202*c83a76b0SSuyog Pawar /**
203*c83a76b0SSuyog Pawar * @brief Give the scanning order of csb in a 32x32 TU
204*c83a76b0SSuyog Pawar * based on first idx. 0 - upright_diagonal, 1 - horizontal, 2 - vertical scan
205*c83a76b0SSuyog Pawar */
206*c83a76b0SSuyog Pawar const UWORD8 g_u1_scan_table_8x8[3][64] = {
207*c83a76b0SSuyog Pawar     /* diag up right scan */
208*c83a76b0SSuyog Pawar     { 0,  8,  1,  16, 9,  2,  24, 17, 10, 3,  32, 25, 18, 11, 4,  40, 33, 26, 19, 12, 5,  48,
209*c83a76b0SSuyog Pawar       41, 34, 27, 20, 13, 6,  56, 49, 42, 35, 28, 21, 14, 7,  57, 50, 43, 36, 29, 22, 15, 58,
210*c83a76b0SSuyog Pawar       51, 44, 37, 30, 23, 59, 52, 45, 38, 31, 60, 53, 46, 39, 61, 54, 47, 62, 55, 63 },
211*c83a76b0SSuyog Pawar 
212*c83a76b0SSuyog Pawar     /* horizontal scan */
213*c83a76b0SSuyog Pawar     { 0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
214*c83a76b0SSuyog Pawar       22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
215*c83a76b0SSuyog Pawar       44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 },
216*c83a76b0SSuyog Pawar 
217*c83a76b0SSuyog Pawar     /* vertical scan */
218*c83a76b0SSuyog Pawar     { 0,  8,  16, 24, 32, 40, 48, 56, 1,  9,  17, 25, 33, 41, 49, 57, 2,  10, 18, 26, 34, 42,
219*c83a76b0SSuyog Pawar       50, 58, 3,  11, 19, 27, 35, 43, 51, 59, 4,  12, 20, 28, 36, 44, 52, 60, 5,  13, 21, 29,
220*c83a76b0SSuyog Pawar       37, 45, 53, 61, 6,  14, 22, 30, 38, 46, 54, 62, 7,  15, 23, 31, 39, 47, 55, 63 }
221*c83a76b0SSuyog Pawar };
222*c83a76b0SSuyog Pawar 
223*c83a76b0SSuyog Pawar /**
224*c83a76b0SSuyog Pawar * @brief Give the scanning order of csb in a 16x16 TU  or 4x4 csb
225*c83a76b0SSuyog Pawar * based on first idx. 0 - upright_diagonal, 1 - horizontal, 2 - vertical scan
226*c83a76b0SSuyog Pawar */
227*c83a76b0SSuyog Pawar const UWORD8 g_u1_scan_table_4x4[3][16] = {
228*c83a76b0SSuyog Pawar     /* diag up right scan */
229*c83a76b0SSuyog Pawar     { 0, 4, 1, 8, 5, 2, 12, 9, 6, 3, 13, 10, 7, 14, 11, 15 },
230*c83a76b0SSuyog Pawar 
231*c83a76b0SSuyog Pawar     /* horizontal scan */
232*c83a76b0SSuyog Pawar     { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
233*c83a76b0SSuyog Pawar 
234*c83a76b0SSuyog Pawar     /* vertical scan */
235*c83a76b0SSuyog Pawar     { 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15 }
236*c83a76b0SSuyog Pawar };
237*c83a76b0SSuyog Pawar 
238*c83a76b0SSuyog Pawar /**
239*c83a76b0SSuyog Pawar * @brief Give the scanning order of csb in a 8x8 TU
240*c83a76b0SSuyog Pawar * based on first idx. 0 - upright_diagonal, 1 - horizontal, 2 - vertical scan
241*c83a76b0SSuyog Pawar */
242*c83a76b0SSuyog Pawar const UWORD8 g_u1_scan_table_2x2[3][4] = {
243*c83a76b0SSuyog Pawar     /* diag up right scan */
244*c83a76b0SSuyog Pawar     { 0, 2, 1, 3 },
245*c83a76b0SSuyog Pawar 
246*c83a76b0SSuyog Pawar     /* horizontal scan */
247*c83a76b0SSuyog Pawar     { 0, 1, 2, 3 },
248*c83a76b0SSuyog Pawar 
249*c83a76b0SSuyog Pawar     /* vertical scan */
250*c83a76b0SSuyog Pawar     { 0, 2, 1, 3 }
251*c83a76b0SSuyog Pawar };
252*c83a76b0SSuyog Pawar 
253*c83a76b0SSuyog Pawar /**
254*c83a76b0SSuyog Pawar * @brief Give the scanning order of csb in a 4x4 TU
255*c83a76b0SSuyog Pawar * scan idx. doesn't matter as it's 0 for all cases
256*c83a76b0SSuyog Pawar */
257*c83a76b0SSuyog Pawar const UWORD8 g_u1_scan_table_1x1[1] = { 0 };
258*c83a76b0SSuyog Pawar 
259*c83a76b0SSuyog Pawar /**
260*c83a76b0SSuyog Pawar ******************************************************************************
261*c83a76b0SSuyog Pawar *  @brief For a given frac pt, fracx, fracy, this module figures out the
262*c83a76b0SSuyog Pawar *  corresponding fpel/hpel buffers along with x and y offsets if any. The
263*c83a76b0SSuyog Pawar *  grid used is shown as follows:
264*c83a76b0SSuyog Pawar *    A j E k B
265*c83a76b0SSuyog Pawar *    l m n o p
266*c83a76b0SSuyog Pawar *    F q G r H
267*c83a76b0SSuyog Pawar *    s t u v w
268*c83a76b0SSuyog Pawar *    C x I y D
269*c83a76b0SSuyog Pawar *
270*c83a76b0SSuyog Pawar *  In this grid capital letters are fpel/hpel bufs.
271*c83a76b0SSuyog Pawar ******************************************************************************
272*c83a76b0SSuyog Pawar */
273*c83a76b0SSuyog Pawar qpel_input_buf_cfg_t gas_qpel_inp_buf_cfg[4][4] = {
274*c83a76b0SSuyog Pawar     {
275*c83a76b0SSuyog Pawar         /* 0, 0 pt: both buf id would be fxfy = 0 */
276*c83a76b0SSuyog Pawar         { 0, 0, 0, 0, 0, 0 },
277*c83a76b0SSuyog Pawar         /* 1, 0 pt: pt j; avg of A and E */
278*c83a76b0SSuyog Pawar         { 0, 0, 0, 1, 0, 0 },
279*c83a76b0SSuyog Pawar         /* 2, 0 pt: pt E, buf id 0 and 1 would be hxfy = 1 */
280*c83a76b0SSuyog Pawar         { 1, 0, 0, 1, 0, 0 },
281*c83a76b0SSuyog Pawar         /* 3, 0 pt: pt k, avg of E and B */
282*c83a76b0SSuyog Pawar         { 1, 0, 0, 0, 1, 0 },
283*c83a76b0SSuyog Pawar     },
284*c83a76b0SSuyog Pawar     {
285*c83a76b0SSuyog Pawar         /* 0, 1 pt: pt l: avg of A and F */
286*c83a76b0SSuyog Pawar         { 0, 0, 0, 2, 0, 0 },
287*c83a76b0SSuyog Pawar         /* 1, 1 pt: pt m : avg of E and F */
288*c83a76b0SSuyog Pawar         { 1, 0, 0, 2, 0, 0 },
289*c83a76b0SSuyog Pawar         /* 2, 2 pt: pt n: avg of E and G */
290*c83a76b0SSuyog Pawar         { 1, 0, 0, 3, 0, 0 },
291*c83a76b0SSuyog Pawar         /* 3, 2 pt : pt o: avg of E and H */
292*c83a76b0SSuyog Pawar         { 1, 0, 0, 2, 1, 0 },
293*c83a76b0SSuyog Pawar     },
294*c83a76b0SSuyog Pawar     {
295*c83a76b0SSuyog Pawar         /* 0, 2 pt: pt F; both buf id would be fxhy = 2 */
296*c83a76b0SSuyog Pawar         { 2, 0, 0, 2, 0, 0 },
297*c83a76b0SSuyog Pawar         /* 1, 2 pt: pt q; avg of F and G */
298*c83a76b0SSuyog Pawar         { 2, 0, 0, 3, 0, 0 },
299*c83a76b0SSuyog Pawar         /* 2, 2 pt: pt G: both buf id would be hxhy = 3 */
300*c83a76b0SSuyog Pawar         { 3, 0, 0, 3, 0, 0 },
301*c83a76b0SSuyog Pawar         /* 2, 3 pt: pt r: avg of G and H */
302*c83a76b0SSuyog Pawar         { 3, 0, 0, 2, 1, 0 },
303*c83a76b0SSuyog Pawar     },
304*c83a76b0SSuyog Pawar     {
305*c83a76b0SSuyog Pawar         /* 0, 3 pt: pt s; avg of F and C */
306*c83a76b0SSuyog Pawar         { 2, 0, 0, 0, 0, 1 },
307*c83a76b0SSuyog Pawar         /* 1, 3 ot: pt t; avg of F and I */
308*c83a76b0SSuyog Pawar         { 2, 0, 0, 1, 0, 1 },
309*c83a76b0SSuyog Pawar         /* 2, 3 pt: pt u, avg of G and I */
310*c83a76b0SSuyog Pawar         { 3, 0, 0, 1, 0, 1 },
311*c83a76b0SSuyog Pawar         /* 3, 3 pt; pt v, avg of H and I */
312*c83a76b0SSuyog Pawar         { 2, 1, 0, 1, 0, 1 },
313*c83a76b0SSuyog Pawar     }
314*c83a76b0SSuyog Pawar };
315*c83a76b0SSuyog Pawar 
316*c83a76b0SSuyog Pawar /**
317*c83a76b0SSuyog Pawar * @brief is partition vertical
318*c83a76b0SSuyog Pawar */
319*c83a76b0SSuyog Pawar const WORD8 gai1_is_part_vertical[TOT_NUM_PARTS] = { 0, 1, 1, 0, 0, 0, 0, 0, 0,
320*c83a76b0SSuyog Pawar                                                      1, 1, 1, 1, 0, 0, 0, 0 };
321*c83a76b0SSuyog Pawar 
322*c83a76b0SSuyog Pawar /**
323*c83a76b0SSuyog Pawar * @brief partition dimensions
324*c83a76b0SSuyog Pawar */
325*c83a76b0SSuyog Pawar const WORD8 gai1_part_wd_and_ht[TOT_NUM_PARTS][2] = { { 16, 16 }, { 16, 8 }, { 16, 8 },  { 8, 16 },
326*c83a76b0SSuyog Pawar                                                       { 8, 16 },  { 8, 8 },  { 8, 8 },   { 8, 8 },
327*c83a76b0SSuyog Pawar                                                       { 8, 8 },   { 16, 4 }, { 16, 12 }, { 16, 12 },
328*c83a76b0SSuyog Pawar                                                       { 16, 4 },  { 4, 16 }, { 12, 16 }, { 12, 16 },
329*c83a76b0SSuyog Pawar                                                       { 4, 16 } };
330*c83a76b0SSuyog Pawar 
331*c83a76b0SSuyog Pawar /**
332*c83a76b0SSuyog Pawar ******************************************************************************
333*c83a76b0SSuyog Pawar *  @brief bits to code given ref id assuming more than 2 ref ids active
334*c83a76b0SSuyog Pawar ******************************************************************************
335*c83a76b0SSuyog Pawar */
336*c83a76b0SSuyog Pawar UWORD8 gau1_ref_bits[16] = { 1, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 9 };
337*c83a76b0SSuyog Pawar 
338*c83a76b0SSuyog Pawar /**
339*c83a76b0SSuyog Pawar * @brief raster to zscan lookup table
340*c83a76b0SSuyog Pawar */
341*c83a76b0SSuyog Pawar const UWORD8 gau1_ctb_raster_to_zscan[256] = {
342*c83a76b0SSuyog Pawar     0,   1,   4,   5,   16,  17,  20,  21,  64,  65,  68,  69,  80,  81,  84,  85,  2,   3,   6,
343*c83a76b0SSuyog Pawar     7,   18,  19,  22,  23,  66,  67,  70,  71,  82,  83,  86,  87,  8,   9,   12,  13,  24,  25,
344*c83a76b0SSuyog Pawar     28,  29,  72,  73,  76,  77,  88,  89,  92,  93,  10,  11,  14,  15,  26,  27,  30,  31,  74,
345*c83a76b0SSuyog Pawar     75,  78,  79,  90,  91,  94,  95,  32,  33,  36,  37,  48,  49,  52,  53,  96,  97,  100, 101,
346*c83a76b0SSuyog Pawar     112, 113, 116, 117, 34,  35,  38,  39,  50,  51,  54,  55,  98,  99,  102, 103, 114, 115, 118,
347*c83a76b0SSuyog Pawar     119, 40,  41,  44,  45,  56,  57,  60,  61,  104, 105, 108, 109, 120, 121, 124, 125, 42,  43,
348*c83a76b0SSuyog Pawar     46,  47,  58,  59,  62,  63,  106, 107, 110, 111, 122, 123, 126, 127, 128, 129, 132, 133, 144,
349*c83a76b0SSuyog Pawar     145, 148, 149, 192, 193, 196, 197, 208, 209, 212, 213, 130, 131, 134, 135, 146, 147, 150, 151,
350*c83a76b0SSuyog Pawar     194, 195, 198, 199, 210, 211, 214, 215, 136, 137, 140, 141, 152, 153, 156, 157, 200, 201, 204,
351*c83a76b0SSuyog Pawar     205, 216, 217, 220, 221, 138, 139, 142, 143, 154, 155, 158, 159, 202, 203, 206, 207, 218, 219,
352*c83a76b0SSuyog Pawar     222, 223, 160, 161, 164, 165, 176, 177, 180, 181, 224, 225, 228, 229, 240, 241, 244, 245, 162,
353*c83a76b0SSuyog Pawar     163, 166, 167, 178, 179, 182, 183, 226, 227, 230, 231, 242, 243, 246, 247, 168, 169, 172, 173,
354*c83a76b0SSuyog Pawar     184, 185, 188, 189, 232, 233, 236, 237, 248, 249, 252, 253, 170, 171, 174, 175, 186, 187, 190,
355*c83a76b0SSuyog Pawar     191, 234, 235, 238, 239, 250, 251, 254, 255
356*c83a76b0SSuyog Pawar };
357*c83a76b0SSuyog Pawar 
358*c83a76b0SSuyog Pawar /**
359*c83a76b0SSuyog Pawar * @brief <Fill me>
360*c83a76b0SSuyog Pawar */
361*c83a76b0SSuyog Pawar UWORD32 gau4_frame_qstep_multiplier[54] = { 16, 16, 16, 15, 15, 15, 15, 15, 15, 13, 13, 13, 13, 12,
362*c83a76b0SSuyog Pawar                                             12, 11, 11, 10, 10, 9,  9,  8,  8,  8,  7,  7,  7,  6,
363*c83a76b0SSuyog Pawar                                             6,  5,  5,  5,  4,  4,  3,  3,  3,  2,  2,  2,  1,  1,
364*c83a76b0SSuyog Pawar                                             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 };
365*c83a76b0SSuyog Pawar 
366*c83a76b0SSuyog Pawar /**
367*c83a76b0SSuyog Pawar ******************************************************************************
368*c83a76b0SSuyog Pawar * @brief  Look up table for choosing the appropriate function for
369*c83a76b0SSuyog Pawar *         Intra prediction
370*c83a76b0SSuyog Pawar *
371*c83a76b0SSuyog Pawar * @remarks Same look up table enums are used for luma & chroma but each
372*c83a76b0SSuyog Pawar *          have seperate functions implemented
373*c83a76b0SSuyog Pawar ******************************************************************************
374*c83a76b0SSuyog Pawar */
375*c83a76b0SSuyog Pawar WORD32 g_i4_ip_funcs[MAX_NUM_IP_MODES] = {
376*c83a76b0SSuyog Pawar     IP_FUNC_MODE_0, /* Mode 0 */
377*c83a76b0SSuyog Pawar     IP_FUNC_MODE_1, /* Mode 1 */
378*c83a76b0SSuyog Pawar     IP_FUNC_MODE_2, /* Mode 2 */
379*c83a76b0SSuyog Pawar     IP_FUNC_MODE_3TO9, /* Mode 3 */
380*c83a76b0SSuyog Pawar     IP_FUNC_MODE_3TO9, /* Mode 4 */
381*c83a76b0SSuyog Pawar     IP_FUNC_MODE_3TO9, /* Mode 5 */
382*c83a76b0SSuyog Pawar     IP_FUNC_MODE_3TO9, /* Mode 6 */
383*c83a76b0SSuyog Pawar     IP_FUNC_MODE_3TO9, /* Mode 7 */
384*c83a76b0SSuyog Pawar     IP_FUNC_MODE_3TO9, /* Mode 8 */
385*c83a76b0SSuyog Pawar     IP_FUNC_MODE_3TO9, /* Mode 9 */
386*c83a76b0SSuyog Pawar     IP_FUNC_MODE_10, /* Mode 10 */
387*c83a76b0SSuyog Pawar     IP_FUNC_MODE_11TO17, /* Mode 11 */
388*c83a76b0SSuyog Pawar     IP_FUNC_MODE_11TO17, /* Mode 12 */
389*c83a76b0SSuyog Pawar     IP_FUNC_MODE_11TO17, /* Mode 13 */
390*c83a76b0SSuyog Pawar     IP_FUNC_MODE_11TO17, /* Mode 14 */
391*c83a76b0SSuyog Pawar     IP_FUNC_MODE_11TO17, /* Mode 15 */
392*c83a76b0SSuyog Pawar     IP_FUNC_MODE_11TO17, /* Mode 16 */
393*c83a76b0SSuyog Pawar     IP_FUNC_MODE_11TO17, /* Mode 17 */
394*c83a76b0SSuyog Pawar     IP_FUNC_MODE_18_34, /* Mode 18 */
395*c83a76b0SSuyog Pawar     IP_FUNC_MODE_19TO25, /* Mode 19 */
396*c83a76b0SSuyog Pawar     IP_FUNC_MODE_19TO25, /* Mode 20 */
397*c83a76b0SSuyog Pawar     IP_FUNC_MODE_19TO25, /* Mode 21 */
398*c83a76b0SSuyog Pawar     IP_FUNC_MODE_19TO25, /* Mode 22 */
399*c83a76b0SSuyog Pawar     IP_FUNC_MODE_19TO25, /* Mode 23 */
400*c83a76b0SSuyog Pawar     IP_FUNC_MODE_19TO25, /* Mode 24 */
401*c83a76b0SSuyog Pawar     IP_FUNC_MODE_19TO25, /* Mode 25 */
402*c83a76b0SSuyog Pawar     IP_FUNC_MODE_26, /* Mode 26 */
403*c83a76b0SSuyog Pawar     IP_FUNC_MODE_27TO33, /* Mode 27 */
404*c83a76b0SSuyog Pawar     IP_FUNC_MODE_27TO33, /* Mode 26 */
405*c83a76b0SSuyog Pawar     IP_FUNC_MODE_27TO33, /* Mode 29 */
406*c83a76b0SSuyog Pawar     IP_FUNC_MODE_27TO33, /* Mode 30 */
407*c83a76b0SSuyog Pawar     IP_FUNC_MODE_27TO33, /* Mode 31 */
408*c83a76b0SSuyog Pawar     IP_FUNC_MODE_27TO33, /* Mode 32 */
409*c83a76b0SSuyog Pawar     IP_FUNC_MODE_27TO33, /* Mode 33 */
410*c83a76b0SSuyog Pawar     IP_FUNC_MODE_18_34, /* Mode 34 */
411*c83a76b0SSuyog Pawar };
412*c83a76b0SSuyog Pawar 
413*c83a76b0SSuyog Pawar /**
414*c83a76b0SSuyog Pawar ******************************************************************************
415*c83a76b0SSuyog Pawar * @brief  Look up table for calculating the TU size for all the TUs in a CU
416*c83a76b0SSuyog Pawar *         if CU part mode is one of SIZE_2Nx2N, SIZE_2NxN, SIZE_Nx2N
417*c83a76b0SSuyog Pawar *
418*c83a76b0SSuyog Pawar *         i ranging (0 to 3)
419*c83a76b0SSuyog Pawar *         tu_size[i] = cu_size >> gau1_inter_tu_shft_amt[i];
420*c83a76b0SSuyog Pawar *
421*c83a76b0SSuyog Pawar * @remarks For non AMP cases only TU size = CU/2 is used
422*c83a76b0SSuyog Pawar *          and number of TU partitions in these CU will be 4
423*c83a76b0SSuyog Pawar ******************************************************************************
424*c83a76b0SSuyog Pawar */
425*c83a76b0SSuyog Pawar UWORD8 gau1_inter_tu_shft_amt[4] = {
426*c83a76b0SSuyog Pawar     /* SIZE_2Nx2N, SIZE_2NxN, SIZE_Nx2N cases */
427*c83a76b0SSuyog Pawar     1,
428*c83a76b0SSuyog Pawar     1,
429*c83a76b0SSuyog Pawar     1,
430*c83a76b0SSuyog Pawar     1
431*c83a76b0SSuyog Pawar };
432*c83a76b0SSuyog Pawar 
433*c83a76b0SSuyog Pawar /**
434*c83a76b0SSuyog Pawar ******************************************************************************
435*c83a76b0SSuyog Pawar * @brief  Look up table for calculating the TU size for all the TUs in a CU
436*c83a76b0SSuyog Pawar *         if CU part mode is one of SIZE_2NxnU, SIZE_2NxnD, SIZE_nLx2N
437*c83a76b0SSuyog Pawar *         SIZE_nRx2N (AMP motion partition cases)
438*c83a76b0SSuyog Pawar *
439*c83a76b0SSuyog Pawar *         part_mode = {SIZE_2NxnU,SIZE_2NxnD,SIZE_nLx2N,SIZE_nRx2N}
440*c83a76b0SSuyog Pawar *         i ranging (0 to 9)
441*c83a76b0SSuyog Pawar *         tu_size[i] = cu_size >> gau1_inter_tu_shft_amt_amp[part_mode-4][i];
442*c83a76b0SSuyog Pawar *
443*c83a76b0SSuyog Pawar * @remarks For AMP cases a mixture of TU size = CU/2 & CU/4 is used
444*c83a76b0SSuyog Pawar *          based on motion partition orientation, number of TU partitions
445*c83a76b0SSuyog Pawar *          in these CU will be 10
446*c83a76b0SSuyog Pawar ******************************************************************************
447*c83a76b0SSuyog Pawar */
448*c83a76b0SSuyog Pawar UWORD8 gau1_inter_tu_shft_amt_amp[4][10] = {
449*c83a76b0SSuyog Pawar     /* SIZE_2NxnU case */
450*c83a76b0SSuyog Pawar     { 2, 2, 2, 2, 2, 2, 2, 2, 1, 1 },
451*c83a76b0SSuyog Pawar 
452*c83a76b0SSuyog Pawar     /* SIZE_2NxnD case */
453*c83a76b0SSuyog Pawar     { 1, 1, 2, 2, 2, 2, 2, 2, 2, 2 },
454*c83a76b0SSuyog Pawar 
455*c83a76b0SSuyog Pawar     /* SIZE_nLx2N case */
456*c83a76b0SSuyog Pawar     { 2, 2, 2, 2, 1, 2, 2, 2, 2, 1 },
457*c83a76b0SSuyog Pawar 
458*c83a76b0SSuyog Pawar     /* SIZE_nRx2N case */
459*c83a76b0SSuyog Pawar     { 1, 2, 2, 2, 2, 1, 2, 2, 2, 2 }
460*c83a76b0SSuyog Pawar };
461*c83a76b0SSuyog Pawar 
462*c83a76b0SSuyog Pawar /**
463*c83a76b0SSuyog Pawar ******************************************************************************
464*c83a76b0SSuyog Pawar * @brief  Look up table for calculating the TU position in horizontal
465*c83a76b0SSuyog Pawar *         for all the TUs in a CU, if CU part mode is one of
466*c83a76b0SSuyog Pawar *         SIZE_2Nx2N, SIZE_2NxN, SIZE_Nx2N
467*c83a76b0SSuyog Pawar *
468*c83a76b0SSuyog Pawar *         i ranging (0 to 3)
469*c83a76b0SSuyog Pawar *         tu_posx[i](in pixels in cu) =
470*c83a76b0SSuyog Pawar *                 ((cusize >> 2) * gau1_inter_tu_posx_scl_amt[i]);
471*c83a76b0SSuyog Pawar ******************************************************************************
472*c83a76b0SSuyog Pawar */
473*c83a76b0SSuyog Pawar UWORD8 gau1_inter_tu_posx_scl_amt[4] = {
474*c83a76b0SSuyog Pawar     /* SIZE_2Nx2N, SIZE_2NxN, SIZE_Nx2N cases */
475*c83a76b0SSuyog Pawar     0,
476*c83a76b0SSuyog Pawar     2,
477*c83a76b0SSuyog Pawar     0,
478*c83a76b0SSuyog Pawar     2
479*c83a76b0SSuyog Pawar };
480*c83a76b0SSuyog Pawar 
481*c83a76b0SSuyog Pawar /**
482*c83a76b0SSuyog Pawar ******************************************************************************
483*c83a76b0SSuyog Pawar * @brief  Look up table for calculating the TU position in horizontal
484*c83a76b0SSuyog Pawar *         for all the TUs in a CU, if CU part mode is one of
485*c83a76b0SSuyog Pawar *         SIZE_2NxnU, SIZE_2NxnD, SIZE_nLx2N,SIZE_nRx2N (AMP motion partition cases)
486*c83a76b0SSuyog Pawar *
487*c83a76b0SSuyog Pawar *         part_mode = {SIZE_2NxnU,SIZE_2NxnD,SIZE_nLx2N,SIZE_nRx2N}
488*c83a76b0SSuyog Pawar *         i ranging (0 to 9)
489*c83a76b0SSuyog Pawar *         tu_posx[i](in pixels in cu) =
490*c83a76b0SSuyog Pawar *              ((cusize >> 2) * gau1_inter_tu_posx_scl_amt_amp[part_mode-4][i]);
491*c83a76b0SSuyog Pawar ******************************************************************************
492*c83a76b0SSuyog Pawar */
493*c83a76b0SSuyog Pawar UWORD8 gau1_inter_tu_posx_scl_amt_amp[4][10] = {
494*c83a76b0SSuyog Pawar     /* SIZE_2NxnU case */
495*c83a76b0SSuyog Pawar     { 0, 1, 0, 1, 2, 3, 2, 3, 0, 2 },
496*c83a76b0SSuyog Pawar 
497*c83a76b0SSuyog Pawar     /* SIZE_2NxnD case */
498*c83a76b0SSuyog Pawar     { 0, 2, 0, 1, 0, 1, 2, 3, 2, 3 },
499*c83a76b0SSuyog Pawar 
500*c83a76b0SSuyog Pawar     /* SIZE_nLx2N case */
501*c83a76b0SSuyog Pawar     { 0, 1, 0, 1, 2, 0, 1, 0, 1, 2 },
502*c83a76b0SSuyog Pawar 
503*c83a76b0SSuyog Pawar     /* SIZE_nRx2N case */
504*c83a76b0SSuyog Pawar     { 0, 2, 3, 2, 3, 0, 2, 3, 2, 3 }
505*c83a76b0SSuyog Pawar };
506*c83a76b0SSuyog Pawar 
507*c83a76b0SSuyog Pawar /**
508*c83a76b0SSuyog Pawar ******************************************************************************
509*c83a76b0SSuyog Pawar * @brief  Look up table for calculating the TU position in vertical
510*c83a76b0SSuyog Pawar *         for all the TUs in a CU, if CU part mode is one of
511*c83a76b0SSuyog Pawar *         SIZE_2Nx2N, SIZE_2NxN, SIZE_Nx2N
512*c83a76b0SSuyog Pawar *
513*c83a76b0SSuyog Pawar *         i ranging (0 to 3)
514*c83a76b0SSuyog Pawar *         tu_posy[i](in pixels in cu) =
515*c83a76b0SSuyog Pawar *                 ((cusize >> 2) * gau1_inter_tu_posy_scl_amt[i]);
516*c83a76b0SSuyog Pawar ******************************************************************************
517*c83a76b0SSuyog Pawar */
518*c83a76b0SSuyog Pawar UWORD8 gau1_inter_tu_posy_scl_amt[4] = {
519*c83a76b0SSuyog Pawar     /* SIZE_2Nx2N, SIZE_2NxN, SIZE_Nx2N cases */
520*c83a76b0SSuyog Pawar     0,
521*c83a76b0SSuyog Pawar     0,
522*c83a76b0SSuyog Pawar     2,
523*c83a76b0SSuyog Pawar     2
524*c83a76b0SSuyog Pawar };
525*c83a76b0SSuyog Pawar 
526*c83a76b0SSuyog Pawar /**
527*c83a76b0SSuyog Pawar ******************************************************************************
528*c83a76b0SSuyog Pawar * @brief  Look up table for calculating the TU position in vertical
529*c83a76b0SSuyog Pawar *         for all the TUs in a CU, if CU part mode is one of
530*c83a76b0SSuyog Pawar *         SIZE_2NxnU, SIZE_2NxnD, SIZE_nLx2N,SIZE_nRx2N (AMP motion partition cases)
531*c83a76b0SSuyog Pawar *
532*c83a76b0SSuyog Pawar *         part_mode = {SIZE_2NxnU,SIZE_2NxnD,SIZE_nLx2N,SIZE_nRx2N}
533*c83a76b0SSuyog Pawar *         i ranging (0 to 9)
534*c83a76b0SSuyog Pawar *         tu_posy[i](in pixels in cu) =
535*c83a76b0SSuyog Pawar *              ((cusize >> 2) * gau1_inter_tu_posy_scl_amt_amp[part_mode-4][i]);
536*c83a76b0SSuyog Pawar ******************************************************************************
537*c83a76b0SSuyog Pawar */
538*c83a76b0SSuyog Pawar UWORD8 gau1_inter_tu_posy_scl_amt_amp[4][10] = {
539*c83a76b0SSuyog Pawar     /* SIZE_2NxnU case */
540*c83a76b0SSuyog Pawar     { 0, 0, 1, 1, 0, 0, 1, 1, 2, 2 },
541*c83a76b0SSuyog Pawar 
542*c83a76b0SSuyog Pawar     /* SIZE_2NxnD case */
543*c83a76b0SSuyog Pawar     { 0, 0, 2, 2, 3, 3, 2, 2, 3, 3 },
544*c83a76b0SSuyog Pawar 
545*c83a76b0SSuyog Pawar     /* SIZE_nLx2N case */
546*c83a76b0SSuyog Pawar     { 0, 0, 1, 1, 0, 2, 2, 3, 3, 2 },
547*c83a76b0SSuyog Pawar 
548*c83a76b0SSuyog Pawar     /* SIZE_nRx2N case */
549*c83a76b0SSuyog Pawar     { 0, 0, 0, 1, 1, 2, 2, 2, 3, 3 }
550*c83a76b0SSuyog Pawar };
551*c83a76b0SSuyog Pawar 
552*c83a76b0SSuyog Pawar /**
553*c83a76b0SSuyog Pawar * @brief transform shift. Initialized in ihevce_enc_loop_init()
554*c83a76b0SSuyog Pawar */
555*c83a76b0SSuyog Pawar WORD32 ga_trans_shift[5];
556*c83a76b0SSuyog Pawar 
557*c83a76b0SSuyog Pawar /**
558*c83a76b0SSuyog Pawar * @brief chroma 422 intra angle mapping
559*c83a76b0SSuyog Pawar */
560*c83a76b0SSuyog Pawar const UWORD8 gau1_chroma422_intra_angle_mapping[36] = {
561*c83a76b0SSuyog Pawar     0,  1,  2,  2,  2,  2,  3,  5,  7,  8,  10, 12, 13, 15, 17, 18, 19, 20,
562*c83a76b0SSuyog Pawar     21, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 28, 29, 29, 30, 31, DM_CHROMA_IDX
563*c83a76b0SSuyog Pawar };
564*c83a76b0SSuyog Pawar 
565*c83a76b0SSuyog Pawar // clang-format off
566*c83a76b0SSuyog Pawar /**
567*c83a76b0SSuyog Pawar ******************************************************************************
568*c83a76b0SSuyog Pawar * @breif  LUT for returning the fractional bits(Q12) to encode a bin based on
569*c83a76b0SSuyog Pawar *         probability state and the encoded bin (MPS / LPS). The fractional
570*c83a76b0SSuyog Pawar *         bits are computed as -log2(probabililty of symbol)
571*c83a76b0SSuyog Pawar *
572*c83a76b0SSuyog Pawar *         Probabilites of the cabac states (0-63) are explained in section C
573*c83a76b0SSuyog Pawar *         of ieee paper by Detlev Marpe et al (VOL. 13, NO. 7, JULY 2003)
574*c83a76b0SSuyog Pawar *          alpha = (0.01875/0.5) ^ (1/63), p0 = 0.5 and p63 = 0.01875
575*c83a76b0SSuyog Pawar *
576*c83a76b0SSuyog Pawar *         Note that HEVC and AVC use the same cabac tables
577*c83a76b0SSuyog Pawar *
578*c83a76b0SSuyog Pawar * input   : curpState[bits7-1]  | (curMPS ^ encoded bin)[bit0]
579*c83a76b0SSuyog Pawar *
580*c83a76b0SSuyog Pawar * output  : fractionnal bits to encode the bin
581*c83a76b0SSuyog Pawar *
582*c83a76b0SSuyog Pawar ******************************************************************************
583*c83a76b0SSuyog Pawar */
584*c83a76b0SSuyog Pawar UWORD16 gau2_ihevce_cabac_bin_to_bits[64 * 2]   =
585*c83a76b0SSuyog Pawar {
586*c83a76b0SSuyog Pawar     /* bits for mps */          /* bits for lps */
587*c83a76b0SSuyog Pawar     ROUND_Q12(1.000000000),     ROUND_Q12(1.000000000),
588*c83a76b0SSuyog Pawar     ROUND_Q12(0.928535439),     ROUND_Q12(1.075189930),
589*c83a76b0SSuyog Pawar     ROUND_Q12(0.863825936),     ROUND_Q12(1.150379860),
590*c83a76b0SSuyog Pawar     ROUND_Q12(0.804976479),     ROUND_Q12(1.225569790),
591*c83a76b0SSuyog Pawar     ROUND_Q12(0.751252392),     ROUND_Q12(1.300759720),
592*c83a76b0SSuyog Pawar     ROUND_Q12(0.702043265),     ROUND_Q12(1.375949650),
593*c83a76b0SSuyog Pawar     ROUND_Q12(0.656836490),     ROUND_Q12(1.451139580),
594*c83a76b0SSuyog Pawar     ROUND_Q12(0.615197499),     ROUND_Q12(1.526329510),
595*c83a76b0SSuyog Pawar     ROUND_Q12(0.576754745),     ROUND_Q12(1.601519441),
596*c83a76b0SSuyog Pawar     ROUND_Q12(0.541188141),     ROUND_Q12(1.676709371),
597*c83a76b0SSuyog Pawar     ROUND_Q12(0.508220033),     ROUND_Q12(1.751899301),
598*c83a76b0SSuyog Pawar     ROUND_Q12(0.477608072),     ROUND_Q12(1.827089231),
599*c83a76b0SSuyog Pawar     ROUND_Q12(0.449139524),     ROUND_Q12(1.902279161),
600*c83a76b0SSuyog Pawar     ROUND_Q12(0.422626680),     ROUND_Q12(1.977469091),
601*c83a76b0SSuyog Pawar     ROUND_Q12(0.397903130),     ROUND_Q12(2.052659021),
602*c83a76b0SSuyog Pawar     ROUND_Q12(0.374820697),     ROUND_Q12(2.127848951),
603*c83a76b0SSuyog Pawar     ROUND_Q12(0.353246914),     ROUND_Q12(2.203038881),
604*c83a76b0SSuyog Pawar     ROUND_Q12(0.333062915),     ROUND_Q12(2.278228811),
605*c83a76b0SSuyog Pawar     ROUND_Q12(0.314161674),     ROUND_Q12(2.353418741),
606*c83a76b0SSuyog Pawar     ROUND_Q12(0.296446520),     ROUND_Q12(2.428608671),
607*c83a76b0SSuyog Pawar     ROUND_Q12(0.279829872),     ROUND_Q12(2.503798601),
608*c83a76b0SSuyog Pawar     ROUND_Q12(0.264232174),     ROUND_Q12(2.578988531),
609*c83a76b0SSuyog Pawar     ROUND_Q12(0.249580966),     ROUND_Q12(2.654178461),
610*c83a76b0SSuyog Pawar     ROUND_Q12(0.235810099),     ROUND_Q12(2.729368392),
611*c83a76b0SSuyog Pawar     ROUND_Q12(0.222859049),     ROUND_Q12(2.804558322),
612*c83a76b0SSuyog Pawar     ROUND_Q12(0.210672321),     ROUND_Q12(2.879748252),
613*c83a76b0SSuyog Pawar     ROUND_Q12(0.199198934),     ROUND_Q12(2.954938182),
614*c83a76b0SSuyog Pawar     ROUND_Q12(0.188391967),     ROUND_Q12(3.030128112),
615*c83a76b0SSuyog Pawar     ROUND_Q12(0.178208162),     ROUND_Q12(3.105318042),
616*c83a76b0SSuyog Pawar     ROUND_Q12(0.168607572),     ROUND_Q12(3.180507972),
617*c83a76b0SSuyog Pawar     ROUND_Q12(0.159553254),     ROUND_Q12(3.255697902),
618*c83a76b0SSuyog Pawar     ROUND_Q12(0.151010993),     ROUND_Q12(3.330887832),
619*c83a76b0SSuyog Pawar     ROUND_Q12(0.142949058),     ROUND_Q12(3.406077762),
620*c83a76b0SSuyog Pawar     ROUND_Q12(0.135337985),     ROUND_Q12(3.481267692),
621*c83a76b0SSuyog Pawar     ROUND_Q12(0.128150381),     ROUND_Q12(3.556457622),
622*c83a76b0SSuyog Pawar     ROUND_Q12(0.121360753),     ROUND_Q12(3.631647552),
623*c83a76b0SSuyog Pawar     ROUND_Q12(0.114945349),     ROUND_Q12(3.706837482),
624*c83a76b0SSuyog Pawar     ROUND_Q12(0.108882016),     ROUND_Q12(3.782027412),
625*c83a76b0SSuyog Pawar     ROUND_Q12(0.103150076),     ROUND_Q12(3.857217343),
626*c83a76b0SSuyog Pawar     ROUND_Q12(0.097730208),     ROUND_Q12(3.932407273),
627*c83a76b0SSuyog Pawar     ROUND_Q12(0.092604344),     ROUND_Q12(4.007597203),
628*c83a76b0SSuyog Pawar     ROUND_Q12(0.087755577),     ROUND_Q12(4.082787133),
629*c83a76b0SSuyog Pawar     ROUND_Q12(0.083168071),     ROUND_Q12(4.157977063),
630*c83a76b0SSuyog Pawar     ROUND_Q12(0.078826986),     ROUND_Q12(4.233166993),
631*c83a76b0SSuyog Pawar     ROUND_Q12(0.074718402),     ROUND_Q12(4.308356923),
632*c83a76b0SSuyog Pawar     ROUND_Q12(0.070829259),     ROUND_Q12(4.383546853),
633*c83a76b0SSuyog Pawar     ROUND_Q12(0.067147292),     ROUND_Q12(4.458736783),
634*c83a76b0SSuyog Pawar     ROUND_Q12(0.063660977),     ROUND_Q12(4.533926713),
635*c83a76b0SSuyog Pawar     ROUND_Q12(0.060359483),     ROUND_Q12(4.609116643),
636*c83a76b0SSuyog Pawar     ROUND_Q12(0.057232622),     ROUND_Q12(4.684306573),
637*c83a76b0SSuyog Pawar     ROUND_Q12(0.054270808),     ROUND_Q12(4.759496503),
638*c83a76b0SSuyog Pawar     ROUND_Q12(0.051465018),     ROUND_Q12(4.834686433),
639*c83a76b0SSuyog Pawar     ROUND_Q12(0.048806753),     ROUND_Q12(4.909876363),
640*c83a76b0SSuyog Pawar     ROUND_Q12(0.046288005),     ROUND_Q12(4.985066294),
641*c83a76b0SSuyog Pawar     ROUND_Q12(0.043901228),     ROUND_Q12(5.060256224),
642*c83a76b0SSuyog Pawar     ROUND_Q12(0.041639305),     ROUND_Q12(5.135446154),
643*c83a76b0SSuyog Pawar     ROUND_Q12(0.039495525),     ROUND_Q12(5.210636084),
644*c83a76b0SSuyog Pawar     ROUND_Q12(0.037463555),     ROUND_Q12(5.285826014),
645*c83a76b0SSuyog Pawar     ROUND_Q12(0.035537418),     ROUND_Q12(5.361015944),
646*c83a76b0SSuyog Pawar     ROUND_Q12(0.033711472),     ROUND_Q12(5.436205874),
647*c83a76b0SSuyog Pawar     ROUND_Q12(0.031980387),     ROUND_Q12(5.511395804),
648*c83a76b0SSuyog Pawar     ROUND_Q12(0.030339132),     ROUND_Q12(5.586585734),
649*c83a76b0SSuyog Pawar     ROUND_Q12(0.028782950),     ROUND_Q12(5.661775664),
650*c83a76b0SSuyog Pawar     ROUND_Q12(0.027307346),     ROUND_Q12(5.736965594)
651*c83a76b0SSuyog Pawar };
652*c83a76b0SSuyog Pawar // clang-format on
653*c83a76b0SSuyog Pawar 
654*c83a76b0SSuyog Pawar /**
655*c83a76b0SSuyog Pawar * @brief <Fill Me>
656*c83a76b0SSuyog Pawar */
657*c83a76b0SSuyog Pawar WORD32 gai4_subBlock2csbfId_map4x4TU[1];
658*c83a76b0SSuyog Pawar WORD32 gai4_subBlock2csbfId_map8x8TU[4];
659*c83a76b0SSuyog Pawar WORD32 gai4_subBlock2csbfId_map16x16TU[16];
660*c83a76b0SSuyog Pawar WORD32 gai4_subBlock2csbfId_map32x32TU[64];
661*c83a76b0SSuyog Pawar 
662*c83a76b0SSuyog Pawar /**
663*c83a76b0SSuyog Pawar * @brief the neighbor flags for a general ctb (ctb inside the frame; not any corners).
664*c83a76b0SSuyog Pawar * The table gau4_nbr_flags_8x8_4x4blks generated for 16x16 4x4 blocks(ctb_size = 64).
665*c83a76b0SSuyog Pawar * But the same table holds good for other 4x4 blocks 2d arrays(eg 8x8 4x4 blks,4x4 4x4blks).
666*c83a76b0SSuyog Pawar * But the flags must be accessed with stride of 16 since the table has been generated for
667*c83a76b0SSuyog Pawar * ctb_size = 64. For odd 4x4 2d arrays(eg 3x3 4x4 blks) the flags needs modification.
668*c83a76b0SSuyog Pawar * The flags also need modification for corner ctbs.
669*c83a76b0SSuyog Pawar */
670*c83a76b0SSuyog Pawar const UWORD32 gau4_nbr_flags_8x8_4x4blks[64] = {
671*c83a76b0SSuyog Pawar     0x11188, 0x11180, 0x11188, 0x11180, 0x11188, 0x11180, 0x11188, 0x11180, 0x11188, 0x10180,
672*c83a76b0SSuyog Pawar     0x11180, 0x10180, 0x11188, 0x10180, 0x11180, 0x10180, 0x11188, 0x11180, 0x11188, 0x10180,
673*c83a76b0SSuyog Pawar     0x11188, 0x11180, 0x11188, 0x10180, 0x11188, 0x10180, 0x11180, 0x10180, 0x11180, 0x10180,
674*c83a76b0SSuyog Pawar     0x11180, 0x10180, 0x11188, 0x11180, 0x11188, 0x11180, 0x11188, 0x11180, 0x11188, 0x10180,
675*c83a76b0SSuyog Pawar     0x11188, 0x10180, 0x11180, 0x10180, 0x11188, 0x10180, 0x11180, 0x10180, 0x11188, 0x11180,
676*c83a76b0SSuyog Pawar     0x11188, 0x10180, 0x11188, 0x11180, 0x11188, 0x10180, 0x11180, 0x10180, 0x11180, 0x10180,
677*c83a76b0SSuyog Pawar     0x11180, 0x10180, 0x11180, 0x10180
678*c83a76b0SSuyog Pawar };
679*c83a76b0SSuyog Pawar 
680*c83a76b0SSuyog Pawar const float gad_look_up_activity[TOT_QP_MOD_OFFSET] = { 0.314980262f, 0.353553391f, 0.396850263f,
681*c83a76b0SSuyog Pawar                                                         0.445449359f, 0.5f,         0.561231024f,
682*c83a76b0SSuyog Pawar                                                         0.629960525f, 0.707106781f, 0.793700526f,
683*c83a76b0SSuyog Pawar                                                         0.890898718f, 1.0f,         1.122462048f,
684*c83a76b0SSuyog Pawar                                                         1.25992105f,  1.414213562f };
685