1 /****************************************************************************** 2 * 3 * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19 /** 20 ******************************************************************************* 21 * @file 22 * ihevc_dpb_mgr.h 23 * 24 * @brief 25 * Function declarations used for decoded picture buffer management 26 * 27 * @author 28 * Srinivas T 29 * 30 * 31 * @remarks 32 * None 33 * 34 ******************************************************************************* 35 */ 36 #ifndef _DPB_MANAGER_H 37 #define _DPB_MANAGER_H 38 39 /* Temporary definitions. Have to be defined later */ 40 41 #define MAX_DPB_BUFS (MAX_DPB_SIZE * 4) 42 43 #define MARK_ST_PICNUM_AS_NONREF 1 44 #define MARK_LT_INDEX_AS_NONREF 2 45 #define MARK_ST_PICNUM_AS_LT_INDEX 3 46 #define RESET_REF_PICTURES 5 47 48 typedef struct dpb_info_t dpb_info_t; 49 50 enum 51 { 52 UNUSED_FOR_REF = 0, 53 LONG_TERM_REF, 54 SHORT_TERM_REF, 55 }; 56 struct dpb_info_t 57 { 58 /** 59 * Pointer to picture buffer structure 60 */ 61 pic_buf_t *ps_pic_buf; 62 63 /** 64 * Link to the DPB buffer with previous pic Num 65 */ 66 dpb_info_t *ps_prev_dpb; 67 68 }; 69 70 typedef struct 71 { 72 /** 73 * Pointer to the most recent pic Num 74 */ 75 dpb_info_t *ps_dpb_head; 76 77 /** 78 * Physical storage for dpbInfo for ref bufs 79 */ 80 dpb_info_t as_dpb_info[MAX_DPB_BUFS]; 81 82 /** 83 * Number of reference buffers 84 */ 85 UWORD8 u1_num_ref_bufs; 86 87 }dpb_mgr_t; 88 89 void ihevc_dpb_mgr_init(dpb_mgr_t *ps_dpb_mgr); 90 91 WORD32 ihevc_dpb_mgr_insert_ref(dpb_mgr_t *ps_dpb_mgr, 92 pic_buf_t *ps_pic_buf, 93 WORD32 buf_id); 94 95 void ihevc_dpb_mgr_del_ref(dpb_mgr_t *ps_dpb_mgr, 96 buf_mgr_t *ps_buf_mgr, 97 WORD32 u4_abs_poc); 98 99 pic_buf_t* ihevc_dpb_mgr_get_ref_by_nearest_poc(dpb_mgr_t *ps_dpb_mgr, WORD32 cur_abs_poc); 100 101 pic_buf_t* ihevc_dpb_mgr_get_ref_by_poc(dpb_mgr_t *ps_dpb_mgr, WORD32 abs_poc); 102 103 pic_buf_t* ihevc_dpb_mgr_get_ref_by_poc_lsb(dpb_mgr_t *ps_dpb_mgr, WORD32 poc_lsb); 104 105 void ihevc_dpb_mgr_reset(dpb_mgr_t *ps_dpb_mgr, buf_mgr_t *ps_buf_mgr); 106 107 void ihevc_dpb_mgr_release_pics(buf_mgr_t *ps_buf_mgr, UWORD8 u1_disp_bufs); 108 109 #endif /* _DPB_MANAGER_H */ 110