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