xref: /aosp_15_r20/external/libavc/common/ih264_cabac_tables.h (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
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