1*495ae853SAndroid Build Coastguard Worker /****************************************************************************** 2*495ae853SAndroid Build Coastguard Worker * 3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project 4*495ae853SAndroid Build Coastguard Worker * 5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at: 8*495ae853SAndroid Build Coastguard Worker * 9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 10*495ae853SAndroid Build Coastguard Worker * 11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 15*495ae853SAndroid Build Coastguard Worker * limitations under the License. 16*495ae853SAndroid Build Coastguard Worker * 17*495ae853SAndroid Build Coastguard Worker ***************************************************************************** 18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*495ae853SAndroid Build Coastguard Worker */ 20*495ae853SAndroid Build Coastguard Worker 21*495ae853SAndroid Build Coastguard Worker /** 22*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 23*495ae853SAndroid Build Coastguard Worker * @file 24*495ae853SAndroid Build Coastguard Worker * ih264_cabac_tables.h 25*495ae853SAndroid Build Coastguard Worker * 26*495ae853SAndroid Build Coastguard Worker * @brief 27*495ae853SAndroid Build Coastguard Worker * This file contains enumerations, macros and extern declarations of H264 28*495ae853SAndroid Build Coastguard Worker * cabac tables 29*495ae853SAndroid Build Coastguard Worker * 30*495ae853SAndroid Build Coastguard Worker * @author 31*495ae853SAndroid Build Coastguard Worker * ittiam 32*495ae853SAndroid Build Coastguard Worker * 33*495ae853SAndroid Build Coastguard Worker * @remarks 34*495ae853SAndroid Build Coastguard Worker * none 35*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 36*495ae853SAndroid Build Coastguard Worker */ 37*495ae853SAndroid Build Coastguard Worker 38*495ae853SAndroid Build Coastguard Worker #ifndef _IH264_CABAC_TABLES_H_ 39*495ae853SAndroid Build Coastguard Worker #define _IH264_CABAC_TABLES_H_ 40*495ae853SAndroid Build Coastguard Worker 41*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 42*495ae853SAndroid Build Coastguard Worker /* Constant Macros */ 43*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 44*495ae853SAndroid Build Coastguard Worker 45*495ae853SAndroid Build Coastguard Worker /** 46*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 47*495ae853SAndroid Build Coastguard Worker * @brief maximum range of cabac_init_idc (0-2) + 1 for ISLICE 48*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 49*495ae853SAndroid Build Coastguard Worker */ 50*495ae853SAndroid Build Coastguard Worker #define NUM_CAB_INIT_IDC_PLUS_ONE 4 51*495ae853SAndroid Build Coastguard Worker 52*495ae853SAndroid Build Coastguard Worker /** 53*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 54*495ae853SAndroid Build Coastguard Worker * @brief max range of qps in H264 (0-51) 55*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 56*495ae853SAndroid Build Coastguard Worker */ 57*495ae853SAndroid Build Coastguard Worker #define QP_RANGE 52 58*495ae853SAndroid Build Coastguard Worker 59*495ae853SAndroid Build Coastguard Worker /** 60*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 61*495ae853SAndroid Build Coastguard Worker * @brief max range of cabac contexts in H264 (0-459) 62*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 63*495ae853SAndroid Build Coastguard Worker */ 64*495ae853SAndroid Build Coastguard Worker #define NUM_CABAC_CTXTS 460 65*495ae853SAndroid Build Coastguard Worker 66*495ae853SAndroid Build Coastguard Worker 67*495ae853SAndroid Build Coastguard Worker /** Macros for Cabac checks */ 68*495ae853SAndroid Build Coastguard Worker /** MbType */ 69*495ae853SAndroid Build Coastguard Worker /** |x|x|I_PCM|SKIP| 70*495ae853SAndroid Build Coastguard Worker |S|Inter/Intra|P/B|NON-BD16x16/BD16x16,I16x16/I4x4| */ 71*495ae853SAndroid Build Coastguard Worker #define CAB_INTRA 0x00 /* 0000 00xx */ 72*495ae853SAndroid Build Coastguard Worker #define CAB_INTER 0x04 /* 0000 01xx */ 73*495ae853SAndroid Build Coastguard Worker #define CAB_I4x4 0x00 /* 0000 00x0 */ 74*495ae853SAndroid Build Coastguard Worker #define CAB_I16x16 0x01 /* 0000 00x1 */ 75*495ae853SAndroid Build Coastguard Worker #define CAB_BD16x16 0x04 /* 0000 0100 */ 76*495ae853SAndroid Build Coastguard Worker #define CAB_NON_BD16x16 0x05 /* 0000 0101 */ 77*495ae853SAndroid Build Coastguard Worker #define CAB_P 0x07 /* 0000 0111 */ 78*495ae853SAndroid Build Coastguard Worker #define CAB_SI4x4 0x08 /* 0000 10x0 */ 79*495ae853SAndroid Build Coastguard Worker #define CAB_SI16x16 0x09 /* 0000 10x1 */ 80*495ae853SAndroid Build Coastguard Worker #define CAB_SKIP_MASK 0x10 /* 0001 0000 */ 81*495ae853SAndroid Build Coastguard Worker #define CAB_SKIP 0x10 /* 0001 0000 */ 82*495ae853SAndroid Build Coastguard Worker #define CAB_P_SKIP 0x16 /* 0001 x11x */ 83*495ae853SAndroid Build Coastguard Worker #define CAB_B_SKIP 0x14 /* 0001 x100 */ 84*495ae853SAndroid Build Coastguard Worker #define CAB_BD16x16_MASK 0x07 /* 0000 0111 */ 85*495ae853SAndroid Build Coastguard Worker #define CAB_INTRA_MASK 0x04 /* 0000 0100 */ 86*495ae853SAndroid Build Coastguard Worker #define CAB_I_PCM 0x20 /* 001x xxxx */ 87*495ae853SAndroid Build Coastguard Worker 88*495ae853SAndroid Build Coastguard Worker /** 89*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 90*495ae853SAndroid Build Coastguard Worker * @enum ctxBlockCat 91*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 92*495ae853SAndroid Build Coastguard Worker */ 93*495ae853SAndroid Build Coastguard Worker typedef enum 94*495ae853SAndroid Build Coastguard Worker { 95*495ae853SAndroid Build Coastguard Worker LUMA_DC_CTXCAT = 0, 96*495ae853SAndroid Build Coastguard Worker LUMA_AC_CTXCAT = 1, 97*495ae853SAndroid Build Coastguard Worker LUMA_4X4_CTXCAT = 2, 98*495ae853SAndroid Build Coastguard Worker CHROMA_DC_CTXCAT = 3, 99*495ae853SAndroid Build Coastguard Worker CHROMA_AC_CTXCAT = 4, 100*495ae853SAndroid Build Coastguard Worker LUMA_8X8_CTXCAT = 5, 101*495ae853SAndroid Build Coastguard Worker NUM_CTX_CAT = 6 102*495ae853SAndroid Build Coastguard Worker } CTX_BLOCK_CAT; 103*495ae853SAndroid Build Coastguard Worker 104*495ae853SAndroid Build Coastguard Worker 105*495ae853SAndroid Build Coastguard Worker /** 106*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 107*495ae853SAndroid Build Coastguard Worker * @enum ctxIdxOffset 108*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 109*495ae853SAndroid Build Coastguard Worker */ 110*495ae853SAndroid Build Coastguard Worker typedef enum 111*495ae853SAndroid Build Coastguard Worker { 112*495ae853SAndroid Build Coastguard Worker MB_TYPE_SI_SLICE = 0, 113*495ae853SAndroid Build Coastguard Worker MB_TYPE_I_SLICE = 3, 114*495ae853SAndroid Build Coastguard Worker MB_SKIP_FLAG_P_SLICE = 11, 115*495ae853SAndroid Build Coastguard Worker MB_TYPE_P_SLICE = 14, 116*495ae853SAndroid Build Coastguard Worker SUB_MB_TYPE_P_SLICE = 21, 117*495ae853SAndroid Build Coastguard Worker MB_SKIP_FLAG_B_SLICE = 24, 118*495ae853SAndroid Build Coastguard Worker MB_TYPE_B_SLICE = 27, 119*495ae853SAndroid Build Coastguard Worker SUB_MB_TYPE_B_SLICE = 36, 120*495ae853SAndroid Build Coastguard Worker MVD_X = 40, 121*495ae853SAndroid Build Coastguard Worker MVD_Y = 47, 122*495ae853SAndroid Build Coastguard Worker REF_IDX = 54, 123*495ae853SAndroid Build Coastguard Worker MB_QP_DELTA = 60, 124*495ae853SAndroid Build Coastguard Worker INTRA_CHROMA_PRED_MODE = 64, 125*495ae853SAndroid Build Coastguard Worker PREV_INTRA4X4_PRED_MODE_FLAG = 68, 126*495ae853SAndroid Build Coastguard Worker REM_INTRA4X4_PRED_MODE = 69, 127*495ae853SAndroid Build Coastguard Worker MB_FIELD_DECODING_FLAG = 70, 128*495ae853SAndroid Build Coastguard Worker CBP_LUMA = 73, 129*495ae853SAndroid Build Coastguard Worker CBP_CHROMA = 77, 130*495ae853SAndroid Build Coastguard Worker CBF = 85, 131*495ae853SAndroid Build Coastguard Worker SIGNIFICANT_COEFF_FLAG_FRAME = 105, 132*495ae853SAndroid Build Coastguard Worker SIGNIFICANT_COEFF_FLAG_FLD = 277, 133*495ae853SAndroid Build Coastguard Worker LAST_SIGNIFICANT_COEFF_FLAG_FRAME = 166, 134*495ae853SAndroid Build Coastguard Worker LAST_SIGNIFICANT_COEFF_FLAG_FLD = 338, 135*495ae853SAndroid Build Coastguard Worker COEFF_ABS_LEVEL_MINUS1 = 227, 136*495ae853SAndroid Build Coastguard Worker 137*495ae853SAndroid Build Coastguard Worker /* High profile related Syntax element CABAC offsets */ 138*495ae853SAndroid Build Coastguard Worker TRANSFORM_SIZE_8X8_FLAG = 399, 139*495ae853SAndroid Build Coastguard Worker SIGNIFICANT_COEFF_FLAG_8X8_FRAME = 402, 140*495ae853SAndroid Build Coastguard Worker LAST_SIGNIFICANT_COEFF_FLAG_8X8_FRAME = 417, 141*495ae853SAndroid Build Coastguard Worker COEFF_ABS_LEVEL_MINUS1_8X8 = 426, 142*495ae853SAndroid Build Coastguard Worker SIGNIFICANT_COEFF_FLAG_8X8_FIELD = 436, 143*495ae853SAndroid Build Coastguard Worker LAST_SIGNIFICANT_COEFF_FLAG_8X8_FIELD = 451, 144*495ae853SAndroid Build Coastguard Worker 145*495ae853SAndroid Build Coastguard Worker /* SVC related CABAC offsets */ 146*495ae853SAndroid Build Coastguard Worker BASE_MODE_FLAG = 460, 147*495ae853SAndroid Build Coastguard Worker MOTION_PREDICTION_FLAG_L0 = 463, 148*495ae853SAndroid Build Coastguard Worker MOTION_PREDICTION_FLAG_L1 = 464, 149*495ae853SAndroid Build Coastguard Worker RESIDUAL_PREDICTION_FLAG = 465, 150*495ae853SAndroid Build Coastguard Worker 151*495ae853SAndroid Build Coastguard Worker } cabac_table_num_t; 152*495ae853SAndroid Build Coastguard Worker 153*495ae853SAndroid Build Coastguard Worker 154*495ae853SAndroid Build Coastguard Worker /** 155*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 156*495ae853SAndroid Build Coastguard Worker * @enum ctxIdxOffset 157*495ae853SAndroid Build Coastguard Worker ****************************************************************************** 158*495ae853SAndroid Build Coastguard Worker */ 159*495ae853SAndroid Build Coastguard Worker typedef enum 160*495ae853SAndroid Build Coastguard Worker { 161*495ae853SAndroid Build Coastguard Worker SIG_COEFF_CTXT_CAT_0_OFFSET = 0, 162*495ae853SAndroid Build Coastguard Worker SIG_COEFF_CTXT_CAT_1_OFFSET = 15, 163*495ae853SAndroid Build Coastguard Worker SIG_COEFF_CTXT_CAT_2_OFFSET = 29, 164*495ae853SAndroid Build Coastguard Worker SIG_COEFF_CTXT_CAT_3_OFFSET = 44, 165*495ae853SAndroid Build Coastguard Worker SIG_COEFF_CTXT_CAT_4_OFFSET = 47, 166*495ae853SAndroid Build Coastguard Worker SIG_COEFF_CTXT_CAT_5_OFFSET = 0, 167*495ae853SAndroid Build Coastguard Worker COEFF_ABS_LEVEL_CAT_0_OFFSET = 0, 168*495ae853SAndroid Build Coastguard Worker COEFF_ABS_LEVEL_CAT_1_OFFSET = 10, 169*495ae853SAndroid Build Coastguard Worker COEFF_ABS_LEVEL_CAT_2_OFFSET = 20, 170*495ae853SAndroid Build Coastguard Worker COEFF_ABS_LEVEL_CAT_3_OFFSET = 30, 171*495ae853SAndroid Build Coastguard Worker COEFF_ABS_LEVEL_CAT_4_OFFSET = 39, 172*495ae853SAndroid Build Coastguard Worker COEFF_ABS_LEVEL_CAT_5_OFFSET = 0 173*495ae853SAndroid Build Coastguard Worker } cabac_blk_cat_offset_t; 174*495ae853SAndroid Build Coastguard Worker 175*495ae853SAndroid Build Coastguard Worker 176*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 177*495ae853SAndroid Build Coastguard Worker /* Global declarations */ 178*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/ 179*495ae853SAndroid Build Coastguard Worker extern const UWORD32 gau4_ih264_cabac_table[128][4]; 180*495ae853SAndroid Build Coastguard Worker extern const UWORD8 gau1_ih264_cabac_ctxt_init_table[NUM_CAB_INIT_IDC_PLUS_ONE][QP_RANGE][NUM_CABAC_CTXTS]; 181*495ae853SAndroid Build Coastguard Worker 182*495ae853SAndroid Build Coastguard Worker #endif /* _IH264_CABAC_TABLES_H_ */ 183