xref: /aosp_15_r20/external/libavc/decoder/mvc/imvcd_structs.h (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
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