mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-12-26 11:17:44 +01:00
[h264d] 宁夏IPTV; update: mpp_dec_flush call h264d_flush to flush out frames, not to remove;
git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@919 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
parent
c73483f729
commit
282bd2d59d
3 changed files with 31 additions and 8 deletions
|
|
@ -556,16 +556,12 @@ MPP_RET h264d_flush(void *decoder)
|
|||
}
|
||||
goto __RETURN;
|
||||
}
|
||||
FUN_CHECK(ret = flush_dpb(p_Dec->p_Vid->p_Dpb_layer[0], 1));
|
||||
FUN_CHECK(ret = init_dpb(p_Dec->p_Vid, p_Dec->p_Vid->p_Dpb_layer[0], 1));
|
||||
//free_dpb(p_Dec->p_Vid->p_Dpb_layer[0]);
|
||||
|
||||
FUN_CHECK(ret = output_dpb(p_Dec, p_Dec->p_Vid->p_Dpb_layer[0]));
|
||||
if (p_Dec->mvc_valid) {
|
||||
// layer_id == 1
|
||||
FUN_CHECK(ret = flush_dpb(p_Dec->p_Vid->p_Dpb_layer[1], 2));
|
||||
FUN_CHECK(ret = init_dpb(p_Dec->p_Vid, p_Dec->p_Vid->p_Dpb_layer[1], 2));
|
||||
//free_dpb(p_Dec->p_Vid->p_Dpb_layer[1]);
|
||||
FUN_CHECK(ret = output_dpb(p_Dec, p_Dec->p_Vid->p_Dpb_layer[1]));
|
||||
}
|
||||
flush_dpb_buf_slot(p_Dec);
|
||||
|
||||
if (p_Dec->last_frame_slot_idx >= 0) {
|
||||
mpp_buf_slot_set_prop(p_Dec->frame_slots, p_Dec->last_frame_slot_idx,
|
||||
SLOT_EOS, &p_Dec->p_Inp->has_get_eos);
|
||||
|
|
|
|||
|
|
@ -1321,6 +1321,8 @@ MPP_RET store_picture_in_dpb(H264_DpbBuf_t *p_Dpb, H264_StorePic_t *p)
|
|||
p_Dpb->used_size++;
|
||||
H264D_DBG(H264D_DBG_DPB_INFO, "[DPB_size] p_Dpb->used_size=%d", p_Dpb->used_size);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
#if 1
|
||||
{
|
||||
|
|
@ -1796,7 +1798,31 @@ __RETURN:
|
|||
__FAILED:
|
||||
return ret;
|
||||
}
|
||||
/*!
|
||||
***********************************************************************
|
||||
* \brief
|
||||
* write out all frames
|
||||
***********************************************************************
|
||||
*/
|
||||
//extern "C"
|
||||
MPP_RET output_dpb(H264_DecCtx_t *p_Dec, H264_DpbBuf_t *p_Dpb)
|
||||
{
|
||||
RK_S32 poc = 0, pos = 0;
|
||||
MPP_RET ret = MPP_ERR_UNKNOW;
|
||||
INP_CHECK(ret, !p_Dpb);
|
||||
|
||||
while (get_smallest_poc(p_Dpb, &poc, &pos)) {
|
||||
p_Dpb->last_output_poc = poc;
|
||||
FUN_CHECK(ret = write_stored_frame(p_Dpb->p_Vid, p_Dpb->fs[pos]));
|
||||
if (!is_used_for_reference(p_Dpb->fs[pos])) {
|
||||
FUN_CHECK(ret = remove_frame_from_dpb(p_Dpb, pos));
|
||||
}
|
||||
}
|
||||
__RETURN:
|
||||
return ret = MPP_OK;
|
||||
__FAILED:
|
||||
return ret;
|
||||
}
|
||||
/*!
|
||||
***********************************************************************
|
||||
* \brief
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ MPP_RET store_picture_in_dpb (H264_DpbBuf_t *p_Dpb, H264_StorePic_t *p);
|
|||
|
||||
MPP_RET init_dpb (H264dVideoCtx_t *p_Vid, H264_DpbBuf_t *p_Dpb, RK_S32 type);
|
||||
MPP_RET flush_dpb (H264_DpbBuf_t *p_Dpb, RK_S32 type);
|
||||
MPP_RET output_dpb (H264_DecCtx_t *p_Dec, H264_DpbBuf_t *p_Dpb);
|
||||
|
||||
void free_dpb (H264_DpbBuf_t *p_Dpb);
|
||||
MPP_RET exit_picture(H264dVideoCtx_t *p_Vid, H264_StorePic_t **dec_pic);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue