diff options
Diffstat (limited to 'decoder/ih264d_parse_pslice.c')
-rw-r--r-- | decoder/ih264d_parse_pslice.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/decoder/ih264d_parse_pslice.c b/decoder/ih264d_parse_pslice.c index d56f44e..f300e2b 100644 --- a/decoder/ih264d_parse_pslice.c +++ b/decoder/ih264d_parse_pslice.c @@ -1655,9 +1655,17 @@ WORD32 ih264d_mark_err_slice_skip(dec_struct_t * ps_dec, 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 *); @@ -2021,8 +2029,17 @@ WORD32 ih264d_parse_pslice(dec_struct_t *ps_dec, UWORD16 u2_first_mb_in_slice) WORD32 num_entries; WORD32 size; - 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 *); |