diff options
author | Hamsalekha S <hamsalekha.s@ittiam.com> | 2017-04-21 17:17:45 +0530 |
---|---|---|
committer | MSe <mse1969@posteo.de> | 2017-08-31 21:25:40 +0200 |
commit | 19928d402da412925098fc24e3c5c566de5d1869 (patch) | |
tree | 7e5c73f2d0dc73b09c0b47364eeba75c6c43d2f5 | |
parent | fe8add48c023cc5e504a2d2e0022a37fab06fa36 (diff) | |
download | android_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.c | 29 |
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; } |