Hamsalekha S | 8d3d303 | 2015-03-13 21:24:58 +0530 | [diff] [blame] | 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 | ****************************************************************************** |
Hamsalekha S | caab4fe | 2015-05-07 16:38:07 +0530 | [diff] [blame] | 46 | * @brief maximum range of cabac_init_idc (0-2) + 1 for ISLICE |
Hamsalekha S | 8d3d303 | 2015-03-13 21:24:58 +0530 | [diff] [blame] | 47 | ****************************************************************************** |
| 48 | */ |
Hamsalekha S | caab4fe | 2015-05-07 16:38:07 +0530 | [diff] [blame] | 49 | #define NUM_CAB_INIT_IDC_PLUS_ONE 4 |
Hamsalekha S | 8d3d303 | 2015-03-13 21:24:58 +0530 | [diff] [blame] | 50 | |
| 51 | /** |
| 52 | ****************************************************************************** |
| 53 | * @brief max range of qps in H264 (0-51) |
| 54 | ****************************************************************************** |
| 55 | */ |
Hamsalekha S | caab4fe | 2015-05-07 16:38:07 +0530 | [diff] [blame] | 56 | #define QP_RANGE 52 |
Hamsalekha S | 8d3d303 | 2015-03-13 21:24:58 +0530 | [diff] [blame] | 57 | |
| 58 | /** |
| 59 | ****************************************************************************** |
| 60 | * @brief max range of cabac contexts in H264 (0-459) |
| 61 | ****************************************************************************** |
| 62 | */ |
Hamsalekha S | caab4fe | 2015-05-07 16:38:07 +0530 | [diff] [blame] | 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 | */ |
| 93 | typedef 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 | */ |
| 111 | typedef 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 | */ |
| 155 | typedef 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 | |
Hamsalekha S | 8d3d303 | 2015-03-13 21:24:58 +0530 | [diff] [blame] | 173 | |
| 174 | /*****************************************************************************/ |
| 175 | /* Extern global declarations */ |
| 176 | /*****************************************************************************/ |
| 177 | |
Hamsalekha S | caab4fe | 2015-05-07 16:38:07 +0530 | [diff] [blame] | 178 | |
| 179 | /* CABAC Table declaration*/ |
| 180 | extern const UWORD32 gau4_ih264_cabac_table[128][4]; |
Hamsalekha S | 8d3d303 | 2015-03-13 21:24:58 +0530 | [diff] [blame] | 181 | |
| 182 | |
Hamsalekha S | caab4fe | 2015-05-07 16:38:07 +0530 | [diff] [blame] | 183 | /*****************************************************************************/ |
| 184 | /* Cabac tables for context initialization depending upon type of Slice, */ |
| 185 | /* cabac init Idc value and Qp. */ |
| 186 | /*****************************************************************************/ |
| 187 | extern const UWORD8 gau1_ih264_cabac_ctxt_init_table[NUM_CAB_INIT_IDC_PLUS_ONE][QP_RANGE][NUM_CABAC_CTXTS]; |
Hamsalekha S | 8d3d303 | 2015-03-13 21:24:58 +0530 | [diff] [blame] | 188 | |
| 189 | |
| 190 | #endif /* IH264_CABAC_TABLES_H_ */ |