[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:
DingWei 2016-06-15 10:28:21 +00:00
parent c73483f729
commit 282bd2d59d
3 changed files with 31 additions and 8 deletions

View file

@ -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);

View file

@ -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

View file

@ -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);