summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJessica Wagantall <jwagantall@cyngn.com>2016-07-07 11:51:07 -0700
committerJessica Wagantall <jwagantall@cyngn.com>2016-07-07 14:15:04 -0700
commita76695a86559023014f495c263b111ce2bd6b473 (patch)
treebd680df3086123de70e0a839c2faee78f30f914b
parent5f7a7a986760b841fe9992585db03d958b6492cb (diff)
parentcc676ebd95247646e67907ccab150fb77a847335 (diff)
downloadandroid_external_libavc-a76695a86559023014f495c263b111ce2bd6b473.tar.gz
android_external_libavc-a76695a86559023014f495c263b111ce2bd6b473.tar.bz2
android_external_libavc-a76695a86559023014f495c263b111ce2bd6b473.zip
Merge remote-tracking branch 'remotes/android-6.0.1_r52' into HEAD
Ticket: CYNGNOS-3020 Change-Id: I16174755f6efba69fed299659a9a35a40922999d
-rw-r--r--decoder/ih264d_api.c46
-rw-r--r--decoder/ih264d_parse_pslice.c9
-rw-r--r--decoder/ih264d_parse_slice.c3
-rw-r--r--decoder/ih264d_process_intra_mb.c2
4 files changed, 57 insertions, 3 deletions
diff --git a/decoder/ih264d_api.c b/decoder/ih264d_api.c
index c264d9a..e2fa322 100644
--- a/decoder/ih264d_api.c
+++ b/decoder/ih264d_api.c
@@ -889,6 +889,43 @@ void ih264d_init_decoder(void * ps_dec_params)
dec_struct_t * ps_dec = (dec_struct_t *)ps_dec_params;
dec_slice_params_t *ps_cur_slice;
pocstruct_t *ps_prev_poc, *ps_cur_poc;
+ WORD32 size;
+
+ size = sizeof(pred_info_t) * 2 * 32;
+ memset(ps_dec->ps_pred, 0 , size);
+
+ size = sizeof(disp_mgr_t);
+ memset(ps_dec->pv_disp_buf_mgr, 0 , size);
+
+ size = sizeof(buf_mgr_t) + ithread_get_mutex_lock_size();
+ memset(ps_dec->pv_pic_buf_mgr, 0, size);
+
+ size = sizeof(dec_err_status_t);
+ memset(ps_dec->ps_dec_err_status, 0, size);
+
+ size = sizeof(sei);
+ memset(ps_dec->ps_sei, 0, size);
+
+ size = sizeof(dpb_commands_t);
+ memset(ps_dec->ps_dpb_cmds, 0, size);
+
+ size = sizeof(dec_bit_stream_t);
+ memset(ps_dec->ps_bitstrm, 0, size);
+
+ size = sizeof(dec_slice_params_t);
+ memset(ps_dec->ps_cur_slice, 0, size);
+
+ size = MAX(sizeof(dec_seq_params_t), sizeof(dec_pic_params_t));
+ memset(ps_dec->pv_scratch_sps_pps, 0, size);
+
+ size = sizeof(ctxt_inc_mb_info_t);
+ memset(ps_dec->ps_left_mb_ctxt_info, 0, size);
+
+ size = (sizeof(neighbouradd_t) << 2);
+ memset(ps_dec->ps_left_mvpred_addr, 0 ,size);
+
+ size = sizeof(buf_mgr_t) + ithread_get_mutex_lock_size();
+ memset(ps_dec->pv_mv_buf_mgr, 0, size);
/* Free any dynamic buffers that are allocated */
ih264d_free_dynamic_bufs(ps_dec);
@@ -1066,6 +1103,7 @@ void ih264d_init_decoder(void * ps_dec_params)
(MAX_DISP_BUFS_NEW) * sizeof(UWORD32));
memset(ps_dec->u4_disp_buf_to_be_freed, 0,
(MAX_DISP_BUFS_NEW) * sizeof(UWORD32));
+ memset(ps_dec->ps_cur_slice, 0, sizeof(dec_slice_params_t));
ih264d_init_arch(ps_dec);
ih264d_init_function_ptr(ps_dec);
@@ -1600,6 +1638,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 8694a36..a751a88 100644
--- a/decoder/ih264d_parse_pslice.c
+++ b/decoder/ih264d_parse_pslice.c
@@ -1462,7 +1462,7 @@ WORD32 ih264d_mark_err_slice_skip(dec_struct_t * ps_dec,
ih264d_err_pic_dispbuf_mgr(ps_dec);
return 0;
}
-
+ ps_dec->ps_dpb_cmds->u1_long_term_reference_flag = 0;
if(prev_slice_err == 1)
{
/* first slice - missing/header corruption */
@@ -1494,6 +1494,10 @@ 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_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 +1675,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;
diff --git a/decoder/ih264d_process_intra_mb.c b/decoder/ih264d_process_intra_mb.c
index dde2a7e..279ff87 100644
--- a/decoder/ih264d_process_intra_mb.c
+++ b/decoder/ih264d_process_intra_mb.c
@@ -1242,6 +1242,7 @@ WORD32 ih264d_process_intra_mb(dec_struct_t * ps_dec,
+ (pu1_rem_intra4x4_pred_mode[u1_cur_sub_block]
>= i1_intra_pred);
}
+ i1_intra_pred = CLIP3(0, 8, i1_intra_pred);
{
UWORD8 u1_err_code = pu1_intra_err_codes[i1_intra_pred];
@@ -1650,6 +1651,7 @@ WORD32 ih264d_process_intra_mb(dec_struct_t * ps_dec,
+ (pu1_rem_intra4x4_pred_mode[u1_sub_mb_num]
>= i1_intra_pred);
}
+ i1_intra_pred = CLIP3(0, 8, i1_intra_pred);
{
UWORD8 u1_err_code = pu1_intra_err_codes[i1_intra_pred];