summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHamsalekha S <hamsalekha.s@ittiam.com>2017-04-21 17:17:45 +0530
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-06-15 18:56:08 +0000
commit3ebe3b9a25e03a5e5580793d735252d187df18d6 (patch)
tree8ccdb735745a79bdeff923cfca6563d436999305
parent5d88b6e7fb3743989114658eec59498d25327e90 (diff)
downloadandroid_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.c29
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;
}