diff --git a/decoder/ih264d_api.c b/decoder/ih264d_api.c index 0127a7d..af2354b 100644 --- a/decoder/ih264d_api.c +++ b/decoder/ih264d_api.c @@ -1196,6 +1196,7 @@ void ih264d_init_decoder(void * ps_dec_params) ps_dec->i4_max_poc = 0; ps_dec->i4_prev_max_display_seq = 0; ps_dec->u1_recon_mb_grp = 4; + ps_dec->i4_reorder_depth = -1; /* Field PIC initializations */ ps_dec->u1_second_field = 0; @@ -2013,7 +2014,8 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op) ps_dec->u1_pic_decode_done = 0; ps_dec_op->u4_num_bytes_consumed = 0; - + ps_dec_op->i4_reorder_depth = -1; + ps_dec_op->i4_display_index = DEFAULT_POC; ps_dec->ps_out_buffer = NULL; if(ps_dec_ip->u4_size @@ -2204,6 +2206,8 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op) ps_dec_op->u4_pic_wd = (UWORD32)ps_dec->u2_disp_width; ps_dec_op->u4_pic_ht = (UWORD32)ps_dec->u2_disp_height; + ps_dec_op->i4_reorder_depth = ps_dec->i4_reorder_depth; + ps_dec_op->i4_display_index = ps_dec->i4_display_index; ps_dec_op->u4_new_seq = 0; @@ -2522,6 +2526,7 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op) { ps_dec_op->u4_pic_wd = (UWORD32)ps_dec->u2_disp_width; ps_dec_op->u4_pic_ht = (UWORD32)ps_dec->u2_disp_height; + ps_dec_op->i4_reorder_depth = ps_dec->i4_reorder_depth; } //Report if header (sps and pps) has not been decoded yet @@ -4077,6 +4082,8 @@ void ih264d_fill_output_struct_from_context(dec_struct_t *ps_dec, ps_dec_op->u4_pic_wd = (UWORD32)ps_dec->u2_disp_width; ps_dec_op->u4_pic_ht = (UWORD32)ps_dec->u2_disp_height; } + ps_dec_op->i4_reorder_depth = ps_dec->i4_reorder_depth; + ps_dec_op->i4_display_index = ps_dec->i4_display_index; ps_dec_op->e_pic_type = ps_dec->i4_frametype; ps_dec_op->u4_new_seq = 0; diff --git a/decoder/ih264d_structs.h b/decoder/ih264d_structs.h index 9df4fdd..fdfbada 100644 --- a/decoder/ih264d_structs.h +++ b/decoder/ih264d_structs.h @@ -1059,6 +1059,7 @@ typedef struct _DecStruct struct _DecMbInfo * ps_cur_mb_info, const UWORD16 u2_mbxn_mb); UWORD8 u1_init_dec_flag; + WORD32 i4_reorder_depth; prev_seq_params_t s_prev_seq_params; UWORD8 u1_cur_mb_fld_dec_flag; /* current Mb fld or Frm */ @@ -1321,7 +1322,7 @@ typedef struct _DecStruct * */ WORD32 i4_degrade_pic_cnt; - + WORD32 i4_display_index; UWORD32 u4_pic_buf_got; /** diff --git a/decoder/ih264d_utils.c b/decoder/ih264d_utils.c index 6cfcff8..9998757 100644 --- a/decoder/ih264d_utils.c +++ b/decoder/ih264d_utils.c @@ -769,6 +769,7 @@ WORD32 ih264d_init_pic(dec_struct_t *ps_dec, else ps_dec->i4_display_delay = ps_seq->s_vui.u4_num_reorder_frames * 2 + 2; } + ps_dec->i4_reorder_depth = ps_dec->i4_display_delay; if(IVD_DECODE_FRAME_OUT == ps_dec->e_frm_out_mode) ps_dec->i4_display_delay = 0; @@ -945,6 +946,7 @@ WORD32 ih264d_get_next_display_field(dec_struct_t * ps_dec, pv_disp_op->s_disp_frm_buf.pv_y_buf = ps_out_buffer->pu1_bufs[0]; pv_disp_op->s_disp_frm_buf.pv_u_buf = ps_out_buffer->pu1_bufs[1]; pv_disp_op->s_disp_frm_buf.pv_v_buf = ps_out_buffer->pu1_bufs[2]; + ps_dec->i4_display_index = DEFAULT_POC; if(pic_buf != NULL) { ps_dec->pv_disp_sei_params = &pic_buf->s_sei_pic; @@ -962,6 +964,7 @@ WORD32 ih264d_get_next_display_field(dec_struct_t * ps_dec, /* ! */ pv_disp_op->u4_ts = pic_buf->u4_ts; + ps_dec->i4_display_index = pic_buf->i4_poc; /* set the start of the Y, U and V buffer pointer for display */ ps_op_frm->pv_y_buf = pic_buf->pu1_buf1 + pic_buf->u2_crop_offset_y; diff --git a/decoder/ivd.h b/decoder/ivd.h index 427286d..bac5847 100644 --- a/decoder/ivd.h +++ b/decoder/ivd.h @@ -514,6 +514,17 @@ typedef struct{ * disp_buf_id */ UWORD32 u4_disp_buf_id; + + /** + * reorder_depth + */ + WORD32 i4_reorder_depth; + + /** + * disp_buf_id + */ + WORD32 i4_display_index; + }ivd_video_decode_op_t;