235 lines
5.5 KiB
C
235 lines
5.5 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright (C) 2021 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
|
|
*/
|
|
#ifndef _IMVCD_STRUCTS_H_
|
|
#define _IMVCD_STRUCTS_H_
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include "ih264_typedefs.h"
|
|
#include "imvcd.h"
|
|
#include "ih264_error.h"
|
|
#include "ih264_buf_mgr.h"
|
|
#include "ih264_disp_mgr.h"
|
|
#include "ih264d_sei.h"
|
|
#include "ih264d_structs.h"
|
|
#include "imvc_defs.h"
|
|
#include "imvc_structs.h"
|
|
#include "imvcd_defs.h"
|
|
|
|
/* structs */
|
|
typedef struct mvc_au_mv_pred_t
|
|
{
|
|
mv_pred_t *aps_mvs[MAX_NUM_VIEWS];
|
|
|
|
/* colZeroFlag | // 0th bit
|
|
field_flag | // 1st bit
|
|
XX | // 2:3 bit don't cares
|
|
subMbMode | // 4:5 bit
|
|
MbMode | // 6:7 bit */
|
|
UWORD8 *apu1_mode_descriptors[MAX_NUM_VIEWS];
|
|
|
|
} mvc_au_mv_pred_t;
|
|
|
|
typedef struct ivp_data_t
|
|
{
|
|
bool b_is_ivp_ref;
|
|
|
|
/* Due to the structuring of dpb_mgr_t, */
|
|
/* mvc_pic_buffer_t used for referencing ought to contain */
|
|
/* all data in indices corresponding to view_id doing the referencing. */
|
|
/* This struct, and this variable in particular, is used for identifying */
|
|
/* the reference view's view_id */
|
|
|
|
UWORD16 u2_ref_view_id;
|
|
} ivp_data_t;
|
|
|
|
typedef struct mvc_au_buffer_t
|
|
{
|
|
/** pic_buffer for all views */
|
|
yuv_buf_props_t as_view_buffers[MAX_NUM_VIEWS];
|
|
|
|
/** display offsets for all views */
|
|
offsets_t as_disp_offsets[MAX_NUM_VIEWS];
|
|
|
|
ivp_data_t s_ivp_data;
|
|
|
|
/** SEI data */
|
|
sei s_sei_pic;
|
|
|
|
/** AU MV Data */
|
|
mvc_au_mv_pred_t *ps_au_mv_data;
|
|
|
|
/* It will contain information about types of slices */
|
|
UWORD32 au4_pack_slc_typ[MAX_NUM_VIEWS];
|
|
|
|
/** Width of the display luma frame in pixels */
|
|
UWORD16 u2_disp_width;
|
|
|
|
/** Height of the display luma frame in pixels */
|
|
UWORD16 u2_disp_height;
|
|
|
|
/** Time at which frame has to be displayed */
|
|
UWORD32 u4_time_stamp;
|
|
|
|
/** (1: short 0: long) term ref pic */
|
|
bool b_is_short_term_ref;
|
|
|
|
/** frame / field / complementary field pair */
|
|
UWORD8 u1_pic_type;
|
|
|
|
/** Idx into the picBufAPI array */
|
|
WORD32 i4_pic_buf_id;
|
|
|
|
WORD32 i4_mv_buf_id;
|
|
|
|
WORD32 i4_poc;
|
|
|
|
WORD32 i4_frame_num;
|
|
|
|
/* Derived based on '8.2.4.1' */
|
|
WORD32 i4_pic_num;
|
|
|
|
/** minPOC */
|
|
WORD32 i4_avg_poc;
|
|
|
|
/*Same as u1_pic_type..u1_pic_type gets overwritten whereas this doesnot get
|
|
overwritten
|
|
...stores the pictype of frame/complementary field pair/ mbaff */
|
|
UWORD8 u1_picturetype;
|
|
|
|
UWORD8 u1_long_term_frm_idx;
|
|
|
|
UWORD8 u1_long_term_pic_num;
|
|
|
|
/* Refer to SEI table D-1 */
|
|
UWORD8 u1_pic_struct;
|
|
|
|
} mvc_au_buffer_t;
|
|
|
|
typedef struct mvc_au_buf_mgr_t
|
|
{
|
|
void *pv_mem;
|
|
|
|
buf_mgr_t *ps_buf_mgr_ctxt;
|
|
|
|
void *pv_au_buf_base;
|
|
|
|
mvc_au_buffer_t *aps_buf_id_to_au_buf_map[MAX_DISP_BUFS_NEW];
|
|
|
|
UWORD8 au1_au_buf_id_to_mv_buf_id_map[MAX_DISP_BUFS_NEW];
|
|
|
|
UWORD8 au1_au_buf_ref_flag[MAX_DISP_BUFS_NEW];
|
|
|
|
} mvc_au_buf_mgr_t;
|
|
|
|
typedef struct mvc_au_mv_pred_buf_mgr_t
|
|
{
|
|
void *pv_mem;
|
|
|
|
buf_mgr_t *ps_buf_mgr_ctxt;
|
|
|
|
void *pv_au_mv_pred_buf_base;
|
|
|
|
mvc_au_mv_pred_t *aps_buf_id_to_mv_pred_buf_map[MAX_DISP_BUFS_NEW];
|
|
|
|
} mvc_au_mv_pred_buf_mgr_t;
|
|
|
|
typedef struct subset_sps_t
|
|
{
|
|
dec_seq_params_t s_sps_data;
|
|
|
|
sps_mvc_ext_t s_sps_mvc_ext;
|
|
|
|
mvc_vui_ext_t s_mvc_vui_ext;
|
|
|
|
offsets_t s_disp_offsets;
|
|
|
|
UWORD8 u1_mvc_vui_parameters_present_flag;
|
|
|
|
} subset_sps_t;
|
|
|
|
typedef struct ref_pic_list_mod_data_t
|
|
{
|
|
UWORD8 au1_num_active_refs[2];
|
|
|
|
UWORD8 au1_ref_pic_list_modification_flag_lx[2];
|
|
|
|
UWORD8 au1_modification_of_pic_nums_idc[2][MVC_MAX_REF_PICS + 1];
|
|
|
|
WORD32 ai4_abs_diff_pic_num_minus1[2][MVC_MAX_REF_PICS + 1];
|
|
|
|
WORD32 ai4_long_term_pic_num[2][MVC_MAX_REF_PICS + 1];
|
|
|
|
WORD32 ai4_abs_diff_view_idx_minus1[2][MVC_MAX_REF_PICS + 1];
|
|
} ref_pic_list_mod_data_t;
|
|
|
|
typedef struct mvc_dec_ctxt_t
|
|
{
|
|
dec_struct_t s_view_dec_ctxt;
|
|
|
|
iv_mvc_yuv_buf_t s_out_buffer;
|
|
|
|
/* Resolves circular dependency with mvc_dpb_manager_t */
|
|
void *ps_dpb_mgr;
|
|
|
|
subset_sps_t as_subset_sps[MAX_NUM_SEQ_PARAMS];
|
|
|
|
/* Indexed via viewOrderID */
|
|
nalu_mvc_ext_t as_nalu_mvc_ext[MAX_NUM_VIEWS];
|
|
|
|
/* Indexed via viewOrderID */
|
|
dec_slice_params_t as_slices[MAX_NUM_VIEWS];
|
|
|
|
ref_pic_list_mod_data_t as_ref_pic_list_mod_data[MAX_NUM_VIEWS];
|
|
|
|
subset_sps_t *aps_pps_id_to_subset_sps_map[MAX_NUM_PIC_PARAMS];
|
|
|
|
disp_mgr_t s_mvc_disp_buf_mgr;
|
|
|
|
mvc_au_buf_mgr_t s_mvc_au_buf_mgr;
|
|
|
|
mvc_au_mv_pred_buf_mgr_t s_mvc_au_mv_pred_buf_mgr;
|
|
|
|
mvc_au_buffer_t *ps_cur_au;
|
|
|
|
AVC_EXT_NALU_ID_T ae_nalu_id[MAX_NUM_VIEWS];
|
|
|
|
UWORD8 au1_nal_ref_idc[MAX_NUM_VIEWS];
|
|
|
|
UWORD32 u4_num_aus_decoded;
|
|
|
|
UWORD16 u2_num_views;
|
|
|
|
UWORD16 u2_num_views_decoded;
|
|
|
|
UWORD8 u1_num_sps;
|
|
|
|
UWORD8 u1_num_subset_sps;
|
|
|
|
UWORD8 u1_num_pps;
|
|
|
|
bool b_header_only_decode;
|
|
|
|
bool b_flush_enabled;
|
|
|
|
} mvc_dec_ctxt_t;
|
|
|
|
#endif
|