1*495ae853SAndroid Build Coastguard Worker /****************************************************************************** 2*495ae853SAndroid Build Coastguard Worker * 3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2021 The Android Open Source Project 4*495ae853SAndroid Build Coastguard Worker * 5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at: 8*495ae853SAndroid Build Coastguard Worker * 9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 10*495ae853SAndroid Build Coastguard Worker * 11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 15*495ae853SAndroid Build Coastguard Worker * limitations under the License. 16*495ae853SAndroid Build Coastguard Worker * 17*495ae853SAndroid Build Coastguard Worker ***************************************************************************** 18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*495ae853SAndroid Build Coastguard Worker */ 20*495ae853SAndroid Build Coastguard Worker #ifndef _IMVCD_STRUCTS_H_ 21*495ae853SAndroid Build Coastguard Worker #define _IMVCD_STRUCTS_H_ 22*495ae853SAndroid Build Coastguard Worker 23*495ae853SAndroid Build Coastguard Worker #include <stdbool.h> 24*495ae853SAndroid Build Coastguard Worker 25*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h" 26*495ae853SAndroid Build Coastguard Worker #include "imvcd.h" 27*495ae853SAndroid Build Coastguard Worker #include "ih264_error.h" 28*495ae853SAndroid Build Coastguard Worker #include "ih264_buf_mgr.h" 29*495ae853SAndroid Build Coastguard Worker #include "ih264_disp_mgr.h" 30*495ae853SAndroid Build Coastguard Worker #include "ih264d_sei.h" 31*495ae853SAndroid Build Coastguard Worker #include "ih264d_structs.h" 32*495ae853SAndroid Build Coastguard Worker #include "imvc_defs.h" 33*495ae853SAndroid Build Coastguard Worker #include "imvc_structs.h" 34*495ae853SAndroid Build Coastguard Worker #include "imvcd_defs.h" 35*495ae853SAndroid Build Coastguard Worker 36*495ae853SAndroid Build Coastguard Worker /* structs */ 37*495ae853SAndroid Build Coastguard Worker typedef struct mvc_au_mv_pred_t 38*495ae853SAndroid Build Coastguard Worker { 39*495ae853SAndroid Build Coastguard Worker mv_pred_t *aps_mvs[MAX_NUM_VIEWS]; 40*495ae853SAndroid Build Coastguard Worker 41*495ae853SAndroid Build Coastguard Worker /* colZeroFlag | // 0th bit 42*495ae853SAndroid Build Coastguard Worker field_flag | // 1st bit 43*495ae853SAndroid Build Coastguard Worker XX | // 2:3 bit don't cares 44*495ae853SAndroid Build Coastguard Worker subMbMode | // 4:5 bit 45*495ae853SAndroid Build Coastguard Worker MbMode | // 6:7 bit */ 46*495ae853SAndroid Build Coastguard Worker UWORD8 *apu1_mode_descriptors[MAX_NUM_VIEWS]; 47*495ae853SAndroid Build Coastguard Worker 48*495ae853SAndroid Build Coastguard Worker } mvc_au_mv_pred_t; 49*495ae853SAndroid Build Coastguard Worker 50*495ae853SAndroid Build Coastguard Worker typedef struct ivp_data_t 51*495ae853SAndroid Build Coastguard Worker { 52*495ae853SAndroid Build Coastguard Worker bool b_is_ivp_ref; 53*495ae853SAndroid Build Coastguard Worker 54*495ae853SAndroid Build Coastguard Worker /* Due to the structuring of dpb_mgr_t, */ 55*495ae853SAndroid Build Coastguard Worker /* mvc_pic_buffer_t used for referencing ought to contain */ 56*495ae853SAndroid Build Coastguard Worker /* all data in indices corresponding to view_id doing the referencing. */ 57*495ae853SAndroid Build Coastguard Worker /* This struct, and this variable in particular, is used for identifying */ 58*495ae853SAndroid Build Coastguard Worker /* the reference view's view_id */ 59*495ae853SAndroid Build Coastguard Worker 60*495ae853SAndroid Build Coastguard Worker UWORD16 u2_ref_view_id; 61*495ae853SAndroid Build Coastguard Worker } ivp_data_t; 62*495ae853SAndroid Build Coastguard Worker 63*495ae853SAndroid Build Coastguard Worker typedef struct mvc_au_buffer_t 64*495ae853SAndroid Build Coastguard Worker { 65*495ae853SAndroid Build Coastguard Worker /** pic_buffer for all views */ 66*495ae853SAndroid Build Coastguard Worker yuv_buf_props_t as_view_buffers[MAX_NUM_VIEWS]; 67*495ae853SAndroid Build Coastguard Worker 68*495ae853SAndroid Build Coastguard Worker /** display offsets for all views */ 69*495ae853SAndroid Build Coastguard Worker offsets_t as_disp_offsets[MAX_NUM_VIEWS]; 70*495ae853SAndroid Build Coastguard Worker 71*495ae853SAndroid Build Coastguard Worker ivp_data_t s_ivp_data; 72*495ae853SAndroid Build Coastguard Worker 73*495ae853SAndroid Build Coastguard Worker /** SEI data */ 74*495ae853SAndroid Build Coastguard Worker sei s_sei_pic; 75*495ae853SAndroid Build Coastguard Worker 76*495ae853SAndroid Build Coastguard Worker /** AU MV Data */ 77*495ae853SAndroid Build Coastguard Worker mvc_au_mv_pred_t *ps_au_mv_data; 78*495ae853SAndroid Build Coastguard Worker 79*495ae853SAndroid Build Coastguard Worker /* It will contain information about types of slices */ 80*495ae853SAndroid Build Coastguard Worker UWORD32 au4_pack_slc_typ[MAX_NUM_VIEWS]; 81*495ae853SAndroid Build Coastguard Worker 82*495ae853SAndroid Build Coastguard Worker /** Width of the display luma frame in pixels */ 83*495ae853SAndroid Build Coastguard Worker UWORD16 u2_disp_width; 84*495ae853SAndroid Build Coastguard Worker 85*495ae853SAndroid Build Coastguard Worker /** Height of the display luma frame in pixels */ 86*495ae853SAndroid Build Coastguard Worker UWORD16 u2_disp_height; 87*495ae853SAndroid Build Coastguard Worker 88*495ae853SAndroid Build Coastguard Worker /** Time at which frame has to be displayed */ 89*495ae853SAndroid Build Coastguard Worker UWORD32 u4_time_stamp; 90*495ae853SAndroid Build Coastguard Worker 91*495ae853SAndroid Build Coastguard Worker /** (1: short 0: long) term ref pic */ 92*495ae853SAndroid Build Coastguard Worker bool b_is_short_term_ref; 93*495ae853SAndroid Build Coastguard Worker 94*495ae853SAndroid Build Coastguard Worker /** frame / field / complementary field pair */ 95*495ae853SAndroid Build Coastguard Worker UWORD8 u1_pic_type; 96*495ae853SAndroid Build Coastguard Worker 97*495ae853SAndroid Build Coastguard Worker /** Idx into the picBufAPI array */ 98*495ae853SAndroid Build Coastguard Worker WORD32 i4_pic_buf_id; 99*495ae853SAndroid Build Coastguard Worker 100*495ae853SAndroid Build Coastguard Worker WORD32 i4_mv_buf_id; 101*495ae853SAndroid Build Coastguard Worker 102*495ae853SAndroid Build Coastguard Worker WORD32 i4_poc; 103*495ae853SAndroid Build Coastguard Worker 104*495ae853SAndroid Build Coastguard Worker WORD32 i4_frame_num; 105*495ae853SAndroid Build Coastguard Worker 106*495ae853SAndroid Build Coastguard Worker /* Derived based on '8.2.4.1' */ 107*495ae853SAndroid Build Coastguard Worker WORD32 i4_pic_num; 108*495ae853SAndroid Build Coastguard Worker 109*495ae853SAndroid Build Coastguard Worker /** minPOC */ 110*495ae853SAndroid Build Coastguard Worker WORD32 i4_avg_poc; 111*495ae853SAndroid Build Coastguard Worker 112*495ae853SAndroid Build Coastguard Worker /*Same as u1_pic_type..u1_pic_type gets overwritten whereas this doesnot get 113*495ae853SAndroid Build Coastguard Worker overwritten 114*495ae853SAndroid Build Coastguard Worker ...stores the pictype of frame/complementary field pair/ mbaff */ 115*495ae853SAndroid Build Coastguard Worker UWORD8 u1_picturetype; 116*495ae853SAndroid Build Coastguard Worker 117*495ae853SAndroid Build Coastguard Worker UWORD8 u1_long_term_frm_idx; 118*495ae853SAndroid Build Coastguard Worker 119*495ae853SAndroid Build Coastguard Worker UWORD8 u1_long_term_pic_num; 120*495ae853SAndroid Build Coastguard Worker 121*495ae853SAndroid Build Coastguard Worker /* Refer to SEI table D-1 */ 122*495ae853SAndroid Build Coastguard Worker UWORD8 u1_pic_struct; 123*495ae853SAndroid Build Coastguard Worker 124*495ae853SAndroid Build Coastguard Worker } mvc_au_buffer_t; 125*495ae853SAndroid Build Coastguard Worker 126*495ae853SAndroid Build Coastguard Worker typedef struct mvc_au_buf_mgr_t 127*495ae853SAndroid Build Coastguard Worker { 128*495ae853SAndroid Build Coastguard Worker void *pv_mem; 129*495ae853SAndroid Build Coastguard Worker 130*495ae853SAndroid Build Coastguard Worker buf_mgr_t *ps_buf_mgr_ctxt; 131*495ae853SAndroid Build Coastguard Worker 132*495ae853SAndroid Build Coastguard Worker void *pv_au_buf_base; 133*495ae853SAndroid Build Coastguard Worker 134*495ae853SAndroid Build Coastguard Worker mvc_au_buffer_t *aps_buf_id_to_au_buf_map[MAX_DISP_BUFS_NEW]; 135*495ae853SAndroid Build Coastguard Worker 136*495ae853SAndroid Build Coastguard Worker UWORD8 au1_au_buf_id_to_mv_buf_id_map[MAX_DISP_BUFS_NEW]; 137*495ae853SAndroid Build Coastguard Worker 138*495ae853SAndroid Build Coastguard Worker UWORD8 au1_au_buf_ref_flag[MAX_DISP_BUFS_NEW]; 139*495ae853SAndroid Build Coastguard Worker 140*495ae853SAndroid Build Coastguard Worker } mvc_au_buf_mgr_t; 141*495ae853SAndroid Build Coastguard Worker 142*495ae853SAndroid Build Coastguard Worker typedef struct mvc_au_mv_pred_buf_mgr_t 143*495ae853SAndroid Build Coastguard Worker { 144*495ae853SAndroid Build Coastguard Worker void *pv_mem; 145*495ae853SAndroid Build Coastguard Worker 146*495ae853SAndroid Build Coastguard Worker buf_mgr_t *ps_buf_mgr_ctxt; 147*495ae853SAndroid Build Coastguard Worker 148*495ae853SAndroid Build Coastguard Worker void *pv_au_mv_pred_buf_base; 149*495ae853SAndroid Build Coastguard Worker 150*495ae853SAndroid Build Coastguard Worker mvc_au_mv_pred_t *aps_buf_id_to_mv_pred_buf_map[MAX_DISP_BUFS_NEW]; 151*495ae853SAndroid Build Coastguard Worker 152*495ae853SAndroid Build Coastguard Worker } mvc_au_mv_pred_buf_mgr_t; 153*495ae853SAndroid Build Coastguard Worker 154*495ae853SAndroid Build Coastguard Worker typedef struct subset_sps_t 155*495ae853SAndroid Build Coastguard Worker { 156*495ae853SAndroid Build Coastguard Worker dec_seq_params_t s_sps_data; 157*495ae853SAndroid Build Coastguard Worker 158*495ae853SAndroid Build Coastguard Worker sps_mvc_ext_t s_sps_mvc_ext; 159*495ae853SAndroid Build Coastguard Worker 160*495ae853SAndroid Build Coastguard Worker mvc_vui_ext_t s_mvc_vui_ext; 161*495ae853SAndroid Build Coastguard Worker 162*495ae853SAndroid Build Coastguard Worker offsets_t s_disp_offsets; 163*495ae853SAndroid Build Coastguard Worker 164*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mvc_vui_parameters_present_flag; 165*495ae853SAndroid Build Coastguard Worker 166*495ae853SAndroid Build Coastguard Worker } subset_sps_t; 167*495ae853SAndroid Build Coastguard Worker 168*495ae853SAndroid Build Coastguard Worker typedef struct ref_pic_list_mod_data_t 169*495ae853SAndroid Build Coastguard Worker { 170*495ae853SAndroid Build Coastguard Worker UWORD8 au1_num_active_refs[2]; 171*495ae853SAndroid Build Coastguard Worker 172*495ae853SAndroid Build Coastguard Worker UWORD8 au1_ref_pic_list_modification_flag_lx[2]; 173*495ae853SAndroid Build Coastguard Worker 174*495ae853SAndroid Build Coastguard Worker UWORD8 au1_modification_of_pic_nums_idc[2][MVC_MAX_REF_PICS + 1]; 175*495ae853SAndroid Build Coastguard Worker 176*495ae853SAndroid Build Coastguard Worker WORD32 ai4_abs_diff_pic_num_minus1[2][MVC_MAX_REF_PICS + 1]; 177*495ae853SAndroid Build Coastguard Worker 178*495ae853SAndroid Build Coastguard Worker WORD32 ai4_long_term_pic_num[2][MVC_MAX_REF_PICS + 1]; 179*495ae853SAndroid Build Coastguard Worker 180*495ae853SAndroid Build Coastguard Worker WORD32 ai4_abs_diff_view_idx_minus1[2][MVC_MAX_REF_PICS + 1]; 181*495ae853SAndroid Build Coastguard Worker } ref_pic_list_mod_data_t; 182*495ae853SAndroid Build Coastguard Worker 183*495ae853SAndroid Build Coastguard Worker typedef struct mvc_dec_ctxt_t 184*495ae853SAndroid Build Coastguard Worker { 185*495ae853SAndroid Build Coastguard Worker dec_struct_t s_view_dec_ctxt; 186*495ae853SAndroid Build Coastguard Worker 187*495ae853SAndroid Build Coastguard Worker iv_mvc_yuv_buf_t s_out_buffer; 188*495ae853SAndroid Build Coastguard Worker 189*495ae853SAndroid Build Coastguard Worker /* Resolves circular dependency with mvc_dpb_manager_t */ 190*495ae853SAndroid Build Coastguard Worker void *ps_dpb_mgr; 191*495ae853SAndroid Build Coastguard Worker 192*495ae853SAndroid Build Coastguard Worker subset_sps_t as_subset_sps[MAX_NUM_SEQ_PARAMS]; 193*495ae853SAndroid Build Coastguard Worker 194*495ae853SAndroid Build Coastguard Worker /* Indexed via viewOrderID */ 195*495ae853SAndroid Build Coastguard Worker nalu_mvc_ext_t as_nalu_mvc_ext[MAX_NUM_VIEWS]; 196*495ae853SAndroid Build Coastguard Worker 197*495ae853SAndroid Build Coastguard Worker /* Indexed via viewOrderID */ 198*495ae853SAndroid Build Coastguard Worker dec_slice_params_t as_slices[MAX_NUM_VIEWS]; 199*495ae853SAndroid Build Coastguard Worker 200*495ae853SAndroid Build Coastguard Worker ref_pic_list_mod_data_t as_ref_pic_list_mod_data[MAX_NUM_VIEWS]; 201*495ae853SAndroid Build Coastguard Worker 202*495ae853SAndroid Build Coastguard Worker subset_sps_t *aps_pps_id_to_subset_sps_map[MAX_NUM_PIC_PARAMS]; 203*495ae853SAndroid Build Coastguard Worker 204*495ae853SAndroid Build Coastguard Worker disp_mgr_t s_mvc_disp_buf_mgr; 205*495ae853SAndroid Build Coastguard Worker 206*495ae853SAndroid Build Coastguard Worker mvc_au_buf_mgr_t s_mvc_au_buf_mgr; 207*495ae853SAndroid Build Coastguard Worker 208*495ae853SAndroid Build Coastguard Worker mvc_au_mv_pred_buf_mgr_t s_mvc_au_mv_pred_buf_mgr; 209*495ae853SAndroid Build Coastguard Worker 210*495ae853SAndroid Build Coastguard Worker mvc_au_buffer_t *ps_cur_au; 211*495ae853SAndroid Build Coastguard Worker 212*495ae853SAndroid Build Coastguard Worker AVC_EXT_NALU_ID_T ae_nalu_id[MAX_NUM_VIEWS]; 213*495ae853SAndroid Build Coastguard Worker 214*495ae853SAndroid Build Coastguard Worker UWORD8 au1_nal_ref_idc[MAX_NUM_VIEWS]; 215*495ae853SAndroid Build Coastguard Worker 216*495ae853SAndroid Build Coastguard Worker UWORD32 u4_num_aus_decoded; 217*495ae853SAndroid Build Coastguard Worker 218*495ae853SAndroid Build Coastguard Worker UWORD16 u2_num_views; 219*495ae853SAndroid Build Coastguard Worker 220*495ae853SAndroid Build Coastguard Worker UWORD16 u2_num_views_decoded; 221*495ae853SAndroid Build Coastguard Worker 222*495ae853SAndroid Build Coastguard Worker UWORD8 u1_num_sps; 223*495ae853SAndroid Build Coastguard Worker 224*495ae853SAndroid Build Coastguard Worker UWORD8 u1_num_subset_sps; 225*495ae853SAndroid Build Coastguard Worker 226*495ae853SAndroid Build Coastguard Worker UWORD8 u1_num_pps; 227*495ae853SAndroid Build Coastguard Worker 228*495ae853SAndroid Build Coastguard Worker bool b_header_only_decode; 229*495ae853SAndroid Build Coastguard Worker 230*495ae853SAndroid Build Coastguard Worker bool b_flush_enabled; 231*495ae853SAndroid Build Coastguard Worker 232*495ae853SAndroid Build Coastguard Worker } mvc_dec_ctxt_t; 233*495ae853SAndroid Build Coastguard Worker 234*495ae853SAndroid Build Coastguard Worker #endif 235