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