diff options
author | Hamsalekha S <hamsalekha.s@ittiam.com> | 2017-04-21 17:17:45 +0530 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-06-15 18:56:08 +0000 |
commit | 3ebe3b9a25e03a5e5580793d735252d187df18d6 (patch) | |
tree | 8ccdb735745a79bdeff923cfca6563d436999305 | |
parent | 5d88b6e7fb3743989114658eec59498d25327e90 (diff) | |
download | android_external_libavc-3ebe3b9a25e03a5e5580793d735252d187df18d6.tar.gz android_external_libavc-3ebe3b9a25e03a5e5580793d735252d187df18d6.tar.bz2 android_external_libavc-3ebe3b9a25e03a5e5580793d735252d187df18d6.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 2694114..352d605 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; if((ps_dec->i4_header_decoded & 1) && (ps_seq->u1_profile_idc != u1_profile_idc)) { @@ -863,7 +861,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) { @@ -925,10 +922,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; - } /* Backup u4_num_reorder_frames if header is already decoded */ @@ -960,6 +953,19 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm) return IVD_RES_CHANGED; } + /* 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; @@ -978,14 +984,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; } |