diff options
author | Harish Mahendrakar <harish.mahendrakar@ittiam.com> | 2022-12-02 07:47:30 -0800 |
---|---|---|
committer | Harish Mahendrakar <harish.mahendrakar@ittiam.com> | 2022-12-02 19:02:49 +0000 |
commit | 2ae5f6ff8a0a12ead1cb7bab53c110039d7c8884 (patch) | |
tree | ba49d720e42d9ee1fbb97899fd62d4df54c9d6a0 /decoder/ixheaacd_esbr_envcal.c | |
parent | c13fd2dbf2455cee7682923f956bea85ad0931a6 (diff) | |
download | libxaac-2ae5f6ff8a0a12ead1cb7bab53c110039d7c8884.tar.gz |
Update to v0.1.4 from upstream project
This CL is a squashed commit of the following CLs from
upstream/main 9d57cec9725da0a4246f31779629e68630ac005c
9d57cec Merge pull request #15 from ittiam-systems/fuzzer_fix
679e3e5 Fix for signed integer overflow
944203c Merge pull request #14 from ittiam-systems/drm_960_er_support
3accfa6 Error robustness tool addition for xHEAAC decoder
42a0d6d Transform length 960 support for xHEAAC decoder
28c50d3 Merge pull request #13 from ittiam-systems/drc_config_updates
c6a238f Fix for heap buffer overflow
c2f16ab Fix for read access memory violation for extension element pointer
b7f88cb DRC configuration updates for xHEAAC decoder
1a352d8 Merge pull request #12 from ittiam-systems/eldv2
0e0d013 Fix for read access memory violation in LD MPS process call
e1bb9ba Fix for OOB issue in MPS process call
c26a26d Fix for write access memory violation in USAC process call
270720d ELDv2 support for EXHEAAC decoder
397bdac Merge pull request #11 from ittiam-systems/drc_updates
1fb7d08 Fix for OOB issue
70a89a0 Fix for signed integer overflow
daf6b8a DRC feature updates
8d342b2 Merge pull request #10 from ittiam-systems/cmake_win
8f3b3a4 Updates in CMakeLists for windows build
3ace28c Merge pull request #9 from ittiam-systems/fuzzer_fixes
fd6d06f Fix for OOB issue
22071e3 Fix for OOB issue in DRC
089e13f Fix for heap buffer overflow
8e37a35 Fix for heap buffer overflow
49b1b8f Fix for write access memory violation in USAC process call
dbedfaf Fix for write access memory violation in AAC init call
0ce17e2 Fix for OOB issue
Also, updated METADATA to point to upstream repository
Bug: 231644435
Bug: 233231045
Bug: 241854997
Bug: 244518544
Test: xaac_dec_fuzzer with testcases in the bugs
Change-Id: I747cd8a395465107b375ed0e3994233b6f2a7779
Diffstat (limited to 'decoder/ixheaacd_esbr_envcal.c')
-rw-r--r-- | decoder/ixheaacd_esbr_envcal.c | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/decoder/ixheaacd_esbr_envcal.c b/decoder/ixheaacd_esbr_envcal.c index 492287d..da6aa2f 100644 --- a/decoder/ixheaacd_esbr_envcal.c +++ b/decoder/ixheaacd_esbr_envcal.c @@ -73,7 +73,9 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, FLOAT32 input_real1[][64], FLOAT32 input_imag1[][64], WORD32 x_over_qmf[MAX_NUM_PATCHES], - FLOAT32 *scratch_buff, FLOAT32 *env_out) { + FLOAT32 *scratch_buff, FLOAT32 *env_out, + WORD32 ldmps_present) { + WORD32 error_code = 0; WORD8 harmonics[64]; FLOAT32(*env_tmp)[48]; FLOAT32(*noise_level_pvc)[48]; @@ -151,6 +153,8 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, WORD32 rate = upsamp_4_flag ? 4 : 2; + if (ldmps_present == 1) rate = 1; + env_tmp = frame_data->env_tmp; noise_level_pvc = frame_data->noise_level_pvc; nrg_est_pvc = frame_data->nrg_est_pvc; @@ -163,10 +167,10 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, freq_band_table[1] = frame_data->pstr_sbr_header->pstr_freq_band_data->freq_band_table[1]; - if (reset) { + if (reset || (ldmps_present == 1)) { esbr_start_up = 1; esbr_start_up_pvc = 1; - phase_index = 0; + if (reset) phase_index = 0; if (ixheaacd_createlimiterbands( (*lim_table), (*gate_mode), frame_data->pstr_sbr_header->pstr_freq_band_data->freq_band_tbl_lo, @@ -686,7 +690,7 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, } } - if (esbr_start_up) { + if (esbr_start_up && (ldmps_present != 1)) { for (n = 0; n < 4; n++) { memcpy((*e_gain)[n], nrg_gain, num_subbands * sizeof(FLOAT32)); memcpy((*noise_buf)[n], noise_level, @@ -701,6 +705,9 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, ptr_real_buf = *(input_real + l) + sub_band_start; ptr_imag_buf = *(input_imag + l) + sub_band_start; + freq_inv = 1; + if ((ldmps_present == 1) && (sub_band_start & 1)) freq_inv = -1; + for (k = 0; k < num_subbands; k++) { (*e_gain)[4][k] = nrg_gain[k]; (*noise_buf)[4][k] = noise_level[k]; @@ -713,14 +720,27 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, phase_index = (phase_index + 1) & 511; sb_noise = (nrg_tone[k] != 0 || noise_absc_flag) ? 0 : sb_noise; - *ptr_real_buf = *ptr_real_buf * sb_gain + + if (ldmps_present == 1) { + *ptr_real_buf = *ptr_real_buf * sb_gain + + sb_noise * ixheaacd_random_phase[phase_index][0] + + nrg_tone[k] * ixheaacd_hphase_tbl[0][harm_index]; + *ptr_imag_buf = + *ptr_imag_buf * sb_gain + + sb_noise * ixheaacd_random_phase[phase_index][1] + + nrg_tone[k] * freq_inv * ixheaacd_hphase_tbl[1][harm_index]; + + freq_inv = -freq_inv; + } else { + *ptr_real_buf = *ptr_real_buf * sb_gain + sb_noise * ixheaacd_random_phase[phase_index][0]; - *ptr_imag_buf = *ptr_imag_buf * sb_gain + + *ptr_imag_buf = *ptr_imag_buf * sb_gain + sb_noise * ixheaacd_random_phase[phase_index][1]; + } ptr_real_buf++; ptr_imag_buf++; } + if (ldmps_present == 1) harm_index = (harm_index + 1) & 3; memcpy(temp, (*e_gain)[0], 64 * sizeof(FLOAT32)); for (n = 0; n < 4; n++) @@ -732,7 +752,8 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, memcpy((*noise_buf)[4], temp, 64 * sizeof(FLOAT32)); } - ixheaacd_apply_inter_tes( + if (ldmps_present != 1) { + error_code = ixheaacd_apply_inter_tes( *(input_real1 + rate * p_frame_info->border_vec[i]), *(input_imag1 + rate * p_frame_info->border_vec[i]), *(input_real + rate * p_frame_info->border_vec[i]), @@ -740,6 +761,10 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, rate * p_frame_info->border_vec[i + 1] - rate * p_frame_info->border_vec[i], sub_band_start, num_subbands, frame_data->inter_temp_shape_mode[i]); + if (error_code != 0) + { + return error_code; + } for (l = rate * p_frame_info->border_vec[i]; l < rate * p_frame_info->border_vec[i + 1]; l++) { @@ -762,6 +787,7 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, } } } +} for (i = 0; i < 64; i++) { (*harm_flag_varlen_prev)[i] = (*harm_flag_prev)[i]; @@ -777,6 +803,7 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, frame_data->env_short_flag_prev = -1; } + if (ldmps_present != 1) { memcpy((VOID *)&frame_data->str_frame_info_prev, (VOID *)&frame_data->str_frame_info_details, sizeof(ia_frame_info_struct)); @@ -798,6 +825,7 @@ WORD32 ixheaacd_sbr_env_calc(ia_sbr_frame_info_data_struct *frame_data, num_nf_bands + i]; } +} frame_data->harm_index = harm_index; frame_data->phase_index = phase_index; @@ -911,10 +939,10 @@ IA_ERRORCODE ixheaacd_createlimiterbands( return IA_NO_ERROR; } -VOID ixheaacd_apply_inter_tes(FLOAT32 *qmf_real1, FLOAT32 *qmf_imag1, - FLOAT32 *qmf_real, FLOAT32 *qmf_imag, - WORD32 num_sample, WORD32 sub_band_start, - WORD32 num_subband, WORD32 gamma_idx) { +WORD32 ixheaacd_apply_inter_tes(FLOAT32 *qmf_real1, FLOAT32 *qmf_imag1, + FLOAT32 *qmf_real, FLOAT32 *qmf_imag, + WORD32 num_sample, WORD32 sub_band_start, + WORD32 num_subband, WORD32 gamma_idx) { WORD32 sub_band_end = sub_band_start + num_subband; FLOAT32 subsample_power_high[TIMESLOT_BUFFER_SIZE], subsample_power_low[TIMESLOT_BUFFER_SIZE]; @@ -925,6 +953,10 @@ VOID ixheaacd_apply_inter_tes(FLOAT32 *qmf_real1, FLOAT32 *qmf_imag1, FLOAT32 gamma = ixheaacd_q_gamma_table[gamma_idx]; WORD32 i, j; + if (num_sample > TIMESLOT_BUFFER_SIZE) + { + return IA_FATAL_ERROR; + } if (gamma > 0) { for (i = 0; i < num_sample; i++) { memcpy(&qmf_real[64 * i], &qmf_real1[64 * i], @@ -978,4 +1010,5 @@ VOID ixheaacd_apply_inter_tes(FLOAT32 *qmf_real1, FLOAT32 *qmf_imag1, } } } + return 0; } |