diff options
author | Harish Mahendrakar <harish.mahendrakar@ittiam.com> | 2016-04-20 16:13:52 +0530 |
---|---|---|
committer | Jessica Wagantall <jwagantall@cyngn.com> | 2016-07-07 11:07:31 -0700 |
commit | 6412336e9f9f7ed3662290f52ae49edff8630ef8 (patch) | |
tree | 42be06eda73b4b38c1660c255da445825919df97 | |
parent | c22fbda295b3f115a75de06a45a2308b0cf96111 (diff) | |
download | android_external_libavc-6412336e9f9f7ed3662290f52ae49edff8630ef8.tar.gz android_external_libavc-6412336e9f9f7ed3662290f52ae49edff8630ef8.tar.bz2 android_external_libavc-6412336e9f9f7ed3662290f52ae49edff8630ef8.zip |
Decoder: Initialize slice parameters before concealing error MBs
Also memset ps_dec_op structure to zero.
For error input, this ensures dimensions are initialized to zero
Bug: 28165661
Ticket: CYNGNOS-3020
Change-Id: I66eb2ddc5e02e74b7ff04da5f749443920f37141
-rw-r--r-- | decoder/ih264d_api.c | 8 | ||||
-rw-r--r-- | decoder/ih264d_parse_pslice.c | 9 | ||||
-rw-r--r-- | decoder/ih264d_parse_slice.c | 3 |
3 files changed, 18 insertions, 2 deletions
diff --git a/decoder/ih264d_api.c b/decoder/ih264d_api.c index b6d4e35..82226f3 100644 --- a/decoder/ih264d_api.c +++ b/decoder/ih264d_api.c @@ -1637,6 +1637,14 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op) ps_dec_ip = (ivd_video_decode_ip_t *)pv_api_ip; ps_dec_op = (ivd_video_decode_op_t *)pv_api_op; + + { + UWORD32 u4_size; + u4_size = ps_dec_op->u4_size; + memset(ps_dec_op, 0, sizeof(ivd_video_decode_op_t)); + ps_dec_op->u4_size = u4_size; + } + ps_dec->pv_dec_out = ps_dec_op; if(ps_dec->init_done != 1) { diff --git a/decoder/ih264d_parse_pslice.c b/decoder/ih264d_parse_pslice.c index 2cb2274..5f6f63f 100644 --- a/decoder/ih264d_parse_pslice.c +++ b/decoder/ih264d_parse_pslice.c @@ -1494,6 +1494,12 @@ WORD32 ih264d_mark_err_slice_skip(dec_struct_t * ps_dec, if(ps_dec->ps_pps[i].u1_is_valid == TRUE) j = i; { + //initialize slice params required by ih264d_start_of_pic to valid values + ps_dec->ps_cur_slice->u1_bottom_field_flag = 0; + ps_dec->ps_cur_slice->u1_field_pic_flag = 0; + ps_dec->ps_cur_slice->u1_slice_type = P_SLICE; + ps_dec->ps_cur_slice->u1_nal_ref_idc = 1; + ps_dec->ps_cur_slice->u1_nal_unit_type = 1; ret = ih264d_start_of_pic(ps_dec, poc, ps_cur_poc, ps_dec->ps_cur_slice->u2_frame_num, &ps_dec->ps_pps[j]); @@ -1671,6 +1677,9 @@ WORD32 ih264d_mark_err_slice_skip(dec_struct_t * ps_dec, } ps_dec->ps_cur_slice->u2_first_mb_in_slice = ps_dec->u2_total_mbs_coded << u1_mbaff; + ps_dec->ps_cur_slice->i1_slice_alpha_c0_offset = 0; + ps_dec->ps_cur_slice->i1_slice_beta_offset = 0; + if(ps_dec->ps_cur_slice->u1_field_pic_flag) ps_dec->u2_prv_frame_num = ps_dec->ps_cur_slice->u2_frame_num; diff --git a/decoder/ih264d_parse_slice.c b/decoder/ih264d_parse_slice.c index fa85aa1..5ff92f8 100644 --- a/decoder/ih264d_parse_slice.c +++ b/decoder/ih264d_parse_slice.c @@ -719,7 +719,7 @@ WORD32 ih264d_start_of_pic(dec_struct_t *ps_dec, ps_dec->u4_deblk_mb_x = 0; ps_dec->u4_deblk_mb_y = 0; - + ps_dec->pu4_wt_ofsts = ps_dec->pu4_wts_ofsts_mat; H264_MUTEX_UNLOCK(&ps_dec->process_disp_mutex); return OK; @@ -1869,7 +1869,6 @@ WORD32 ih264d_parse_decode_slice(UWORD8 u1_is_idr_slice, ps_dec->pv_proc_tu_coeff_data = ps_dec->pv_parse_tu_coeff_data; } - ps_dec->pu4_wt_ofsts = ps_dec->pu4_wts_ofsts_mat; if(u1_slice_type == I_SLICE) { ps_dec->ps_cur_pic->u4_pack_slc_typ |= I_SLC_BIT; |