xref: /aosp_15_r20/external/libavc/common/ih264_dpb_mgr.h (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker  *
3*495ae853SAndroid Build Coastguard Worker  * Copyright (C) 2015 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 
21*495ae853SAndroid Build Coastguard Worker /**
22*495ae853SAndroid Build Coastguard Worker *******************************************************************************
23*495ae853SAndroid Build Coastguard Worker * @file
24*495ae853SAndroid Build Coastguard Worker *  ih264_dpb_mgr.h
25*495ae853SAndroid Build Coastguard Worker *
26*495ae853SAndroid Build Coastguard Worker * @brief
27*495ae853SAndroid Build Coastguard Worker *  Function declarations used for decoded picture buffer management
28*495ae853SAndroid Build Coastguard Worker *
29*495ae853SAndroid Build Coastguard Worker * @author
30*495ae853SAndroid Build Coastguard Worker *  none
31*495ae853SAndroid Build Coastguard Worker *
32*495ae853SAndroid Build Coastguard Worker * @remarks
33*495ae853SAndroid Build Coastguard Worker *  none
34*495ae853SAndroid Build Coastguard Worker *
35*495ae853SAndroid Build Coastguard Worker *******************************************************************************
36*495ae853SAndroid Build Coastguard Worker */
37*495ae853SAndroid Build Coastguard Worker #ifndef _IH264_DPB_MGR_H_
38*495ae853SAndroid Build Coastguard Worker #define _IH264_DPB_MGR_H_
39*495ae853SAndroid Build Coastguard Worker 
40*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
41*495ae853SAndroid Build Coastguard Worker /* Constant Macros                                                           */
42*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
43*495ae853SAndroid Build Coastguard Worker #define MAX_DPB_BUFS                (MAX_DPB_SIZE * 4)
44*495ae853SAndroid Build Coastguard Worker 
45*495ae853SAndroid Build Coastguard Worker #define MARK_ST_PICNUM_AS_NONREF    1
46*495ae853SAndroid Build Coastguard Worker #define MARK_LT_INDEX_AS_NONREF     2
47*495ae853SAndroid Build Coastguard Worker #define MARK_ST_PICNUM_AS_LT_INDEX  3
48*495ae853SAndroid Build Coastguard Worker #define RESET_REF_PICTURES          5
49*495ae853SAndroid Build Coastguard Worker 
50*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
51*495ae853SAndroid Build Coastguard Worker /* Enums                                                                     */
52*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
53*495ae853SAndroid Build Coastguard Worker enum
54*495ae853SAndroid Build Coastguard Worker {
55*495ae853SAndroid Build Coastguard Worker     INVALID = -1,
56*495ae853SAndroid Build Coastguard Worker     UNUSED_FOR_REF = 0,
57*495ae853SAndroid Build Coastguard Worker     LONG_TERM_REF,
58*495ae853SAndroid Build Coastguard Worker     SHORT_TERM_REF,
59*495ae853SAndroid Build Coastguard Worker };
60*495ae853SAndroid Build Coastguard Worker 
61*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
62*495ae853SAndroid Build Coastguard Worker /* Structure Definitions                                                     */
63*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
64*495ae853SAndroid Build Coastguard Worker typedef struct dpb_info_t
65*495ae853SAndroid Build Coastguard Worker {
66*495ae853SAndroid Build Coastguard Worker     /**
67*495ae853SAndroid Build Coastguard Worker      * Pointer to picture buffer structure
68*495ae853SAndroid Build Coastguard Worker      */
69*495ae853SAndroid Build Coastguard Worker     pic_buf_t *ps_pic_buf;
70*495ae853SAndroid Build Coastguard Worker 
71*495ae853SAndroid Build Coastguard Worker     /**
72*495ae853SAndroid Build Coastguard Worker      * Link to the DPB buffer with previous link
73*495ae853SAndroid Build Coastguard Worker      */
74*495ae853SAndroid Build Coastguard Worker     struct dpb_info_t *ps_prev_dpb;
75*495ae853SAndroid Build Coastguard Worker 
76*495ae853SAndroid Build Coastguard Worker } dpb_info_t;
77*495ae853SAndroid Build Coastguard Worker 
78*495ae853SAndroid Build Coastguard Worker typedef struct
79*495ae853SAndroid Build Coastguard Worker {
80*495ae853SAndroid Build Coastguard Worker     /**
81*495ae853SAndroid Build Coastguard Worker      * Pointer to the most recent pic Num
82*495ae853SAndroid Build Coastguard Worker      */
83*495ae853SAndroid Build Coastguard Worker     dpb_info_t *ps_dpb_short_term_head;
84*495ae853SAndroid Build Coastguard Worker 
85*495ae853SAndroid Build Coastguard Worker     /**
86*495ae853SAndroid Build Coastguard Worker      * Pointer to the most recent pic Num
87*495ae853SAndroid Build Coastguard Worker      */
88*495ae853SAndroid Build Coastguard Worker     dpb_info_t *ps_dpb_long_term_head;
89*495ae853SAndroid Build Coastguard Worker 
90*495ae853SAndroid Build Coastguard Worker     /**
91*495ae853SAndroid Build Coastguard Worker      * Physical storage for dpbInfo for ref bufs
92*495ae853SAndroid Build Coastguard Worker      */
93*495ae853SAndroid Build Coastguard Worker     dpb_info_t as_dpb_info[MAX_DPB_BUFS];
94*495ae853SAndroid Build Coastguard Worker 
95*495ae853SAndroid Build Coastguard Worker     /**
96*495ae853SAndroid Build Coastguard Worker      * Array of structures for bottom field.
97*495ae853SAndroid Build Coastguard Worker      */
98*495ae853SAndroid Build Coastguard Worker     pic_buf_t as_top_field_pics[MAX_DPB_BUFS];
99*495ae853SAndroid Build Coastguard Worker 
100*495ae853SAndroid Build Coastguard Worker     /**
101*495ae853SAndroid Build Coastguard Worker      * Array of structures for bottom field.
102*495ae853SAndroid Build Coastguard Worker      */
103*495ae853SAndroid Build Coastguard Worker     pic_buf_t as_bottom_field_pics[MAX_DPB_BUFS];
104*495ae853SAndroid Build Coastguard Worker 
105*495ae853SAndroid Build Coastguard Worker     /**
106*495ae853SAndroid Build Coastguard Worker      * Number of short-term reference buffers
107*495ae853SAndroid Build Coastguard Worker      */
108*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_num_short_term_ref_bufs;
109*495ae853SAndroid Build Coastguard Worker 
110*495ae853SAndroid Build Coastguard Worker     /**
111*495ae853SAndroid Build Coastguard Worker      * Number of long-term reference buffers
112*495ae853SAndroid Build Coastguard Worker      */
113*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_num_long_term_ref_bufs;
114*495ae853SAndroid Build Coastguard Worker 
115*495ae853SAndroid Build Coastguard Worker     /**
116*495ae853SAndroid Build Coastguard Worker      * buffer ID current frame
117*495ae853SAndroid Build Coastguard Worker      */
118*495ae853SAndroid Build Coastguard Worker     WORD32 i4_cur_frame_buf_id;
119*495ae853SAndroid Build Coastguard Worker 
120*495ae853SAndroid Build Coastguard Worker } dpb_mgr_t;
121*495ae853SAndroid Build Coastguard Worker 
122*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
123*495ae853SAndroid Build Coastguard Worker /* Function Declarations                                                     */
124*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
125*495ae853SAndroid Build Coastguard Worker void ih264_dpb_mgr_init(dpb_mgr_t *ps_dpb_mgr);
126*495ae853SAndroid Build Coastguard Worker 
127*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_insert_ref_frame(dpb_mgr_t *ps_dpb_mgr,
128*495ae853SAndroid Build Coastguard Worker                                       pic_buf_t *ps_pic_buf,
129*495ae853SAndroid Build Coastguard Worker                                       WORD32 reference_type,
130*495ae853SAndroid Build Coastguard Worker                                       UWORD32 frame_num,
131*495ae853SAndroid Build Coastguard Worker                                       WORD32 long_term_frame_idx);
132*495ae853SAndroid Build Coastguard Worker 
133*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_delete_ref_frame(dpb_mgr_t *ps_dpb_mgr,
134*495ae853SAndroid Build Coastguard Worker                                       WORD32 reference_type);
135*495ae853SAndroid Build Coastguard Worker 
136*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_delete_all_ref_frames(dpb_mgr_t *ps_dpb_mgr);
137*495ae853SAndroid Build Coastguard Worker 
138*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_count_ref_frames(dpb_mgr_t *ps_dpb_mgr,
139*495ae853SAndroid Build Coastguard Worker                                       WORD32 curr_frame_num,
140*495ae853SAndroid Build Coastguard Worker                                       WORD32 max_frame_num);
141*495ae853SAndroid Build Coastguard Worker 
142*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_delete_short_ref_frame(dpb_mgr_t *ps_dpb_mgr,
143*495ae853SAndroid Build Coastguard Worker                                             WORD32 curr_frame_num,
144*495ae853SAndroid Build Coastguard Worker                                             WORD32 max_frame_num);
145*495ae853SAndroid Build Coastguard Worker 
146*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_insert_ref_field(dpb_mgr_t *ps_dpb_mgr,
147*495ae853SAndroid Build Coastguard Worker                                       pic_buf_t *ps_pic_buf,
148*495ae853SAndroid Build Coastguard Worker                                       WORD32 reference_type,
149*495ae853SAndroid Build Coastguard Worker                                       UWORD32 frame_num,
150*495ae853SAndroid Build Coastguard Worker                                       WORD32 long_term_frame_idx);
151*495ae853SAndroid Build Coastguard Worker 
152*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_delete_ref_field(dpb_mgr_t *ps_dpb_mgr,
153*495ae853SAndroid Build Coastguard Worker                                       WORD32 reference_type);
154*495ae853SAndroid Build Coastguard Worker 
155*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_alternate_ref_fields(dpb_mgr_t *ps_dpb_mgr,
156*495ae853SAndroid Build Coastguard Worker                                           WORD32 reference_type,
157*495ae853SAndroid Build Coastguard Worker                                           WORD32 first_field_type);
158*495ae853SAndroid Build Coastguard Worker 
159*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_sort_short_term_fields_by_frame_num(dpb_mgr_t *ps_dpb_mgr,
160*495ae853SAndroid Build Coastguard Worker                                                          WORD32 curr_frame_num,
161*495ae853SAndroid Build Coastguard Worker                                                          WORD32 first_field_type,
162*495ae853SAndroid Build Coastguard Worker                                                          WORD32 max_frame_num);
163*495ae853SAndroid Build Coastguard Worker 
164*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_sort_short_term_fields_by_poc_l0(dpb_mgr_t *ps_dpb_mgr,
165*495ae853SAndroid Build Coastguard Worker                                                       WORD32 curr_poc,
166*495ae853SAndroid Build Coastguard Worker                                                       WORD32 first_field_type);
167*495ae853SAndroid Build Coastguard Worker 
168*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_sort_short_term_fields_by_poc_l1(dpb_mgr_t *ps_dpb_mgr,
169*495ae853SAndroid Build Coastguard Worker                                                       WORD32 curr_poc,
170*495ae853SAndroid Build Coastguard Worker                                                       WORD32 first_field_type);
171*495ae853SAndroid Build Coastguard Worker 
172*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_sort_long_term_fields_by_frame_idx(dpb_mgr_t *ps_dpb_mgr,
173*495ae853SAndroid Build Coastguard Worker                                                         WORD32 first_field_type);
174*495ae853SAndroid Build Coastguard Worker 
175*495ae853SAndroid Build Coastguard Worker WORD32 ih264_dpb_mgr_delete_long_ref_fields_max_frame_idx(dpb_mgr_t *ps_dpb_mgr,
176*495ae853SAndroid Build Coastguard Worker                                                           WORD32 max_frame_idx);
177*495ae853SAndroid Build Coastguard Worker 
178*495ae853SAndroid Build Coastguard Worker void ih264_dpb_mgr_del_ref(dpb_mgr_t *ps_dpb_mgr,
179*495ae853SAndroid Build Coastguard Worker                            buf_mgr_t *ps_buf_mgr,
180*495ae853SAndroid Build Coastguard Worker                            WORD32 u4_abs_poc);
181*495ae853SAndroid Build Coastguard Worker 
182*495ae853SAndroid Build Coastguard Worker pic_buf_t *ih264_dpb_mgr_get_ref_by_nearest_poc(dpb_mgr_t *ps_dpb_mgr,
183*495ae853SAndroid Build Coastguard Worker                                                 WORD32 cur_abs_poc);
184*495ae853SAndroid Build Coastguard Worker 
185*495ae853SAndroid Build Coastguard Worker pic_buf_t *ih264_dpb_mgr_get_ref_by_poc(dpb_mgr_t *ps_dpb_mgr, WORD32 abs_poc);
186*495ae853SAndroid Build Coastguard Worker 
187*495ae853SAndroid Build Coastguard Worker pic_buf_t *ih264_dpb_mgr_get_ref_by_poc_lsb(dpb_mgr_t *ps_dpb_mgr,
188*495ae853SAndroid Build Coastguard Worker                                             WORD32 poc_lsb);
189*495ae853SAndroid Build Coastguard Worker 
190*495ae853SAndroid Build Coastguard Worker void ih264_dpb_mgr_reset(dpb_mgr_t *ps_dpb_mgr, buf_mgr_t *ps_buf_mgr);
191*495ae853SAndroid Build Coastguard Worker 
192*495ae853SAndroid Build Coastguard Worker void ih264_dpb_mgr_release_pics(buf_mgr_t *ps_buf_mgr, UWORD8 u1_disp_bufs);
193*495ae853SAndroid Build Coastguard Worker 
194*495ae853SAndroid Build Coastguard Worker #endif /*  _IH264_DPB_MGR_H_ */
195