xref: /aosp_15_r20/external/libhevc/decoder/ihevcd_structs.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar *
3*c83a76b0SSuyog Pawar * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
4*c83a76b0SSuyog Pawar *
5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar *
9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar *
11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar * limitations under the License.
16*c83a76b0SSuyog Pawar *
17*c83a76b0SSuyog Pawar ******************************************************************************/
18*c83a76b0SSuyog Pawar 
19*c83a76b0SSuyog Pawar /**
20*c83a76b0SSuyog Pawar  *******************************************************************************
21*c83a76b0SSuyog Pawar  * @file
22*c83a76b0SSuyog Pawar  *  ihevcd_structs.h
23*c83a76b0SSuyog Pawar  *
24*c83a76b0SSuyog Pawar  * @brief
25*c83a76b0SSuyog Pawar  *  Structure definitions used in the decoder
26*c83a76b0SSuyog Pawar  *
27*c83a76b0SSuyog Pawar  * @author
28*c83a76b0SSuyog Pawar  *  Harish
29*c83a76b0SSuyog Pawar  *
30*c83a76b0SSuyog Pawar  * @par List of Functions:
31*c83a76b0SSuyog Pawar  *
32*c83a76b0SSuyog Pawar  * @remarks
33*c83a76b0SSuyog Pawar  *  None
34*c83a76b0SSuyog Pawar  *
35*c83a76b0SSuyog Pawar  *******************************************************************************
36*c83a76b0SSuyog Pawar  */
37*c83a76b0SSuyog Pawar 
38*c83a76b0SSuyog Pawar #ifndef _IHEVCD_STRUCTS_H_
39*c83a76b0SSuyog Pawar #define _IHEVCD_STRUCTS_H_
40*c83a76b0SSuyog Pawar typedef enum
41*c83a76b0SSuyog Pawar {
42*c83a76b0SSuyog Pawar     INIT_DONE, HEADER_DONE, FIRST_FRAME_DONE,
43*c83a76b0SSuyog Pawar }CODEC_STATE_T;
44*c83a76b0SSuyog Pawar 
45*c83a76b0SSuyog Pawar 
46*c83a76b0SSuyog Pawar 
47*c83a76b0SSuyog Pawar typedef struct _codec_t codec_t;
48*c83a76b0SSuyog Pawar 
49*c83a76b0SSuyog Pawar /** Structure to hold format conversion context */
50*c83a76b0SSuyog Pawar typedef struct
51*c83a76b0SSuyog Pawar {
52*c83a76b0SSuyog Pawar     /** Current row for which format conversion should be done */
53*c83a76b0SSuyog Pawar     WORD32 i4_cur_row;
54*c83a76b0SSuyog Pawar 
55*c83a76b0SSuyog Pawar     /** Number of rows for which format conversion should be done */
56*c83a76b0SSuyog Pawar     WORD32 i4_num_rows;
57*c83a76b0SSuyog Pawar }fmt_conv_t;
58*c83a76b0SSuyog Pawar 
59*c83a76b0SSuyog Pawar /**
60*c83a76b0SSuyog Pawar  * Bitstream structure
61*c83a76b0SSuyog Pawar  */
62*c83a76b0SSuyog Pawar typedef struct
63*c83a76b0SSuyog Pawar {
64*c83a76b0SSuyog Pawar     /**
65*c83a76b0SSuyog Pawar      * Bitstream buffer base pointer
66*c83a76b0SSuyog Pawar      */
67*c83a76b0SSuyog Pawar     UWORD8 *pu1_buf_base;
68*c83a76b0SSuyog Pawar 
69*c83a76b0SSuyog Pawar     /**
70*c83a76b0SSuyog Pawar      * Bitstream bit offset in current word. Value between 0 and 31
71*c83a76b0SSuyog Pawar      */
72*c83a76b0SSuyog Pawar     UWORD32 u4_bit_ofst;
73*c83a76b0SSuyog Pawar 
74*c83a76b0SSuyog Pawar     /**
75*c83a76b0SSuyog Pawar      * Current bitstream buffer pointer
76*c83a76b0SSuyog Pawar      */
77*c83a76b0SSuyog Pawar     UWORD32 *pu4_buf;
78*c83a76b0SSuyog Pawar 
79*c83a76b0SSuyog Pawar     /**
80*c83a76b0SSuyog Pawar      * Current word
81*c83a76b0SSuyog Pawar      */
82*c83a76b0SSuyog Pawar     UWORD32 u4_cur_word;
83*c83a76b0SSuyog Pawar 
84*c83a76b0SSuyog Pawar     /**
85*c83a76b0SSuyog Pawar      * Next word
86*c83a76b0SSuyog Pawar      */
87*c83a76b0SSuyog Pawar     UWORD32 u4_nxt_word;
88*c83a76b0SSuyog Pawar 
89*c83a76b0SSuyog Pawar     /**
90*c83a76b0SSuyog Pawar      * Max address for bitstream
91*c83a76b0SSuyog Pawar      */
92*c83a76b0SSuyog Pawar     UWORD8 *pu1_buf_max;
93*c83a76b0SSuyog Pawar }bitstrm_t;
94*c83a76b0SSuyog Pawar 
95*c83a76b0SSuyog Pawar /**
96*c83a76b0SSuyog Pawar ******************************************************************************
97*c83a76b0SSuyog Pawar  *  @brief      Cabac context for decoder
98*c83a76b0SSuyog Pawar ******************************************************************************
99*c83a76b0SSuyog Pawar  */
100*c83a76b0SSuyog Pawar typedef struct cab_ctxt
101*c83a76b0SSuyog Pawar {
102*c83a76b0SSuyog Pawar     /*********************************************************************/
103*c83a76b0SSuyog Pawar     /*  CABAC ENGINE related fields                                      */
104*c83a76b0SSuyog Pawar     /*********************************************************************/
105*c83a76b0SSuyog Pawar     /** cabac interval range  R */
106*c83a76b0SSuyog Pawar     UWORD32  u4_range;
107*c83a76b0SSuyog Pawar 
108*c83a76b0SSuyog Pawar     /** cabac interval offset O  */
109*c83a76b0SSuyog Pawar     UWORD32  u4_ofst;
110*c83a76b0SSuyog Pawar 
111*c83a76b0SSuyog Pawar     /*********************************************************************/
112*c83a76b0SSuyog Pawar     /*  CABAC context models                                             */
113*c83a76b0SSuyog Pawar     /*********************************************************************/
114*c83a76b0SSuyog Pawar     /** All Context models stored in pscked form pState[bits6-1] | MPS[bit0] */
115*c83a76b0SSuyog Pawar     UWORD8  au1_ctxt_models[IHEVC_CAB_CTXT_END];
116*c83a76b0SSuyog Pawar 
117*c83a76b0SSuyog Pawar     /** Context models memorized after decoding 2nd CTB in a row to be used
118*c83a76b0SSuyog Pawar      * during entropy sync cases
119*c83a76b0SSuyog Pawar      */
120*c83a76b0SSuyog Pawar     UWORD8 au1_ctxt_models_sync[IHEVC_CAB_CTXT_END];
121*c83a76b0SSuyog Pawar 
122*c83a76b0SSuyog Pawar }cab_ctxt_t;
123*c83a76b0SSuyog Pawar 
124*c83a76b0SSuyog Pawar typedef enum
125*c83a76b0SSuyog Pawar {
126*c83a76b0SSuyog Pawar     CMD_PROCESS,
127*c83a76b0SSuyog Pawar     CMD_FMTCONV,
128*c83a76b0SSuyog Pawar }JOBQ_CMD_T;
129*c83a76b0SSuyog Pawar 
130*c83a76b0SSuyog Pawar /**
131*c83a76b0SSuyog Pawar  * Structure to represent a processing job entry
132*c83a76b0SSuyog Pawar  */
133*c83a76b0SSuyog Pawar typedef struct
134*c83a76b0SSuyog Pawar {
135*c83a76b0SSuyog Pawar     /**
136*c83a76b0SSuyog Pawar      * Command
137*c83a76b0SSuyog Pawar      * Currently: PROCESS, FMTCONV are the only two jobs
138*c83a76b0SSuyog Pawar      */
139*c83a76b0SSuyog Pawar     WORD32 i4_cmd;
140*c83a76b0SSuyog Pawar     /**
141*c83a76b0SSuyog Pawar      * CTB x of the starting CTB
142*c83a76b0SSuyog Pawar      */
143*c83a76b0SSuyog Pawar     WORD16 i2_ctb_x;
144*c83a76b0SSuyog Pawar 
145*c83a76b0SSuyog Pawar     /**
146*c83a76b0SSuyog Pawar      * CTB y of the starting CTB
147*c83a76b0SSuyog Pawar      */
148*c83a76b0SSuyog Pawar 
149*c83a76b0SSuyog Pawar     WORD16 i2_ctb_y;
150*c83a76b0SSuyog Pawar 
151*c83a76b0SSuyog Pawar     /**
152*c83a76b0SSuyog Pawar      * Number of CTBs that need to be processed in this job
153*c83a76b0SSuyog Pawar      */
154*c83a76b0SSuyog Pawar     WORD16 i2_ctb_cnt;
155*c83a76b0SSuyog Pawar 
156*c83a76b0SSuyog Pawar     /**
157*c83a76b0SSuyog Pawar      *  Slice index for the current CTB
158*c83a76b0SSuyog Pawar      */
159*c83a76b0SSuyog Pawar     WORD16 i2_slice_idx;
160*c83a76b0SSuyog Pawar 
161*c83a76b0SSuyog Pawar     /**
162*c83a76b0SSuyog Pawar      * TU coefficient data offset for the current job
163*c83a76b0SSuyog Pawar      */
164*c83a76b0SSuyog Pawar     WORD32 i4_tu_coeff_data_ofst;
165*c83a76b0SSuyog Pawar }proc_job_t;
166*c83a76b0SSuyog Pawar /**
167*c83a76b0SSuyog Pawar  * Structure to represent a MV Bank buffer
168*c83a76b0SSuyog Pawar  */
169*c83a76b0SSuyog Pawar typedef struct
170*c83a76b0SSuyog Pawar {
171*c83a76b0SSuyog Pawar     /**
172*c83a76b0SSuyog Pawar      *  Pointer to hold PU index for each CTB in a picture
173*c83a76b0SSuyog Pawar      */
174*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_pu_idx;
175*c83a76b0SSuyog Pawar 
176*c83a76b0SSuyog Pawar     /**
177*c83a76b0SSuyog Pawar      * Pointer to hold pu_t for each PU in a picture
178*c83a76b0SSuyog Pawar      */
179*c83a76b0SSuyog Pawar     pu_t *ps_pic_pu;
180*c83a76b0SSuyog Pawar 
181*c83a76b0SSuyog Pawar     /**
182*c83a76b0SSuyog Pawar      * Pointer to hold PU map for each CTB in a picture
183*c83a76b0SSuyog Pawar      */
184*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_pu_map;
185*c83a76b0SSuyog Pawar 
186*c83a76b0SSuyog Pawar     /**
187*c83a76b0SSuyog Pawar      * Pointer to hold the Slice map
188*c83a76b0SSuyog Pawar      */
189*c83a76b0SSuyog Pawar     UWORD16 *pu1_pic_slice_map;
190*c83a76b0SSuyog Pawar 
191*c83a76b0SSuyog Pawar     /**
192*c83a76b0SSuyog Pawar      * Absolute POC for the current MV Bank
193*c83a76b0SSuyog Pawar      */
194*c83a76b0SSuyog Pawar     WORD32 i4_abs_poc;
195*c83a76b0SSuyog Pawar 
196*c83a76b0SSuyog Pawar     /**
197*c83a76b0SSuyog Pawar      * Absolute POCs of reference List 0 for all slices in the frame from which this frame is reconstructed
198*c83a76b0SSuyog Pawar      */
199*c83a76b0SSuyog Pawar     WORD32 ai4_l0_collocated_poc[MAX_SLICE_HDR_CNT][MAX_DPB_SIZE];
200*c83a76b0SSuyog Pawar 
201*c83a76b0SSuyog Pawar     /**
202*c83a76b0SSuyog Pawar      * Flag to indicate Long Term reference for POCs of reference List 0 for all slices in the frame from which this frame is reconstructed
203*c83a76b0SSuyog Pawar      */
204*c83a76b0SSuyog Pawar     WORD8 ai1_l0_collocated_poc_lt[MAX_SLICE_HDR_CNT][MAX_DPB_SIZE];
205*c83a76b0SSuyog Pawar 
206*c83a76b0SSuyog Pawar     /**
207*c83a76b0SSuyog Pawar      * Absolute POCs of reference List 1 for all slices in the frame from which this frame is reconstructed
208*c83a76b0SSuyog Pawar      */
209*c83a76b0SSuyog Pawar     WORD32 ai4_l1_collocated_poc[MAX_SLICE_HDR_CNT][MAX_DPB_SIZE];
210*c83a76b0SSuyog Pawar     /**
211*c83a76b0SSuyog Pawar      * Flag to indicate Long Term reference for POCs of reference List 1 for all slices in the frame from which this frame is reconstructed
212*c83a76b0SSuyog Pawar      */
213*c83a76b0SSuyog Pawar     WORD8 ai1_l1_collocated_poc_lt[MAX_SLICE_HDR_CNT][MAX_DPB_SIZE];
214*c83a76b0SSuyog Pawar 
215*c83a76b0SSuyog Pawar }mv_buf_t;
216*c83a76b0SSuyog Pawar 
217*c83a76b0SSuyog Pawar typedef struct
218*c83a76b0SSuyog Pawar {
219*c83a76b0SSuyog Pawar     /**
220*c83a76b0SSuyog Pawar      * Pointer to current PPS
221*c83a76b0SSuyog Pawar      */
222*c83a76b0SSuyog Pawar     pps_t *ps_pps;
223*c83a76b0SSuyog Pawar 
224*c83a76b0SSuyog Pawar     /**
225*c83a76b0SSuyog Pawar      * Pointer to current SPS
226*c83a76b0SSuyog Pawar      */
227*c83a76b0SSuyog Pawar     sps_t *ps_sps;
228*c83a76b0SSuyog Pawar 
229*c83a76b0SSuyog Pawar     /**
230*c83a76b0SSuyog Pawar      * Pointer to current slice header structure
231*c83a76b0SSuyog Pawar      */
232*c83a76b0SSuyog Pawar     slice_header_t *ps_slice_hdr;
233*c83a76b0SSuyog Pawar 
234*c83a76b0SSuyog Pawar     /**
235*c83a76b0SSuyog Pawar      * CTB's x position within a picture in raster scan in CTB units
236*c83a76b0SSuyog Pawar      */
237*c83a76b0SSuyog Pawar     WORD32 i4_ctb_x;
238*c83a76b0SSuyog Pawar 
239*c83a76b0SSuyog Pawar     /**
240*c83a76b0SSuyog Pawar      * CTB's y position within a picture in raster scan in CTB units
241*c83a76b0SSuyog Pawar      */
242*c83a76b0SSuyog Pawar 
243*c83a76b0SSuyog Pawar     WORD32 i4_ctb_y;
244*c83a76b0SSuyog Pawar 
245*c83a76b0SSuyog Pawar     /**
246*c83a76b0SSuyog Pawar      * Current PU structure - set to CTB pu_t pointer at the start of CTB processing and incremented
247*c83a76b0SSuyog Pawar      * for every TU
248*c83a76b0SSuyog Pawar      */
249*c83a76b0SSuyog Pawar     pu_t *ps_pu;
250*c83a76b0SSuyog Pawar 
251*c83a76b0SSuyog Pawar     /**
252*c83a76b0SSuyog Pawar      * Pointer to frame level pu_t for the current frame being parsed
253*c83a76b0SSuyog Pawar      * where MVs and Intra pred modes will be updated
254*c83a76b0SSuyog Pawar      */
255*c83a76b0SSuyog Pawar     pu_t *ps_pic_pu;
256*c83a76b0SSuyog Pawar 
257*c83a76b0SSuyog Pawar     /**
258*c83a76b0SSuyog Pawar      * Store the current tile's information. This is needed for the computation of mvs.
259*c83a76b0SSuyog Pawar      */
260*c83a76b0SSuyog Pawar     tile_t *ps_tile;
261*c83a76b0SSuyog Pawar 
262*c83a76b0SSuyog Pawar     /**
263*c83a76b0SSuyog Pawar      * Points to an array of PU indices which is used to identify
264*c83a76b0SSuyog Pawar      * start index of pu_t in ps_pic_pu and also to identify number of
265*c83a76b0SSuyog Pawar      * PUs in the current CTB by subtracting current idx from next CTB's
266*c83a76b0SSuyog Pawar      * PU idx
267*c83a76b0SSuyog Pawar      */
268*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_pu_idx;
269*c83a76b0SSuyog Pawar 
270*c83a76b0SSuyog Pawar     /** PU Index map per CTB. The indices in this map are w.r.t picture pu array and not
271*c83a76b0SSuyog Pawar      * w.r.t CTB pu array.
272*c83a76b0SSuyog Pawar      * This will be used during mv prediction and since neighbours will have different CTB pu map
273*c83a76b0SSuyog Pawar      * it will be easier if they all have indices w.r.t picture level PU array rather than CTB level
274*c83a76b0SSuyog Pawar      * PU array.
275*c83a76b0SSuyog Pawar      * pu1_pic_pu_map is map w.r.t CTB's pu_t array
276*c83a76b0SSuyog Pawar      */
277*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_pu_idx_map;
278*c83a76b0SSuyog Pawar 
279*c83a76b0SSuyog Pawar     /**
280*c83a76b0SSuyog Pawar       * Pointer to pu_map for the current frame being parsed
281*c83a76b0SSuyog Pawar       * where MVs and Intra pred modes will be updated
282*c83a76b0SSuyog Pawar       */
283*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_pu_map;
284*c83a76b0SSuyog Pawar 
285*c83a76b0SSuyog Pawar     /**
286*c83a76b0SSuyog Pawar      *  PU count in current CTB
287*c83a76b0SSuyog Pawar      */
288*c83a76b0SSuyog Pawar     WORD32 i4_ctb_pu_cnt;
289*c83a76b0SSuyog Pawar 
290*c83a76b0SSuyog Pawar     /**
291*c83a76b0SSuyog Pawar      *  PU count in current CTB
292*c83a76b0SSuyog Pawar      */
293*c83a76b0SSuyog Pawar     WORD32 i4_ctb_start_pu_idx;
294*c83a76b0SSuyog Pawar 
295*c83a76b0SSuyog Pawar     /**
296*c83a76b0SSuyog Pawar      *  Top availability for current CTB level
297*c83a76b0SSuyog Pawar      */
298*c83a76b0SSuyog Pawar     UWORD8 u1_top_ctb_avail;
299*c83a76b0SSuyog Pawar 
300*c83a76b0SSuyog Pawar     /**
301*c83a76b0SSuyog Pawar      *  Top right availability for current CTB level
302*c83a76b0SSuyog Pawar      */
303*c83a76b0SSuyog Pawar     UWORD8 u1_top_rt_ctb_avail;
304*c83a76b0SSuyog Pawar     /**
305*c83a76b0SSuyog Pawar      *  Top left availability for current CTB level
306*c83a76b0SSuyog Pawar      */
307*c83a76b0SSuyog Pawar     UWORD8 u1_top_lt_ctb_avail;
308*c83a76b0SSuyog Pawar     /**
309*c83a76b0SSuyog Pawar      *  left availability for current CTB level
310*c83a76b0SSuyog Pawar      */
311*c83a76b0SSuyog Pawar     UWORD8 u1_left_ctb_avail;
312*c83a76b0SSuyog Pawar 
313*c83a76b0SSuyog Pawar }mv_ctxt_t;
314*c83a76b0SSuyog Pawar 
315*c83a76b0SSuyog Pawar typedef struct
316*c83a76b0SSuyog Pawar {
317*c83a76b0SSuyog Pawar     /**
318*c83a76b0SSuyog Pawar      * Pointer to current PPS
319*c83a76b0SSuyog Pawar      */
320*c83a76b0SSuyog Pawar     pps_t *ps_pps;
321*c83a76b0SSuyog Pawar 
322*c83a76b0SSuyog Pawar     /**
323*c83a76b0SSuyog Pawar      * Pointer to current SPS
324*c83a76b0SSuyog Pawar      */
325*c83a76b0SSuyog Pawar     sps_t *ps_sps;
326*c83a76b0SSuyog Pawar 
327*c83a76b0SSuyog Pawar     /*
328*c83a76b0SSuyog Pawar      * Pointer to codec context
329*c83a76b0SSuyog Pawar      */
330*c83a76b0SSuyog Pawar     codec_t *ps_codec;
331*c83a76b0SSuyog Pawar 
332*c83a76b0SSuyog Pawar     /**
333*c83a76b0SSuyog Pawar      * Index of the current Tile being parsed
334*c83a76b0SSuyog Pawar      */
335*c83a76b0SSuyog Pawar     tile_t *ps_tile;
336*c83a76b0SSuyog Pawar 
337*c83a76b0SSuyog Pawar     /**
338*c83a76b0SSuyog Pawar      * Pointer to the current slice header
339*c83a76b0SSuyog Pawar      */
340*c83a76b0SSuyog Pawar     slice_header_t *ps_slice_hdr;
341*c83a76b0SSuyog Pawar 
342*c83a76b0SSuyog Pawar     /**
343*c83a76b0SSuyog Pawar      *  TU count in current CTB
344*c83a76b0SSuyog Pawar      */
345*c83a76b0SSuyog Pawar     WORD32 i4_ctb_tu_cnt;
346*c83a76b0SSuyog Pawar 
347*c83a76b0SSuyog Pawar     /**
348*c83a76b0SSuyog Pawar      * CTB's x position within a picture in raster scan in CTB units
349*c83a76b0SSuyog Pawar      */
350*c83a76b0SSuyog Pawar     WORD32 i4_ctb_x;
351*c83a76b0SSuyog Pawar 
352*c83a76b0SSuyog Pawar     /**
353*c83a76b0SSuyog Pawar      * CTB's y position within a picture in raster scan in CTB units
354*c83a76b0SSuyog Pawar      */
355*c83a76b0SSuyog Pawar 
356*c83a76b0SSuyog Pawar     WORD32 i4_ctb_y;
357*c83a76b0SSuyog Pawar 
358*c83a76b0SSuyog Pawar     /**
359*c83a76b0SSuyog Pawar      * CTB's x position within a Tile in raster scan in CTB units
360*c83a76b0SSuyog Pawar      */
361*c83a76b0SSuyog Pawar     WORD32 i4_ctb_tile_x;
362*c83a76b0SSuyog Pawar 
363*c83a76b0SSuyog Pawar     /**
364*c83a76b0SSuyog Pawar      * CTB's y position within a Tile in raster scan in CTB units
365*c83a76b0SSuyog Pawar      */
366*c83a76b0SSuyog Pawar 
367*c83a76b0SSuyog Pawar     WORD32 i4_ctb_tile_y;
368*c83a76b0SSuyog Pawar 
369*c83a76b0SSuyog Pawar     /**
370*c83a76b0SSuyog Pawar      * CTB's x position within a Slice in raster scan in CTB units
371*c83a76b0SSuyog Pawar      */
372*c83a76b0SSuyog Pawar     WORD32 i4_ctb_slice_x;
373*c83a76b0SSuyog Pawar 
374*c83a76b0SSuyog Pawar     /**
375*c83a76b0SSuyog Pawar      * CTB's y position within a Slice in raster scan in CTB units
376*c83a76b0SSuyog Pawar      */
377*c83a76b0SSuyog Pawar 
378*c83a76b0SSuyog Pawar     WORD32 i4_ctb_slice_y;
379*c83a76b0SSuyog Pawar 
380*c83a76b0SSuyog Pawar     /* Two bits per edge.
381*c83a76b0SSuyog Pawar     Stored in format. BS[15] | BS[14] | .. |BS[0]*/
382*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_vert_bs;
383*c83a76b0SSuyog Pawar 
384*c83a76b0SSuyog Pawar     /**
385*c83a76b0SSuyog Pawar      * Horizontal Boundary strength
386*c83a76b0SSuyog Pawar      */
387*c83a76b0SSuyog Pawar 
388*c83a76b0SSuyog Pawar     /* Two bits per edge.
389*c83a76b0SSuyog Pawar     Stored in format. BS[15] | BS[14] | .. |BS[0]*/
390*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_horz_bs;
391*c83a76b0SSuyog Pawar 
392*c83a76b0SSuyog Pawar     /**
393*c83a76b0SSuyog Pawar      * Flags to indicate if QP is constant through out a CTB - 1 bit for each CTB
394*c83a76b0SSuyog Pawar      * The bits are packed from LSB to MSB
395*c83a76b0SSuyog Pawar      * To get the flag corresponding to CTB with (ctb_x, ctb_y), use
396*c83a76b0SSuyog Pawar      *      pu4_qp_const_in_ctb[(ctb_x + pic_wd_in_ctb * ctb_y) >> 3] & (1 << ((ctb_x + pic_wd_in_ctb * ctb_y) & 7))
397*c83a76b0SSuyog Pawar      */
398*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_qp_const_in_ctb;
399*c83a76b0SSuyog Pawar 
400*c83a76b0SSuyog Pawar     /**
401*c83a76b0SSuyog Pawar      *  Qp array stored for each 8x8 pixels
402*c83a76b0SSuyog Pawar      */
403*c83a76b0SSuyog Pawar     UWORD8  *pu1_pic_qp;
404*c83a76b0SSuyog Pawar 
405*c83a76b0SSuyog Pawar     /**
406*c83a76b0SSuyog Pawar      * Current TU structure - set to CTB tu_t pointer at the start of CTB processing and incremented
407*c83a76b0SSuyog Pawar      * for every TU
408*c83a76b0SSuyog Pawar      */
409*c83a76b0SSuyog Pawar     tu_t *ps_tu;
410*c83a76b0SSuyog Pawar 
411*c83a76b0SSuyog Pawar     /**
412*c83a76b0SSuyog Pawar      * Points to an array of TU indices which is used to identify
413*c83a76b0SSuyog Pawar      * start index of tu_t in ps_pic_tu and also to identify number of
414*c83a76b0SSuyog Pawar      * TUs in the current CTB by subtracting current idx from next CTB's
415*c83a76b0SSuyog Pawar      * TU idx
416*c83a76b0SSuyog Pawar      */
417*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_tu_idx;
418*c83a76b0SSuyog Pawar 
419*c83a76b0SSuyog Pawar     /**
420*c83a76b0SSuyog Pawar      * Points to an array of PU indices which is used to identify
421*c83a76b0SSuyog Pawar      * start index of pu_t in ps_pic_pu and also to identify number of
422*c83a76b0SSuyog Pawar      * PUs in the current CTB by subtracting current idx from next CTB's
423*c83a76b0SSuyog Pawar      * PU idx
424*c83a76b0SSuyog Pawar      */
425*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_pu_idx;
426*c83a76b0SSuyog Pawar 
427*c83a76b0SSuyog Pawar     /**
428*c83a76b0SSuyog Pawar      * Current PU structure - set to CTB pu_t pointer at the start of CTB processing and incremented
429*c83a76b0SSuyog Pawar      * for every TU
430*c83a76b0SSuyog Pawar      */
431*c83a76b0SSuyog Pawar     pu_t *ps_pu;
432*c83a76b0SSuyog Pawar 
433*c83a76b0SSuyog Pawar     /**
434*c83a76b0SSuyog Pawar      * Pointer to frame level pu_t for the current frame being parsed
435*c83a76b0SSuyog Pawar      * where MVs and Intra pred modes will be updated
436*c83a76b0SSuyog Pawar      */
437*c83a76b0SSuyog Pawar     pu_t *ps_pic_pu;
438*c83a76b0SSuyog Pawar 
439*c83a76b0SSuyog Pawar     /** PU Index map per CTB. The indices in this map are w.r.t picture pu array and not
440*c83a76b0SSuyog Pawar      * w.r.t CTB pu array.
441*c83a76b0SSuyog Pawar      * This will be used during mv prediction and since neighbours will have different CTB pu map
442*c83a76b0SSuyog Pawar      * it will be easier if they all have indices w.r.t picture level PU array rather than CTB level
443*c83a76b0SSuyog Pawar      * PU array.
444*c83a76b0SSuyog Pawar      * pu1_pic_pu_map is map w.r.t CTB's pu_t array
445*c83a76b0SSuyog Pawar      */
446*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_pu_idx_map;
447*c83a76b0SSuyog Pawar 
448*c83a76b0SSuyog Pawar     /**
449*c83a76b0SSuyog Pawar      * Variable to store the next ctb count to compute pu idx
450*c83a76b0SSuyog Pawar      */
451*c83a76b0SSuyog Pawar     WORD32 i4_next_pu_ctb_cnt;
452*c83a76b0SSuyog Pawar 
453*c83a76b0SSuyog Pawar     /**
454*c83a76b0SSuyog Pawar      * Variable to store the next ctb count to compute tu idx
455*c83a76b0SSuyog Pawar      */
456*c83a76b0SSuyog Pawar     WORD32 i4_next_tu_ctb_cnt;
457*c83a76b0SSuyog Pawar     /**
458*c83a76b0SSuyog Pawar      * Points to the array of slice indices which is used to identify the slice
459*c83a76b0SSuyog Pawar      *  to which each CTB in a frame belongs.
460*c83a76b0SSuyog Pawar      */
461*c83a76b0SSuyog Pawar     UWORD16 *pu1_slice_idx;
462*c83a76b0SSuyog Pawar }bs_ctxt_t;
463*c83a76b0SSuyog Pawar 
464*c83a76b0SSuyog Pawar typedef struct
465*c83a76b0SSuyog Pawar {
466*c83a76b0SSuyog Pawar     /**
467*c83a76b0SSuyog Pawar      * Pointer to current PPS
468*c83a76b0SSuyog Pawar      */
469*c83a76b0SSuyog Pawar     pps_t *ps_pps;
470*c83a76b0SSuyog Pawar 
471*c83a76b0SSuyog Pawar     /**
472*c83a76b0SSuyog Pawar      * Pointer to current SPS
473*c83a76b0SSuyog Pawar      */
474*c83a76b0SSuyog Pawar     sps_t *ps_sps;
475*c83a76b0SSuyog Pawar 
476*c83a76b0SSuyog Pawar     /*
477*c83a76b0SSuyog Pawar      * Pointer to codec context
478*c83a76b0SSuyog Pawar      */
479*c83a76b0SSuyog Pawar     codec_t *ps_codec;
480*c83a76b0SSuyog Pawar 
481*c83a76b0SSuyog Pawar     /**
482*c83a76b0SSuyog Pawar      * Pointer to current slice header structure
483*c83a76b0SSuyog Pawar      */
484*c83a76b0SSuyog Pawar     slice_header_t *ps_slice_hdr;
485*c83a76b0SSuyog Pawar 
486*c83a76b0SSuyog Pawar     /**
487*c83a76b0SSuyog Pawar      * Pointer to the structure that contains BS and QP frame level arrays
488*c83a76b0SSuyog Pawar      */
489*c83a76b0SSuyog Pawar     bs_ctxt_t s_bs_ctxt;
490*c83a76b0SSuyog Pawar 
491*c83a76b0SSuyog Pawar     /**
492*c83a76b0SSuyog Pawar      * CTB's x position within a picture in raster scan in CTB units
493*c83a76b0SSuyog Pawar      */
494*c83a76b0SSuyog Pawar     WORD32 i4_ctb_x;
495*c83a76b0SSuyog Pawar 
496*c83a76b0SSuyog Pawar     /**
497*c83a76b0SSuyog Pawar      * CTB's y position within a picture in raster scan in CTB units
498*c83a76b0SSuyog Pawar      */
499*c83a76b0SSuyog Pawar 
500*c83a76b0SSuyog Pawar     WORD32 i4_ctb_y;
501*c83a76b0SSuyog Pawar 
502*c83a76b0SSuyog Pawar     /**
503*c83a76b0SSuyog Pawar      * Current pictures loop filter flag map at 8x8 level
504*c83a76b0SSuyog Pawar      */
505*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_no_loop_filter_flag;
506*c83a76b0SSuyog Pawar 
507*c83a76b0SSuyog Pawar     /**
508*c83a76b0SSuyog Pawar      * Current CTB's no_loop_filter_flags
509*c83a76b0SSuyog Pawar      * each element corresponds to one row - including the left CTB's last 8x8
510*c83a76b0SSuyog Pawar      */
511*c83a76b0SSuyog Pawar     UWORD16 au2_ctb_no_loop_filter_flag[9];
512*c83a76b0SSuyog Pawar 
513*c83a76b0SSuyog Pawar     /*
514*c83a76b0SSuyog Pawar      * Pointer to 0th luma pixel in current pic
515*c83a76b0SSuyog Pawar      */
516*c83a76b0SSuyog Pawar     UWORD8 *pu1_cur_pic_luma;
517*c83a76b0SSuyog Pawar 
518*c83a76b0SSuyog Pawar     /*
519*c83a76b0SSuyog Pawar      * Pointer to 0th chroma pixel in current pic
520*c83a76b0SSuyog Pawar      */
521*c83a76b0SSuyog Pawar     UWORD8 *pu1_cur_pic_chroma;
522*c83a76b0SSuyog Pawar 
523*c83a76b0SSuyog Pawar     /* Points to the array of slice indices which is used to identify the slice
524*c83a76b0SSuyog Pawar     *  to which each CTB in a frame belongs.
525*c83a76b0SSuyog Pawar     */
526*c83a76b0SSuyog Pawar     UWORD16 *pu1_slice_idx;
527*c83a76b0SSuyog Pawar 
528*c83a76b0SSuyog Pawar     /* Specifies if the chroma format is yuv420sp_vu */
529*c83a76b0SSuyog Pawar     WORD32 is_chroma_yuv420sp_vu;
530*c83a76b0SSuyog Pawar 
531*c83a76b0SSuyog Pawar }deblk_ctxt_t;
532*c83a76b0SSuyog Pawar 
533*c83a76b0SSuyog Pawar typedef struct
534*c83a76b0SSuyog Pawar {
535*c83a76b0SSuyog Pawar     /**
536*c83a76b0SSuyog Pawar      * Pointer to current PPS
537*c83a76b0SSuyog Pawar      */
538*c83a76b0SSuyog Pawar     pps_t *ps_pps;
539*c83a76b0SSuyog Pawar 
540*c83a76b0SSuyog Pawar     /**
541*c83a76b0SSuyog Pawar      * Pointer to current SPS
542*c83a76b0SSuyog Pawar      */
543*c83a76b0SSuyog Pawar     sps_t *ps_sps;
544*c83a76b0SSuyog Pawar 
545*c83a76b0SSuyog Pawar     /* Pointer to codec context
546*c83a76b0SSuyog Pawar      *
547*c83a76b0SSuyog Pawar      */
548*c83a76b0SSuyog Pawar     codec_t *ps_codec;
549*c83a76b0SSuyog Pawar 
550*c83a76b0SSuyog Pawar     /**
551*c83a76b0SSuyog Pawar      * Pointer to base slice header structure
552*c83a76b0SSuyog Pawar      */
553*c83a76b0SSuyog Pawar     slice_header_t *ps_slice_hdr_base;
554*c83a76b0SSuyog Pawar 
555*c83a76b0SSuyog Pawar     /**
556*c83a76b0SSuyog Pawar      * Pointer to current slice header structure
557*c83a76b0SSuyog Pawar      */
558*c83a76b0SSuyog Pawar     slice_header_t *ps_slice_hdr;
559*c83a76b0SSuyog Pawar 
560*c83a76b0SSuyog Pawar     /**
561*c83a76b0SSuyog Pawar      * Pointer to current tile structure
562*c83a76b0SSuyog Pawar      */
563*c83a76b0SSuyog Pawar     tile_t *ps_tile;
564*c83a76b0SSuyog Pawar     /**
565*c83a76b0SSuyog Pawar      * CTB's x position within a picture in raster scan in CTB units
566*c83a76b0SSuyog Pawar      */
567*c83a76b0SSuyog Pawar     WORD32 i4_ctb_x;
568*c83a76b0SSuyog Pawar 
569*c83a76b0SSuyog Pawar     /**
570*c83a76b0SSuyog Pawar      * CTB's y position within a picture in raster scan in CTB units
571*c83a76b0SSuyog Pawar      */
572*c83a76b0SSuyog Pawar 
573*c83a76b0SSuyog Pawar     WORD32 i4_ctb_y;
574*c83a76b0SSuyog Pawar 
575*c83a76b0SSuyog Pawar     /**
576*c83a76b0SSuyog Pawar      * Current pictures loop filter flag map at 8x8 level
577*c83a76b0SSuyog Pawar      */
578*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_no_loop_filter_flag;
579*c83a76b0SSuyog Pawar 
580*c83a76b0SSuyog Pawar     /*
581*c83a76b0SSuyog Pawar      * Pointer to 0th luma pixel in current pic
582*c83a76b0SSuyog Pawar      */
583*c83a76b0SSuyog Pawar     UWORD8 *pu1_cur_pic_luma;
584*c83a76b0SSuyog Pawar 
585*c83a76b0SSuyog Pawar     /*
586*c83a76b0SSuyog Pawar      * Pointer to 0th chroma pixel in current pic
587*c83a76b0SSuyog Pawar      */
588*c83a76b0SSuyog Pawar     UWORD8 *pu1_cur_pic_chroma;
589*c83a76b0SSuyog Pawar 
590*c83a76b0SSuyog Pawar     /**
591*c83a76b0SSuyog Pawar      * Pointer to frame level sao_t for the current frame being parsed
592*c83a76b0SSuyog Pawar      */
593*c83a76b0SSuyog Pawar     sao_t *ps_pic_sao;
594*c83a76b0SSuyog Pawar 
595*c83a76b0SSuyog Pawar     /**
596*c83a76b0SSuyog Pawar      * Temporary buffer needed during SAO processing
597*c83a76b0SSuyog Pawar      */
598*c83a76b0SSuyog Pawar     UWORD8 *pu1_tmp_buf_luma;
599*c83a76b0SSuyog Pawar 
600*c83a76b0SSuyog Pawar     /**
601*c83a76b0SSuyog Pawar      * Temporary buffer needed during SAO processing
602*c83a76b0SSuyog Pawar      */
603*c83a76b0SSuyog Pawar     UWORD8 *pu1_tmp_buf_chroma;
604*c83a76b0SSuyog Pawar 
605*c83a76b0SSuyog Pawar     /**
606*c83a76b0SSuyog Pawar      * Left column of luma pixels - used by SAO
607*c83a76b0SSuyog Pawar      */
608*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_left_luma;
609*c83a76b0SSuyog Pawar 
610*c83a76b0SSuyog Pawar     /**
611*c83a76b0SSuyog Pawar      * Top row of luma pixels - used by SAO
612*c83a76b0SSuyog Pawar      */
613*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_top_luma;
614*c83a76b0SSuyog Pawar 
615*c83a76b0SSuyog Pawar     /**
616*c83a76b0SSuyog Pawar      * Left column of chroma pixels(interleaved) - used by SAO
617*c83a76b0SSuyog Pawar      */
618*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_left_chroma;
619*c83a76b0SSuyog Pawar 
620*c83a76b0SSuyog Pawar     /**
621*c83a76b0SSuyog Pawar      * Top row of chroma pixels(interleaved) - used by SAO
622*c83a76b0SSuyog Pawar      */
623*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_top_chroma;
624*c83a76b0SSuyog Pawar 
625*c83a76b0SSuyog Pawar     /**
626*c83a76b0SSuyog Pawar      * Top-left luma pixel - used by SAO (for the top CTB row)
627*c83a76b0SSuyog Pawar      */
628*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_luma_top_left_ctb;
629*c83a76b0SSuyog Pawar 
630*c83a76b0SSuyog Pawar     /**
631*c83a76b0SSuyog Pawar      * Top-left chroma pixel(interleaved) - used by SAO (for the top CTB row)
632*c83a76b0SSuyog Pawar      */
633*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_chroma_top_left_ctb;
634*c83a76b0SSuyog Pawar 
635*c83a76b0SSuyog Pawar     /**
636*c83a76b0SSuyog Pawar      * Top-left luma pixel - used by SAO (for the current  CTB row)
637*c83a76b0SSuyog Pawar      */
638*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_top_left_luma_curr_ctb;
639*c83a76b0SSuyog Pawar 
640*c83a76b0SSuyog Pawar     /**
641*c83a76b0SSuyog Pawar      * Top-left chroma pixel(interleaved) - used by SAO (for the current CTB row)
642*c83a76b0SSuyog Pawar      */
643*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_top_left_chroma_curr_ctb;
644*c83a76b0SSuyog Pawar 
645*c83a76b0SSuyog Pawar     /**
646*c83a76b0SSuyog Pawar      * Top-right luma pixel - used by SAO (for the top CTB row)
647*c83a76b0SSuyog Pawar      */
648*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_top_left_luma_top_right;
649*c83a76b0SSuyog Pawar 
650*c83a76b0SSuyog Pawar     /**
651*c83a76b0SSuyog Pawar      * Top-right chroma pixel(interleaved) - used by SAO (for the top CTB row)
652*c83a76b0SSuyog Pawar      */
653*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_top_left_chroma_top_right;
654*c83a76b0SSuyog Pawar 
655*c83a76b0SSuyog Pawar     /**
656*c83a76b0SSuyog Pawar      * Bottom-left luma pixel - used by SAO
657*c83a76b0SSuyog Pawar      */
658*c83a76b0SSuyog Pawar     UWORD8 u1_sao_src_top_left_luma_bot_left;
659*c83a76b0SSuyog Pawar     /**
660*c83a76b0SSuyog Pawar      *  Pointer to array that stores bottom left luma pixel per row(interleaved) - used by SAO
661*c83a76b0SSuyog Pawar      */
662*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_top_left_luma_bot_left;
663*c83a76b0SSuyog Pawar 
664*c83a76b0SSuyog Pawar     /**
665*c83a76b0SSuyog Pawar      * Bottom left chroma pixel(interleaved) - used by SAO
666*c83a76b0SSuyog Pawar      */
667*c83a76b0SSuyog Pawar     UWORD8 au1_sao_src_top_left_chroma_bot_left[2];
668*c83a76b0SSuyog Pawar     /**
669*c83a76b0SSuyog Pawar      *  Pointer to array that stores bottom left chroma pixel per row(interleaved) - used by SAO
670*c83a76b0SSuyog Pawar      */
671*c83a76b0SSuyog Pawar     UWORD8 *pu1_sao_src_top_left_chroma_bot_left;
672*c83a76b0SSuyog Pawar 
673*c83a76b0SSuyog Pawar     /*
674*c83a76b0SSuyog Pawar      * Slice counter in a picture.
675*c83a76b0SSuyog Pawar      */
676*c83a76b0SSuyog Pawar     UWORD32 i4_cur_slice_idx;
677*c83a76b0SSuyog Pawar     /**
678*c83a76b0SSuyog Pawar      * Points to the array of slice indices which is used to identify the slice
679*c83a76b0SSuyog Pawar      *  to which each CTB in a frame belongs.
680*c83a76b0SSuyog Pawar      */
681*c83a76b0SSuyog Pawar     UWORD16 *pu1_slice_idx;
682*c83a76b0SSuyog Pawar     /**
683*c83a76b0SSuyog Pawar      * Points to the array of tile indices which is used to identify the slice
684*c83a76b0SSuyog Pawar      *  to which each CTB in a frame belongs.
685*c83a76b0SSuyog Pawar      */
686*c83a76b0SSuyog Pawar     UWORD16 *pu1_tile_idx;
687*c83a76b0SSuyog Pawar 
688*c83a76b0SSuyog Pawar     /* Specifies if the chroma format is yuv420sp_vu */
689*c83a76b0SSuyog Pawar     WORD32 is_chroma_yuv420sp_vu;
690*c83a76b0SSuyog Pawar 
691*c83a76b0SSuyog Pawar }sao_ctxt_t;
692*c83a76b0SSuyog Pawar 
693*c83a76b0SSuyog Pawar typedef struct
694*c83a76b0SSuyog Pawar {
695*c83a76b0SSuyog Pawar     /** Log2 CU's size */
696*c83a76b0SSuyog Pawar     WORD32 i4_log2_cb_size;
697*c83a76b0SSuyog Pawar 
698*c83a76b0SSuyog Pawar     /** CU's x position */
699*c83a76b0SSuyog Pawar     WORD32 i4_pos_x;
700*c83a76b0SSuyog Pawar 
701*c83a76b0SSuyog Pawar     /** CU's y position */
702*c83a76b0SSuyog Pawar     WORD32 i4_pos_y;
703*c83a76b0SSuyog Pawar     /**
704*c83a76b0SSuyog Pawar      * Transquant Bypass enable flag at CU level - To be replicated at TU level
705*c83a76b0SSuyog Pawar      */
706*c83a76b0SSuyog Pawar     WORD32 i4_cu_transquant_bypass;
707*c83a76b0SSuyog Pawar     /**
708*c83a76b0SSuyog Pawar      * Prediction mode
709*c83a76b0SSuyog Pawar      */
710*c83a76b0SSuyog Pawar     WORD32 i4_pred_mode;
711*c83a76b0SSuyog Pawar 
712*c83a76b0SSuyog Pawar     /**
713*c83a76b0SSuyog Pawar      * Partition mode
714*c83a76b0SSuyog Pawar      */
715*c83a76b0SSuyog Pawar     WORD32 i4_part_mode;
716*c83a76b0SSuyog Pawar 
717*c83a76b0SSuyog Pawar     /**
718*c83a76b0SSuyog Pawar      * Intra luma pred mode for current CU. In case of PART2Nx2N
719*c83a76b0SSuyog Pawar      * the first value is replicated to avoid checks later
720*c83a76b0SSuyog Pawar      */
721*c83a76b0SSuyog Pawar     WORD32 ai4_intra_luma_pred_mode[4];
722*c83a76b0SSuyog Pawar 
723*c83a76b0SSuyog Pawar     /**
724*c83a76b0SSuyog Pawar      * Previous intra luma pred flag used for intra pred mode computation
725*c83a76b0SSuyog Pawar      */
726*c83a76b0SSuyog Pawar     WORD32 ai4_prev_intra_luma_pred_flag[4];
727*c83a76b0SSuyog Pawar 
728*c83a76b0SSuyog Pawar     /**
729*c83a76b0SSuyog Pawar      * mpm index used in intra prediction mode computation
730*c83a76b0SSuyog Pawar      */
731*c83a76b0SSuyog Pawar     WORD32 ai4_mpm_idx[4];
732*c83a76b0SSuyog Pawar     /**
733*c83a76b0SSuyog Pawar      * Remaining intra pred mode
734*c83a76b0SSuyog Pawar      */
735*c83a76b0SSuyog Pawar     WORD32 ai4_rem_intra_luma_pred_mode[4];
736*c83a76b0SSuyog Pawar     /**
737*c83a76b0SSuyog Pawar      * Chroma pred mode index to be used to compute intra pred mode for chroma
738*c83a76b0SSuyog Pawar      */
739*c83a76b0SSuyog Pawar     WORD32 i4_intra_chroma_pred_mode_idx;
740*c83a76b0SSuyog Pawar     /**
741*c83a76b0SSuyog Pawar      * Maximum transform depth
742*c83a76b0SSuyog Pawar      */
743*c83a76b0SSuyog Pawar     WORD32 i4_max_trafo_depth;
744*c83a76b0SSuyog Pawar 
745*c83a76b0SSuyog Pawar     /**
746*c83a76b0SSuyog Pawar      *  Luma CBF for current TU
747*c83a76b0SSuyog Pawar      */
748*c83a76b0SSuyog Pawar     UWORD8 i1_cbf_luma;
749*c83a76b0SSuyog Pawar 
750*c83a76b0SSuyog Pawar     /**
751*c83a76b0SSuyog Pawar      * Cb CBF
752*c83a76b0SSuyog Pawar      */
753*c83a76b0SSuyog Pawar     UWORD8 ai1_cbf_cb[MAX_TRAFO_DEPTH];
754*c83a76b0SSuyog Pawar 
755*c83a76b0SSuyog Pawar     /**
756*c83a76b0SSuyog Pawar      * Cr CBF
757*c83a76b0SSuyog Pawar      */
758*c83a76b0SSuyog Pawar     UWORD8 ai1_cbf_cr[MAX_TRAFO_DEPTH];
759*c83a76b0SSuyog Pawar 
760*c83a76b0SSuyog Pawar     /**
761*c83a76b0SSuyog Pawar      * Intra split flag
762*c83a76b0SSuyog Pawar      */
763*c83a76b0SSuyog Pawar     WORD32 i4_intra_split_flag;
764*c83a76b0SSuyog Pawar 
765*c83a76b0SSuyog Pawar     /**
766*c83a76b0SSuyog Pawar      * Current QP
767*c83a76b0SSuyog Pawar      */
768*c83a76b0SSuyog Pawar     WORD32 i4_qp;
769*c83a76b0SSuyog Pawar 
770*c83a76b0SSuyog Pawar     /**
771*c83a76b0SSuyog Pawar      * Number of TUs in CU parsed before a change in QP is signaled
772*c83a76b0SSuyog Pawar      */
773*c83a76b0SSuyog Pawar     WORD32 i4_tu_cnt;
774*c83a76b0SSuyog Pawar 
775*c83a76b0SSuyog Pawar     /**
776*c83a76b0SSuyog Pawar      * Cu QP delta
777*c83a76b0SSuyog Pawar      */
778*c83a76b0SSuyog Pawar     WORD32 i4_cu_qp_delta;
779*c83a76b0SSuyog Pawar 
780*c83a76b0SSuyog Pawar }parse_cu_t;
781*c83a76b0SSuyog Pawar /**
782*c83a76b0SSuyog Pawar  * Structure contains few common state variables such as CTB positions, current SPS, PPS ids etc which are to be
783*c83a76b0SSuyog Pawar  * used in the parsing thread. By keeping it a different structure it is being explicitly signalled that these
784*c83a76b0SSuyog Pawar  * variables are specific to Parsing threads context and other threads should not update these elements
785*c83a76b0SSuyog Pawar  */
786*c83a76b0SSuyog Pawar typedef struct
787*c83a76b0SSuyog Pawar {
788*c83a76b0SSuyog Pawar     /**
789*c83a76b0SSuyog Pawar      * CTB's x position within a picture in raster scan in CTB units
790*c83a76b0SSuyog Pawar      */
791*c83a76b0SSuyog Pawar     WORD32 i4_ctb_x;
792*c83a76b0SSuyog Pawar 
793*c83a76b0SSuyog Pawar     /**
794*c83a76b0SSuyog Pawar      * CTB's y position within a picture in raster scan in CTB units
795*c83a76b0SSuyog Pawar      */
796*c83a76b0SSuyog Pawar 
797*c83a76b0SSuyog Pawar     WORD32 i4_ctb_y;
798*c83a76b0SSuyog Pawar 
799*c83a76b0SSuyog Pawar     /**
800*c83a76b0SSuyog Pawar      * CTB's x position within a Tile in raster scan in CTB units
801*c83a76b0SSuyog Pawar      */
802*c83a76b0SSuyog Pawar     WORD32 i4_ctb_tile_x;
803*c83a76b0SSuyog Pawar 
804*c83a76b0SSuyog Pawar     /**
805*c83a76b0SSuyog Pawar      * CTB's y position within a Tile in raster scan in CTB units
806*c83a76b0SSuyog Pawar      */
807*c83a76b0SSuyog Pawar 
808*c83a76b0SSuyog Pawar     WORD32 i4_ctb_tile_y;
809*c83a76b0SSuyog Pawar 
810*c83a76b0SSuyog Pawar     /**
811*c83a76b0SSuyog Pawar      * CTB's x position within a Slice in raster scan in CTB units
812*c83a76b0SSuyog Pawar      */
813*c83a76b0SSuyog Pawar     WORD32 i4_ctb_slice_x;
814*c83a76b0SSuyog Pawar 
815*c83a76b0SSuyog Pawar     /**
816*c83a76b0SSuyog Pawar      * CTB's y position within a Slice in raster scan in CTB units
817*c83a76b0SSuyog Pawar      */
818*c83a76b0SSuyog Pawar 
819*c83a76b0SSuyog Pawar     WORD32 i4_ctb_slice_y;
820*c83a76b0SSuyog Pawar 
821*c83a76b0SSuyog Pawar     /**
822*c83a76b0SSuyog Pawar      * Index of the current Tile being parsed
823*c83a76b0SSuyog Pawar      */
824*c83a76b0SSuyog Pawar     tile_t *ps_tile;
825*c83a76b0SSuyog Pawar 
826*c83a76b0SSuyog Pawar     /**
827*c83a76b0SSuyog Pawar      * Current slice idx - Used in multi-core cases to ensure slice header is
828*c83a76b0SSuyog Pawar      * preserved till the last CB of the slice is decoded
829*c83a76b0SSuyog Pawar      */
830*c83a76b0SSuyog Pawar     WORD32 i4_cur_slice_idx;
831*c83a76b0SSuyog Pawar     /**
832*c83a76b0SSuyog Pawar      * Current slice idx - Used in multi-core cases to ensure slice header is
833*c83a76b0SSuyog Pawar      * preserved till the last CB of the slice is decoded
834*c83a76b0SSuyog Pawar      */
835*c83a76b0SSuyog Pawar     WORD32 i4_cur_independent_slice_idx;
836*c83a76b0SSuyog Pawar 
837*c83a76b0SSuyog Pawar     /**
838*c83a76b0SSuyog Pawar      * Current slice idx - Used in multi-core cases to ensure slice header is
839*c83a76b0SSuyog Pawar      * preserved till the last CB of the slice is decoded
840*c83a76b0SSuyog Pawar      */
841*c83a76b0SSuyog Pawar     WORD32 i4_cur_tile_idx;
842*c83a76b0SSuyog Pawar 
843*c83a76b0SSuyog Pawar     /**
844*c83a76b0SSuyog Pawar      * Pointer to current PPS
845*c83a76b0SSuyog Pawar      */
846*c83a76b0SSuyog Pawar     pps_t *ps_pps;
847*c83a76b0SSuyog Pawar 
848*c83a76b0SSuyog Pawar     /**
849*c83a76b0SSuyog Pawar      * Pointer to current SPS
850*c83a76b0SSuyog Pawar      */
851*c83a76b0SSuyog Pawar     sps_t *ps_sps;
852*c83a76b0SSuyog Pawar 
853*c83a76b0SSuyog Pawar     /**
854*c83a76b0SSuyog Pawar      * Signal that pic_init is called first time
855*c83a76b0SSuyog Pawar      */
856*c83a76b0SSuyog Pawar     WORD32 i4_first_pic_init;
857*c83a76b0SSuyog Pawar 
858*c83a76b0SSuyog Pawar     /**
859*c83a76b0SSuyog Pawar      * Flag to indicate if CU QP delta is coded.
860*c83a76b0SSuyog Pawar      * By default it is set to 0 at the beginning of coding quad tree
861*c83a76b0SSuyog Pawar      */
862*c83a76b0SSuyog Pawar     WORD32 i4_is_cu_qp_delta_coded;
863*c83a76b0SSuyog Pawar 
864*c83a76b0SSuyog Pawar     /**
865*c83a76b0SSuyog Pawar      * CU Qp delta
866*c83a76b0SSuyog Pawar      * By default it is set to 0 at the beginning of coding quad tree
867*c83a76b0SSuyog Pawar      */
868*c83a76b0SSuyog Pawar     WORD32 i4_cu_qp_delta;
869*c83a76b0SSuyog Pawar 
870*c83a76b0SSuyog Pawar     /**
871*c83a76b0SSuyog Pawar      * Bitstream structure
872*c83a76b0SSuyog Pawar      */
873*c83a76b0SSuyog Pawar     bitstrm_t s_bitstrm;
874*c83a76b0SSuyog Pawar 
875*c83a76b0SSuyog Pawar     /**
876*c83a76b0SSuyog Pawar      * Pointer frame level TU subblock coeff data
877*c83a76b0SSuyog Pawar      */
878*c83a76b0SSuyog Pawar     void *pv_pic_tu_coeff_data;
879*c83a76b0SSuyog Pawar 
880*c83a76b0SSuyog Pawar     /**
881*c83a76b0SSuyog Pawar      * Pointer to TU subblock coeff data and number of coded subblocks and scan idx
882*c83a76b0SSuyog Pawar      * Incremented each time a coded subblock is parsed
883*c83a76b0SSuyog Pawar      *
884*c83a76b0SSuyog Pawar      */
885*c83a76b0SSuyog Pawar     void *pv_tu_coeff_data;
886*c83a76b0SSuyog Pawar 
887*c83a76b0SSuyog Pawar     /**
888*c83a76b0SSuyog Pawar      * Current TU structure - set to CTB tu_t pointer at the start of CTB parsing and incremented
889*c83a76b0SSuyog Pawar      * for every TU
890*c83a76b0SSuyog Pawar      */
891*c83a76b0SSuyog Pawar     tu_t *ps_tu;
892*c83a76b0SSuyog Pawar 
893*c83a76b0SSuyog Pawar     /**
894*c83a76b0SSuyog Pawar      * Current ctb's TU map
895*c83a76b0SSuyog Pawar      */
896*c83a76b0SSuyog Pawar     UWORD8 *pu1_tu_map;
897*c83a76b0SSuyog Pawar 
898*c83a76b0SSuyog Pawar     /**
899*c83a76b0SSuyog Pawar      * Current PU structure - set to CTB pu_t pointer at the start of CTB parsing and incremented
900*c83a76b0SSuyog Pawar      * for every TU
901*c83a76b0SSuyog Pawar      */
902*c83a76b0SSuyog Pawar     pu_t *ps_pu;
903*c83a76b0SSuyog Pawar 
904*c83a76b0SSuyog Pawar     /**
905*c83a76b0SSuyog Pawar      * Points to the array of slice indices which is used to identify the independent slice
906*c83a76b0SSuyog Pawar      *  to which each CTB in a frame belongs.
907*c83a76b0SSuyog Pawar      */
908*c83a76b0SSuyog Pawar     UWORD16 *pu1_slice_idx;
909*c83a76b0SSuyog Pawar 
910*c83a76b0SSuyog Pawar     /**
911*c83a76b0SSuyog Pawar      * Current PU index in a frame
912*c83a76b0SSuyog Pawar      */
913*c83a76b0SSuyog Pawar     WORD32 i4_pic_pu_idx;
914*c83a76b0SSuyog Pawar 
915*c83a76b0SSuyog Pawar     /**
916*c83a76b0SSuyog Pawar      * Current TU index in a frame
917*c83a76b0SSuyog Pawar      */
918*c83a76b0SSuyog Pawar     WORD32 i4_pic_tu_idx;
919*c83a76b0SSuyog Pawar 
920*c83a76b0SSuyog Pawar     /**
921*c83a76b0SSuyog Pawar      * Current PU structure - set to CTB pu_map pointer at the start of CTB parsing
922*c83a76b0SSuyog Pawar      */
923*c83a76b0SSuyog Pawar     UWORD8 *pu1_pu_map;
924*c83a76b0SSuyog Pawar 
925*c83a76b0SSuyog Pawar     /**
926*c83a76b0SSuyog Pawar      * Current QP
927*c83a76b0SSuyog Pawar      */
928*c83a76b0SSuyog Pawar     WORD32 u4_qp;
929*c83a76b0SSuyog Pawar 
930*c83a76b0SSuyog Pawar     /**
931*c83a76b0SSuyog Pawar      * Current Group's QP
932*c83a76b0SSuyog Pawar      */
933*c83a76b0SSuyog Pawar     WORD32 u4_qpg;
934*c83a76b0SSuyog Pawar 
935*c83a76b0SSuyog Pawar     /**
936*c83a76b0SSuyog Pawar      * Number of PCM blocks in current CTB - Needed only during parsing
937*c83a76b0SSuyog Pawar      * If needed during recon then move it to ctb_t
938*c83a76b0SSuyog Pawar      */
939*c83a76b0SSuyog Pawar     WORD32 i4_ctb_num_pcm_blks;
940*c83a76b0SSuyog Pawar 
941*c83a76b0SSuyog Pawar     /**
942*c83a76b0SSuyog Pawar      * PCM flag for the current CU
943*c83a76b0SSuyog Pawar      */
944*c83a76b0SSuyog Pawar     WORD32 i4_cu_pcm_flag;
945*c83a76b0SSuyog Pawar 
946*c83a76b0SSuyog Pawar     /**
947*c83a76b0SSuyog Pawar      * CU related information to be used to populate tu_t and pu_t during
948*c83a76b0SSuyog Pawar      * pred unit and transform tree parsing.
949*c83a76b0SSuyog Pawar      */
950*c83a76b0SSuyog Pawar     parse_cu_t s_cu;
951*c83a76b0SSuyog Pawar 
952*c83a76b0SSuyog Pawar     /**
953*c83a76b0SSuyog Pawar      * Pointer to pu_map for the current frame being parsed
954*c83a76b0SSuyog Pawar      */
955*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_pu_map;
956*c83a76b0SSuyog Pawar 
957*c83a76b0SSuyog Pawar     /**
958*c83a76b0SSuyog Pawar      * Pointer to frame level pu_t for the current frame being parsed
959*c83a76b0SSuyog Pawar      * where MVs and Intra pred modes will be updated
960*c83a76b0SSuyog Pawar      */
961*c83a76b0SSuyog Pawar     pu_t *ps_pic_pu;
962*c83a76b0SSuyog Pawar 
963*c83a76b0SSuyog Pawar     /**
964*c83a76b0SSuyog Pawar      * Pointer to tu_map for the current frame being parsed
965*c83a76b0SSuyog Pawar      */
966*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_tu_map;
967*c83a76b0SSuyog Pawar 
968*c83a76b0SSuyog Pawar     /**
969*c83a76b0SSuyog Pawar      * Pointer to frame level tu_t for the current frame being parsed
970*c83a76b0SSuyog Pawar      * where transform unit related info will be updated
971*c83a76b0SSuyog Pawar      */
972*c83a76b0SSuyog Pawar     tu_t *ps_pic_tu;
973*c83a76b0SSuyog Pawar 
974*c83a76b0SSuyog Pawar     /**
975*c83a76b0SSuyog Pawar      * Points to an array of TU indices which is used to identify
976*c83a76b0SSuyog Pawar      * start index of tu_t in ps_pic_tu and also to identify number of
977*c83a76b0SSuyog Pawar      * TUs in the current CTB by subtracting current idx from next CTB's
978*c83a76b0SSuyog Pawar      * TU idx
979*c83a76b0SSuyog Pawar      */
980*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_tu_idx;
981*c83a76b0SSuyog Pawar 
982*c83a76b0SSuyog Pawar     /**
983*c83a76b0SSuyog Pawar      * Points to an array of PU indices which is used to identify
984*c83a76b0SSuyog Pawar      * start index of pu_t in ps_pic_pu and also to identify number of
985*c83a76b0SSuyog Pawar      * PUs in the current CTB by subtracting current idx from next CTB's
986*c83a76b0SSuyog Pawar      * PU idx
987*c83a76b0SSuyog Pawar      */
988*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_pu_idx;
989*c83a76b0SSuyog Pawar 
990*c83a76b0SSuyog Pawar 
991*c83a76b0SSuyog Pawar     /**
992*c83a76b0SSuyog Pawar      * Current pictures intra mode map at 8x8 level
993*c83a76b0SSuyog Pawar      */
994*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_intra_flag;
995*c83a76b0SSuyog Pawar 
996*c83a76b0SSuyog Pawar     /**
997*c83a76b0SSuyog Pawar      * Current pictures loop filter flag map at 8x8 level
998*c83a76b0SSuyog Pawar      */
999*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_no_loop_filter_flag;
1000*c83a76b0SSuyog Pawar 
1001*c83a76b0SSuyog Pawar     /**
1002*c83a76b0SSuyog Pawar      * Array to hold one row (top) of skip_flag flag stored at (8x8) level
1003*c83a76b0SSuyog Pawar      * 1 bit per (8x8)
1004*c83a76b0SSuyog Pawar      * read and written as a UWORD32
1005*c83a76b0SSuyog Pawar      * LSB gives skip_flag for 0th 8x8 and MSB gives skip_flag for 31st 8x8 and so on
1006*c83a76b0SSuyog Pawar      * This is independent of CTB size or minCU size
1007*c83a76b0SSuyog Pawar      * Packed format requires extra calculations in extracting required bits but makes it easier
1008*c83a76b0SSuyog Pawar      * to store skip data for larger sizes such as 32 x 32 where 4 bits need to be set instead of
1009*c83a76b0SSuyog Pawar      * 4 bytes or for 64 x 64 where 8 bits need to be set instead of 8 bytes.
1010*c83a76b0SSuyog Pawar      */
1011*c83a76b0SSuyog Pawar     UWORD32 *pu4_skip_cu_top;
1012*c83a76b0SSuyog Pawar 
1013*c83a76b0SSuyog Pawar     /**
1014*c83a76b0SSuyog Pawar      * Array to hold one 64 pixel column (left) of skip_flag flag stored at (8x8) level
1015*c83a76b0SSuyog Pawar      * 1 bit per (8x8)
1016*c83a76b0SSuyog Pawar      * read and written as a UWORD32
1017*c83a76b0SSuyog Pawar      * LSB gives skip_flag for 0th 8x8 and MSB gives skip for 31st 8x8 and so on
1018*c83a76b0SSuyog Pawar      * This is independent of CTB size and allocated to store data for 64 pixels, of
1019*c83a76b0SSuyog Pawar      * this only first ctb_size number of bits (starting from MSB) will have valid data
1020*c83a76b0SSuyog Pawar      * This is also independent of min CU size and data is stored at 8x8 level.
1021*c83a76b0SSuyog Pawar      * Since only 8 bits are needed to represent left 64 pixels at 8x8 level, this is not an array
1022*c83a76b0SSuyog Pawar      */
1023*c83a76b0SSuyog Pawar     UWORD32 u4_skip_cu_left;
1024*c83a76b0SSuyog Pawar 
1025*c83a76b0SSuyog Pawar     /**
1026*c83a76b0SSuyog Pawar      * Array to hold one row (top) of coding_tree_depth stored at (8x8) level
1027*c83a76b0SSuyog Pawar      * 2 bits per (8x8) pixels
1028*c83a76b0SSuyog Pawar      * read and written as a WORD32
1029*c83a76b0SSuyog Pawar      * 2 LSBits give coding_tree_depth for 0th 8x8 and 2 MSBits give coding_tree_depth for 15th 8x8 and so on
1030*c83a76b0SSuyog Pawar      * This is independent of CTB size or minCU size
1031*c83a76b0SSuyog Pawar      */
1032*c83a76b0SSuyog Pawar     UWORD32 *pu4_ct_depth_top;
1033*c83a76b0SSuyog Pawar 
1034*c83a76b0SSuyog Pawar     /**
1035*c83a76b0SSuyog Pawar      * Array to hold one 64 pixel column (left) of coding_tree_depth stored at (8x8) level
1036*c83a76b0SSuyog Pawar      * 2 bits per (8x8) pixels
1037*c83a76b0SSuyog Pawar      * read and written as a WORD32
1038*c83a76b0SSuyog Pawar      * 2 LSBits give coding_tree_depth for 0th 8x8 and 2 MSBits give coding_tree_depth for 15th 8x8 and so on
1039*c83a76b0SSuyog Pawar      * This is independent of CTB size and allocated to store data for 64 pixels, of
1040*c83a76b0SSuyog Pawar      * this only first ctb_size * 2 number of bits (starting from MSB) will have valid data
1041*c83a76b0SSuyog Pawar      * This is also independent of min CU size and data is stored at 8x8 level.
1042*c83a76b0SSuyog Pawar      * Since only 16 bits are needed to represent left 64 pixels at 8x8 level, this is not an array
1043*c83a76b0SSuyog Pawar      */
1044*c83a76b0SSuyog Pawar     UWORD32 u4_ct_depth_left;
1045*c83a76b0SSuyog Pawar 
1046*c83a76b0SSuyog Pawar     /**
1047*c83a76b0SSuyog Pawar      * Array to hold top (one row) luma_intra_pred_mode stored at (4x4) level for a CTB
1048*c83a76b0SSuyog Pawar      * 8 bits per (4x4) pixels
1049*c83a76b0SSuyog Pawar      * read and written as a UWORD8
1050*c83a76b0SSuyog Pawar      * This is independent of CTB size or minCU size
1051*c83a76b0SSuyog Pawar      * This is independent of CTB size and allocated to store data for 64 pixels i.e. 64 bits is the size
1052*c83a76b0SSuyog Pawar      * Note this data is used only within a CTB, There is no inter CTB dependencies for this
1053*c83a76b0SSuyog Pawar      */
1054*c83a76b0SSuyog Pawar     UWORD8 *pu1_luma_intra_pred_mode_top;
1055*c83a76b0SSuyog Pawar 
1056*c83a76b0SSuyog Pawar     /**
1057*c83a76b0SSuyog Pawar      * Array to hold  left (one column) luma_intra_pred_mode stored at (4x4) level for a CTB
1058*c83a76b0SSuyog Pawar      * 8 bits per (4x4) pixels
1059*c83a76b0SSuyog Pawar      * read and written as a UWORD8
1060*c83a76b0SSuyog Pawar      * This is independent of CTB size and allocated to store data for 64 pixels i.e. 64 bits is the size
1061*c83a76b0SSuyog Pawar      * This is also independent of min CU size and data is stored at 8x8 level.
1062*c83a76b0SSuyog Pawar      * This is used for prediction of next CTB within a row in a slice or tile
1063*c83a76b0SSuyog Pawar      */
1064*c83a76b0SSuyog Pawar     UWORD8 *pu1_luma_intra_pred_mode_left;
1065*c83a76b0SSuyog Pawar 
1066*c83a76b0SSuyog Pawar 
1067*c83a76b0SSuyog Pawar     /**
1068*c83a76b0SSuyog Pawar      * Pointer to base of Video parameter set structure array
1069*c83a76b0SSuyog Pawar      */
1070*c83a76b0SSuyog Pawar     vps_t *ps_vps_base;
1071*c83a76b0SSuyog Pawar 
1072*c83a76b0SSuyog Pawar     /**
1073*c83a76b0SSuyog Pawar      * Pointer to base of Sequence parameter set structure array
1074*c83a76b0SSuyog Pawar      */
1075*c83a76b0SSuyog Pawar     sps_t *ps_sps_base;
1076*c83a76b0SSuyog Pawar 
1077*c83a76b0SSuyog Pawar     /**
1078*c83a76b0SSuyog Pawar      * Pointer to base of Picture parameter set structure array
1079*c83a76b0SSuyog Pawar      */
1080*c83a76b0SSuyog Pawar     pps_t *ps_pps_base;
1081*c83a76b0SSuyog Pawar 
1082*c83a76b0SSuyog Pawar     /**
1083*c83a76b0SSuyog Pawar      * Pointer to base of slice header structure array
1084*c83a76b0SSuyog Pawar      */
1085*c83a76b0SSuyog Pawar     slice_header_t *ps_slice_hdr_base;
1086*c83a76b0SSuyog Pawar 
1087*c83a76b0SSuyog Pawar     /**
1088*c83a76b0SSuyog Pawar      * Pointer to current slice header structure
1089*c83a76b0SSuyog Pawar      */
1090*c83a76b0SSuyog Pawar     slice_header_t *ps_slice_hdr;
1091*c83a76b0SSuyog Pawar 
1092*c83a76b0SSuyog Pawar 
1093*c83a76b0SSuyog Pawar     /**
1094*c83a76b0SSuyog Pawar      * Error code during parse stage
1095*c83a76b0SSuyog Pawar      */
1096*c83a76b0SSuyog Pawar     WORD32 i4_error_code;
1097*c83a76b0SSuyog Pawar 
1098*c83a76b0SSuyog Pawar     /**
1099*c83a76b0SSuyog Pawar      * Void pointer to process job context
1100*c83a76b0SSuyog Pawar      */
1101*c83a76b0SSuyog Pawar     void *pv_proc_jobq;
1102*c83a76b0SSuyog Pawar 
1103*c83a76b0SSuyog Pawar     /* Cabac context */
1104*c83a76b0SSuyog Pawar     cab_ctxt_t s_cabac;
1105*c83a76b0SSuyog Pawar 
1106*c83a76b0SSuyog Pawar     /* Current Coding tree depth */
1107*c83a76b0SSuyog Pawar     WORD32 i4_ct_depth;
1108*c83a76b0SSuyog Pawar 
1109*c83a76b0SSuyog Pawar     /** Flag to signal end of frame */
1110*c83a76b0SSuyog Pawar     WORD32 i4_end_of_frame;
1111*c83a76b0SSuyog Pawar 
1112*c83a76b0SSuyog Pawar     /**
1113*c83a76b0SSuyog Pawar      * Index of the next CTB parsed
1114*c83a76b0SSuyog Pawar      */
1115*c83a76b0SSuyog Pawar     WORD32 i4_next_ctb_indx;
1116*c83a76b0SSuyog Pawar 
1117*c83a76b0SSuyog Pawar     /**
1118*c83a76b0SSuyog Pawar      * Pointer to the structure that contains BS and QP frame level arrays
1119*c83a76b0SSuyog Pawar      */
1120*c83a76b0SSuyog Pawar     bs_ctxt_t s_bs_ctxt;
1121*c83a76b0SSuyog Pawar 
1122*c83a76b0SSuyog Pawar     /**
1123*c83a76b0SSuyog Pawar      * Pointer to the structure that contains deblock context
1124*c83a76b0SSuyog Pawar      */
1125*c83a76b0SSuyog Pawar     deblk_ctxt_t s_deblk_ctxt;
1126*c83a76b0SSuyog Pawar 
1127*c83a76b0SSuyog Pawar     /**
1128*c83a76b0SSuyog Pawar      * Pointer to the structure that contains sao context
1129*c83a76b0SSuyog Pawar      */
1130*c83a76b0SSuyog Pawar     sao_ctxt_t s_sao_ctxt;
1131*c83a76b0SSuyog Pawar 
1132*c83a76b0SSuyog Pawar     /**
1133*c83a76b0SSuyog Pawar      * QP Array for the current CTB
1134*c83a76b0SSuyog Pawar      * Used in QP prediction
1135*c83a76b0SSuyog Pawar      */
1136*c83a76b0SSuyog Pawar     WORD8 ai1_8x8_cu_qp[MAX_CU_IN_CTB];
1137*c83a76b0SSuyog Pawar 
1138*c83a76b0SSuyog Pawar 
1139*c83a76b0SSuyog Pawar     /**
1140*c83a76b0SSuyog Pawar      * Pointer to frame level sao_t for the current frame being parsed
1141*c83a76b0SSuyog Pawar      */
1142*c83a76b0SSuyog Pawar     sao_t *ps_pic_sao;
1143*c83a76b0SSuyog Pawar 
1144*c83a76b0SSuyog Pawar     /**
1145*c83a76b0SSuyog Pawar      * Abs POC count of the frame
1146*c83a76b0SSuyog Pawar      */
1147*c83a76b0SSuyog Pawar     WORD32 i4_abs_pic_order_cnt;
1148*c83a76b0SSuyog Pawar 
1149*c83a76b0SSuyog Pawar     /**
1150*c83a76b0SSuyog Pawar      * Pointer points to mv_buffer of current frame
1151*c83a76b0SSuyog Pawar      */
1152*c83a76b0SSuyog Pawar     mv_buf_t *ps_cur_mv_buf;
1153*c83a76b0SSuyog Pawar 
1154*c83a76b0SSuyog Pawar     /**
1155*c83a76b0SSuyog Pawar      * Variable to store the next ctb count to compute pu idx
1156*c83a76b0SSuyog Pawar      */
1157*c83a76b0SSuyog Pawar     WORD32 i4_next_pu_ctb_cnt;
1158*c83a76b0SSuyog Pawar 
1159*c83a76b0SSuyog Pawar     /**
1160*c83a76b0SSuyog Pawar      * Variable to store the next ctb count to compute tu idx
1161*c83a76b0SSuyog Pawar      */
1162*c83a76b0SSuyog Pawar     WORD32 i4_next_tu_ctb_cnt;
1163*c83a76b0SSuyog Pawar 
1164*c83a76b0SSuyog Pawar #ifndef DISABLE_SEI
1165*c83a76b0SSuyog Pawar     /**
1166*c83a76b0SSuyog Pawar      * SEI parameters
1167*c83a76b0SSuyog Pawar      */
1168*c83a76b0SSuyog Pawar     sei_params_t s_sei_params;
1169*c83a76b0SSuyog Pawar #endif
1170*c83a76b0SSuyog Pawar }parse_ctxt_t;
1171*c83a76b0SSuyog Pawar 
1172*c83a76b0SSuyog Pawar /**
1173*c83a76b0SSuyog Pawar  * Pixel processing thread context
1174*c83a76b0SSuyog Pawar  */
1175*c83a76b0SSuyog Pawar 
1176*c83a76b0SSuyog Pawar typedef struct
1177*c83a76b0SSuyog Pawar {
1178*c83a76b0SSuyog Pawar     /* Pointer to codec context
1179*c83a76b0SSuyog Pawar      *
1180*c83a76b0SSuyog Pawar      */
1181*c83a76b0SSuyog Pawar     codec_t *ps_codec;
1182*c83a76b0SSuyog Pawar 
1183*c83a76b0SSuyog Pawar     /**
1184*c83a76b0SSuyog Pawar      * CTB's x position within a picture in raster scan in CTB units
1185*c83a76b0SSuyog Pawar      */
1186*c83a76b0SSuyog Pawar     WORD32 i4_ctb_x;
1187*c83a76b0SSuyog Pawar 
1188*c83a76b0SSuyog Pawar     /**
1189*c83a76b0SSuyog Pawar      * CTB's y position within a picture in raster scan in CTB units
1190*c83a76b0SSuyog Pawar      */
1191*c83a76b0SSuyog Pawar 
1192*c83a76b0SSuyog Pawar     WORD32 i4_ctb_y;
1193*c83a76b0SSuyog Pawar 
1194*c83a76b0SSuyog Pawar     /**
1195*c83a76b0SSuyog Pawar      * CTB's x position within a Tile in raster scan in CTB units
1196*c83a76b0SSuyog Pawar      */
1197*c83a76b0SSuyog Pawar     WORD32 i4_ctb_tile_x;
1198*c83a76b0SSuyog Pawar 
1199*c83a76b0SSuyog Pawar     /**
1200*c83a76b0SSuyog Pawar      * CTB's y position within a Tile in raster scan in CTB units
1201*c83a76b0SSuyog Pawar      */
1202*c83a76b0SSuyog Pawar 
1203*c83a76b0SSuyog Pawar     WORD32 i4_ctb_tile_y;
1204*c83a76b0SSuyog Pawar 
1205*c83a76b0SSuyog Pawar     /**
1206*c83a76b0SSuyog Pawar      * CTB's x position within a Slice in raster scan in CTB units
1207*c83a76b0SSuyog Pawar      */
1208*c83a76b0SSuyog Pawar     WORD32 i4_ctb_slice_x;
1209*c83a76b0SSuyog Pawar 
1210*c83a76b0SSuyog Pawar     /**
1211*c83a76b0SSuyog Pawar      * CTB's y position within a Slice in raster scan in CTB units
1212*c83a76b0SSuyog Pawar      */
1213*c83a76b0SSuyog Pawar 
1214*c83a76b0SSuyog Pawar     WORD32 i4_ctb_slice_y;
1215*c83a76b0SSuyog Pawar 
1216*c83a76b0SSuyog Pawar     /**
1217*c83a76b0SSuyog Pawar      * Current tile being processed
1218*c83a76b0SSuyog Pawar      */
1219*c83a76b0SSuyog Pawar     tile_t *ps_tile;
1220*c83a76b0SSuyog Pawar 
1221*c83a76b0SSuyog Pawar     /**
1222*c83a76b0SSuyog Pawar      * Current slice idx - Used in multi-core cases to store slice index for
1223*c83a76b0SSuyog Pawar      * each ctb for sao filtering.
1224*c83a76b0SSuyog Pawar      */
1225*c83a76b0SSuyog Pawar     WORD32 i4_cur_slice_idx;
1226*c83a76b0SSuyog Pawar 
1227*c83a76b0SSuyog Pawar     /**
1228*c83a76b0SSuyog Pawar      * Current tile idx - Used in multi-core cases to store tile index for
1229*c83a76b0SSuyog Pawar      * each ctb for sao filtering.
1230*c83a76b0SSuyog Pawar      */
1231*c83a76b0SSuyog Pawar     WORD32 i4_cur_tile_idx;
1232*c83a76b0SSuyog Pawar     /**
1233*c83a76b0SSuyog Pawar      * Pointer to current PPS
1234*c83a76b0SSuyog Pawar      */
1235*c83a76b0SSuyog Pawar     pps_t *ps_pps;
1236*c83a76b0SSuyog Pawar 
1237*c83a76b0SSuyog Pawar     /**
1238*c83a76b0SSuyog Pawar      * Pointer to current SPS
1239*c83a76b0SSuyog Pawar      */
1240*c83a76b0SSuyog Pawar     sps_t *ps_sps;
1241*c83a76b0SSuyog Pawar 
1242*c83a76b0SSuyog Pawar     /**
1243*c83a76b0SSuyog Pawar      * Pointer to current slice header structure
1244*c83a76b0SSuyog Pawar      */
1245*c83a76b0SSuyog Pawar     slice_header_t *ps_slice_hdr;
1246*c83a76b0SSuyog Pawar 
1247*c83a76b0SSuyog Pawar     /**
1248*c83a76b0SSuyog Pawar      * Error code during parse stage
1249*c83a76b0SSuyog Pawar      */
1250*c83a76b0SSuyog Pawar     WORD32 i4_error_code;
1251*c83a76b0SSuyog Pawar 
1252*c83a76b0SSuyog Pawar     /**
1253*c83a76b0SSuyog Pawar      * Signal that pic_init is called first time
1254*c83a76b0SSuyog Pawar      */
1255*c83a76b0SSuyog Pawar     WORD32 i4_first_pic_init;
1256*c83a76b0SSuyog Pawar 
1257*c83a76b0SSuyog Pawar     /**
1258*c83a76b0SSuyog Pawar      * Pointer frame level TU subblock coeff data
1259*c83a76b0SSuyog Pawar      */
1260*c83a76b0SSuyog Pawar     void *pv_pic_tu_coeff_data;
1261*c83a76b0SSuyog Pawar 
1262*c83a76b0SSuyog Pawar     /**
1263*c83a76b0SSuyog Pawar      * Pointer to TU subblock coeff data and number of subblocks and scan idx
1264*c83a76b0SSuyog Pawar      * Incremented each time a coded subblock is processed
1265*c83a76b0SSuyog Pawar      *
1266*c83a76b0SSuyog Pawar      */
1267*c83a76b0SSuyog Pawar     void *pv_tu_coeff_data;
1268*c83a76b0SSuyog Pawar 
1269*c83a76b0SSuyog Pawar     /**
1270*c83a76b0SSuyog Pawar      * Current TU structure - set to CTB tu_t pointer at the start of CTB processing and incremented
1271*c83a76b0SSuyog Pawar      * for every TU
1272*c83a76b0SSuyog Pawar      */
1273*c83a76b0SSuyog Pawar     tu_t *ps_tu;
1274*c83a76b0SSuyog Pawar 
1275*c83a76b0SSuyog Pawar     /**
1276*c83a76b0SSuyog Pawar      * Current ctb's TU map
1277*c83a76b0SSuyog Pawar      */
1278*c83a76b0SSuyog Pawar     UWORD8 *pu1_tu_map;
1279*c83a76b0SSuyog Pawar 
1280*c83a76b0SSuyog Pawar     /**
1281*c83a76b0SSuyog Pawar      * Current PU structure - set to CTB pu_t pointer at the start of CTB processing and incremented
1282*c83a76b0SSuyog Pawar      * for every TU
1283*c83a76b0SSuyog Pawar      */
1284*c83a76b0SSuyog Pawar     pu_t *ps_pu;
1285*c83a76b0SSuyog Pawar 
1286*c83a76b0SSuyog Pawar     /**
1287*c83a76b0SSuyog Pawar      * Points to an array of TU indices which is used to identify
1288*c83a76b0SSuyog Pawar      * start index of tu_t in ps_pic_tu and also to identify number of
1289*c83a76b0SSuyog Pawar      * TUs in the current CTB by subtracting current idx from next CTB's
1290*c83a76b0SSuyog Pawar      * TU idx
1291*c83a76b0SSuyog Pawar      */
1292*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_tu_idx;
1293*c83a76b0SSuyog Pawar 
1294*c83a76b0SSuyog Pawar     /**
1295*c83a76b0SSuyog Pawar      * Points to an array of PU indices which is used to identify
1296*c83a76b0SSuyog Pawar      * start index of pu_t in ps_pic_pu and also to identify number of
1297*c83a76b0SSuyog Pawar      * PUs in the current CTB by subtracting current idx from next CTB's
1298*c83a76b0SSuyog Pawar      * PU idx
1299*c83a76b0SSuyog Pawar      */
1300*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_pu_idx;
1301*c83a76b0SSuyog Pawar 
1302*c83a76b0SSuyog Pawar     /**
1303*c83a76b0SSuyog Pawar      * Pointer to tu_map for the current frame being parsed
1304*c83a76b0SSuyog Pawar      */
1305*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_tu_map;
1306*c83a76b0SSuyog Pawar 
1307*c83a76b0SSuyog Pawar     /**
1308*c83a76b0SSuyog Pawar       * Pointer to pu_map for the current frame being parsed
1309*c83a76b0SSuyog Pawar       * where MVs and Intra pred modes will be updated
1310*c83a76b0SSuyog Pawar       */
1311*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_pu_map;
1312*c83a76b0SSuyog Pawar 
1313*c83a76b0SSuyog Pawar     /**
1314*c83a76b0SSuyog Pawar      * Pointer to frame level pu_t for the current frame being parsed
1315*c83a76b0SSuyog Pawar      * where MVs and Intra pred modes will be updated
1316*c83a76b0SSuyog Pawar      */
1317*c83a76b0SSuyog Pawar     pu_t *ps_pic_pu;
1318*c83a76b0SSuyog Pawar 
1319*c83a76b0SSuyog Pawar     /** PU Index map per CTB. The indices in this map are w.r.t picture pu array and not
1320*c83a76b0SSuyog Pawar      * w.r.t CTB pu array.
1321*c83a76b0SSuyog Pawar      * This will be used during mv prediction and since neighbours will have different CTB pu map
1322*c83a76b0SSuyog Pawar      * it will be easier if they all have indices w.r.t picture level PU array rather than CTB level
1323*c83a76b0SSuyog Pawar      * PU array.
1324*c83a76b0SSuyog Pawar      * pu1_pic_pu_map is map w.r.t CTB's pu_t array
1325*c83a76b0SSuyog Pawar      */
1326*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_pu_idx_map;
1327*c83a76b0SSuyog Pawar 
1328*c83a76b0SSuyog Pawar     /**
1329*c83a76b0SSuyog Pawar      * PU Index of top 4x4 neighbors stored for an entire row
1330*c83a76b0SSuyog Pawar      */
1331*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_pu_idx_top;
1332*c83a76b0SSuyog Pawar 
1333*c83a76b0SSuyog Pawar     /**
1334*c83a76b0SSuyog Pawar      * PU Index of left 4x4 neighbors stored for 64 pixels
1335*c83a76b0SSuyog Pawar      */
1336*c83a76b0SSuyog Pawar     UWORD32 *pu4_pic_pu_idx_left;
1337*c83a76b0SSuyog Pawar 
1338*c83a76b0SSuyog Pawar     /**
1339*c83a76b0SSuyog Pawar      * Holds top left PU index at CTB level - top left gets overwritten
1340*c83a76b0SSuyog Pawar      * by left CTB while updating top array. Before updating top at CTB
1341*c83a76b0SSuyog Pawar      * level required top-left index is backed up in the following
1342*c83a76b0SSuyog Pawar      */
1343*c83a76b0SSuyog Pawar     UWORD32 u4_ctb_top_left_pu_idx;
1344*c83a76b0SSuyog Pawar 
1345*c83a76b0SSuyog Pawar     /**
1346*c83a76b0SSuyog Pawar      * Pointer to frame level tu_t for the current frame being parsed
1347*c83a76b0SSuyog Pawar      * where transform unit related info will be updated
1348*c83a76b0SSuyog Pawar      */
1349*c83a76b0SSuyog Pawar     tu_t *ps_pic_tu;
1350*c83a76b0SSuyog Pawar 
1351*c83a76b0SSuyog Pawar 
1352*c83a76b0SSuyog Pawar     /**
1353*c83a76b0SSuyog Pawar     * Current PU structure - set to CTB pu_map pointer at the start of CTB parsing
1354*c83a76b0SSuyog Pawar     */
1355*c83a76b0SSuyog Pawar     UWORD8 *pu1_pu_map;
1356*c83a76b0SSuyog Pawar 
1357*c83a76b0SSuyog Pawar     /** Current MV Bank's buffer ID */
1358*c83a76b0SSuyog Pawar     WORD32 i4_cur_mv_bank_buf_id;
1359*c83a76b0SSuyog Pawar 
1360*c83a76b0SSuyog Pawar     /**
1361*c83a76b0SSuyog Pawar      * Current pictures intra mode map at 8x8 level
1362*c83a76b0SSuyog Pawar      */
1363*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_intra_flag;
1364*c83a76b0SSuyog Pawar 
1365*c83a76b0SSuyog Pawar     /**
1366*c83a76b0SSuyog Pawar      * Current pictures loop filter flag map at 8x8 level
1367*c83a76b0SSuyog Pawar      */
1368*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_no_loop_filter_flag;
1369*c83a76b0SSuyog Pawar 
1370*c83a76b0SSuyog Pawar     /**
1371*c83a76b0SSuyog Pawar      * Void pointer to process job context
1372*c83a76b0SSuyog Pawar      */
1373*c83a76b0SSuyog Pawar 
1374*c83a76b0SSuyog Pawar     void *pv_proc_jobq;
1375*c83a76b0SSuyog Pawar 
1376*c83a76b0SSuyog Pawar     /**
1377*c83a76b0SSuyog Pawar      * Number of CTBs to be processed in the current Job
1378*c83a76b0SSuyog Pawar      */
1379*c83a76b0SSuyog Pawar     WORD32 i4_ctb_cnt;
1380*c83a76b0SSuyog Pawar     /**
1381*c83a76b0SSuyog Pawar      * ID for the current context - Used for debugging
1382*c83a76b0SSuyog Pawar      */
1383*c83a76b0SSuyog Pawar     WORD32 i4_id;
1384*c83a76b0SSuyog Pawar 
1385*c83a76b0SSuyog Pawar     /**
1386*c83a76b0SSuyog Pawar      * Flag to indicate if parsing status has to be checked
1387*c83a76b0SSuyog Pawar      * Needed when parsing and processing are done in different threads
1388*c83a76b0SSuyog Pawar      */
1389*c83a76b0SSuyog Pawar     WORD32 i4_check_parse_status;
1390*c83a76b0SSuyog Pawar 
1391*c83a76b0SSuyog Pawar     /**
1392*c83a76b0SSuyog Pawar      * Flag to indicate if processing status of top row CTBs has to be checked
1393*c83a76b0SSuyog Pawar      * Needed when processing of different rows is done in different threads
1394*c83a76b0SSuyog Pawar      */
1395*c83a76b0SSuyog Pawar     WORD32 i4_check_proc_status;
1396*c83a76b0SSuyog Pawar 
1397*c83a76b0SSuyog Pawar     /**
1398*c83a76b0SSuyog Pawar      * Holds Intra dequantization matrices
1399*c83a76b0SSuyog Pawar      */
1400*c83a76b0SSuyog Pawar     WORD16 *api2_dequant_intra_matrix[4];
1401*c83a76b0SSuyog Pawar 
1402*c83a76b0SSuyog Pawar     /**
1403*c83a76b0SSuyog Pawar      * Holds Inter dequantization matrices
1404*c83a76b0SSuyog Pawar      */
1405*c83a76b0SSuyog Pawar     WORD16 *api2_dequant_inter_matrix[4];
1406*c83a76b0SSuyog Pawar 
1407*c83a76b0SSuyog Pawar 
1408*c83a76b0SSuyog Pawar     /**
1409*c83a76b0SSuyog Pawar      * Temporary buffer 1 - Used as a scratch in inter_pred_ctb()
1410*c83a76b0SSuyog Pawar      */
1411*c83a76b0SSuyog Pawar     WORD16 *pi2_inter_pred_tmp_buf1;
1412*c83a76b0SSuyog Pawar 
1413*c83a76b0SSuyog Pawar     /**
1414*c83a76b0SSuyog Pawar      * Temporary buffer 2 - Used as a scratch in inter_pred_ctb()
1415*c83a76b0SSuyog Pawar      */
1416*c83a76b0SSuyog Pawar     WORD16 *pi2_inter_pred_tmp_buf2;
1417*c83a76b0SSuyog Pawar 
1418*c83a76b0SSuyog Pawar     /**
1419*c83a76b0SSuyog Pawar      * Temporary buffer 3 - Used as a scratch in inter_pred_ctb()
1420*c83a76b0SSuyog Pawar      */
1421*c83a76b0SSuyog Pawar     WORD16 *pi2_inter_pred_tmp_buf3;
1422*c83a76b0SSuyog Pawar 
1423*c83a76b0SSuyog Pawar     /**
1424*c83a76b0SSuyog Pawar      * The above temporary buffers' stride
1425*c83a76b0SSuyog Pawar      */
1426*c83a76b0SSuyog Pawar     WORD32 i4_inter_pred_tmp_buf_strd;
1427*c83a76b0SSuyog Pawar     /**
1428*c83a76b0SSuyog Pawar      * Picture stride
1429*c83a76b0SSuyog Pawar      * Used as prediction stride, destination stride while computing inverse transform
1430*c83a76b0SSuyog Pawar      */
1431*c83a76b0SSuyog Pawar     WORD32 i4_pic_strd;
1432*c83a76b0SSuyog Pawar 
1433*c83a76b0SSuyog Pawar     /**
1434*c83a76b0SSuyog Pawar      * Picture qp offset for U
1435*c83a76b0SSuyog Pawar      */
1436*c83a76b0SSuyog Pawar     WORD8 i1_pic_cb_qp_offset;
1437*c83a76b0SSuyog Pawar 
1438*c83a76b0SSuyog Pawar     /**
1439*c83a76b0SSuyog Pawar      * Slice qp offset for U
1440*c83a76b0SSuyog Pawar      */
1441*c83a76b0SSuyog Pawar     WORD32 i1_slice_cb_qp_offset;
1442*c83a76b0SSuyog Pawar 
1443*c83a76b0SSuyog Pawar     /**
1444*c83a76b0SSuyog Pawar      * Picture qp offset for V
1445*c83a76b0SSuyog Pawar      */
1446*c83a76b0SSuyog Pawar     WORD8 i1_pic_cr_qp_offset;
1447*c83a76b0SSuyog Pawar 
1448*c83a76b0SSuyog Pawar     /**
1449*c83a76b0SSuyog Pawar      * Slice qp offset for V
1450*c83a76b0SSuyog Pawar      */
1451*c83a76b0SSuyog Pawar     WORD32 i1_slice_cr_qp_offset;
1452*c83a76b0SSuyog Pawar 
1453*c83a76b0SSuyog Pawar     /** Pointer to current picture buffer structure */
1454*c83a76b0SSuyog Pawar     pic_buf_t *ps_cur_pic;
1455*c83a76b0SSuyog Pawar 
1456*c83a76b0SSuyog Pawar     /** Current pic_buf's picture buffer id */
1457*c83a76b0SSuyog Pawar     WORD32 i4_cur_pic_buf_id;
1458*c83a76b0SSuyog Pawar 
1459*c83a76b0SSuyog Pawar     /** Pointer to 0th luma pixel in current pic */
1460*c83a76b0SSuyog Pawar     UWORD8 *pu1_cur_pic_luma;
1461*c83a76b0SSuyog Pawar 
1462*c83a76b0SSuyog Pawar     /** Pointer to 0th chroma pixel in current pic */
1463*c83a76b0SSuyog Pawar     UWORD8 *pu1_cur_pic_chroma;
1464*c83a76b0SSuyog Pawar 
1465*c83a76b0SSuyog Pawar     /** Intermediate buffer to be used during inverse transform */
1466*c83a76b0SSuyog Pawar     WORD16 *pi2_itrans_intrmd_buf;
1467*c83a76b0SSuyog Pawar 
1468*c83a76b0SSuyog Pawar     /** Buffer to hold output of inverse scan */
1469*c83a76b0SSuyog Pawar     WORD16 *pi2_invscan_out;
1470*c83a76b0SSuyog Pawar 
1471*c83a76b0SSuyog Pawar     /**
1472*c83a76b0SSuyog Pawar      *  Top availability for current CTB level
1473*c83a76b0SSuyog Pawar      */
1474*c83a76b0SSuyog Pawar     UWORD8 u1_top_ctb_avail;
1475*c83a76b0SSuyog Pawar 
1476*c83a76b0SSuyog Pawar     /**
1477*c83a76b0SSuyog Pawar      *  Top right availability for current CTB level
1478*c83a76b0SSuyog Pawar      */
1479*c83a76b0SSuyog Pawar     UWORD8 u1_top_rt_ctb_avail;
1480*c83a76b0SSuyog Pawar     /**
1481*c83a76b0SSuyog Pawar      *  Top left availability for current CTB level
1482*c83a76b0SSuyog Pawar      */
1483*c83a76b0SSuyog Pawar     UWORD8 u1_top_lt_ctb_avail;
1484*c83a76b0SSuyog Pawar     /**
1485*c83a76b0SSuyog Pawar      *  left availability for current CTB level
1486*c83a76b0SSuyog Pawar      */
1487*c83a76b0SSuyog Pawar     UWORD8 u1_left_ctb_avail;
1488*c83a76b0SSuyog Pawar     /**
1489*c83a76b0SSuyog Pawar      *  TU count in current CTB
1490*c83a76b0SSuyog Pawar      */
1491*c83a76b0SSuyog Pawar     WORD32 i4_ctb_tu_cnt;
1492*c83a76b0SSuyog Pawar 
1493*c83a76b0SSuyog Pawar     /**
1494*c83a76b0SSuyog Pawar      *  Recon pointer to current CTB luma
1495*c83a76b0SSuyog Pawar      */
1496*c83a76b0SSuyog Pawar     UWORD8 *pu1_cur_ctb_luma;
1497*c83a76b0SSuyog Pawar     /**
1498*c83a76b0SSuyog Pawar      *  Recon pointer to current CTB chroma
1499*c83a76b0SSuyog Pawar      */
1500*c83a76b0SSuyog Pawar     UWORD8 *pu1_cur_ctb_chroma;
1501*c83a76b0SSuyog Pawar 
1502*c83a76b0SSuyog Pawar     /**
1503*c83a76b0SSuyog Pawar      *  PU count in current CTB
1504*c83a76b0SSuyog Pawar      */
1505*c83a76b0SSuyog Pawar     WORD32 i4_ctb_pu_cnt;
1506*c83a76b0SSuyog Pawar 
1507*c83a76b0SSuyog Pawar     /**
1508*c83a76b0SSuyog Pawar      *  PU count in current CTB
1509*c83a76b0SSuyog Pawar      */
1510*c83a76b0SSuyog Pawar     WORD32 i4_ctb_start_pu_idx;
1511*c83a76b0SSuyog Pawar 
1512*c83a76b0SSuyog Pawar     /* Pointer to a structure describing output display buffer */
1513*c83a76b0SSuyog Pawar     ivd_out_bufdesc_t *ps_out_buffer;
1514*c83a76b0SSuyog Pawar 
1515*c83a76b0SSuyog Pawar     /** Flag to indicate if ps_proc was intialized at least once in a frame.
1516*c83a76b0SSuyog Pawar      * This is needed to handle cases where a core starts to handle format conversion jobs directly
1517*c83a76b0SSuyog Pawar      */
1518*c83a76b0SSuyog Pawar     WORD32 i4_init_done;
1519*c83a76b0SSuyog Pawar 
1520*c83a76b0SSuyog Pawar     /**
1521*c83a76b0SSuyog Pawar      * Pointer to the structure that contains BS and QP frame level arrays
1522*c83a76b0SSuyog Pawar      */
1523*c83a76b0SSuyog Pawar     bs_ctxt_t s_bs_ctxt;
1524*c83a76b0SSuyog Pawar 
1525*c83a76b0SSuyog Pawar     /**
1526*c83a76b0SSuyog Pawar      * Pointer to the structure that contains deblock context
1527*c83a76b0SSuyog Pawar      */
1528*c83a76b0SSuyog Pawar     deblk_ctxt_t s_deblk_ctxt;
1529*c83a76b0SSuyog Pawar 
1530*c83a76b0SSuyog Pawar     /**
1531*c83a76b0SSuyog Pawar      * Pointer to the structure that contains sao context
1532*c83a76b0SSuyog Pawar      */
1533*c83a76b0SSuyog Pawar     sao_ctxt_t s_sao_ctxt;
1534*c83a76b0SSuyog Pawar 
1535*c83a76b0SSuyog Pawar     /**
1536*c83a76b0SSuyog Pawar      * Points to the array of slice indices which is used to identify the independent
1537*c83a76b0SSuyog Pawar      * slice to which each CTB in a frame belongs.
1538*c83a76b0SSuyog Pawar      */
1539*c83a76b0SSuyog Pawar     UWORD16 *pu1_slice_idx;
1540*c83a76b0SSuyog Pawar 
1541*c83a76b0SSuyog Pawar     /**
1542*c83a76b0SSuyog Pawar      * Points to the array of slice indices which is used to identify the slice
1543*c83a76b0SSuyog Pawar      *  to which each CTB in a frame belongs.
1544*c83a76b0SSuyog Pawar      */
1545*c83a76b0SSuyog Pawar     UWORD16 *pu1_tile_idx;
1546*c83a76b0SSuyog Pawar     /**
1547*c83a76b0SSuyog Pawar      * Variable to store the next ctb count to compute pu idx
1548*c83a76b0SSuyog Pawar      */
1549*c83a76b0SSuyog Pawar     WORD32 i4_next_pu_ctb_cnt;
1550*c83a76b0SSuyog Pawar 
1551*c83a76b0SSuyog Pawar     /**
1552*c83a76b0SSuyog Pawar      * Variable to store the next ctb count to compute tu idx
1553*c83a76b0SSuyog Pawar      */
1554*c83a76b0SSuyog Pawar     WORD32 i4_next_tu_ctb_cnt;
1555*c83a76b0SSuyog Pawar     /**
1556*c83a76b0SSuyog Pawar      * Number of ctb's to process in one loop
1557*c83a76b0SSuyog Pawar      */
1558*c83a76b0SSuyog Pawar     WORD32 i4_nctb;
1559*c83a76b0SSuyog Pawar }process_ctxt_t;
1560*c83a76b0SSuyog Pawar 
1561*c83a76b0SSuyog Pawar /**
1562*c83a76b0SSuyog Pawar  * Reference mapping from pic_buf_id to pointers to corresponding qp_map and CU_type_map
1563*c83a76b0SSuyog Pawar  */
1564*c83a76b0SSuyog Pawar typedef struct
1565*c83a76b0SSuyog Pawar {
1566*c83a76b0SSuyog Pawar     /**
1567*c83a76b0SSuyog Pawar      * qp_map buffer
1568*c83a76b0SSuyog Pawar      */
1569*c83a76b0SSuyog Pawar     UWORD8 *pu1_qp_map;
1570*c83a76b0SSuyog Pawar 
1571*c83a76b0SSuyog Pawar     /**
1572*c83a76b0SSuyog Pawar      * CU_type buffer
1573*c83a76b0SSuyog Pawar      */
1574*c83a76b0SSuyog Pawar     UWORD8 *pu1_cu_type_map;
1575*c83a76b0SSuyog Pawar }ref_map_t;
1576*c83a76b0SSuyog Pawar 
1577*c83a76b0SSuyog Pawar typedef void (*pf_inter_pred)(void *,
1578*c83a76b0SSuyog Pawar                               void *,
1579*c83a76b0SSuyog Pawar                               WORD32,
1580*c83a76b0SSuyog Pawar                               WORD32,
1581*c83a76b0SSuyog Pawar                               WORD8 *,
1582*c83a76b0SSuyog Pawar                               WORD32,
1583*c83a76b0SSuyog Pawar                               WORD32);
1584*c83a76b0SSuyog Pawar 
1585*c83a76b0SSuyog Pawar 
1586*c83a76b0SSuyog Pawar typedef void (*pf_intra_pred)(UWORD8 *pu1_ref,
1587*c83a76b0SSuyog Pawar                               WORD32 src_strd,
1588*c83a76b0SSuyog Pawar                               UWORD8 *pu1_dst,
1589*c83a76b0SSuyog Pawar                               WORD32 dst_strd,
1590*c83a76b0SSuyog Pawar                               WORD32 nt,
1591*c83a76b0SSuyog Pawar                               WORD32 mode);
1592*c83a76b0SSuyog Pawar 
1593*c83a76b0SSuyog Pawar typedef void (*pf_itrans_recon)(WORD16 *pi2_src,
1594*c83a76b0SSuyog Pawar                                 WORD16 *pi2_tmp,
1595*c83a76b0SSuyog Pawar                                 UWORD8 *pu1_pred,
1596*c83a76b0SSuyog Pawar                                 UWORD8 *pu1_dst,
1597*c83a76b0SSuyog Pawar                                 WORD32 src_strd,
1598*c83a76b0SSuyog Pawar                                 WORD32 pred_strd,
1599*c83a76b0SSuyog Pawar                                 WORD32 dst_strd,
1600*c83a76b0SSuyog Pawar                                 WORD32 zero_cols,
1601*c83a76b0SSuyog Pawar                                 WORD32 zero_rows);
1602*c83a76b0SSuyog Pawar 
1603*c83a76b0SSuyog Pawar typedef void (*pf_recon)(WORD16 *pi2_src,
1604*c83a76b0SSuyog Pawar                          UWORD8 *pu1_pred,
1605*c83a76b0SSuyog Pawar                          UWORD8 *pu1_dst,
1606*c83a76b0SSuyog Pawar                          WORD32 src_strd,
1607*c83a76b0SSuyog Pawar                          WORD32 pred_strd,
1608*c83a76b0SSuyog Pawar                          WORD32 dst_strd,
1609*c83a76b0SSuyog Pawar                          WORD32 zero_cols);
1610*c83a76b0SSuyog Pawar 
1611*c83a76b0SSuyog Pawar typedef void (*pf_itrans_recon_dc)(UWORD8 *pu1_pred,
1612*c83a76b0SSuyog Pawar                                    UWORD8 *pu1_dst,
1613*c83a76b0SSuyog Pawar                                    WORD32 pred_strd,
1614*c83a76b0SSuyog Pawar                                    WORD32 dst_strd,
1615*c83a76b0SSuyog Pawar                                    WORD32 log2_trans_size,
1616*c83a76b0SSuyog Pawar                                    WORD16 i2_coeff_value);
1617*c83a76b0SSuyog Pawar 
1618*c83a76b0SSuyog Pawar 
1619*c83a76b0SSuyog Pawar typedef void (*pf_sao_luma)(UWORD8 *,
1620*c83a76b0SSuyog Pawar                             WORD32,
1621*c83a76b0SSuyog Pawar                             UWORD8 *,
1622*c83a76b0SSuyog Pawar                             UWORD8 *,
1623*c83a76b0SSuyog Pawar                             UWORD8 *,
1624*c83a76b0SSuyog Pawar                             UWORD8 *,
1625*c83a76b0SSuyog Pawar                             UWORD8 *,
1626*c83a76b0SSuyog Pawar                             UWORD8 *,
1627*c83a76b0SSuyog Pawar                             WORD8 *,
1628*c83a76b0SSuyog Pawar                             WORD32,
1629*c83a76b0SSuyog Pawar                             WORD32);
1630*c83a76b0SSuyog Pawar 
1631*c83a76b0SSuyog Pawar typedef void (*pf_sao_chroma)(UWORD8 *,
1632*c83a76b0SSuyog Pawar                               WORD32,
1633*c83a76b0SSuyog Pawar                               UWORD8 *,
1634*c83a76b0SSuyog Pawar                               UWORD8 *,
1635*c83a76b0SSuyog Pawar                               UWORD8 *,
1636*c83a76b0SSuyog Pawar                               UWORD8 *,
1637*c83a76b0SSuyog Pawar                               UWORD8 *,
1638*c83a76b0SSuyog Pawar                               UWORD8 *,
1639*c83a76b0SSuyog Pawar                               WORD8 *,
1640*c83a76b0SSuyog Pawar                               WORD8 *,
1641*c83a76b0SSuyog Pawar                               WORD32,
1642*c83a76b0SSuyog Pawar                               WORD32);
1643*c83a76b0SSuyog Pawar 
1644*c83a76b0SSuyog Pawar /**
1645*c83a76b0SSuyog Pawar  * Codec context
1646*c83a76b0SSuyog Pawar  */
1647*c83a76b0SSuyog Pawar 
1648*c83a76b0SSuyog Pawar struct _codec_t
1649*c83a76b0SSuyog Pawar {
1650*c83a76b0SSuyog Pawar     /**
1651*c83a76b0SSuyog Pawar      * Width : pic_width_in_luma_samples
1652*c83a76b0SSuyog Pawar      */
1653*c83a76b0SSuyog Pawar     WORD32 i4_wd;
1654*c83a76b0SSuyog Pawar 
1655*c83a76b0SSuyog Pawar     /**
1656*c83a76b0SSuyog Pawar      * Height : pic_height_in_luma_samples
1657*c83a76b0SSuyog Pawar      */
1658*c83a76b0SSuyog Pawar     WORD32 i4_ht;
1659*c83a76b0SSuyog Pawar 
1660*c83a76b0SSuyog Pawar     /**
1661*c83a76b0SSuyog Pawar      * Display width after cropping
1662*c83a76b0SSuyog Pawar      */
1663*c83a76b0SSuyog Pawar     WORD32 i4_disp_wd;
1664*c83a76b0SSuyog Pawar 
1665*c83a76b0SSuyog Pawar     /**
1666*c83a76b0SSuyog Pawar      * Display height after cropping
1667*c83a76b0SSuyog Pawar      */
1668*c83a76b0SSuyog Pawar     WORD32 i4_disp_ht;
1669*c83a76b0SSuyog Pawar 
1670*c83a76b0SSuyog Pawar     /**
1671*c83a76b0SSuyog Pawar      * Display stride
1672*c83a76b0SSuyog Pawar      */
1673*c83a76b0SSuyog Pawar     WORD32 i4_disp_strd;
1674*c83a76b0SSuyog Pawar 
1675*c83a76b0SSuyog Pawar     /**
1676*c83a76b0SSuyog Pawar      * Stride of reference buffers.
1677*c83a76b0SSuyog Pawar      * For shared mode even display buffer will use the same stride
1678*c83a76b0SSuyog Pawar      */
1679*c83a76b0SSuyog Pawar     WORD32 i4_strd;
1680*c83a76b0SSuyog Pawar 
1681*c83a76b0SSuyog Pawar     /**
1682*c83a76b0SSuyog Pawar      * Number of cores to be used
1683*c83a76b0SSuyog Pawar      */
1684*c83a76b0SSuyog Pawar     WORD32 i4_num_cores;
1685*c83a76b0SSuyog Pawar 
1686*c83a76b0SSuyog Pawar     /**
1687*c83a76b0SSuyog Pawar      * RASL output flag
1688*c83a76b0SSuyog Pawar      */
1689*c83a76b0SSuyog Pawar     WORD32 i4_rasl_output_flag;
1690*c83a76b0SSuyog Pawar 
1691*c83a76b0SSuyog Pawar     /**
1692*c83a76b0SSuyog Pawar      * This flag is set if the next picture received is a CRA and has to be treated as a first pic in the video sequence
1693*c83a76b0SSuyog Pawar      * For example, it is set, if an EOS (end of stream) NAL is received
1694*c83a76b0SSuyog Pawar      */
1695*c83a76b0SSuyog Pawar     WORD32 i4_cra_as_first_pic;
1696*c83a76b0SSuyog Pawar 
1697*c83a76b0SSuyog Pawar     /**
1698*c83a76b0SSuyog Pawar      * Pictures that are are degraded
1699*c83a76b0SSuyog Pawar      * 0 : No degrade
1700*c83a76b0SSuyog Pawar      * 1 : Only on non-reference frames
1701*c83a76b0SSuyog Pawar      * 2 : Use interval specified by u4_nondegrade_interval
1702*c83a76b0SSuyog Pawar      * 3 : All non-key frames
1703*c83a76b0SSuyog Pawar      * 4 : All frames
1704*c83a76b0SSuyog Pawar      */
1705*c83a76b0SSuyog Pawar     WORD32                                     i4_degrade_pics;
1706*c83a76b0SSuyog Pawar 
1707*c83a76b0SSuyog Pawar     /**
1708*c83a76b0SSuyog Pawar      * Interval for pictures which are completely decoded without any degradation
1709*c83a76b0SSuyog Pawar      */
1710*c83a76b0SSuyog Pawar     WORD32                                     i4_nondegrade_interval;
1711*c83a76b0SSuyog Pawar 
1712*c83a76b0SSuyog Pawar     /**
1713*c83a76b0SSuyog Pawar      * bit position (lsb is zero): Type of degradation
1714*c83a76b0SSuyog Pawar      * 0 : Disable SAO
1715*c83a76b0SSuyog Pawar      * 1 : Disable deblocking
1716*c83a76b0SSuyog Pawar      * 2 : Faster inter prediction filters
1717*c83a76b0SSuyog Pawar      * 3 : Fastest inter prediction filters
1718*c83a76b0SSuyog Pawar      */
1719*c83a76b0SSuyog Pawar     WORD32                                     i4_degrade_type;
1720*c83a76b0SSuyog Pawar 
1721*c83a76b0SSuyog Pawar     /** Degrade pic count, Used to maintain the interval between non-degraded pics
1722*c83a76b0SSuyog Pawar      *
1723*c83a76b0SSuyog Pawar      */
1724*c83a76b0SSuyog Pawar     WORD32  i4_degrade_pic_cnt;
1725*c83a76b0SSuyog Pawar 
1726*c83a76b0SSuyog Pawar     /**
1727*c83a76b0SSuyog Pawar      * Total number of display buffers to be used
1728*c83a76b0SSuyog Pawar      * In case of shared mode, this will be number of reference frames
1729*c83a76b0SSuyog Pawar      */
1730*c83a76b0SSuyog Pawar     WORD32 i4_num_disp_bufs;
1731*c83a76b0SSuyog Pawar 
1732*c83a76b0SSuyog Pawar     /**
1733*c83a76b0SSuyog Pawar      * Flag to enable shared display buffer mode
1734*c83a76b0SSuyog Pawar      */
1735*c83a76b0SSuyog Pawar     WORD32 i4_share_disp_buf;
1736*c83a76b0SSuyog Pawar 
1737*c83a76b0SSuyog Pawar     /**
1738*c83a76b0SSuyog Pawar      * Chroma format of display buffers.
1739*c83a76b0SSuyog Pawar      In shared mode only 420SP_UV and 420SP_VU are supported
1740*c83a76b0SSuyog Pawar      */
1741*c83a76b0SSuyog Pawar     IV_COLOR_FORMAT_T e_chroma_fmt;
1742*c83a76b0SSuyog Pawar 
1743*c83a76b0SSuyog Pawar     /**
1744*c83a76b0SSuyog Pawar      * Chroma format of reference buffers.
1745*c83a76b0SSuyog Pawar      * In non-shared mode it will be 420SP_UV
1746*c83a76b0SSuyog Pawar      * In shared mode only 420SP_UV and 420SP_VU are supported
1747*c83a76b0SSuyog Pawar      */
1748*c83a76b0SSuyog Pawar     IV_COLOR_FORMAT_T e_ref_chroma_fmt;
1749*c83a76b0SSuyog Pawar 
1750*c83a76b0SSuyog Pawar     /**
1751*c83a76b0SSuyog Pawar      * Frame skip mode
1752*c83a76b0SSuyog Pawar      */
1753*c83a76b0SSuyog Pawar     IVD_FRAME_SKIP_MODE_T e_pic_skip_mode;
1754*c83a76b0SSuyog Pawar 
1755*c83a76b0SSuyog Pawar     /**
1756*c83a76b0SSuyog Pawar      * Display or decode order dump of output
1757*c83a76b0SSuyog Pawar      */
1758*c83a76b0SSuyog Pawar     IVD_DISPLAY_FRAME_OUT_MODE_T e_pic_out_order;
1759*c83a76b0SSuyog Pawar 
1760*c83a76b0SSuyog Pawar     /**
1761*c83a76b0SSuyog Pawar      * Coding type of the picture that is decoded
1762*c83a76b0SSuyog Pawar      */
1763*c83a76b0SSuyog Pawar     IV_PICTURE_CODING_TYPE_T e_dec_pic_type;
1764*c83a76b0SSuyog Pawar 
1765*c83a76b0SSuyog Pawar     /**
1766*c83a76b0SSuyog Pawar      * Flag to signal if a frame was decoded in this call
1767*c83a76b0SSuyog Pawar      */
1768*c83a76b0SSuyog Pawar     WORD32 i4_pic_decoded;
1769*c83a76b0SSuyog Pawar 
1770*c83a76b0SSuyog Pawar     /**
1771*c83a76b0SSuyog Pawar      * Flag to signal if picture data is present in the current input bitstream
1772*c83a76b0SSuyog Pawar      */
1773*c83a76b0SSuyog Pawar     WORD32 i4_pic_present;
1774*c83a76b0SSuyog Pawar 
1775*c83a76b0SSuyog Pawar     /**
1776*c83a76b0SSuyog Pawar      * Flag to disable deblocking of a frame
1777*c83a76b0SSuyog Pawar      */
1778*c83a76b0SSuyog Pawar     WORD32 i4_disable_deblk_pic;
1779*c83a76b0SSuyog Pawar 
1780*c83a76b0SSuyog Pawar     /**
1781*c83a76b0SSuyog Pawar      * Flag to disable sao of a frame
1782*c83a76b0SSuyog Pawar      */
1783*c83a76b0SSuyog Pawar     WORD32 i4_disable_sao_pic;
1784*c83a76b0SSuyog Pawar 
1785*c83a76b0SSuyog Pawar     /**
1786*c83a76b0SSuyog Pawar      * Flag to use full pel MC
1787*c83a76b0SSuyog Pawar      */
1788*c83a76b0SSuyog Pawar     WORD32 i4_fullpel_inter_pred;
1789*c83a76b0SSuyog Pawar     /**
1790*c83a76b0SSuyog Pawar      * Flush mode
1791*c83a76b0SSuyog Pawar      */
1792*c83a76b0SSuyog Pawar     WORD32 i4_flush_mode;
1793*c83a76b0SSuyog Pawar 
1794*c83a76b0SSuyog Pawar     /**
1795*c83a76b0SSuyog Pawar      * Decode header mode
1796*c83a76b0SSuyog Pawar      */
1797*c83a76b0SSuyog Pawar     WORD32 i4_header_mode;
1798*c83a76b0SSuyog Pawar 
1799*c83a76b0SSuyog Pawar     /**
1800*c83a76b0SSuyog Pawar      * Header in slice mode
1801*c83a76b0SSuyog Pawar      */
1802*c83a76b0SSuyog Pawar     WORD32 i4_header_in_slice_mode;
1803*c83a76b0SSuyog Pawar 
1804*c83a76b0SSuyog Pawar     /**
1805*c83a76b0SSuyog Pawar      * Flag to signal sps done
1806*c83a76b0SSuyog Pawar      */
1807*c83a76b0SSuyog Pawar     WORD32 i4_sps_done;
1808*c83a76b0SSuyog Pawar 
1809*c83a76b0SSuyog Pawar     /**
1810*c83a76b0SSuyog Pawar      * Flag to signal pps done
1811*c83a76b0SSuyog Pawar      */
1812*c83a76b0SSuyog Pawar     WORD32 i4_pps_done;
1813*c83a76b0SSuyog Pawar 
1814*c83a76b0SSuyog Pawar     /**
1815*c83a76b0SSuyog Pawar      * To signal successful completion of init
1816*c83a76b0SSuyog Pawar      */
1817*c83a76b0SSuyog Pawar     WORD32 i4_init_done;
1818*c83a76b0SSuyog Pawar 
1819*c83a76b0SSuyog Pawar     /**
1820*c83a76b0SSuyog Pawar      * To signal that at least one picture was decoded
1821*c83a76b0SSuyog Pawar      */
1822*c83a76b0SSuyog Pawar     WORD32 i4_first_pic_done;
1823*c83a76b0SSuyog Pawar 
1824*c83a76b0SSuyog Pawar     /**
1825*c83a76b0SSuyog Pawar      * To signal error in slice
1826*c83a76b0SSuyog Pawar      */
1827*c83a76b0SSuyog Pawar     WORD32 i4_slice_error;
1828*c83a76b0SSuyog Pawar 
1829*c83a76b0SSuyog Pawar     /**
1830*c83a76b0SSuyog Pawar      * Reset flag - Codec is reset if this flag is set
1831*c83a76b0SSuyog Pawar      */
1832*c83a76b0SSuyog Pawar     WORD32 i4_reset_flag;
1833*c83a76b0SSuyog Pawar 
1834*c83a76b0SSuyog Pawar     /**
1835*c83a76b0SSuyog Pawar      * Number of pictures decoded till now
1836*c83a76b0SSuyog Pawar      */
1837*c83a76b0SSuyog Pawar     UWORD32 u4_pic_cnt;
1838*c83a76b0SSuyog Pawar 
1839*c83a76b0SSuyog Pawar     /**
1840*c83a76b0SSuyog Pawar      * Number of pictures displayed till now
1841*c83a76b0SSuyog Pawar      */
1842*c83a76b0SSuyog Pawar     UWORD32 u4_disp_cnt;
1843*c83a76b0SSuyog Pawar 
1844*c83a76b0SSuyog Pawar     /**
1845*c83a76b0SSuyog Pawar      * Current error code
1846*c83a76b0SSuyog Pawar      */
1847*c83a76b0SSuyog Pawar     WORD32 i4_error_code;
1848*c83a76b0SSuyog Pawar 
1849*c83a76b0SSuyog Pawar     /**
1850*c83a76b0SSuyog Pawar      * Pointer to input bitstream. This is incremented everytime a NAL is processed
1851*c83a76b0SSuyog Pawar      */
1852*c83a76b0SSuyog Pawar     UWORD8 *pu1_inp_bitsbuf;
1853*c83a76b0SSuyog Pawar 
1854*c83a76b0SSuyog Pawar     /**
1855*c83a76b0SSuyog Pawar      * Offset to first byte after the start code in current NAL
1856*c83a76b0SSuyog Pawar      */
1857*c83a76b0SSuyog Pawar     WORD32 i4_nal_ofst;
1858*c83a76b0SSuyog Pawar 
1859*c83a76b0SSuyog Pawar     /**
1860*c83a76b0SSuyog Pawar      * Length of the NAL unit including the emulation bytes
1861*c83a76b0SSuyog Pawar      */
1862*c83a76b0SSuyog Pawar     WORD32 i4_nal_len;
1863*c83a76b0SSuyog Pawar 
1864*c83a76b0SSuyog Pawar     /**
1865*c83a76b0SSuyog Pawar      * Number of emulation prevention bytes present in the current NAL
1866*c83a76b0SSuyog Pawar      */
1867*c83a76b0SSuyog Pawar     WORD32 i4_num_emln_bytes;
1868*c83a76b0SSuyog Pawar 
1869*c83a76b0SSuyog Pawar     /**
1870*c83a76b0SSuyog Pawar      * Number of bytes remaining in the input bitstream
1871*c83a76b0SSuyog Pawar      */
1872*c83a76b0SSuyog Pawar     /**
1873*c83a76b0SSuyog Pawar      * Decremented everytime a NAL is processed
1874*c83a76b0SSuyog Pawar      */
1875*c83a76b0SSuyog Pawar     WORD32 i4_bytes_remaining;
1876*c83a76b0SSuyog Pawar 
1877*c83a76b0SSuyog Pawar     /**
1878*c83a76b0SSuyog Pawar      * Pointer to bitstream after emulation prevention
1879*c83a76b0SSuyog Pawar      */
1880*c83a76b0SSuyog Pawar     UWORD8 *pu1_bitsbuf;
1881*c83a76b0SSuyog Pawar 
1882*c83a76b0SSuyog Pawar     /**
1883*c83a76b0SSuyog Pawar      * Pointer to static bitstream after emulation prevention
1884*c83a76b0SSuyog Pawar      * This is a fixed size buffer used initially till SPS is decoded
1885*c83a76b0SSuyog Pawar      */
1886*c83a76b0SSuyog Pawar     UWORD8 *pu1_bitsbuf_static;
1887*c83a76b0SSuyog Pawar 
1888*c83a76b0SSuyog Pawar     /**
1889*c83a76b0SSuyog Pawar      * Pointer to dynamic bitstream after emulation prevention
1890*c83a76b0SSuyog Pawar      * This is allocated after SPS is done, based on width and height
1891*c83a76b0SSuyog Pawar      */
1892*c83a76b0SSuyog Pawar     UWORD8 *pu1_bitsbuf_dynamic;
1893*c83a76b0SSuyog Pawar 
1894*c83a76b0SSuyog Pawar     /**
1895*c83a76b0SSuyog Pawar      * Size of intermediate bitstream buffer
1896*c83a76b0SSuyog Pawar      */
1897*c83a76b0SSuyog Pawar     UWORD32 u4_bitsbuf_size;
1898*c83a76b0SSuyog Pawar 
1899*c83a76b0SSuyog Pawar     /**
1900*c83a76b0SSuyog Pawar      * Size of intermediate static bitstream buffer
1901*c83a76b0SSuyog Pawar      */
1902*c83a76b0SSuyog Pawar     UWORD32 u4_bitsbuf_size_static;
1903*c83a76b0SSuyog Pawar 
1904*c83a76b0SSuyog Pawar     /**
1905*c83a76b0SSuyog Pawar      * Size of intermediate dynamic bitstream buffer
1906*c83a76b0SSuyog Pawar      */
1907*c83a76b0SSuyog Pawar     UWORD32 u4_bitsbuf_size_dynamic;
1908*c83a76b0SSuyog Pawar 
1909*c83a76b0SSuyog Pawar     /**
1910*c83a76b0SSuyog Pawar      * Pointer to hold TU data for a set of CTBs or a picture
1911*c83a76b0SSuyog Pawar      */
1912*c83a76b0SSuyog Pawar     void *pv_tu_data;
1913*c83a76b0SSuyog Pawar 
1914*c83a76b0SSuyog Pawar     /**
1915*c83a76b0SSuyog Pawar      * Process Job queue buffer base
1916*c83a76b0SSuyog Pawar      */
1917*c83a76b0SSuyog Pawar     void *pv_proc_jobq_buf;
1918*c83a76b0SSuyog Pawar 
1919*c83a76b0SSuyog Pawar     /**
1920*c83a76b0SSuyog Pawar      * Process Job Queue mem tab size
1921*c83a76b0SSuyog Pawar      */
1922*c83a76b0SSuyog Pawar     WORD32 i4_proc_jobq_buf_size;
1923*c83a76b0SSuyog Pawar 
1924*c83a76b0SSuyog Pawar     /** Parse status: one byte per CTB */
1925*c83a76b0SSuyog Pawar     UWORD8 *pu1_parse_map;
1926*c83a76b0SSuyog Pawar 
1927*c83a76b0SSuyog Pawar     /** Process status: one byte per CTB */
1928*c83a76b0SSuyog Pawar     UWORD8 *pu1_proc_map;
1929*c83a76b0SSuyog Pawar     /**
1930*c83a76b0SSuyog Pawar      * Current pictures intra mode map at 8x8 level
1931*c83a76b0SSuyog Pawar      */
1932*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_intra_flag;
1933*c83a76b0SSuyog Pawar 
1934*c83a76b0SSuyog Pawar     /**
1935*c83a76b0SSuyog Pawar      * No LPF buffer base
1936*c83a76b0SSuyog Pawar      */
1937*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_no_loop_filter_flag_base;
1938*c83a76b0SSuyog Pawar 
1939*c83a76b0SSuyog Pawar     /**
1940*c83a76b0SSuyog Pawar      * Current pictures loop filter flag map at 8x8 level
1941*c83a76b0SSuyog Pawar      */
1942*c83a76b0SSuyog Pawar     UWORD8 *pu1_pic_no_loop_filter_flag;
1943*c83a76b0SSuyog Pawar     /**
1944*c83a76b0SSuyog Pawar      * MV Bank buffer manager
1945*c83a76b0SSuyog Pawar      */
1946*c83a76b0SSuyog Pawar     void *pv_mv_buf_mgr;
1947*c83a76b0SSuyog Pawar 
1948*c83a76b0SSuyog Pawar     /**
1949*c83a76b0SSuyog Pawar      * Pointer to MV Buf structure array
1950*c83a76b0SSuyog Pawar      */
1951*c83a76b0SSuyog Pawar     void *ps_mv_buf;
1952*c83a76b0SSuyog Pawar 
1953*c83a76b0SSuyog Pawar     /** Holds the number of mv_buf_t structures allocated */
1954*c83a76b0SSuyog Pawar     WORD32 i4_max_dpb_size;
1955*c83a76b0SSuyog Pawar 
1956*c83a76b0SSuyog Pawar     /**
1957*c83a76b0SSuyog Pawar      * Base address for Motion Vector bank buffer
1958*c83a76b0SSuyog Pawar      */
1959*c83a76b0SSuyog Pawar     void *pv_mv_bank_buf_base;
1960*c83a76b0SSuyog Pawar 
1961*c83a76b0SSuyog Pawar     /**
1962*c83a76b0SSuyog Pawar      * MV Bank size allocated
1963*c83a76b0SSuyog Pawar      */
1964*c83a76b0SSuyog Pawar     WORD32 i4_total_mv_bank_size;
1965*c83a76b0SSuyog Pawar 
1966*c83a76b0SSuyog Pawar     /**
1967*c83a76b0SSuyog Pawar      * Picture buffer manager
1968*c83a76b0SSuyog Pawar      */
1969*c83a76b0SSuyog Pawar     void *pv_pic_buf_mgr;
1970*c83a76b0SSuyog Pawar 
1971*c83a76b0SSuyog Pawar     /**
1972*c83a76b0SSuyog Pawar      * Pointer to Pic Buf structure array
1973*c83a76b0SSuyog Pawar      */
1974*c83a76b0SSuyog Pawar     void *ps_pic_buf;
1975*c83a76b0SSuyog Pawar 
1976*c83a76b0SSuyog Pawar     /**
1977*c83a76b0SSuyog Pawar      * Base address for Picture buffer
1978*c83a76b0SSuyog Pawar      */
1979*c83a76b0SSuyog Pawar     void *pv_pic_buf_base;
1980*c83a76b0SSuyog Pawar 
1981*c83a76b0SSuyog Pawar     /**
1982*c83a76b0SSuyog Pawar      * Total pic buffer size allocated
1983*c83a76b0SSuyog Pawar      */
1984*c83a76b0SSuyog Pawar     WORD32 i4_total_pic_buf_size;
1985*c83a76b0SSuyog Pawar 
1986*c83a76b0SSuyog Pawar     /**
1987*c83a76b0SSuyog Pawar      * Current chroma buffer base - used for shared mode with 420p output
1988*c83a76b0SSuyog Pawar      */
1989*c83a76b0SSuyog Pawar     UWORD8 *pu1_cur_chroma_ref_buf;
1990*c83a76b0SSuyog Pawar 
1991*c83a76b0SSuyog Pawar     /**
1992*c83a76b0SSuyog Pawar      * Picture buffer manager
1993*c83a76b0SSuyog Pawar      */
1994*c83a76b0SSuyog Pawar     void *pv_disp_buf_mgr;
1995*c83a76b0SSuyog Pawar 
1996*c83a76b0SSuyog Pawar     /**
1997*c83a76b0SSuyog Pawar      * Current display buffer's buffer ID
1998*c83a76b0SSuyog Pawar      */
1999*c83a76b0SSuyog Pawar     WORD32 i4_disp_buf_id;
2000*c83a76b0SSuyog Pawar 
2001*c83a76b0SSuyog Pawar     /**
2002*c83a76b0SSuyog Pawar      * Current display buffer
2003*c83a76b0SSuyog Pawar      */
2004*c83a76b0SSuyog Pawar     pic_buf_t *ps_disp_buf;
2005*c83a76b0SSuyog Pawar 
2006*c83a76b0SSuyog Pawar     /**
2007*c83a76b0SSuyog Pawar      * Pointer to dpb manager structure
2008*c83a76b0SSuyog Pawar      */
2009*c83a76b0SSuyog Pawar     void *pv_dpb_mgr;
2010*c83a76b0SSuyog Pawar 
2011*c83a76b0SSuyog Pawar     /**
2012*c83a76b0SSuyog Pawar      * Scaling matrices for each PPS
2013*c83a76b0SSuyog Pawar      */
2014*c83a76b0SSuyog Pawar     WORD16 *pi2_scaling_mat;
2015*c83a76b0SSuyog Pawar 
2016*c83a76b0SSuyog Pawar     /**
2017*c83a76b0SSuyog Pawar      * Array containing Tile information for each PPS
2018*c83a76b0SSuyog Pawar      */
2019*c83a76b0SSuyog Pawar     tile_t *ps_tile;
2020*c83a76b0SSuyog Pawar 
2021*c83a76b0SSuyog Pawar     /**
2022*c83a76b0SSuyog Pawar      * Timestamp associated with the current display output
2023*c83a76b0SSuyog Pawar      */
2024*c83a76b0SSuyog Pawar     UWORD32 u4_ts;
2025*c83a76b0SSuyog Pawar 
2026*c83a76b0SSuyog Pawar     /**
2027*c83a76b0SSuyog Pawar      * Enable CU_info
2028*c83a76b0SSuyog Pawar      */
2029*c83a76b0SSuyog Pawar     UWORD8 u1_enable_cu_info;
2030*c83a76b0SSuyog Pawar 
2031*c83a76b0SSuyog Pawar     /**
2032*c83a76b0SSuyog Pawar      * Ref mapping from pic_buf_id to corresponding CU_info maps
2033*c83a76b0SSuyog Pawar      */
2034*c83a76b0SSuyog Pawar     ref_map_t as_buf_id_info_map[MAX_CU_INFO_BUF_CNT];
2035*c83a76b0SSuyog Pawar 
2036*c83a76b0SSuyog Pawar     /**
2037*c83a76b0SSuyog Pawar      * Total no of 8x8 blocks in luma samples
2038*c83a76b0SSuyog Pawar      */
2039*c83a76b0SSuyog Pawar     WORD32 u4_num_8x8_blks;
2040*c83a76b0SSuyog Pawar 
2041*c83a76b0SSuyog Pawar     /**
2042*c83a76b0SSuyog Pawar      * Pointer to base of qp_map buffer array
2043*c83a76b0SSuyog Pawar      */
2044*c83a76b0SSuyog Pawar     UWORD8 *pu1_qp_map_base;
2045*c83a76b0SSuyog Pawar 
2046*c83a76b0SSuyog Pawar     /**
2047*c83a76b0SSuyog Pawar      * Pointer to base of CU_type_map buffer array
2048*c83a76b0SSuyog Pawar      */
2049*c83a76b0SSuyog Pawar     UWORD8 *pu1_cu_type_map_base;
2050*c83a76b0SSuyog Pawar 
2051*c83a76b0SSuyog Pawar     /**
2052*c83a76b0SSuyog Pawar      * Pointer to base of Video parameter set structure array
2053*c83a76b0SSuyog Pawar      */
2054*c83a76b0SSuyog Pawar     vps_t *ps_vps_base;
2055*c83a76b0SSuyog Pawar 
2056*c83a76b0SSuyog Pawar     /**
2057*c83a76b0SSuyog Pawar      * Pointer to base of Sequence parameter set structure array
2058*c83a76b0SSuyog Pawar      */
2059*c83a76b0SSuyog Pawar     sps_t *ps_sps_base;
2060*c83a76b0SSuyog Pawar 
2061*c83a76b0SSuyog Pawar     /**
2062*c83a76b0SSuyog Pawar      * Pointer to base of Picture parameter set structure array
2063*c83a76b0SSuyog Pawar      */
2064*c83a76b0SSuyog Pawar     pps_t *ps_pps_base;
2065*c83a76b0SSuyog Pawar 
2066*c83a76b0SSuyog Pawar     /**
2067*c83a76b0SSuyog Pawar      * Pointer to base of slice header structure array
2068*c83a76b0SSuyog Pawar      */
2069*c83a76b0SSuyog Pawar     slice_header_t *ps_slice_hdr_base;
2070*c83a76b0SSuyog Pawar     /**
2071*c83a76b0SSuyog Pawar      * Pointer to base of entry point offsets in a frame
2072*c83a76b0SSuyog Pawar      */
2073*c83a76b0SSuyog Pawar     WORD32 *pi4_entry_ofst;
2074*c83a76b0SSuyog Pawar 
2075*c83a76b0SSuyog Pawar     /**
2076*c83a76b0SSuyog Pawar      * Current offset in pi4_entry_ofst
2077*c83a76b0SSuyog Pawar      */
2078*c83a76b0SSuyog Pawar     WORD32 i4_cur_entry_ofst;
2079*c83a76b0SSuyog Pawar 
2080*c83a76b0SSuyog Pawar     /**
2081*c83a76b0SSuyog Pawar      *  Parsing context
2082*c83a76b0SSuyog Pawar      */
2083*c83a76b0SSuyog Pawar     parse_ctxt_t s_parse;
2084*c83a76b0SSuyog Pawar 
2085*c83a76b0SSuyog Pawar     /**
2086*c83a76b0SSuyog Pawar      * Condition variable to signal process start
2087*c83a76b0SSuyog Pawar      */
2088*c83a76b0SSuyog Pawar     void *apv_proc_start_condition[MAX_PROCESS_THREADS];
2089*c83a76b0SSuyog Pawar 
2090*c83a76b0SSuyog Pawar     /**
2091*c83a76b0SSuyog Pawar      * Mutex used to keep the functions thread-safe
2092*c83a76b0SSuyog Pawar      */
2093*c83a76b0SSuyog Pawar     void *apv_proc_start_mutex[MAX_PROCESS_THREADS];
2094*c83a76b0SSuyog Pawar 
2095*c83a76b0SSuyog Pawar     /**
2096*c83a76b0SSuyog Pawar      * Process state start- One for each thread
2097*c83a76b0SSuyog Pawar      */
2098*c83a76b0SSuyog Pawar     WORD32 ai4_process_start[MAX_PROCESS_THREADS];
2099*c83a76b0SSuyog Pawar 
2100*c83a76b0SSuyog Pawar     /**
2101*c83a76b0SSuyog Pawar      * Condition variable to signal process done
2102*c83a76b0SSuyog Pawar      */
2103*c83a76b0SSuyog Pawar     void *apv_proc_done_condition[MAX_PROCESS_THREADS];
2104*c83a76b0SSuyog Pawar 
2105*c83a76b0SSuyog Pawar     /**
2106*c83a76b0SSuyog Pawar      * Mutex used to keep the functions thread-safe
2107*c83a76b0SSuyog Pawar      */
2108*c83a76b0SSuyog Pawar     void *apv_proc_done_mutex[MAX_PROCESS_THREADS];
2109*c83a76b0SSuyog Pawar 
2110*c83a76b0SSuyog Pawar     /**
2111*c83a76b0SSuyog Pawar      * Process state end- One for each thread
2112*c83a76b0SSuyog Pawar      */
2113*c83a76b0SSuyog Pawar     WORD32 ai4_process_done[MAX_PROCESS_THREADS];
2114*c83a76b0SSuyog Pawar 
2115*c83a76b0SSuyog Pawar     /**
2116*c83a76b0SSuyog Pawar      * Flag to signal processing thread to exit
2117*c83a76b0SSuyog Pawar      */
2118*c83a76b0SSuyog Pawar     WORD32 i4_break_threads;
2119*c83a76b0SSuyog Pawar 
2120*c83a76b0SSuyog Pawar     /**
2121*c83a76b0SSuyog Pawar      * Processing context - One for each processing thread
2122*c83a76b0SSuyog Pawar      */
2123*c83a76b0SSuyog Pawar     process_ctxt_t as_process[MAX_PROCESS_THREADS];
2124*c83a76b0SSuyog Pawar 
2125*c83a76b0SSuyog Pawar     /**
2126*c83a76b0SSuyog Pawar      * Thread handle for each of the processing threads
2127*c83a76b0SSuyog Pawar      */
2128*c83a76b0SSuyog Pawar     void *apv_process_thread_handle[MAX_PROCESS_THREADS];
2129*c83a76b0SSuyog Pawar 
2130*c83a76b0SSuyog Pawar     /**
2131*c83a76b0SSuyog Pawar      * Thread created flag for each of the processing threads
2132*c83a76b0SSuyog Pawar      */
2133*c83a76b0SSuyog Pawar     WORD32 ai4_process_thread_created[MAX_PROCESS_THREADS];
2134*c83a76b0SSuyog Pawar 
2135*c83a76b0SSuyog Pawar     /**
2136*c83a76b0SSuyog Pawar      * Void pointer to process job context
2137*c83a76b0SSuyog Pawar      */
2138*c83a76b0SSuyog Pawar     void *pv_proc_jobq;
2139*c83a76b0SSuyog Pawar 
2140*c83a76b0SSuyog Pawar     /* Number of CTBs processed together for better instruction cache handling */
2141*c83a76b0SSuyog Pawar     WORD32 i4_proc_nctb;
2142*c83a76b0SSuyog Pawar 
2143*c83a76b0SSuyog Pawar     /**
2144*c83a76b0SSuyog Pawar      * Previous POC lsb
2145*c83a76b0SSuyog Pawar      */
2146*c83a76b0SSuyog Pawar     WORD32 i4_prev_poc_lsb;
2147*c83a76b0SSuyog Pawar 
2148*c83a76b0SSuyog Pawar     /**
2149*c83a76b0SSuyog Pawar      * Previous POC msb
2150*c83a76b0SSuyog Pawar      */
2151*c83a76b0SSuyog Pawar     WORD32 i4_prev_poc_msb;
2152*c83a76b0SSuyog Pawar 
2153*c83a76b0SSuyog Pawar     /**
2154*c83a76b0SSuyog Pawar      * Max POC lsb that has arrived till now
2155*c83a76b0SSuyog Pawar      */
2156*c83a76b0SSuyog Pawar     WORD32 i4_max_prev_poc_lsb;
2157*c83a76b0SSuyog Pawar 
2158*c83a76b0SSuyog Pawar     /** Context for format conversion */
2159*c83a76b0SSuyog Pawar     fmt_conv_t s_fmt_conv;
2160*c83a76b0SSuyog Pawar 
2161*c83a76b0SSuyog Pawar     /** Pointer to a structure describing output display buffer */
2162*c83a76b0SSuyog Pawar     ivd_out_bufdesc_t *ps_out_buffer;
2163*c83a76b0SSuyog Pawar     /**
2164*c83a76b0SSuyog Pawar      * Variable to store the next ctb count to compute pu idx
2165*c83a76b0SSuyog Pawar      */
2166*c83a76b0SSuyog Pawar     WORD32 i4_next_pu_ctb_cnt;
2167*c83a76b0SSuyog Pawar 
2168*c83a76b0SSuyog Pawar     /**
2169*c83a76b0SSuyog Pawar      * Variable to store the next ctb count to compute tu idx
2170*c83a76b0SSuyog Pawar      */
2171*c83a76b0SSuyog Pawar     WORD32 i4_next_tu_ctb_cnt;
2172*c83a76b0SSuyog Pawar 
2173*c83a76b0SSuyog Pawar     /**  Active SPS id - mainly to be used during codec initializations in shared mode */
2174*c83a76b0SSuyog Pawar     WORD32 i4_sps_id;
2175*c83a76b0SSuyog Pawar 
2176*c83a76b0SSuyog Pawar     /**  Number of ctbs to be decoded in one process call */
2177*c83a76b0SSuyog Pawar     UWORD32 u4_nctb;
2178*c83a76b0SSuyog Pawar 
2179*c83a76b0SSuyog Pawar     /** Flag to enable scheduling of format conversion jobs ahead of processing jobs */
2180*c83a76b0SSuyog Pawar     UWORD32 u4_enable_fmt_conv_ahead;
2181*c83a76b0SSuyog Pawar 
2182*c83a76b0SSuyog Pawar     /** Mask used to change MVs to full pel when configured to run in reduced complexity mode */
2183*c83a76b0SSuyog Pawar     WORD32 i4_mv_frac_mask;
2184*c83a76b0SSuyog Pawar 
2185*c83a76b0SSuyog Pawar     /** Memory holding tile indices */
2186*c83a76b0SSuyog Pawar     UWORD8 *pu1_tile_idx_base;
2187*c83a76b0SSuyog Pawar 
2188*c83a76b0SSuyog Pawar     /** Callback for aligned allocation */
2189*c83a76b0SSuyog Pawar     void *(*pf_aligned_alloc)(void *pv_mem_ctxt, WORD32 alignment, WORD32 size);
2190*c83a76b0SSuyog Pawar 
2191*c83a76b0SSuyog Pawar     /** Callback for aligned free */
2192*c83a76b0SSuyog Pawar     void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
2193*c83a76b0SSuyog Pawar 
2194*c83a76b0SSuyog Pawar     /** Memory context passed from application */
2195*c83a76b0SSuyog Pawar     void *pv_mem_ctxt;
2196*c83a76b0SSuyog Pawar 
2197*c83a76b0SSuyog Pawar     /** Base address of reference buffrers allocated */
2198*c83a76b0SSuyog Pawar     UWORD8 *pu1_ref_pic_buf_base;
2199*c83a76b0SSuyog Pawar 
2200*c83a76b0SSuyog Pawar     /** Flag to indicate if dynamic buffers are allocated */
2201*c83a76b0SSuyog Pawar     UWORD32 u4_allocate_dynamic_done;
2202*c83a76b0SSuyog Pawar 
2203*c83a76b0SSuyog Pawar     /** Flag to signal display order */
2204*c83a76b0SSuyog Pawar     IVD_DISPLAY_FRAME_OUT_MODE_T  e_frm_out_mode;
2205*c83a76b0SSuyog Pawar 
2206*c83a76b0SSuyog Pawar     /**  Funtion pointers for inter_pred leaf level functions */
2207*c83a76b0SSuyog Pawar     pf_inter_pred apf_inter_pred[22];
2208*c83a76b0SSuyog Pawar 
2209*c83a76b0SSuyog Pawar     /**  Funtion pointers for inter_pred_luma leaf level functions */
2210*c83a76b0SSuyog Pawar     pf_intra_pred apf_intra_pred_luma[11];
2211*c83a76b0SSuyog Pawar 
2212*c83a76b0SSuyog Pawar     /**  Funtion pointers for inter_pred_chroma leaf level functions */
2213*c83a76b0SSuyog Pawar     pf_intra_pred apf_intra_pred_chroma[11];
2214*c83a76b0SSuyog Pawar 
2215*c83a76b0SSuyog Pawar     /**  Funtion pointers for itrans_recon leaf level functions */
2216*c83a76b0SSuyog Pawar     pf_itrans_recon apf_itrans_recon[8];
2217*c83a76b0SSuyog Pawar 
2218*c83a76b0SSuyog Pawar     /**  Funtion pointers for recon leaf level functions */
2219*c83a76b0SSuyog Pawar     pf_recon apf_recon[8];
2220*c83a76b0SSuyog Pawar 
2221*c83a76b0SSuyog Pawar     /**  Funtion pointers for itrans_recon_dc leaf level functions */
2222*c83a76b0SSuyog Pawar     pf_itrans_recon_dc apf_itrans_recon_dc[2];
2223*c83a76b0SSuyog Pawar 
2224*c83a76b0SSuyog Pawar     /**  Funtion pointers for sao_luma leaf level functions */
2225*c83a76b0SSuyog Pawar     pf_sao_luma apf_sao_luma[4];
2226*c83a76b0SSuyog Pawar 
2227*c83a76b0SSuyog Pawar     /**  Funtion pointers for sao_chroma leaf level functions */
2228*c83a76b0SSuyog Pawar     pf_sao_chroma apf_sao_chroma[4];
2229*c83a76b0SSuyog Pawar 
2230*c83a76b0SSuyog Pawar     /**  Funtion pointers for all the leaf level functions */
2231*c83a76b0SSuyog Pawar     func_selector_t s_func_selector;
2232*c83a76b0SSuyog Pawar     /**  Processor architecture */
2233*c83a76b0SSuyog Pawar     IVD_ARCH_T e_processor_arch;
2234*c83a76b0SSuyog Pawar     /**  Processor soc */
2235*c83a76b0SSuyog Pawar     IVD_SOC_T e_processor_soc;
2236*c83a76b0SSuyog Pawar 
2237*c83a76b0SSuyog Pawar     /** Display buffer array - for shared mode */
2238*c83a76b0SSuyog Pawar     ivd_out_bufdesc_t s_disp_buffer[IVD_VIDDEC_MAX_IO_BUFFERS];
2239*c83a76b0SSuyog Pawar 
2240*c83a76b0SSuyog Pawar     /** Number of active display buffers - for shared mode */
2241*c83a76b0SSuyog Pawar     WORD32  i4_share_disp_buf_cnt;
2242*c83a76b0SSuyog Pawar 
2243*c83a76b0SSuyog Pawar     WORD32 i4_threads_active;
2244*c83a76b0SSuyog Pawar };
2245*c83a76b0SSuyog Pawar 
2246*c83a76b0SSuyog Pawar #endif /* _IHEVCD_STRUCTS_H_ */
2247