summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarish Mahendrakar <harish.mahendrakar@ittiam.com>2016-10-14 17:19:53 +0530
committerJessica Wagantall <jwagantall@cyngn.com>2016-12-12 12:39:19 -0800
commitdea7f2323b2bc0859b68bf3c694af140c8bcf4f8 (patch)
tree07226f04ab0754ad4d1ac19d32364617430cc239
parent47a3d55c228e9c4ed1d53ca4364ba155b2fa75a3 (diff)
downloadandroid_external_libavc-stable/cm-13.0-ZNH5Y.tar.gz
android_external_libavc-stable/cm-13.0-ZNH5Y.tar.bz2
android_external_libavc-stable/cm-13.0-ZNH5Y.zip
Decoder: Fixes in handling errors in Mbaff clips.stable/cm-13.0-ZNH5Y
Fixes mb_x, mb_y and first_mb_in_slice for Mbaff error streams CYNGNOS-3312 Bug: 30481714 Change-Id: Ie99f3b57e48a620a4bc7aee88031955a2e1b6753 (cherry picked from commit d79d09f453aa7a026b5e0c5c56a15b59910a527d) (cherry picked from commit a1c987b382f7de65eea301be96c893243bafdfe1)
-rw-r--r--decoder/ih264d_parse_pslice.c9
-rw-r--r--decoder/ih264d_utils.c6
2 files changed, 8 insertions, 7 deletions
diff --git a/decoder/ih264d_parse_pslice.c b/decoder/ih264d_parse_pslice.c
index dfd1ba8..1134ef0 100644
--- a/decoder/ih264d_parse_pslice.c
+++ b/decoder/ih264d_parse_pslice.c
@@ -1693,14 +1693,14 @@ WORD32 ih264d_mark_err_slice_skip(dec_struct_t * ps_dec,
ps_dec->ps_parse_cur_slice->ppv_map_ref_idx_to_poc = (volatile void **)pu1_buf;
}
- ps_dec->ps_cur_slice->u2_first_mb_in_slice = ps_dec->u2_total_mbs_coded << u1_mbaff;
+ 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;
- ps_dec->ps_parse_cur_slice->u4_first_mb_in_slice = ps_dec->u2_total_mbs_coded << u1_mbaff;
+ ps_dec->ps_parse_cur_slice->u4_first_mb_in_slice = ps_dec->u2_total_mbs_coded >> u1_mbaff;
ps_dec->ps_parse_cur_slice->u2_log2Y_crwd = ps_dec->ps_cur_slice->u2_log2Y_crwd;
@@ -1723,6 +1723,11 @@ WORD32 ih264d_mark_err_slice_skip(dec_struct_t * ps_dec,
ps_dec->ps_parse_cur_slice->slice_type = P_SLICE;
ps_dec->pf_mvpred_ref_tfr_nby2mb = ih264d_mv_pred_ref_tfr_nby2_pmb;
ps_dec->ps_part = ps_dec->ps_parse_part_params;
+ ps_dec->u2_mbx =
+ (MOD(ps_dec->ps_cur_slice->u2_first_mb_in_slice - 1, ps_dec->u2_frm_wd_in_mbs));
+ ps_dec->u2_mby =
+ (DIV(ps_dec->ps_cur_slice->u2_first_mb_in_slice - 1, ps_dec->u2_frm_wd_in_mbs));
+ ps_dec->u2_mby <<= u1_mbaff;
/******************************************************/
/* Parsing / decoding the slice */
diff --git a/decoder/ih264d_utils.c b/decoder/ih264d_utils.c
index 77c1733..d356c0d 100644
--- a/decoder/ih264d_utils.c
+++ b/decoder/ih264d_utils.c
@@ -676,11 +676,7 @@ WORD32 ih264d_init_dec_mb_grp(dec_struct_t *ps_dec)
dec_seq_params_t *ps_seq = ps_dec->ps_cur_sps;
UWORD8 u1_frm = ps_seq->u1_frame_mbs_only_flag;
- ps_dec->u1_recon_mb_grp = PARSE_MB_GROUP_4;
-
- //NMB set to width in MBs for non-mbaff cases
- if(0 == ps_seq->u1_mb_aff_flag)
- ps_dec->u1_recon_mb_grp = ps_dec->u2_frm_wd_in_mbs;
+ ps_dec->u1_recon_mb_grp = ps_dec->u2_frm_wd_in_mbs << ps_seq->u1_mb_aff_flag;
ps_dec->u1_recon_mb_grp_pair = ps_dec->u1_recon_mb_grp >> 1;