Lines Matching refs:mgr

118 static void dpb_init_management(Avs2dFrameMgr_t *mgr)  in dpb_init_management()  argument
120 mgr->num_of_ref = 0; in dpb_init_management()
121 mgr->prev_doi = NO_VAL; in dpb_init_management()
122 mgr->output_poi = NO_VAL; in dpb_init_management()
123 mgr->tr_wrap_cnt = 0; in dpb_init_management()
125 mgr->scene_ref = NULL; in dpb_init_management()
126 mgr->cur_frm = NULL; in dpb_init_management()
127 mgr->used_size = 0; in dpb_init_management()
128 memset(mgr->refs, 0, sizeof(mgr->refs)); in dpb_init_management()
129 memset(&mgr->cur_rps, 0, sizeof(Avs2dRps_t)); in dpb_init_management()
136 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in avs2d_dpb_create() local
139 mgr->dpb_specific_size = dpb_get_size(p_dec); in avs2d_dpb_create()
140 mgr->dpb_size = 15; in avs2d_dpb_create()
141 avs2d_dbg_dpb("create dpb, size %d, specific_size %d\n", mgr->dpb_size, mgr->dpb_specific_size); in avs2d_dpb_create()
142 mgr->dpb = mpp_calloc(Avs2dFrame_t*, mgr->dpb_size); in avs2d_dpb_create()
143 for (i = 0; i < mgr->dpb_size; i++) { in avs2d_dpb_create()
144 mgr->dpb[i] = new_frame(); in avs2d_dpb_create()
145 MEM_CHECK(ret, mgr->dpb[i]); in avs2d_dpb_create()
146 mpp_frame_init(&mgr->dpb[i]->frame); in avs2d_dpb_create()
147 avs2d_dbg_dpb("DPB[%d], frame %p", i, mgr->dpb[i]->frame); in avs2d_dpb_create()
148 MEM_CHECK(ret, mgr->dpb[i]->frame); in avs2d_dpb_create()
151 dpb_init_management(mgr); in avs2d_dpb_create()
152 mgr->initial_flag = 1; in avs2d_dpb_create()
162 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in avs2d_dpb_destroy() local
165 for (i = 0; i < mgr->dpb_size; i++) { in avs2d_dpb_destroy()
166 mpp_frame_deinit(&mgr->dpb[i]->frame); in avs2d_dpb_destroy()
167 MPP_FREE(mgr->dpb[i]); in avs2d_dpb_destroy()
170 MPP_FREE(mgr->dpb); in avs2d_dpb_destroy()
171 mgr->initial_flag = 0; in avs2d_dpb_destroy()
177 static void recompute_cycle_order_index(Avs2dFrameMgr_t *mgr, Avs2dPicHeader_t *ph) in recompute_cycle_order_index() argument
187 wrap_oi = (mgr->tr_wrap_cnt - 1) * AVS2_DOI_CYCLE; in recompute_cycle_order_index()
188 for (i = 0; i < mgr->dpb_size; i++) { in recompute_cycle_order_index()
189 p = mgr->dpb[i]; in recompute_cycle_order_index()
198 if (mgr->output_poi != NO_VAL) { in recompute_cycle_order_index()
199 mgr->output_poi -= wrap_oi; in recompute_cycle_order_index()
207 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in compute_frame_order_index() local
212 if (mgr->output_poi != -1 && in compute_frame_order_index()
213 ph->doi != (mgr->prev_doi + 1) % AVS2_DOI_CYCLE) { in compute_frame_order_index()
214 …AVS2D_DBG(AVS2D_DBG_WARNNING, "discontinuous DOI (prev: %d --> curr: %d).", mgr->prev_doi, ph->doi… in compute_frame_order_index()
215 for (i = 0; i < mgr->dpb_size; i++) { in compute_frame_order_index()
216 p = mgr->dpb[i]; in compute_frame_order_index()
229 if (ph->doi < mgr->prev_doi) { in compute_frame_order_index()
230 mgr->tr_wrap_cnt++; in compute_frame_order_index()
233 mgr->prev_doi = ph->doi; in compute_frame_order_index()
234 ph->doi += mgr->tr_wrap_cnt * AVS2_DOI_CYCLE; in compute_frame_order_index()
235 recompute_cycle_order_index(mgr, ph); in compute_frame_order_index()
246 if (mgr->output_poi == NO_VAL && ph->picture_type == I_PICTURE) { in compute_frame_order_index()
247 mgr->output_poi = ph->poi; in compute_frame_order_index()
250 …I %d, out_delay %d, output_poi %d\n", ph->doi, ph->poi, ph->picture_output_delay, mgr->output_poi); in compute_frame_order_index()
263 static RK_S32 get_outputable_smallest_poi(Avs2dFrameMgr_t *mgr, RK_S32 *poi, RK_S32 *pos) in get_outputable_smallest_poi() argument
273 for (i = 0; i < mgr->dpb_size; i++) { in get_outputable_smallest_poi()
274 p = mgr->dpb[i]; in get_outputable_smallest_poi()
334 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in dpb_remove_frame() local
347 p->slot_idx, p->doi, p->poi, mgr->used_size); in dpb_remove_frame()
354 mgr->used_size--; in dpb_remove_frame()
387 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in dpb_remove_scene_frame() local
391 if (mgr->scene_ref) { in dpb_remove_scene_frame()
392 p = mgr->scene_ref; in dpb_remove_scene_frame()
398 mgr->scene_ref = NULL; in dpb_remove_scene_frame()
412 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in dpb_remove_unused_frame() local
415 for (i = 0; i < mgr->dpb_size; i++) { in dpb_remove_unused_frame()
416 p = mgr->dpb[i]; in dpb_remove_unused_frame()
436 static Avs2dFrame_t *dpb_get_one_frame(Avs2dFrameMgr_t *mgr, Avs2dSeqHeader_t *vsh, Avs2dPicHeader_… in dpb_get_one_frame() argument
443 for (i = 0; i < mgr->dpb_size; i++) { in dpb_get_one_frame()
444 p = mgr->dpb[i]; in dpb_get_one_frame()
456 for (i = 0; i < mgr->dpb_size; i++) { in dpb_get_one_frame()
457 p = mgr->dpb[i]; in dpb_get_one_frame()
474 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in dpb_alloc_frame() local
477 frm = dpb_get_one_frame(mgr, vsh, ph); in dpb_alloc_frame()
492 frm->refered_by_others = (frm->picture_type != GB_PICTURE && mgr->cur_rps.refered_by_others); in dpb_alloc_frame()
577 mgr->used_size++; in dpb_alloc_frame()
578 avs2d_dbg_dpb("get unused buf slot %d, DPB used %d \n", frm->slot_idx, mgr->used_size); in dpb_alloc_frame()
587 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in dpb_output_next_frame() local
590 if (get_outputable_smallest_poi(mgr, &poi, &pos)) { in dpb_output_next_frame()
592 poi, pos, mgr->output_poi); in dpb_output_next_frame()
594 if ((poi - mgr->output_poi <= 1) || in dpb_output_next_frame()
595 (mgr->dpb[pos]->doi + mgr->dpb[pos]->out_delay < mgr->cur_frm->doi) || in dpb_output_next_frame()
597 FUN_CHECK(ret = output_display_frame(p_dec, mgr->dpb[pos])); in dpb_output_next_frame()
598 if (!is_refered(mgr->dpb[pos])) { in dpb_output_next_frame()
599 FUN_CHECK(ret = dpb_remove_frame(p_dec, mgr->dpb[pos])); in dpb_output_next_frame()
609 static Avs2dFrame_t *find_ref_frame(Avs2dFrameMgr_t *mgr, RK_S32 doi) in find_ref_frame() argument
615 for (i = 0; i < mgr->dpb_size; i++) { in find_ref_frame()
616 p = mgr->dpb[i]; in find_ref_frame()
644 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in dpb_update_refs() local
645 Avs2dRps_t *p_rps = &mgr->cur_rps; in dpb_update_refs()
648 if (!mgr->cur_frm) { in dpb_update_refs()
655 if (mgr->cur_frm->refered_by_scene) { in dpb_update_refs()
656 mgr->scene_ref = mgr->cur_frm; in dpb_update_refs()
661 doi_of_remove = mgr->cur_frm->doi - p_rps->remove_pic[i]; in dpb_update_refs()
662 … avs2d_dbg_dpb("current doi %d, remove_pic[%d]=%d", mgr->cur_frm->doi, i, p_rps->remove_pic[i]); in dpb_update_refs()
663 p = find_ref_frame(mgr, doi_of_remove); in dpb_update_refs()
676 static MPP_RET dpb_set_frame_refs(Avs2dCtx_t *p_dec, Avs2dFrameMgr_t *mgr, HalDecTask *task) in dpb_set_frame_refs() argument
690 memset(mgr->refs, 0, sizeof(mgr->refs)); in dpb_set_frame_refs()
692 p_cur = mgr->cur_frm; in dpb_set_frame_refs()
693 mgr->num_of_ref = 0; in dpb_set_frame_refs()
694 p_rps = &mgr->cur_rps; in dpb_set_frame_refs()
699 p = find_ref_frame(mgr, doi_of_ref); in dpb_set_frame_refs()
704 mgr->refs[mgr->num_of_ref] = p; in dpb_set_frame_refs()
709 mgr->num_of_ref++; in dpb_set_frame_refs()
712 if (mgr->num_of_ref < 1 && !p_cur->intra_frame_flag) { in dpb_set_frame_refs()
716 if (!mgr->scene_ref) { in dpb_set_frame_refs()
718 } else if (mgr->scene_ref != mgr->refs[0] || mgr->num_of_ref > 1) { in dpb_set_frame_refs()
720 mgr->scene_ref->doi, mgr->refs[0] ? mgr->refs[0]->doi : -1); in dpb_set_frame_refs()
727 if (!mgr->scene_ref) { in dpb_set_frame_refs()
731 p_dec->syntax.refp.scene_ref_replace_pos = mgr->num_of_ref - 1; in dpb_set_frame_refs()
734 (mgr->num_of_ref != 2 || (mgr->refs[0] && mgr->refs[0]->poi <= p_cur->poi) || in dpb_set_frame_refs()
735 (mgr->refs[1] && mgr->refs[1]->poi >= p_cur->poi))) { in dpb_set_frame_refs()
739 if (replace_ref_flag && mgr->scene_ref) { in dpb_set_frame_refs()
741 p_dec->syntax.refp.scene_ref_slot_idx = mgr->scene_ref->slot_idx; in dpb_set_frame_refs()
763 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in avs2d_dpb_insert() local
788 mgr->cur_frm = p; in avs2d_dpb_insert()
794 task->output = mgr->cur_frm->slot_idx; in avs2d_dpb_insert()
795 avs2d_dbg_dpb("curframe slot_idx %d\n", mgr->cur_frm->slot_idx); in avs2d_dpb_insert()
798 ret = dpb_set_frame_refs(p_dec, mgr, task); in avs2d_dpb_insert()
802 for (i = 0; i < mgr->num_of_ref; i++) { in avs2d_dpb_insert()
803 task->refer[i] = mgr->refs[i] ? mgr->refs[i]->slot_idx : -1; in avs2d_dpb_insert()
804 if (mgr->refs[i]) { in avs2d_dpb_insert()
805 task->refer[i] = mgr->refs[i]->slot_idx; in avs2d_dpb_insert()
806 …b("task refer[%d] slot_idx %d doi %d poi %d", i, task->refer[i], mgr->refs[i]->doi, mgr->refs[i]->… in avs2d_dpb_insert()
819 for (i = 0; i < mgr->dpb_size; i++) { in avs2d_dpb_insert()
820 tmp = mgr->dpb[i]; in avs2d_dpb_insert()
837 Avs2dFrameMgr_t *mgr = &p_dec->frm_mgr; in avs2d_dpb_flush() local
841 for (i = 0; i < mgr->dpb_size; i++) { in avs2d_dpb_flush()
842 p = mgr->dpb[i]; in avs2d_dpb_flush()
852 while (mgr->used_size) { in avs2d_dpb_flush()
859 dpb_init_management(mgr); in avs2d_dpb_flush()