summaryrefslogtreecommitdiffstats
path: root/decoder/ih264d_parse_slice.c
diff options
context:
space:
mode:
Diffstat (limited to 'decoder/ih264d_parse_slice.c')
-rw-r--r--decoder/ih264d_parse_slice.c53
1 files changed, 24 insertions, 29 deletions
diff --git a/decoder/ih264d_parse_slice.c b/decoder/ih264d_parse_slice.c
index 1dfd11f..849b9c5 100644
--- a/decoder/ih264d_parse_slice.c
+++ b/decoder/ih264d_parse_slice.c
@@ -347,15 +347,12 @@ WORD32 ih264d_start_of_pic(dec_struct_t *ps_dec,
ps_dec->ps_nmb_info = ps_dec->ps_frm_mb_info;
if(ps_dec->u1_separate_parse)
{
- UWORD16 pic_wd = ps_dec->u4_width_at_init;
- UWORD16 pic_ht = ps_dec->u4_height_at_init;
+ UWORD16 pic_wd;
+ UWORD16 pic_ht;
UWORD32 num_mbs;
- if((NULL != ps_dec->ps_cur_sps) && (1 == (ps_dec->ps_cur_sps->u1_is_valid)))
- {
- pic_wd = ps_dec->u2_pic_wd;
- pic_ht = ps_dec->u2_pic_ht;
- }
+ pic_wd = ps_dec->u2_pic_wd;
+ pic_ht = ps_dec->u2_pic_ht;
num_mbs = (pic_wd * pic_ht) >> 8;
if(ps_dec->pu1_dec_mb_map)
@@ -564,18 +561,13 @@ WORD32 ih264d_start_of_pic(dec_struct_t *ps_dec,
<< 2);
ps_dec->ps_cur_mb_row = ps_dec->ps_nbr_mb_row; //[0];
- ps_dec->ps_cur_mb_row++; //Increment by 1 ,so that left mb will always be valid
- ps_dec->ps_top_mb_row =
- ps_dec->ps_nbr_mb_row
- + ((ps_dec->u2_frm_wd_in_mbs + 1)
- << (1
- - ps_dec->ps_cur_sps->u1_frame_mbs_only_flag));
- ps_dec->ps_top_mb_row++; //Increment by 1 ,so that left mb will always be valid
-
- ps_dec->pu1_y = ps_dec->pu1_y_scratch[0];
- ps_dec->pu1_u = ps_dec->pu1_u_scratch[0];
- ps_dec->pu1_v = ps_dec->pu1_v_scratch[0];
- ps_dec->u1_yuv_scratch_idx = 0;
+ //Increment by 2 ,so that left mb (mbaff decrements by 2) will always be valid
+ ps_dec->ps_cur_mb_row += 2;
+ ps_dec->ps_top_mb_row = ps_dec->ps_nbr_mb_row;
+ ps_dec->ps_top_mb_row += ((ps_dec->u2_frm_wd_in_mbs + 2) << (1 - ps_dec->ps_cur_sps->u1_frame_mbs_only_flag));
+ //Increment by 2 ,so that left mb (mbaff decrements by 2) will always be valid
+ ps_dec->ps_top_mb_row += 2;
+
/* CHANGED CODE */
ps_dec->ps_mv_cur = ps_dec->s_cur_pic.ps_mv;
ps_dec->ps_mv_top = ps_dec->ps_mv_top_p[0];
@@ -584,10 +576,6 @@ WORD32 ih264d_start_of_pic(dec_struct_t *ps_dec,
ps_dec->u1_mb_idx = 0;
/* CHANGED CODE */
ps_dec->ps_mv_left = ps_dec->s_cur_pic.ps_mv;
- ps_dec->pu1_yleft = 0;
- ps_dec->pu1_uleft = 0;
- ps_dec->pu1_vleft = 0;
- ps_dec->u1_not_wait_rec = 2;
ps_dec->u2_total_mbs_coded = 0;
ps_dec->i4_submb_ofst = -(SUB_BLK_SIZE);
ps_dec->u4_pred_info_idx = 0;
@@ -627,8 +615,6 @@ WORD32 ih264d_start_of_pic(dec_struct_t *ps_dec,
+ ps_dec->u2_frm_wd_in_mbs * BLK8x8SIZE;
ps_dec->ps_deblk_mbn = ps_dec->ps_deblk_pic;
- ps_dec->ps_deblk_mbn_curr = ps_dec->ps_deblk_mbn;
- ps_dec->ps_deblk_mbn_prev = ps_dec->ps_deblk_mbn + ps_dec->u1_recon_mb_grp;
/* Initialize The Function Pointer Depending Upon the Entropy and MbAff Flag */
{
if(ps_cur_slice->u1_mbaff_frame_flag)
@@ -788,7 +774,7 @@ WORD32 ih264d_end_of_pic_dispbuf_mgr(dec_struct_t * ps_dec)
ih264d_reset_ref_bufs(ps_dec->ps_dpb_mgr);
ih264d_release_display_bufs(ps_dec);
}
- if(ps_dec->u4_num_reorder_frames_at_init != 0)
+ if(IVD_DECODE_FRAME_OUT != ps_dec->e_frm_out_mode)
{
ret = ih264d_assign_display_seq(ps_dec);
if(ret != OK)
@@ -872,7 +858,7 @@ WORD32 ih264d_end_of_pic_dispbuf_mgr(dec_struct_t * ps_dec)
|| ((TOP_FIELD_ONLY | BOT_FIELD_ONLY)
== ps_dec->u1_top_bottom_decoded))
{
- if(ps_dec->u4_num_reorder_frames_at_init == 0)
+ if(IVD_DECODE_FRAME_OUT == ps_dec->e_frm_out_mode)
{
ret = ih264d_assign_display_seq(ps_dec);
if(ret != OK)
@@ -1809,8 +1795,17 @@ WORD32 ih264d_parse_decode_slice(UWORD8 u1_is_idr_slice,
WORD32 size;
UWORD8 *pu1_buf;
- num_entries = MIN(MAX_FRAMES, ps_dec->u4_num_ref_frames_at_init);
- num_entries = 2 * ((2 * num_entries) + 1);
+ num_entries = MAX_FRAMES;
+ if((1 >= ps_dec->ps_cur_sps->u1_num_ref_frames) &&
+ (0 == ps_dec->i4_display_delay))
+ {
+ num_entries = 1;
+ }
+ num_entries = ((2 * num_entries) + 1);
+ if(BASE_PROFILE_IDC != ps_dec->ps_cur_sps->u1_profile_idc)
+ {
+ num_entries *= 2;
+ }
size = num_entries * sizeof(void *);
size += PAD_MAP_IDX_POC * sizeof(void *);