blob: 82938ca8023855ef1ffd1cc350ed39527ca77167 [file] [log] [blame]
Harinarayanan K K134291e2015-06-18 16:03:38 +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
24 * ih264e_cabac_structs.h
25 *
26 * @brief
27 * This file contains cabac related structure definitions.
28 *
29 * @author
30 * Doney Alex
31 *
32 * @remarks
33 * none
34 *
35 *******************************************************************************
36 */
37
38#ifndef IH264E_CABAC_STRUCTS_H_
39#define IH264E_CABAC_STRUCTS_H_
40
41
42
43#define CABAC_INIT_IDC 2
44
45
46/**
47 ******************************************************************************
48 * @brief typedef for context model
49 ******************************************************************************
50 */
51
52/* bits 0 to 5 :state
53 bit 6 :mps */
54typedef UWORD8 bin_ctxt_model;
55
56/**
57 ******************************************************************************
58 * @brief MB info for cabac
59 ******************************************************************************
60 */
61typedef struct
62{
63 /* Neighbour availability Variables needed to get CtxtInc, for CABAC */
64 UWORD8 u1_mb_type; /* !< macroblock type: I/P/B/SI/SP */
65
66 UWORD8 u1_cbp; /* !< Coded Block Pattern */
67 UWORD8 u1_intrapred_chroma_mode;
68
69 /*************************************************************************/
70 /* Arrangnment of AC CSBP */
71 /* bits: b7 b6 b5 b4 b3 b2 b1 b0 */
72 /* CSBP: V1 V0 U1 U0 Y3 Y2 Y1 Y0 */
73 /*************************************************************************/
74 UWORD8 u1_yuv_ac_csbp;
75 /*************************************************************************/
76 /* Arrangnment of DC CSBP */
77 /* bits: b7 b6 b5 b4 b3 b2 b1 b0 */
78 /* CSBP: x x x x x Vdc Udc Ydc */
79 /*************************************************************************/
80 UWORD8 u1_yuv_dc_csbp;
81
82 WORD8 i1_ref_idx[4];
83 UWORD8 u1_mv[4][4];
84} mb_info_ctxt_t;
85
86
87/**
88 ******************************************************************************
89 * @brief CSBP info for CABAC
90 ******************************************************************************
91 */
92typedef struct
93{
94 /*************************************************************************/
95 /* Arrangnment of Luma AC CSBP for leftMb */
96 /* bits: b7 b6 b5 b4 b3 b2 b1 b0 */
97 /* CSBP: X X X X Y3 Y2 Y1 Y0 */
98 /*************************************************************************/
99 /*************************************************************************/
100 /* Points either to u1_y_ac_csbp_top_mb or u1_y_ac_csbp_bot_mb */
101 /*************************************************************************/
102 UWORD8 u1_y_ac_csbp_top_mb;
103 UWORD8 u1_y_ac_csbp_bot_mb;
104
105 /*************************************************************************/
106 /* Arrangnment of Chroma AC CSBP for leftMb */
107 /* bits: b7 b6 b5 b4 b3 b2 b1 b0 */
108 /* CSBP: X X X X V1 V0 U1 U0 */
109 /*************************************************************************/
110 /*************************************************************************/
111 /* Points either to u1_uv_ac_csbp_top_mb or u1_uv_ac_csbp_bot_mb */
112 /*************************************************************************/
113 UWORD8 u1_uv_ac_csbp_top_mb;
114 UWORD8 u1_uv_ac_csbp_bot_mb;
115
116 /*************************************************************************/
117 /* Arrangnment of DC CSBP */
118 /* bits: b7 b6 b5 b4 b3 b2 b1 b0 */
119 /* CSBP: x x x x x Vdc Udc Ydc */
120 /*************************************************************************/
121 /*************************************************************************/
122 /* Points either to u1_yuv_dc_csbp_top_mb or u1_yuv_dc_csbp_bot_mb */
123 /*************************************************************************/
124 UWORD8 u1_yuv_dc_csbp_top_mb;
125 UWORD8 u1_yuv_dc_csbp_bot_mb;
126} cab_csbp_t;
127
128/**
129 ******************************************************************************
130 * @brief CABAC Encoding Environment
131 ******************************************************************************
132 */
133
134typedef struct
135{
136 /** cabac interval start L */
137 UWORD32 u4_code_int_low;
138
139 /** cabac interval range R */
140 UWORD32 u4_code_int_range;
141
142 /** bytes_outsanding; number of 0xFF bits that occur during renorm
143 * These will be accumulated till the carry bit is knwon
144 */
145 UWORD32 u4_out_standing_bytes;
146
147 /** bits generated during renormalization
148 * A byte is put to stream/u4_out_standing_bytes from u4_low(L) when
149 * u4_bits_gen exceeds 8
150 */
151 UWORD32 u4_bits_gen;
152} encoding_envirnoment_t;
153
154
155/**
156 ******************************************************************************
157 * @brief CABAC Context structure : Variables to handle Cabac
158 ******************************************************************************
159 */
160typedef struct
161{
162
163 /* Base pointer to all the cabac contexts */
164 bin_ctxt_model au1_cabac_ctxt_table[NUM_CABAC_CTXTS];
165
166
167 cab_csbp_t s_lft_csbp;
168
169 /**
170 * pointer to Bitstream structure
171 */
172 bitstrm_t *ps_bitstrm;
173
174 /* Pointer to mb_info_ctxt_t map_base */
175 mb_info_ctxt_t *ps_mb_map_ctxt_inc_base;
176
177 /* Pointer to encoding_envirnoment_t */
178 encoding_envirnoment_t s_cab_enc_env;
179
180 /* These things need to be updated at each MbLevel */
181
182 /* Prev ps_mb_qp_delta_ctxt */
183 WORD8 i1_prevps_mb_qp_delta_ctxt;
184
185 /* Pointer to mb_info_ctxt_t map */
186 mb_info_ctxt_t *ps_mb_map_ctxt_inc;
187
188 /* Pointer to default mb_info_ctxt_t */
189 mb_info_ctxt_t *ps_def_ctxt_mb_info;
190
191 /* Pointer to current mb_info_ctxt_t */
192 mb_info_ctxt_t *ps_curr_ctxt_mb_info;
193
194 /* Pointer to left mb_info_ctxt_t */
195 mb_info_ctxt_t *ps_left_ctxt_mb_info;
196
197 /* Pointer to top mb_info_ctxt_t */
198 mb_info_ctxt_t *ps_top_ctxt_mb_info;
199
200 /* Poniter to left csbp structure */
201 cab_csbp_t *ps_lft_csbp;
202 UWORD8 *pu1_left_y_ac_csbp;
203 UWORD8 *pu1_left_uv_ac_csbp;
204 UWORD8 *pu1_left_yuv_dc_csbp;
205
206 /***************************************************************************/
207 /* Ref_idx contexts are stored in the following way */
208 /* Array Idx 0,1 for reference indices in Forward direction */
209 /* Array Idx 2,3 for reference indices in backward direction */
210 /***************************************************************************/
211 /* Dimensions for u1_left_ref_ctxt_inc_arr is [2][4] for Mbaff:Top and Bot */
212 WORD8 i1_left_ref_idx_ctx_inc_arr[2][4];
213 WORD8 *pi1_left_ref_idx_ctxt_inc;
214
215 /* Dimensions for u1_left_mv_ctxt_inc_arr is [2][4][4] for Mbaff case */
216 UWORD8 u1_left_mv_ctxt_inc_arr[2][4][4];
217 UWORD8 (*pu1_left_mv_ctxt_inc)[4];
218
219} cabac_ctxt_t;
220
221#endif /* IH264E_CABAC_STRUCTS_H_ */