From c2e8ffe451e2a78161037ca09a3516e65c80675c Mon Sep 17 00:00:00 2001 From: Harish Mahendrakar Date: Sat, 17 Sep 2016 14:04:29 +0530 Subject: [PATCH] Fix in the case of invalid SPS PPS Bug: 31092462 Change-Id: I0e2ab5a1088717bbf36f6b0cf859b5a6e0f59c5d --- decoder/ih264d_api.c | 5 +++-- decoder/ih264d_parse_pslice.c | 19 +++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/decoder/ih264d_api.c b/decoder/ih264d_api.c index 2ce6f1f..a81cdc0 100644 --- a/decoder/ih264d_api.c +++ b/decoder/ih264d_api.c @@ -3130,9 +3130,10 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op) ret1 = ih264d_mark_err_slice_skip(ps_dec, num_mb_skipped, ps_dec->u1_nal_unit_type == IDR_SLICE_NAL, ps_dec->ps_cur_slice->u2_frame_num, &temp_poc, prev_slice_err); - if((ret1 == ERROR_UNAVAIL_PICBUF_T) || (ret1 == ERROR_UNAVAIL_MVBUF_T)) + if((ret1 == ERROR_UNAVAIL_PICBUF_T) || (ret1 == ERROR_UNAVAIL_MVBUF_T) || + (ret1 == ERROR_INV_SPS_PPS_T)) { - return IV_FAIL; + ret = ret1; } } diff --git a/decoder/ih264d_parse_pslice.c b/decoder/ih264d_parse_pslice.c index 73303af..32f79c8 100644 --- a/decoder/ih264d_parse_pslice.c +++ b/decoder/ih264d_parse_pslice.c @@ -1491,10 +1491,25 @@ WORD32 ih264d_mark_err_slice_skip(dec_struct_t * ps_dec, if(ps_dec->ps_cur_pic != NULL) poc = ps_dec->ps_cur_pic->i4_poc + 2; - j = 0; + j = -1; for(i = 0; i < MAX_NUM_PIC_PARAMS; i++) + { if(ps_dec->ps_pps[i].u1_is_valid == TRUE) - j = i; + { + if(ps_dec->ps_pps[i].ps_sps->u1_is_valid == TRUE) + { + j = i; + break; + } + } + } + + //if valid SPS PPS is not found return error + if(j == -1) + { + return ERROR_INV_SPS_PPS_T; + } + { //initialize slice params required by ih264d_start_of_pic to valid values ps_dec->ps_cur_slice->u1_slice_type = P_SLICE;