summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHamsalekha S <hamsalekha.s@ittiam.com>2017-04-21 17:17:45 +0530
committerMSe <mse1969@posteo.de>2017-08-31 21:25:40 +0200
commit19928d402da412925098fc24e3c5c566de5d1869 (patch)
tree7e5c73f2d0dc73b09c0b47364eeba75c6c43d2f5
parentfe8add48c023cc5e504a2d2e0022a37fab06fa36 (diff)
downloadandroid_external_libavc-19928d402da412925098fc24e3c5c566de5d1869.tar.gz
android_external_libavc-19928d402da412925098fc24e3c5c566de5d1869.tar.bz2
android_external_libavc-19928d402da412925098fc24e3c5c566de5d1869.zip
Decoder: Cleaned up parse sps function.
Postponed the initializations to decoder context till the end of the parse sps function, after all the error checks are done. Bug: 37968755 Test: ran poc on ASAN-enabled build before/after Change-Id: Ibee3383c28cede3edb68d2459565d6ce10683bbd (cherry picked from commit 4eb72f7c935595817026b4cf4aed5ef2ff579ab5)
-rw-r--r--decoder/ih264d_parse_headers.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/decoder/ih264d_parse_headers.c b/decoder/ih264d_parse_headers.c
index ba32225..faf2d6f 100644
--- a/decoder/ih264d_parse_headers.c
+++ b/decoder/ih264d_parse_headers.c
@@ -484,7 +484,7 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
UWORD8 u1_frm, uc_constraint_set0_flag, uc_constraint_set1_flag;
-
+ WORD32 i4_cropped_ht, i4_cropped_wd;
UWORD32 u4_temp;
WORD32 pic_height_in_map_units_minus1 = 0;
UWORD32 u2_pic_wd = 0;
@@ -566,8 +566,6 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
ps_seq = ps_dec->pv_scratch_sps_pps;
*ps_seq = ps_dec->ps_sps[u1_seq_parameter_set_id];
- if(NULL == ps_dec->ps_cur_sps)
- ps_dec->ps_cur_sps = ps_seq;
ps_seq->u1_profile_idc = u1_profile_idc;
ps_seq->u1_level_idc = u1_level_idc;
@@ -843,7 +841,6 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
UWORD16 u2_btm_ofst = 0;
UWORD8 u1_frm_mbs_flag;
UWORD8 u1_vert_mult_factor;
- WORD32 i4_cropped_ht, i4_cropped_wd;
if(u1_frame_cropping_flag)
{
@@ -905,10 +902,6 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
return IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED;
}
- ps_dec->u2_disp_height = i4_cropped_ht;
-
- ps_dec->u2_disp_width = i4_cropped_wd;
-
}
if(1 == ps_seq->u1_vui_parameters_present_flag)
@@ -918,6 +911,19 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
return ret;
}
+ /* In case bitstream read has exceeded the filled size, then
+ return an error */
+ if (ps_bitstrm->u4_ofst > ps_bitstrm->u4_max_ofst)
+ {
+ return ERROR_INV_SPS_PPS_T;
+ }
+
+ /*--------------------------------------------------------------------*/
+ /* All initializations to ps_dec are beyond this point */
+ /*--------------------------------------------------------------------*/
+ ps_dec->u2_disp_height = i4_cropped_ht;
+ ps_dec->u2_disp_width = i4_cropped_wd;
+
ps_dec->u2_pic_wd = u2_pic_wd;
ps_dec->u2_pic_ht = u2_pic_ht;
@@ -936,14 +942,9 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
ps_dec->u2_crop_offset_y = u2_crop_offset_y;
ps_dec->u2_crop_offset_uv = u2_crop_offset_uv;
- /* In case bitstream read has exceeded the filled size, then
- return an error */
- if(ps_bitstrm->u4_ofst > ps_bitstrm->u4_max_ofst)
- {
- return ERROR_INV_SPS_PPS_T;
- }
ps_seq->u1_is_valid = TRUE;
ps_dec->ps_sps[u1_seq_parameter_set_id] = *ps_seq;
+ ps_dec->ps_cur_sps = &ps_dec->ps_sps[u1_seq_parameter_set_id];
return OK;
}