blob: dd2fd359f0c6744787bc8f282cb6133a87a0830f [file] [log] [blame]
Hamsalekha S8d3d3032015-03-13 21:24:58 +05301/******************************************************************************
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 Scaab4fe2015-05-07 16:38:07 +053046 * @brief maximum range of cabac_init_idc (0-2) + 1 for ISLICE
Hamsalekha S8d3d3032015-03-13 21:24:58 +053047******************************************************************************
48 */
Hamsalekha Scaab4fe2015-05-07 16:38:07 +053049#define NUM_CAB_INIT_IDC_PLUS_ONE 4
Hamsalekha S8d3d3032015-03-13 21:24:58 +053050
51/**
52******************************************************************************
53 * @brief max range of qps in H264 (0-51)
54******************************************************************************
55 */
Hamsalekha Scaab4fe2015-05-07 16:38:07 +053056#define QP_RANGE 52
Hamsalekha S8d3d3032015-03-13 21:24:58 +053057
58/**
59******************************************************************************
60 * @brief max range of cabac contexts in H264 (0-459)
61******************************************************************************
62 */
Hamsalekha Scaab4fe2015-05-07 16:38:07 +053063#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
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530173
174/*****************************************************************************/
175/* Extern global declarations */
176/*****************************************************************************/
177
Hamsalekha Scaab4fe2015-05-07 16:38:07 +0530178
179/* CABAC Table declaration*/
180extern const UWORD32 gau4_ih264_cabac_table[128][4];
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530181
182
Hamsalekha Scaab4fe2015-05-07 16:38:07 +0530183/*****************************************************************************/
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];
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530188
189
190#endif /* IH264_CABAC_TABLES_H_ */