diff options
author | bmdivya100655 <89966460+bmdivya100655@users.noreply.github.com> | 2023-05-22 20:11:52 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-22 20:11:52 +0530 |
commit | 088122e74858fcefb74ada4e7f2cf20307cb0057 (patch) | |
tree | 8e7686fda2f4dfe0056970d6d9fc5a5fc48c91a5 /encoder/ixheaace_sbr_code_envelope.c | |
parent | 48a1ff21ba386043aef45c233e9cac50ce3cbc86 (diff) | |
download | libxaac-088122e74858fcefb74ada4e7f2cf20307cb0057.tar.gz |
Combined Workspace for Encoder and Decoder (#33)
* Combined Workspace for Encoder and Decoder
* Addressed review comments and some minor edits
---------
Co-authored-by: Divya B M <100655@ittiam.com>
Diffstat (limited to 'encoder/ixheaace_sbr_code_envelope.c')
-rw-r--r-- | encoder/ixheaace_sbr_code_envelope.c | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/encoder/ixheaace_sbr_code_envelope.c b/encoder/ixheaace_sbr_code_envelope.c new file mode 100644 index 0000000..6e33515 --- /dev/null +++ b/encoder/ixheaace_sbr_code_envelope.c @@ -0,0 +1,191 @@ +/****************************************************************************** + * * + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ***************************************************************************** + * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore + */ + +#include <string.h> + +#include "ixheaac_type_def.h" +#include "ixheaac_constants.h" +#include "ixheaace_aac_constants.h" +#include "ixheaac_basic_ops32.h" +#include "ixheaac_basic_ops16.h" +#include "ixheaac_basic_ops40.h" +#include "ixheaac_basic_ops.h" +#include "ixheaace_error_codes.h" +#include "ixheaac_error_standards.h" +#include "ixheaace_sbr_header.h" +#include "ixheaace_sbr_def.h" +#include "ixheaace_resampler.h" +#include "ixheaace_sbr_rom.h" +#include "ixheaace_common_rom.h" +#include "ixheaace_sbr_main.h" +#include "ixheaace_sbr_frame_info_gen.h" + +#include "ixheaace_sbr_code_envelope.h" +#include "ixheaace_sbr_qmf_enc.h" +#include "ixheaace_sbr_tran_det.h" +#include "ixheaace_sbr_env_est.h" +#include "ixheaace_sbr_hbe.h" +#include "ixheaace_sbr_missing_harmonics_det.h" +#include "ixheaace_sbr_inv_filtering_estimation.h" +#include "ixheaace_sbr_noise_floor_est.h" + +#include "ixheaace_sbr_ton_corr.h" +#include "ixheaace_sbr.h" +#include "ixheaace_common_utils.h" + +IA_ERRORCODE +ixheaace_init_sbr_huffman_tabs(ixheaace_pstr_sbr_env_data pstr_sbr_env, + ixheaace_pstr_sbr_code_envelope pstr_code_env, + ixheaace_pstr_sbr_code_envelope pstr_noise, + ixheaace_amp_res amp_res, + ixheaace_str_sbr_huff_tabs *pstr_sbr_huff_tabs) { + pstr_sbr_env->init_sbr_amp_res = amp_res; + + switch (amp_res) { + case IXHEAACE_SBR_AMP_RES_3_0: + + pstr_sbr_env->ptr_huff_tab_lvl_time_c = pstr_sbr_huff_tabs->v_huff_env_lvl_c11t; + pstr_sbr_env->ptr_huff_tab_lvl_time_l = pstr_sbr_huff_tabs->v_huff_env_lvl_l11t; + pstr_sbr_env->ptr_huff_tab_bal_time_c = pstr_sbr_huff_tabs->book_sbr_env_bal_c11t; + pstr_sbr_env->ptr_huff_tab_bal_time_l = pstr_sbr_huff_tabs->book_sbr_env_bal_l11t; + + pstr_sbr_env->ptr_huff_tab_lvl_freq_c = pstr_sbr_huff_tabs->v_huff_env_lvl_c11f; + pstr_sbr_env->ptr_huff_tab_lvl_freq_l = pstr_sbr_huff_tabs->v_huff_env_lvl_l11f; + pstr_sbr_env->ptr_huff_tab_bal_freq_c = pstr_sbr_huff_tabs->book_sbr_env_bal_c11f; + pstr_sbr_env->ptr_huff_tab_bal_freq_l = pstr_sbr_huff_tabs->book_sbr_env_bal_l11f; + + pstr_sbr_env->ptr_huff_tab_time_c = pstr_sbr_huff_tabs->v_huff_env_lvl_c11t; + pstr_sbr_env->ptr_huff_tab_time_l = pstr_sbr_huff_tabs->v_huff_env_lvl_l11t; + pstr_sbr_env->ptr_huff_tab_freq_c = pstr_sbr_huff_tabs->v_huff_env_lvl_c11f; + pstr_sbr_env->ptr_huff_tab_freq_l = pstr_sbr_huff_tabs->v_huff_env_lvl_l11f; + + pstr_sbr_env->code_book_scf_lav_balance = CODE_BCK_SCF_LAV_BALANCE11; + pstr_sbr_env->code_book_scf_lav = CODE_BCK_SCF_LAV11; + + pstr_sbr_env->si_sbr_start_env_bits = SI_SBR_START_ENV_BITS_AMP_RES_3_0; + pstr_sbr_env->si_sbr_start_env_bits_balance = SI_SBR_START_ENV_BITS_BALANCE_AMP_RES_3_0; + break; + + case IXHEAACE_SBR_AMP_RES_1_5: + + pstr_sbr_env->ptr_huff_tab_lvl_time_c = pstr_sbr_huff_tabs->v_huff_env_lvl_c10t; + pstr_sbr_env->ptr_huff_tab_lvl_time_l = pstr_sbr_huff_tabs->v_huff_env_lvl_l10t; + pstr_sbr_env->ptr_huff_tab_bal_time_c = pstr_sbr_huff_tabs->book_sbr_env_bal_c10t; + pstr_sbr_env->ptr_huff_tab_bal_time_l = pstr_sbr_huff_tabs->book_sbr_env_bal_l10t; + + pstr_sbr_env->ptr_huff_tab_lvl_freq_c = pstr_sbr_huff_tabs->v_huff_env_lvl_c10f; + pstr_sbr_env->ptr_huff_tab_lvl_freq_l = pstr_sbr_huff_tabs->v_huff_env_lvl_l10f; + pstr_sbr_env->ptr_huff_tab_bal_freq_c = pstr_sbr_huff_tabs->book_sbr_env_bal_c10f; + pstr_sbr_env->ptr_huff_tab_bal_freq_l = pstr_sbr_huff_tabs->book_sbr_env_bal_l10f; + + pstr_sbr_env->ptr_huff_tab_time_c = pstr_sbr_huff_tabs->v_huff_env_lvl_c10t; + pstr_sbr_env->ptr_huff_tab_time_l = pstr_sbr_huff_tabs->v_huff_env_lvl_l10t; + pstr_sbr_env->ptr_huff_tab_freq_c = pstr_sbr_huff_tabs->v_huff_env_lvl_c10f; + pstr_sbr_env->ptr_huff_tab_freq_l = pstr_sbr_huff_tabs->v_huff_env_lvl_l10f; + + pstr_sbr_env->code_book_scf_lav_balance = CODE_BCK_SCF_LAV_BALANCE10; + pstr_sbr_env->code_book_scf_lav = CODE_BCK_SCF_LAV10; + + pstr_sbr_env->si_sbr_start_env_bits = SI_SBR_START_ENV_BITS_AMP_RES_1_5; + pstr_sbr_env->si_sbr_start_env_bits_balance = SI_SBR_START_ENV_BITS_BALANCE_AMP_RES_1_5; + break; + + default: + return IA_EXHAACE_EXE_FATAL_SBR_INVALID_AMP_RES; + break; + } + + pstr_sbr_env->ptr_huff_tab_noise_lvl_time_c = pstr_sbr_huff_tabs->v_huff_noise_lvl_c11t; + pstr_sbr_env->ptr_huff_tab_noise_lvl_time_l = pstr_sbr_huff_tabs->v_huff_noise_lvl_l11t; + pstr_sbr_env->ptr_huff_tab_noise_bal_time_c = pstr_sbr_huff_tabs->book_sbr_noise_bal_c11t; + pstr_sbr_env->ptr_huff_tab_noise_bal_time_l = pstr_sbr_huff_tabs->book_sbr_noise_bal_l11t; + + pstr_sbr_env->ptr_huff_tab_noise_lvl_freq_c = pstr_sbr_huff_tabs->v_huff_env_lvl_c11f; + pstr_sbr_env->ptr_huff_tab_noise_lvl_freq_l = pstr_sbr_huff_tabs->v_huff_env_lvl_l11f; + pstr_sbr_env->ptr_huff_tab_noise_bal_freq_c = pstr_sbr_huff_tabs->book_sbr_env_bal_c11f; + pstr_sbr_env->ptr_huff_tab_noise_bal_freq_l = pstr_sbr_huff_tabs->book_sbr_env_bal_l11f; + + pstr_sbr_env->ptr_huff_tab_noise_time_c = pstr_sbr_huff_tabs->v_huff_noise_lvl_c11t; + pstr_sbr_env->ptr_huff_tab_noise_time_l = pstr_sbr_huff_tabs->v_huff_noise_lvl_l11t; + pstr_sbr_env->ptr_huff_tab_noise_freq_c = pstr_sbr_huff_tabs->v_huff_env_lvl_c11f; + pstr_sbr_env->ptr_huff_tab_noise_freq_l = pstr_sbr_huff_tabs->v_huff_env_lvl_l11f; + + pstr_sbr_env->si_sbr_start_noise_bits = SI_SBR_START_NOISE_BITS_AMP_RES_3_0; + pstr_sbr_env->si_sbr_start_noise_bits_balance = SI_SBR_START_NOISE_BITS_BALANCE_AMP_RES_3_0; + + pstr_code_env->code_book_scf_lav_bal_time = pstr_sbr_env->code_book_scf_lav_balance; + pstr_code_env->code_book_scf_lav_bal_freq = pstr_sbr_env->code_book_scf_lav_balance; + pstr_code_env->code_book_scf_lav_lvl_time = pstr_sbr_env->code_book_scf_lav; + pstr_code_env->code_book_scf_lav_lvl_freq = pstr_sbr_env->code_book_scf_lav; + pstr_code_env->code_book_scf_lav_time = pstr_sbr_env->code_book_scf_lav; + pstr_code_env->code_book_scf_lav_freq = pstr_sbr_env->code_book_scf_lav; + + pstr_code_env->ptr_huff_tab_lvl_time_l = pstr_sbr_env->ptr_huff_tab_lvl_time_l; + pstr_code_env->ptr_huff_tab_bal_time_l = pstr_sbr_env->ptr_huff_tab_bal_time_l; + pstr_code_env->ptr_huff_tab_time_l = pstr_sbr_env->ptr_huff_tab_time_l; + pstr_code_env->ptr_huff_tab_lvl_freq_l = pstr_sbr_env->ptr_huff_tab_lvl_freq_l; + pstr_code_env->ptr_huff_tab_bal_freq_l = pstr_sbr_env->ptr_huff_tab_bal_freq_l; + pstr_code_env->ptr_huff_tab_freq_l = pstr_sbr_env->ptr_huff_tab_freq_l; + + pstr_code_env->code_book_scf_lav_freq = pstr_sbr_env->code_book_scf_lav; + pstr_code_env->code_book_scf_lav_time = pstr_sbr_env->code_book_scf_lav; + + pstr_code_env->start_bits = pstr_sbr_env->si_sbr_start_env_bits; + pstr_code_env->start_bits_balance = pstr_sbr_env->si_sbr_start_env_bits_balance; + + pstr_noise->code_book_scf_lav_bal_time = CODE_BCK_SCF_LAV_BALANCE11; + pstr_noise->code_book_scf_lav_bal_freq = CODE_BCK_SCF_LAV_BALANCE11; + pstr_noise->code_book_scf_lav_lvl_time = CODE_BCK_SCF_LAV11; + pstr_noise->code_book_scf_lav_lvl_freq = CODE_BCK_SCF_LAV11; + pstr_noise->code_book_scf_lav_time = CODE_BCK_SCF_LAV11; + pstr_noise->code_book_scf_lav_freq = CODE_BCK_SCF_LAV11; + + pstr_noise->ptr_huff_tab_lvl_time_l = pstr_sbr_env->ptr_huff_tab_noise_lvl_time_l; + pstr_noise->ptr_huff_tab_bal_time_l = pstr_sbr_env->ptr_huff_tab_noise_bal_time_l; + pstr_noise->ptr_huff_tab_time_l = pstr_sbr_env->ptr_huff_tab_noise_time_l; + pstr_noise->ptr_huff_tab_lvl_freq_l = pstr_sbr_env->ptr_huff_tab_noise_lvl_freq_l; + pstr_noise->ptr_huff_tab_bal_freq_l = pstr_sbr_env->ptr_huff_tab_noise_bal_freq_l; + pstr_noise->ptr_huff_tab_freq_l = pstr_sbr_env->ptr_huff_tab_noise_freq_l; + + pstr_noise->start_bits = pstr_sbr_env->si_sbr_start_noise_bits; + pstr_noise->start_bits_balance = pstr_sbr_env->si_sbr_start_noise_bits_balance; + + pstr_code_env->update = 0; + pstr_noise->update = 0; + + return IA_NO_ERROR; +} + +VOID ixheaace_create_sbr_code_envelope(ixheaace_pstr_sbr_code_envelope pstr_code_env, + WORD32 *num_sfb, WORD32 delta_t_across_frames, + FLOAT32 df_edge_first_env, FLOAT32 df_edge_incr) { + memset(pstr_code_env, 0, sizeof(ixheaace_str_sbr_code_envelope)); + + pstr_code_env->delta_t_across_frames = delta_t_across_frames; + pstr_code_env->df_edge_1st_env = df_edge_first_env; + pstr_code_env->df_edge_incr = df_edge_incr; + pstr_code_env->df_edge_incr_fac = 0; + pstr_code_env->update = 0; + pstr_code_env->num_scf[FREQ_RES_LOW] = num_sfb[FREQ_RES_LOW]; + pstr_code_env->num_scf[FREQ_RES_HIGH] = num_sfb[FREQ_RES_HIGH]; + + pstr_code_env->offset = + 2 * pstr_code_env->num_scf[FREQ_RES_LOW] - pstr_code_env->num_scf[FREQ_RES_HIGH]; +} |