xref: /aosp_15_r20/external/libavc/encoder/svc/isvce_cabac_structs.h (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker  *
3*495ae853SAndroid Build Coastguard Worker  * Copyright (C) 2022 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  *  isvce_cabac_structs.h
25*495ae853SAndroid Build Coastguard Worker  *
26*495ae853SAndroid Build Coastguard Worker  * @brief
27*495ae853SAndroid Build Coastguard Worker  *  This file contains cabac related structure definitions.
28*495ae853SAndroid Build Coastguard Worker  *
29*495ae853SAndroid Build Coastguard Worker  * @author
30*495ae853SAndroid Build Coastguard Worker  *  Doney Alex
31*495ae853SAndroid Build Coastguard Worker  *
32*495ae853SAndroid Build Coastguard Worker  * @remarks
33*495ae853SAndroid Build Coastguard Worker  *  none
34*495ae853SAndroid Build Coastguard Worker  *
35*495ae853SAndroid Build Coastguard Worker  *******************************************************************************
36*495ae853SAndroid Build Coastguard Worker  */
37*495ae853SAndroid Build Coastguard Worker 
38*495ae853SAndroid Build Coastguard Worker #ifndef _ISVCE_CABAC_STRUCTS_H_
39*495ae853SAndroid Build Coastguard Worker #define _ISVCE_CABAC_STRUCTS_H_
40*495ae853SAndroid Build Coastguard Worker 
41*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
42*495ae853SAndroid Build Coastguard Worker #include "isvc_cabac_tables.h"
43*495ae853SAndroid Build Coastguard Worker #include "ih264e_bitstream.h"
44*495ae853SAndroid Build Coastguard Worker #include "ih264e_cabac_structs.h"
45*495ae853SAndroid Build Coastguard Worker 
46*495ae853SAndroid Build Coastguard Worker /**
47*495ae853SAndroid Build Coastguard Worker  ******************************************************************************
48*495ae853SAndroid Build Coastguard Worker  *  @brief      MB info for cabac
49*495ae853SAndroid Build Coastguard Worker  ******************************************************************************
50*495ae853SAndroid Build Coastguard Worker  */
51*495ae853SAndroid Build Coastguard Worker typedef struct isvce_mb_info_ctxt_t
52*495ae853SAndroid Build Coastguard Worker {
53*495ae853SAndroid Build Coastguard Worker     /* Neighbour availability Variables needed to get CtxtInc, for CABAC */
54*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_mb_type; /* !< macroblock type: I/P/B/SI/SP */
55*495ae853SAndroid Build Coastguard Worker 
56*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_cbp; /* !< Coded Block Pattern */
57*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_intrapred_chroma_mode;
58*495ae853SAndroid Build Coastguard Worker 
59*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
60*495ae853SAndroid Build Coastguard Worker     /*               Arrangnment of AC CSBP                                  */
61*495ae853SAndroid Build Coastguard Worker     /*        bits:  b7 b6 b5 b4 b3 b2 b1 b0                                 */
62*495ae853SAndroid Build Coastguard Worker     /*        CSBP:  V1 V0 U1 U0 Y3 Y2 Y1 Y0                                 */
63*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
64*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_yuv_ac_csbp;
65*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
66*495ae853SAndroid Build Coastguard Worker     /*               Arrangnment of DC CSBP                                  */
67*495ae853SAndroid Build Coastguard Worker     /*        bits:  b7  b6  b5  b4  b3  b2  b1  b0                          */
68*495ae853SAndroid Build Coastguard Worker     /*        CSBP:   x   x   x   x   x  Vdc Udc Ydc                         */
69*495ae853SAndroid Build Coastguard Worker     /*************************************************************************/
70*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_yuv_dc_csbp;
71*495ae853SAndroid Build Coastguard Worker 
72*495ae853SAndroid Build Coastguard Worker     WORD8 i1_ref_idx[4];
73*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_mv[4][4];
74*495ae853SAndroid Build Coastguard Worker 
75*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_base_mode_flag;
76*495ae853SAndroid Build Coastguard Worker } isvce_mb_info_ctxt_t;
77*495ae853SAndroid Build Coastguard Worker 
78*495ae853SAndroid Build Coastguard Worker /**
79*495ae853SAndroid Build Coastguard Worker  ******************************************************************************
80*495ae853SAndroid Build Coastguard Worker  *  @brief      CABAC Context structure : Variables to handle Cabac
81*495ae853SAndroid Build Coastguard Worker  ******************************************************************************
82*495ae853SAndroid Build Coastguard Worker  */
83*495ae853SAndroid Build Coastguard Worker typedef struct isvce_cabac_ctxt_t
84*495ae853SAndroid Build Coastguard Worker {
85*495ae853SAndroid Build Coastguard Worker     /*  Base pointer to all the cabac contexts  */
86*495ae853SAndroid Build Coastguard Worker     bin_ctxt_model au1_cabac_ctxt_table[NUM_SVC_CABAC_CTXTS];
87*495ae853SAndroid Build Coastguard Worker 
88*495ae853SAndroid Build Coastguard Worker     cab_csbp_t s_lft_csbp;
89*495ae853SAndroid Build Coastguard Worker 
90*495ae853SAndroid Build Coastguard Worker     /**
91*495ae853SAndroid Build Coastguard Worker      * pointer to Bitstream structure
92*495ae853SAndroid Build Coastguard Worker      */
93*495ae853SAndroid Build Coastguard Worker     bitstrm_t *ps_bitstrm;
94*495ae853SAndroid Build Coastguard Worker 
95*495ae853SAndroid Build Coastguard Worker     /* Pointer to mb_info_ctxt_t map_base */
96*495ae853SAndroid Build Coastguard Worker     isvce_mb_info_ctxt_t *ps_mb_map_ctxt_inc_base;
97*495ae853SAndroid Build Coastguard Worker 
98*495ae853SAndroid Build Coastguard Worker     /* Pointer to encoding_envirnoment_t */
99*495ae853SAndroid Build Coastguard Worker     encoding_envirnoment_t s_cab_enc_env;
100*495ae853SAndroid Build Coastguard Worker 
101*495ae853SAndroid Build Coastguard Worker     /* These things need to be updated at each MbLevel */
102*495ae853SAndroid Build Coastguard Worker 
103*495ae853SAndroid Build Coastguard Worker     /* Prev ps_mb_qp_delta_ctxt */
104*495ae853SAndroid Build Coastguard Worker     WORD8 i1_prevps_mb_qp_delta_ctxt;
105*495ae853SAndroid Build Coastguard Worker 
106*495ae853SAndroid Build Coastguard Worker     /* Pointer to mb_info_ctxt_t map */
107*495ae853SAndroid Build Coastguard Worker     isvce_mb_info_ctxt_t *ps_mb_map_ctxt_inc;
108*495ae853SAndroid Build Coastguard Worker 
109*495ae853SAndroid Build Coastguard Worker     /* Pointer to default mb_info_ctxt_t */
110*495ae853SAndroid Build Coastguard Worker     isvce_mb_info_ctxt_t *ps_def_ctxt_mb_info;
111*495ae853SAndroid Build Coastguard Worker 
112*495ae853SAndroid Build Coastguard Worker     /* Pointer to current mb_info_ctxt_t */
113*495ae853SAndroid Build Coastguard Worker     isvce_mb_info_ctxt_t *ps_curr_ctxt_mb_info;
114*495ae853SAndroid Build Coastguard Worker 
115*495ae853SAndroid Build Coastguard Worker     /* Pointer to left mb_info_ctxt_t */
116*495ae853SAndroid Build Coastguard Worker     isvce_mb_info_ctxt_t *ps_left_ctxt_mb_info;
117*495ae853SAndroid Build Coastguard Worker 
118*495ae853SAndroid Build Coastguard Worker     /* Pointer to top mb_info_ctxt_t  */
119*495ae853SAndroid Build Coastguard Worker     isvce_mb_info_ctxt_t *ps_top_ctxt_mb_info;
120*495ae853SAndroid Build Coastguard Worker 
121*495ae853SAndroid Build Coastguard Worker     /* Poniter to left csbp structure */
122*495ae853SAndroid Build Coastguard Worker     cab_csbp_t *ps_lft_csbp;
123*495ae853SAndroid Build Coastguard Worker     UWORD8 *pu1_left_y_ac_csbp;
124*495ae853SAndroid Build Coastguard Worker     UWORD8 *pu1_left_uv_ac_csbp;
125*495ae853SAndroid Build Coastguard Worker     UWORD8 *pu1_left_yuv_dc_csbp;
126*495ae853SAndroid Build Coastguard Worker 
127*495ae853SAndroid Build Coastguard Worker     /***************************************************************************/
128*495ae853SAndroid Build Coastguard Worker     /*       Ref_idx contexts  are stored in the following way                 */
129*495ae853SAndroid Build Coastguard Worker     /*  Array Idx 0,1 for reference indices in Forward direction               */
130*495ae853SAndroid Build Coastguard Worker     /*  Array Idx 2,3 for reference indices in backward direction              */
131*495ae853SAndroid Build Coastguard Worker     /***************************************************************************/
132*495ae853SAndroid Build Coastguard Worker     /* Dimensions for u1_left_ref_ctxt_inc_arr is [2][4] for Mbaff:Top and Bot */
133*495ae853SAndroid Build Coastguard Worker     WORD8 i1_left_ref_idx_ctx_inc_arr[2][4];
134*495ae853SAndroid Build Coastguard Worker     WORD8 *pi1_left_ref_idx_ctxt_inc;
135*495ae853SAndroid Build Coastguard Worker 
136*495ae853SAndroid Build Coastguard Worker     /* Dimensions for u1_left_mv_ctxt_inc_arr is [2][4][4] for Mbaff case */
137*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_left_mv_ctxt_inc_arr[2][4][4];
138*495ae853SAndroid Build Coastguard Worker     UWORD8 (*pu1_left_mv_ctxt_inc)[4];
139*495ae853SAndroid Build Coastguard Worker 
140*495ae853SAndroid Build Coastguard Worker } isvce_cabac_ctxt_t;
141*495ae853SAndroid Build Coastguard Worker 
142*495ae853SAndroid Build Coastguard Worker #endif
143