diff --git a/decoder/ixheaacd_env_calc.c b/decoder/ixheaacd_env_calc.c index 3c68165..8fa77dc 100644 --- a/decoder/ixheaacd_env_calc.c +++ b/decoder/ixheaacd_env_calc.c @@ -664,7 +664,7 @@ VOID ixheaacd_calc_subband_gains(ia_freq_band_data_struct *pstr_freq_band_data, #define ALIGN_SIZE64(x) ((((x) + 7) >> 3) << 3) -VOID ixheaacd_calc_sbrenvelope( +IA_ERRORCODE ixheaacd_calc_sbrenvelope( ia_sbr_scale_fact_struct *ptr_sbr_scale_fac, ia_sbr_calc_env_struct *ptr_sbr_calc_env, ia_sbr_header_data_struct *ptr_header_data, @@ -681,7 +681,7 @@ VOID ixheaacd_calc_sbrenvelope( WORD32 freq_res; WORD32 num_env = ptr_frame_data->str_frame_info_details.num_env; WORD16 *ptr_border_vec = ptr_frame_data->str_frame_info_details.border_vec; - + IA_ERRORCODE err_code = IA_NO_ERROR; WORD16 *ptr_noise_floor; ia_freq_band_data_struct *pstr_freq_band_data = ptr_header_data->pstr_freq_band_data; @@ -811,6 +811,8 @@ VOID ixheaacd_calc_sbrenvelope( } freq_res = ptr_frame_data->str_frame_info_details.freq_res[i]; + if (noise_floor_idx >= MAX_NOISE_ENVELOPES) return IA_FATAL_ERROR; + if (ptr_border_vec[i] == ptr_frame_data->str_frame_info_details .noise_border_vec[noise_floor_idx + 1]) { @@ -944,6 +946,7 @@ VOID ixheaacd_calc_sbrenvelope( } else { ptr_sbr_calc_env->tansient_env_prev = -1; } + return err_code; } VOID ixheaacd_equalize_filt_buff_exp(WORD16 *ptr_filt_buf, WORD16 *nrg_gain, diff --git a/decoder/ixheaacd_env_calc.h b/decoder/ixheaacd_env_calc.h index 7941ab3..dd2e195 100644 --- a/decoder/ixheaacd_env_calc.h +++ b/decoder/ixheaacd_env_calc.h @@ -31,7 +31,7 @@ typedef struct { WORD16 harm_index; } ia_sbr_calc_env_struct; -VOID ixheaacd_calc_sbrenvelope( +IA_ERRORCODE ixheaacd_calc_sbrenvelope( ia_sbr_scale_fact_struct *sbr_scale_factor, ia_sbr_calc_env_struct *ptr_sbr_calc_env, ia_sbr_header_data_struct *ptr_header_data, diff --git a/decoder/ixheaacd_sbr_dec.c b/decoder/ixheaacd_sbr_dec.c index 0f5e2ae..684b69d 100644 --- a/decoder/ixheaacd_sbr_dec.c +++ b/decoder/ixheaacd_sbr_dec.c @@ -883,6 +883,7 @@ WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data, if (apply_processing) { WORD16 degree_alias[NO_SYNTHESIS_CHANNELS]; WORD16 *border_vec = ptr_frame_data->str_frame_info_details.border_vec; + IA_ERRORCODE error_code = IA_NO_ERROR; if (low_pow_flag) { memset(degree_alias, 0, NO_SYNTHESIS_CHANNELS * sizeof(WORD16)); @@ -922,13 +923,14 @@ WORD32 ixheaacd_sbr_dec(ia_sbr_dec_struct *ptr_sbr_dec, WORD16 *ptr_time_data, audio_object_type); } - ixheaacd_calc_sbrenvelope( + error_code = ixheaacd_calc_sbrenvelope( &ptr_sbr_dec->str_sbr_scale_fact, &ptr_sbr_dec->str_sbr_calc_env, ptr_header_data, ptr_frame_data, ptr_frame_data_prev, p_arr_qmf_buf_real, p_arr_qmf_buf_imag, degree_alias, low_pow_flag, sbr_tables_ptr, pstr_common_tables, ptr_work_buf_core + (LPC_ORDER << (6 + !low_pow_flag)), audio_object_type); + if (error_code) return error_code; memcpy(ptr_frame_data_prev->sbr_invf_mode, ptr_frame_data->sbr_invf_mode, ptr_header_data->pstr_freq_band_data->num_if_bands * sizeof(WORD32));