From 05c7402a06c8f5053e0daeaa5faad9e03ad6c2be Mon Sep 17 00:00:00 2001 From: Sushanth Patil Date: Tue, 29 Oct 2019 11:39:44 +0530 Subject: Optimisation changes in esbr synthesis filter block Some computation were not required when mps and sbr are present. Added a check to remove them. Bug: 154143053 Test: xaacdec Change-Id: I5f7722b6e045031df0f37279441946f014953443 --- decoder/ixheaacd_sbr_dec.c | 148 ++++++++++++++++++++++----------------------- 1 file changed, 74 insertions(+), 74 deletions(-) (limited to 'decoder') diff --git a/decoder/ixheaacd_sbr_dec.c b/decoder/ixheaacd_sbr_dec.c index 684b69d..a8ac0b6 100644 --- a/decoder/ixheaacd_sbr_dec.c +++ b/decoder/ixheaacd_sbr_dec.c @@ -450,26 +450,6 @@ VOID ixheaacd_esbr_synthesis_filt_block( ia_sbr_frame_info_data_struct *ptr_frame_data, WORD32 apply_processing, FLOAT32 **qmf_buf_real, FLOAT32 **qmf_buf_imag, WORD32 stereo_config_idx, ia_sbr_tables_struct *sbr_tables_ptr, WORD32 mps_sbr_flag, WORD32 ch_fac) { - WORD32 i, k, p1; - WORD32 *ptr_filt_states; - WORD32 *ptr_filt_states_1; - WORD32 *ptr_filt_states_2; - WORD32 *filter_l; - WORD32 *ploc_qmf_buf_real; - WORD32 *ploc_qmf_buf_imag; - WORD32 out_scalefactor; - WORD32 sixty4; - WORD32 no_synthesis_channels; - WORD32 ixheaacd_drc_offset; - FLOAT32 *syn_buffer; - WORD32 *local_qmf_buffer = ptr_sbr_dec->sbr_scratch_local; - WORD32 *time_out = &(ptr_sbr_dec->sbr_scratch_local[128]); - - ia_sbr_qmf_filter_bank_struct *qmf_bank = - &ptr_sbr_dec->str_synthesis_qmf_bank; - ia_qmf_dec_tables_struct *qmf_dec_tables_ptr = - sbr_tables_ptr->qmf_dec_tables_ptr; - if (!mps_sbr_flag) { ixheaacd_esbr_synthesis_regrp(&qmf_buf_real[0][0], &qmf_buf_imag[0][0], ptr_sbr_dec, ptr_frame_data, ptr_header_data, @@ -479,74 +459,94 @@ VOID ixheaacd_esbr_synthesis_filt_block( ptr_sbr_dec, stereo_config_idx); } - out_scalefactor = 5; - qmf_bank->no_channels = 64; - qmf_bank->esbr_cos_twiddle = - (WORD32 *)qmf_dec_tables_ptr->esbr_sin_cos_twiddle_l64; - qmf_bank->esbr_alt_sin_twiddle = - (WORD32 *)qmf_dec_tables_ptr->esbr_alt_sin_twiddle_l64; - - qmf_bank->filter_pos_syn_32 += - qmf_dec_tables_ptr->esbr_qmf_c - qmf_bank->p_filter_32; - qmf_bank->p_filter_32 = qmf_dec_tables_ptr->esbr_qmf_c; - - sixty4 = NO_SYNTHESIS_CHANNELS; + if (stereo_config_idx <= 0) { + WORD32 i, k, p1; + WORD32 *ptr_filt_states; + WORD32 *ptr_filt_states_1; + WORD32 *ptr_filt_states_2; + WORD32 *filter_l; + WORD32 *ploc_qmf_buf_real; + WORD32 *ploc_qmf_buf_imag; + WORD32 out_scalefactor; + WORD32 sixty4; + WORD32 no_synthesis_channels; + WORD32 ixheaacd_drc_offset; + FLOAT32 *syn_buffer; + WORD32 *local_qmf_buffer = ptr_sbr_dec->sbr_scratch_local; + WORD32 *time_out = &(ptr_sbr_dec->sbr_scratch_local[128]); + ia_sbr_qmf_filter_bank_struct *qmf_bank = + &ptr_sbr_dec->str_synthesis_qmf_bank; + ia_qmf_dec_tables_struct *qmf_dec_tables_ptr = + sbr_tables_ptr->qmf_dec_tables_ptr; + out_scalefactor = 5; + qmf_bank->no_channels = 64; + qmf_bank->esbr_cos_twiddle = + (WORD32 *)qmf_dec_tables_ptr->esbr_sin_cos_twiddle_l64; + qmf_bank->esbr_alt_sin_twiddle = + (WORD32 *)qmf_dec_tables_ptr->esbr_alt_sin_twiddle_l64; + + qmf_bank->filter_pos_syn_32 += + qmf_dec_tables_ptr->esbr_qmf_c - qmf_bank->p_filter_32; + qmf_bank->p_filter_32 = qmf_dec_tables_ptr->esbr_qmf_c; + + sixty4 = NO_SYNTHESIS_CHANNELS; + + ptr_filt_states = qmf_bank->filter_states_32; + + no_synthesis_channels = qmf_bank->no_channels; + ptr_filt_states_1 = &ptr_filt_states[0]; + ptr_filt_states_2 = ptr_filt_states_1 + no_synthesis_channels; + + filter_l = qmf_bank->filter_pos_syn_32; + + p1 = 0; + + ixheaacd_drc_offset = qmf_bank->ixheaacd_drc_offset; - ptr_filt_states = qmf_bank->filter_states_32; + for (i = 0; i < ptr_sbr_dec->str_codec_qmf_bank.num_time_slots; i++) { + for (k = 0; k < 64; k++) { + local_qmf_buffer[k + 0] = (WORD32)(qmf_buf_real[i][k] * 64); + local_qmf_buffer[k + 64] = (WORD32)(qmf_buf_imag[i][k] * 64); + } + ploc_qmf_buf_real = local_qmf_buffer; + ploc_qmf_buf_imag = local_qmf_buffer + 64; - no_synthesis_channels = qmf_bank->no_channels; - ptr_filt_states_1 = &ptr_filt_states[0]; - ptr_filt_states_2 = ptr_filt_states_1 + no_synthesis_channels; + ixheaacd_esbr_inv_modulation(ploc_qmf_buf_real, + &ptr_sbr_dec->str_synthesis_qmf_bank, + sbr_tables_ptr->qmf_dec_tables_ptr); - filter_l = qmf_bank->filter_pos_syn_32; + ixheaacd_shiftrountine_with_rnd_hq(ploc_qmf_buf_real, ploc_qmf_buf_imag, + &ptr_filt_states[ixheaacd_drc_offset], + no_synthesis_channels, + out_scalefactor + 1); - p1 = 0; + ixheaacd_esbr_qmfsyn64_winadd(ptr_filt_states_1, ptr_filt_states_2, + filter_l, &time_out[0], ch_fac); - ixheaacd_drc_offset = qmf_bank->ixheaacd_drc_offset; + syn_buffer = ptr_sbr_dec->time_sample_buf + i * 64; + for (k = 0; k < 64; k++) { + syn_buffer[k] = (FLOAT32)time_out[k] / (1 << 16); + } - for (i = 0; i < ptr_sbr_dec->str_codec_qmf_bank.num_time_slots; i++) { - for (k = 0; k < 64; k++) { - local_qmf_buffer[k + 0] = (WORD32)(qmf_buf_real[i][k] * 64); - local_qmf_buffer[k + 64] = (WORD32)(qmf_buf_imag[i][k] * 64); - } - ploc_qmf_buf_real = local_qmf_buffer; - ploc_qmf_buf_imag = local_qmf_buffer + 64; + ptr_filt_states_1 += sixty4; + ptr_filt_states_2 -= sixty4; + sixty4 = -sixty4; + ixheaacd_drc_offset -= 128; - ixheaacd_esbr_inv_modulation(ploc_qmf_buf_real, - &ptr_sbr_dec->str_synthesis_qmf_bank, - sbr_tables_ptr->qmf_dec_tables_ptr); + if (ixheaacd_drc_offset < 0) ixheaacd_drc_offset += 1280; - ixheaacd_shiftrountine_with_rnd_hq(ploc_qmf_buf_real, ploc_qmf_buf_imag, - &ptr_filt_states[ixheaacd_drc_offset], - no_synthesis_channels, - out_scalefactor + 1); + filter_l += 64; - ixheaacd_esbr_qmfsyn64_winadd(ptr_filt_states_1, ptr_filt_states_2, - filter_l, &time_out[0], ch_fac); + if (filter_l == qmf_bank->p_filter_32 + 640) + filter_l = (WORD32 *)qmf_bank->p_filter_32; - syn_buffer = ptr_sbr_dec->time_sample_buf + i * 64; - for (k = 0; k < 64; k++) { - syn_buffer[k] = (FLOAT32)time_out[k] / (1 << 16); + p1 += no_synthesis_channels; } - ptr_filt_states_1 += sixty4; - ptr_filt_states_2 -= sixty4; - sixty4 = -sixty4; - ixheaacd_drc_offset -= 128; - - if (ixheaacd_drc_offset < 0) ixheaacd_drc_offset += 1280; - - filter_l += 64; - - if (filter_l == qmf_bank->p_filter_32 + 640) - filter_l = (WORD32 *)qmf_bank->p_filter_32; - - p1 += no_synthesis_channels; + qmf_bank->filter_pos_syn_32 = filter_l; + qmf_bank->ixheaacd_drc_offset = ixheaacd_drc_offset; } - qmf_bank->filter_pos_syn_32 = filter_l; - qmf_bank->ixheaacd_drc_offset = ixheaacd_drc_offset; - if (!mps_sbr_flag) ptr_frame_data->reset_flag = 0; if (apply_processing && !mps_sbr_flag) { -- cgit v1.2.3