/****************************************************************************** * * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ***************************************************************************** * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore */ /** ******************************************************************************* * @file * isvcd_structs.h * * @brief * Contains structures required for decoder * * @author * Kishore * * @remarks * None * ******************************************************************************* */ #ifndef _ISVCD_STRUCTS_H_ #define _ISVCD_STRUCTS_H_ #include "isvcd_defs.h" #include "isvcd_cabac.h" #include "ih264d_structs.h" #include "isvcd_iquant_itrans_residual_recon.h" #include "isvcd_iquant_itrans_residual.h" #include "isvcd_iquant_itrans.h" #include "isvcd_pred_residual_recon.h" #include "isvcd_nal.h" #include "isvcd_nal_structs.h" #include "isvcd_nal_parse.h" #include "isvcd_nal_parse_structs.h" #include "isvcd_intra_resamp.h" #include "isvcd_ii_pred.h" #include "isvcd_residual_resamp.h" #include "isvcd_vui.h" #define NUM_MB_PARTS 4 #define NUM_SUB_MB_PARTS 4 #define NUM_INTRA_SUB_BLOCKS 16 #define MAX_NUM_MB_PART NUM_MB_PARTS *NUM_SUB_MB_PARTS #define ANNEX_B 0 /*!< Annex B stream*/ #define NON_ANNEX_B 1 /*!< Non Annex B RFC stream */ #define BUFFER_ALIGN_4 4 #define MAX_VCL_NAL_BUFF_SIZE (1024 * 1024 * 2) #define MAX_NON_VCL_NAL_BUFF_SIZE (1024 * 1024) #define MAX_SCLD_REF_LAYER_OFFSET 32768 #define MIN_SCLD_REF_LAYER_OFFSET -32768 #define MAX_SVC_NAL_UNIT_TYPE 31 /*! Nal unit svc extennsion parameters */ struct _SvcDecLyrStruct; typedef struct { UWORD8 u1_nal_ref_idc; /** NAL ref idc of the Slice NAL unit */ UWORD8 u1_svc_ext_flag; /** svc nal extension */ UWORD8 u1_idr_flag; /** IDR picture when dependency_id = maximum value of dependency_id */ UWORD8 u1_priority_id; /** priority identifier for the NAL unit */ UWORD8 u1_no_inter_layer_pred_flag; /** Usage of the inter-layer prediction */ UWORD8 u1_dependency_id; /** dependency identifier for the NAL unit */ UWORD8 u1_quality_id; /** quality identifier for the NAL unit */ UWORD8 u1_temporal_id; /** temporal identifier for the NAL unit */ UWORD8 u1_use_ref_base_pic_flag; /** specifies reference pictures for inter prediction */ UWORD8 u1_discardable_flag; /** current NAL unit is not used in dependant decoding */ UWORD8 u1_output_flag; /** decoded picture output and removal process */ } dec_nal_unit_svc_ext_params_t; /* Structure to contain information about reference base pic marking */ typedef struct { UWORD8 u1_adaptive_ref_base_pic_marking_mode_flag; UWORD32 u4_memory_management_base_control_operation; UWORD32 u4_difference_of_base_pic_nums_minus1; UWORD32 u4_long_term_base_pic_num; } dec_ref_base_pic_marking_params_t; /*! Sequence level parameters svc extension */ typedef struct { /** Presence of deblocking filter for inter-layer prediction in the slice * header */ UWORD8 u1_inter_layer_deblocking_filter_control_present_flag; UWORD8 u1_extended_spatial_scalability_idc; /** Geometrical parameters for the resampling processes */ /** horizontal phase shift of the chroma components in units of half luma * samples*/ UWORD8 u1_chroma_phase_x_plus1_flag; /** vertical phase shift of the chroma components in units of half luma * samples */ UWORD8 u1_chroma_phase_y_plus1; /* horizontal phase shift of chroma in units of half luma samples used for * inter-layer prediction */ UWORD8 u1_seq_ref_layer_chroma_phase_x_plus1_flag; /* vertical phase shift of chroma in units of half luma samples used for * inter-layer prediction */ UWORD8 u1_seq_ref_layer_chroma_phase_y_plus1; WORD32 i4_seq_scaled_ref_layer_left_offset; /** horizontal left offset */ WORD32 i4_seq_scaled_ref_layer_top_offset; /** vertical top offset */ WORD32 i4_seq_scaled_ref_layer_right_offset; /**horizontal right offset */ WORD32 i4_seq_scaled_ref_layer_bottom_offset; /** vertical bottom offset */ UWORD8 u1_seq_tcoeff_level_prediction_flag; /** presence of the syntax element adaptive_tcoeff_level_prediction_flag */ UWORD8 u1_adaptive_tcoeff_level_prediction_flag; /** presence of tcoeff_level_prediction_flag */ /** specifies presence of syntax elements in slice headers that refer to the * subset sequence parameter set */ UWORD8 u1_slice_header_restriction_flag; UWORD8 u1_svc_vui_parameters_present_flag; svc_vui_ext_t *ps_svc_vui_ext; } dec_subset_seq_params_t; typedef struct { WORD32 i4_left_offset; /*!< Scaled horizontal offset of the top left corner luma sample of reference layer from the top left corner luma sample of the current layer. (In the units of num MBs) */ WORD32 i4_rt_offset; /*!< Scaled horizontal offset of the bottom right corner luma sample of reference layer from the top left corner luma sample of the current layer. (In the units of num MBs) */ WORD32 i4_top_offset; /*!< Scaled vertical offset of the top left corner luma sample of reference layer from the top left corner luma sample of the current layer. (In the units of num MBs) */ WORD32 i4_bot_offset; /*!< Scaled vertical offset of the bottom right corner luma sample of reference layer from the top left corner luma sample of the current layer. (In the units of num MBs) */ } dec_svc_crop_wnd_offset_t; typedef struct { UWORD32 u4_ref_layer_dq_id; UWORD32 u4_disable_inter_layer_deblk_filter_idc; WORD32 i4_inter_layer_slice_alpha_c0_offset_div2; WORD32 i4_inter_layer_slice_beta_offset_div2; UWORD8 u1_constrained_intra_resampling_flag; UWORD8 u1_ref_layer_chroma_phase_x_plus1_flag; UWORD8 u1_ref_layer_chroma_phase_y_plus1; WORD32 i4_scaled_ref_layer_left_offset; WORD32 i4_scaled_ref_layer_right_offset; WORD32 i4_scaled_ref_layer_top_offset; WORD32 i4_scaled_ref_layer_bottom_offset; UWORD8 u1_slice_skip_flag; UWORD32 u4_num_mbs_in_slice_minus1; UWORD8 u1_adaptive_base_mode_flag; UWORD8 u1_default_base_mode_flag; UWORD8 u1_adaptive_motion_prediction_flag; UWORD8 u1_default_motion_prediction_flag; UWORD8 u1_adaptive_residual_prediction_flag; UWORD8 u1_default_residual_prediction_flag; UWORD8 u1_tcoeff_level_prediction_flag; UWORD8 u1_scan_idx_start; UWORD8 u1_scan_idx_end; UWORD8 u1_base_pred_weight_table_flag; dec_ref_base_pic_marking_params_t s_ref_base_pic_marking_svc_ext; UWORD8 u1_store_ref_base_pic_flag; /* specifies when dependency_id is equal to the max value of the VCL NAL units of the coded picture */ } dec_slice_svc_ext_params_t; /* Prefix NAL unit svc extension parameters*/ typedef struct { dec_nal_unit_svc_ext_params_t s_nal_svc_ext; dec_ref_base_pic_marking_params_t s_ref_base_pic_marking_svc_ext; UWORD8 u1_store_ref_base_pic_flag; /* specifies when dependency_id is equal to the max value of the VCL NAL units of the coded picture */ UWORD8 u1_additional_prefix_nal_unit_ext_flag; /* To indicate whether additional nal unit extension data flag syntax elements */ UWORD8 u1_additional_prefix_nal_unit_ext_data_flag; /*Used for FUTURE USE */ } dec_prefix_nal_unit_svc_ext_params_t; typedef enum { LIST_0 = 0, LIST_1 = 1, NUM_REF_LISTS } REF_LIST_T; typedef enum { INTRA_16x16 = 0, INTRA_NXN } INTRA_MB_PRED_MODE_T; /* Transform type */ typedef enum { T_4X4 = 0, T_8X8, T_PCM } TRANSFORM_TYPE_T; typedef struct { vcl_node_t *ps_top_node; /*!< VCL node corresponding to top most layer in the access unit. */ vcl_node_t *ps_bot_node; /*!< VCL node corresponding to bottom most layer to be decoded in the access unit. This parameter keeps updated during course of decoding from base layer till top most layer. */ WORD32 i4_num_res_lyrs; /*!< Number of layers with different resolutions. Layers with spatial resoluton change flag equal to 0 are considered to be of same resolution as reference layer's resolution. */ /* following 2 parameter will be updated only if */ /* the picture boundary is detected due to difference */ /* in slice header syntax */ UWORD16 u2_frm_num_next; /*!< frame number of the next slice after picture boundary detection */ WORD8 i1_nal_ref_id_next; /*!< nal ref id of the next slice after picture boundary detection range [-1,3]; -1 says the picture boundary is detected by DQID of the layers */ } vcl_nal_t; typedef struct { WORD32 i4_num_non_vcl_nals; /*!< Total number of non vcl nals that are extracted from the bitstream. */ non_vcl_buf_hdr_t *ps_first_non_vcl_nal; /*!< This shall point to first NON VCL NAL that is extracted from the input bitstream. This shall be set to NULL if there are no VCL NALs present in the bitstream in a access unit */ } non_vcl_nal_t; typedef struct { WORD16 i2_mv_x; /*!< motion vectors in horizontal direction QPEL units */ WORD16 i2_mv_y; /*!< motion vectors in vertical direction QPEL units */ } mot_vec_t; typedef struct { mot_vec_t as_mv[NUM_SUB_MB_PARTS]; WORD32 i4_ref_idx; } mb_part_mv_t; typedef struct { /* PRED_16X16, PRED_16X8, PRED_8X16, PRED_8X8, */ UWORD8 u1_part_type; UWORD8 u1_mv_cnt; /* 0-1 bits : 1st partition 2-3 bits : 2nd partition 4-5 bits : 3rd partition 6-7 bits : 4th partition Value 00 : B_DIRECT 01 : L0 10 : L1 11 : BiPred */ UWORD8 u1_pred_mode; /* Pred mode shall have valid value till mode motion prediction only. Hence this value shall not be used for the motion compensation */ UWORD8 au1_mot_pred_flags[2]; UWORD8 au1_sub_mb_part_ht_wd[NUM_MB_PARTS * NUM_SUB_MB_PARTS]; UWORD8 au1_sub_mb_num[NUM_MB_PARTS * NUM_SUB_MB_PARTS >> 1]; WORD8 ai1_sub_mb_part_type[NUM_MB_PARTS]; mb_part_mv_t as_mb_part_dmv[2][NUM_MB_PARTS]; } inter_mb_prms_t; /* We need to improve on commenting */ typedef struct { /* 0 : I_16x16 1 : I_NXN */ WORD32 i4_pred_mode; WORD32 i4_chroma_intra_pred_mode; WORD8 ai1_rem_intra_pred_mode[NUM_INTRA_SUB_BLOCKS]; } intra_mb_prms_t; /* We need to improve on commenting */ typedef union { inter_mb_prms_t s_inter; intra_mb_prms_t s_intra; } mb_prms_ext_t; typedef struct { UWORD8 u1_chroma_nnz; /*! NNZs of Chroma. Here each bit corresonds to a NNZs of 4x4 sub block. Lower 4 bits are used for Cb and upper are used for Cr */ UWORD16 u2_luma_nnz; /*! NNZs of Luma. Here each bit corresonds to a NNZs of 4x4 sub block in raster scan order. */ WORD8 i1_mb_mode; /*! MB mode of an MB */ WORD8 i1_tx_size; /*! transform size of an MB */ WORD8 i1_slice_id; } inter_lyr_mb_prms_t; /* the following 2 structures are used store certain parameters */ /* across units for each layer or each dependency layer */ typedef struct { WORD32 i4_updated_sts; /*!< flag to indicate whether the params have been updated */ WORD32 i4_ref_dq_id; /*!< place to hold the ref_dqid of previous access unit */ WORD32 i4_nal_ref_id; /*!< place to hold the nal_ref_id of previous access unit */ UWORD16 u2_frm_num; /*!< place to hold the frame number of previous access unit will be used to handle Errors in "frame_num" syntax elements */ } prev_au_prms_t; typedef struct { WORD32 i4_updated_sts; /*!< flag to indicate whether the params have been updated */ UWORD8 u1_pps_id; /*!< PPS ID of an access unit for a particular layer. will be used in concealment of Errors in next access unit */ UWORD8 u1_sps_id; /*!< SPS ID of an access unit for a particular layer. will be used in concealment of Errors in next access unit */ } prev_au_sps_pps_t; typedef enum { /*CABAC SVC related flags*/ CABAC_BASE_MODE_FLAG = 460, CABAC_MOT_PRED_FLAG0 = 463, CABAC_MOT_PRED_FLAG1 = 464, CABAC_RES_PRED_FLAG = 465 } svc_cabac_table_num_t; typedef struct { dec_seq_params_t *ps_seq; dec_subset_seq_params_t s_sps_svc_ext; /* sequence associated frame paramateres*/ WORD32 i4_reorder_depth; UWORD16 u2_disp_height; UWORD16 u2_disp_width; UWORD16 u2_pic_wd; UWORD16 u2_pic_ht; UWORD16 u2_frm_wd_y; UWORD16 u2_frm_ht_y; UWORD16 u2_frm_wd_uv; UWORD16 u2_frm_ht_uv; UWORD8 u1_pad_len_y_v; UWORD8 u1_pad_len_cr_v; UWORD16 u2_crop_offset_y; UWORD16 u2_crop_offset_uv; } dec_svc_seq_params_t; typedef struct { /*svc related flags*/ UWORD8 u1_base_mode_flag; UWORD8 u1_residual_prediction_flag; UWORD8 u1_crop_window_flag; UWORD8 au1_motion_pred_flag[2]; } dec_svc_mb_info_t; typedef struct _SvcDecLyrStruct { dec_struct_t s_dec; /*Pred + Res = Target when csbp is zero*/ ih264_pred_residual_recon_ft *pf_pred_residual_recon_luma_4x4; ih264_pred_residual_recon_ft *pf_pred_residual_recon_luma_8x8; ih264_pred_residual_recon_ft *pf_pred_residual_recon_luma_16x16; ih264_pred_residual_recon_chroma_ft *pf_pred_residual_recon_chroma_4x4; ih264_pred_residual_recon_chroma_ft *pf_pred_residual_recon_chroma_8x8; /* IT + Res + Recon*/ ih264_iquant_itrans_residual_recon_ft *pf_iquant_itrans_residual_recon_luma_4x4; ih264_iquant_itrans_residual_recon_ft *pf_iquant_itrans_residual_recon_luma_4x4_dc; ih264_iquant_itrans_residual_recon_ft *pf_iquant_itrans_residual_recon_luma_8x8; ih264_iquant_itrans_residual_recon_ft *pf_iquant_itrans_residual_recon_luma_8x8_dc; ih264_iquant_itrans_residual_recon_chroma_ft *pf_iquant_itrans_residual_recon_chroma_4x4; ih264_iquant_itrans_residual_recon_chroma_ft *pf_iquant_itrans_residual_recon_chroma_4x4_dc; /* Res nnz*/ ih264_residual_ft *pf_residual_luma_4x4; ih264_residual_ft *pf_residual_luma_8x8; ih264_residual_ft *pf_residual_luma_16x16; ih264_residual_chroma_ft *pf_residual_chroma_cb_cr_8x8; /*IT + residual */ ih264_iquant_itrans_residual_ft *pf_iquant_itrans_residual_luma_4x4; ih264_iquant_itrans_residual_ft *pf_iquant_itrans_residual_luma_4x4_dc; ih264_iquant_itrans_residual_ft *pf_iquant_itrans_residual_luma_8x8; ih264_iquant_itrans_residual_ft *pf_iquant_itrans_residual_luma_8x8_dc; ih264_iquant_itrans_residual_chroma_ft *pf_iquant_itrans_residual_chroma_4x4; ih264_iquant_itrans_residual_chroma_ft *pf_iquant_itrans_residual_chroma_4x4_dc; /* IT */ ih264_iquant_itrans_ft *pf_iquant_itrans_luma_4x4; ih264_iquant_itrans_ft *pf_iquant_itrans_luma_4x4_dc; ih264_iquant_itrans_ft *pf_iquant_itrans_luma_8x8; ih264_iquant_itrans_ft *pf_iquant_itrans_luma_8x8_dc; ih264_iquant_itrans_chroma_ft *pf_iquant_itrans_chroma_4x4; ih264_iquant_itrans_chroma_ft *pf_iquant_itrans_chroma_4x4_dc; /** *SVC extension parsing strcture place holders */ dec_nal_unit_svc_ext_params_t *ps_nal_svc_ext; dec_prefix_nal_unit_svc_ext_params_t s_pre_nal_unit_svc_ext; dec_svc_crop_wnd_offset_t *ps_crop_wnd_offset; UWORD8 *apu1_crop_wnd_flag[MAX_DEP_LYRS_IN_RES]; /** *contexts for the CABAC related parsing */ bin_ctxt_model_t *ps_base_mode_flag; bin_ctxt_model_t *ps_motion_prediction_flag_l0; bin_ctxt_model_t *ps_motion_prediction_flag_l1; bin_ctxt_model_t *ps_residual_prediction_flag; /** * Function pointers to read Params common to CAVLC and CABAC */ WORD32(*pf_parse_inter_mb_svc_ext) (struct _SvcDecLyrStruct *ps_dec, dec_mb_info_t *ps_cur_mb_info, dec_svc_mb_info_t *ps_svc_cur_mb_info, UWORD8 u1_mb_num, UWORD8 u1_num_mbsNby2); WORD32(*pf_parse_inter_slice_svc_ext) (struct _SvcDecLyrStruct *ps_dec, dec_slice_params_t *ps_slice, UWORD16 u2_first_mb_in_slice); /** * Function pointers to parse inter slice data */ WORD32(*pf_parse_svc_inter_slice) (struct _SvcDecLyrStruct *ps_dec, dec_slice_params_t *ps_slice, UWORD16 u2_first_mb_in_slice); /* inter layer precition buffers */ /* 4x4 level */ mv_pred_t *ps_il_pred_mv_bank_buf_base; /* 16x16 level */ inter_lyr_mb_prms_t *ps_inter_lyr_mb_prms_base; inter_lyr_mb_prms_t *ps_inter_lyr_mb_prms_frm_start; inter_lyr_mb_prms_t *ps_inter_lyr_mb_prms_cur_mb; UWORD16 u2_inter_lyr_mb_prms_stride; UWORD32 u4_inter_lyr_mb_prms_size; /* in Bytes */ /* full frame size : -255 -255 */ WORD16 *pi2_il_residual_resample_luma_base; WORD16 *pi2_il_residual_resample_chroma_base; WORD16 *pi2_il_residual_resample_mb_luma_frm_start; WORD16 *pi2_il_residual_resample_mb_chroma_frm_start; UWORD16 u2_residual_resample_luma_stride; UWORD16 u2_residual_resample_chroma_stride; UWORD32 u4_residual_resample_luma_size; /* in Bytes */ UWORD32 u4_residual_resample_chroma_size; /* in Bytes */ mv_pred_t *ps_il_pred_mv_bank_buf_cur_mb; UWORD8 *pu1_crop_wnd_flag; /* * Layer info flag - Base layer; Intermediate Enhancement Layers; Target * Enhacement Layer. */ UWORD8 u1_layer_identifier; /* layer id of the current layer */ UWORD8 u1_layer_id; /* flag to indicate if spatial layers are dyadic */ UWORD8 u1_dyadic_flag; /* flag to indicate if current layer is base layer */ UWORD8 u1_base_res_flag; /* reference layer for inter layer prediction, no quality layers */ UWORD8 u1_ref_layer_id; UWORD8 u1_restricted_res_change_flag; res_prms_t s_res_prms; void *pv_ref_lyr_offset; void *pv_mode_mv_sample_ctxt; void *pv_ii_pred_ctxt; void *pv_residual_sample_ctxt; void *pv_intra_sample_ctxt; /*!< projected locations buffer pointer exported by Intra Upsampling module for luma this buffer contains the projected offsets and window width in reference layer for each MB (in horizontal direction) of current resolution layer.*/ ref_mb_map_t *ps_intsam_luma_map_horz; /*!< projected locations buffer pointer exported by Intra Upsampling module for chroma this buffer contains the projected offsets and window width in reference layer for each MB (in horizontal direction) of current resolution layer.*/ ref_mb_map_t *ps_intsam_chroma_map_horz; /*!< projected locations buffer pointer exported by Intra Upsampling module for luma this buffer contains the projected offsets and window width in reference layer for each MB (in vertical direction) of current resolution layer. */ ref_mb_map_t *ps_intsam_luma_map_vert; /*!< projected locations buffer pointer exported by Intra Upsampling module for chroma this buffer contains the projected offsets and window width in reference layer for each MB (in vertical direction) of current resolution layer. */ ref_mb_map_t *ps_intsam_chroma_map_vert; /*!< projected locations buffer pointer exported by Residual Upsampling module for luma. this buffer contains the projected offsets and window width in reference layer for each MB (in horizontal direction) of current resolution layer. */ ref_mb_map_t *ps_ressam_luma_map_horz; /*!< projected locations buffer pointer exported by Residual Upsampling module for chroma. this buffer contains the projected offsets and window width in reference layer for each MB (in horizontal direction) of current resolution layer. */ ref_mb_map_t *ps_ressam_chroma_map_horz; /*!< projected locationscbuffer pointercexported by Residual Upsampling modulec for chroma. this buffer contains the projected offsets and window width in reference layer for each MB (in vertical direction) ofv current resolution layer. */ ref_mb_map_t *ps_ressam_luma_map_vert; /*!< projected locationscbuffer pointerccexported by Residual Upsampling module for chroma.cthis buffer contains the projected offsets and window width in reference layer for each MB (in vertical direction) of current resolution layer.*/ ref_mb_map_t *ps_ressam_chroma_map_vert; /* pointer to decoder layer referered by current layer */ void *ps_dec_svc_ref_layer; /* pointer to master context */ void *ps_svcd_ctxt; UWORD8 u1_inter_lyr_disable_dblk_filter_idc; WORD8 i1_inter_lyr_slice_alpha_c0_offset; WORD8 i1_inter_lyr_slice_beta_offset; UWORD8 *pu1_ii_resamp_buffer_luma; UWORD8 *pu1_ii_resamp_buffer_chroma; dec_slice_svc_ext_params_t s_svc_slice_params; dec_svc_seq_params_t *ps_subset_sps; dec_svc_seq_params_t *ps_cur_subset_sps; void *pv_scratch_subset_sps; /* Variables Required for N MB design */ dec_svc_mb_info_t *ps_svc_nmb_info; dec_svc_mb_info_t *ps_svc_frm_mb_info; void (*pf_svc_compute_bs)(struct _SvcDecLyrStruct *ps_svc_lyr_dec, struct _DecMbInfo *ps_cur_mb_info, const UWORD16 u2_mbxn_mb); UWORD16 *pu2_frm_res_luma_csbp; WORD32 i4_frm_res_luma_csbp_stride; UWORD8 *pu1_svc_base_mode_flag; WORD32 i4_frm_svc_base_mode_cabac_stride; WORD32 i4_frm_svc_base_mode_cabac_size; UWORD32 u4_pps_id_for_layer; UWORD8 u1_error_in_cur_frame; UWORD8 u1_res_init_done; WORD32 pic_width; WORD32 pic_height; } svc_dec_lyr_struct_t; typedef struct { /* common parameters for all layers in SVC */ UWORD32 u4_num_cores; IVD_ARCH_T e_processor_arch; IVD_SOC_T e_processor_soc; UWORD8 u1_target_layer_id; UWORD8 u1_cur_layer_id; /* dcode context for all layers in SVC */ svc_dec_lyr_struct_t *ps_svc_dec_lyr; dec_pic_params_t *ps_pps; dec_seq_params_t *ps_sps; dec_svc_seq_params_t *ps_subset_sps; struct _sei *ps_sei; struct _sei *ps_sei_parse; /* attributes related to set tgt layer api func */ WORD32 u1_tgt_dep_id; WORD32 u1_tgt_quality_id; WORD32 u1_tgt_temp_id; WORD32 u1_tgt_priority_id; ref_lyr_scaled_offset_t as_ref_lyr_offsets[MAX_NUM_RES_LYRS]; void *pv_ref_lyr_offset; void *pv_mode_mv_sample_ctxt; void *pv_ii_pred_ctxt; void *pv_residual_sample_ctxt; void *pv_intra_sample_ctxt; void *pv_nal_parse_ctxt; non_vcl_nal_t s_non_vcl_nal; /*!< NON VCL nal structure */ vcl_nal_t s_vcl_nal; /*!< VCL nal structure */ /*!< array to store the Did of bottom most layer in each resolution */ WORD32 ai4_dq_id_map[MAX_NUM_RES_LYRS]; WORD32 i4_error_code; void *pv_vcl_nal_buff; void *pv_non_vcl_nal_buff; /*!< array of structure to store the reference layer DQID, poc syntax and frame num, for each depedency id present in an access unit this will be used as reference for the next access unit */ prev_au_prms_t as_au_prms_dep[MAX_DEPENDENCY_LYRS]; /*!< array to store the pps id for each layer in a resolution */ prev_au_sps_pps_t as_pps_sps_prev_au[MAX_TOTAL_LYRS]; WORD32 i4_eos_flag; UWORD8 u1_prev_num_res_layers; UWORD32 u4_num_sps_ctr; UWORD32 u4_num_pps_ctr; UWORD8 u1_parse_nal_unit_error; UWORD8 u1_exit_till_next_IDR; UWORD8 u1_pre_parse_in_flush; WORD32 pic_width; WORD32 pic_height; } svc_dec_ctxt_t; #endif /*_ISVCD_STRUCTS_H_*/