summaryrefslogtreecommitdiffstats
path: root/decoder/ih264d_parse_pslice.c
diff options
context:
space:
mode:
Diffstat (limited to 'decoder/ih264d_parse_pslice.c')
-rw-r--r--decoder/ih264d_parse_pslice.c27
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 *);