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