xref: /aosp_15_r20/external/libxaac/encoder/ixheaace_tns_init.c (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker  *                                                                            *
3*15dc779aSAndroid Build Coastguard Worker  * Copyright (C) 2023 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker  *
5*15dc779aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker  *
9*15dc779aSAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker  *
11*15dc779aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker  * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker  *
17*15dc779aSAndroid Build Coastguard Worker  *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker  */
20*15dc779aSAndroid Build Coastguard Worker 
21*15dc779aSAndroid Build Coastguard Worker #include <math.h>
22*15dc779aSAndroid Build Coastguard Worker #include <stdlib.h>
23*15dc779aSAndroid Build Coastguard Worker 
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
25*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.h"
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_aac_constants.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_error_standards.h"
28*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops32.h"
29*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops16.h"
30*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops40.h"
31*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops.h"
32*15dc779aSAndroid Build Coastguard Worker 
33*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_common_rom.h"
34*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_psy_const.h"
35*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_tns.h"
36*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_tns_params.h"
37*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_rom.h"
38*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_bitbuffer.h"
39*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_psy_configuration.h"
40*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_tns_func.h"
41*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_common_utils.h"
42*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_freq_to_band_with_rounding(WORD32 freq,WORD32 fs,WORD32 num_bands,const WORD32 * ptr_band_start_offset)43*15dc779aSAndroid Build Coastguard Worker static WORD32 ia_enhaacplus_enc_freq_to_band_with_rounding(WORD32 freq, WORD32 fs,
44*15dc779aSAndroid Build Coastguard Worker                                                            WORD32 num_bands,
45*15dc779aSAndroid Build Coastguard Worker                                                            const WORD32 *ptr_band_start_offset) {
46*15dc779aSAndroid Build Coastguard Worker   WORD32 line_num, band;
47*15dc779aSAndroid Build Coastguard Worker 
48*15dc779aSAndroid Build Coastguard Worker   line_num = (freq * ptr_band_start_offset[num_bands] * 4 / fs + 1) / 2;
49*15dc779aSAndroid Build Coastguard Worker 
50*15dc779aSAndroid Build Coastguard Worker   /* freq > fs/2 */
51*15dc779aSAndroid Build Coastguard Worker   if (line_num >= ptr_band_start_offset[num_bands]) {
52*15dc779aSAndroid Build Coastguard Worker     return num_bands;
53*15dc779aSAndroid Build Coastguard Worker   }
54*15dc779aSAndroid Build Coastguard Worker 
55*15dc779aSAndroid Build Coastguard Worker   /* find band the line number lies in */
56*15dc779aSAndroid Build Coastguard Worker   /* bandStartOffset[] */
57*15dc779aSAndroid Build Coastguard Worker   for (band = 0; band < num_bands; band++) {
58*15dc779aSAndroid Build Coastguard Worker     if (ptr_band_start_offset[band + 1] > line_num) break;
59*15dc779aSAndroid Build Coastguard Worker   }
60*15dc779aSAndroid Build Coastguard Worker 
61*15dc779aSAndroid Build Coastguard Worker   /* round to nearest band border */
62*15dc779aSAndroid Build Coastguard Worker   if (line_num - ptr_band_start_offset[band] > ptr_band_start_offset[band + 1] - line_num) {
63*15dc779aSAndroid Build Coastguard Worker     band++;
64*15dc779aSAndroid Build Coastguard Worker   }
65*15dc779aSAndroid Build Coastguard Worker 
66*15dc779aSAndroid Build Coastguard Worker   return band;
67*15dc779aSAndroid Build Coastguard Worker }
68*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_calc_gauss_window(FLOAT32 * ptr_win,const WORD16 win_size,const WORD32 sampling_rate,const WORD16 block_type,const FLOAT32 time_resolution)69*15dc779aSAndroid Build Coastguard Worker static VOID ia_enhaacplus_enc_calc_gauss_window(FLOAT32 *ptr_win, const WORD16 win_size,
70*15dc779aSAndroid Build Coastguard Worker                                                 const WORD32 sampling_rate,
71*15dc779aSAndroid Build Coastguard Worker                                                 const WORD16 block_type,
72*15dc779aSAndroid Build Coastguard Worker                                                 const FLOAT32 time_resolution) {
73*15dc779aSAndroid Build Coastguard Worker   WORD16 i;
74*15dc779aSAndroid Build Coastguard Worker 
75*15dc779aSAndroid Build Coastguard Worker   FLOAT32 accu_gauss_exp;
76*15dc779aSAndroid Build Coastguard Worker   accu_gauss_exp = (sampling_rate * time_resolution) * PI_BY_1000;
77*15dc779aSAndroid Build Coastguard Worker 
78*15dc779aSAndroid Build Coastguard Worker   if (block_type != SHORT_WINDOW) {
79*15dc779aSAndroid Build Coastguard Worker     accu_gauss_exp = (FLOAT32)(accu_gauss_exp / FRAME_LEN_1024);
80*15dc779aSAndroid Build Coastguard Worker   } else {
81*15dc779aSAndroid Build Coastguard Worker     accu_gauss_exp = (FLOAT32)(accu_gauss_exp / FRAME_LEN_SHORT_128);
82*15dc779aSAndroid Build Coastguard Worker   }
83*15dc779aSAndroid Build Coastguard Worker 
84*15dc779aSAndroid Build Coastguard Worker   accu_gauss_exp = -(accu_gauss_exp * 0.5f * accu_gauss_exp);
85*15dc779aSAndroid Build Coastguard Worker 
86*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < win_size; i++) {
87*15dc779aSAndroid Build Coastguard Worker     ptr_win[i] = (FLOAT32)exp(accu_gauss_exp * (i + 0.5) * (i + 0.5));
88*15dc779aSAndroid Build Coastguard Worker   }
89*15dc779aSAndroid Build Coastguard Worker }
90*15dc779aSAndroid Build Coastguard Worker 
91*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE
ia_enhaacplus_enc_init_tns_configuration(WORD32 bit_rate,WORD32 sample_rate,WORD32 channels,ixheaace_temporal_noise_shaping_config * pstr_tns_config,ixheaace_psy_configuration_long * pstr_psy_config,WORD32 active,ixheaace_temporal_noise_shaping_tables * pstr_tns_tab,WORD32 frame_length,WORD32 aot)92*15dc779aSAndroid Build Coastguard Worker ia_enhaacplus_enc_init_tns_configuration(WORD32 bit_rate, WORD32 sample_rate, WORD32 channels,
93*15dc779aSAndroid Build Coastguard Worker                                          ixheaace_temporal_noise_shaping_config *pstr_tns_config,
94*15dc779aSAndroid Build Coastguard Worker                                          ixheaace_psy_configuration_long *pstr_psy_config,
95*15dc779aSAndroid Build Coastguard Worker                                          WORD32 active,
96*15dc779aSAndroid Build Coastguard Worker                                          ixheaace_temporal_noise_shaping_tables *pstr_tns_tab,
97*15dc779aSAndroid Build Coastguard Worker                                          WORD32 frame_length, WORD32 aot)
98*15dc779aSAndroid Build Coastguard Worker 
99*15dc779aSAndroid Build Coastguard Worker {
100*15dc779aSAndroid Build Coastguard Worker   IA_ERRORCODE error;
101*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->max_order = TEMPORAL_NOISE_SHAPING_MAX_ORDER;
102*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_start_freq = TEMPORAL_NOISE_SHAPING_START_FREQ;
103*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->coef_res = TEMPORAL_NOISE_SHAPING_COEF_RES;
104*15dc779aSAndroid Build Coastguard Worker 
105*15dc779aSAndroid Build Coastguard Worker   error = ia_enhaacplus_enc_get_tns_param(&pstr_tns_config->conf_tab, bit_rate / channels,
106*15dc779aSAndroid Build Coastguard Worker                                           channels, LONG_WINDOW, pstr_tns_tab->tns_info_tab,
107*15dc779aSAndroid Build Coastguard Worker                                           sizeof(pstr_tns_tab->tns_info_tab));
108*15dc779aSAndroid Build Coastguard Worker 
109*15dc779aSAndroid Build Coastguard Worker   if (error != IA_NO_ERROR) {
110*15dc779aSAndroid Build Coastguard Worker     return error;
111*15dc779aSAndroid Build Coastguard Worker   }
112*15dc779aSAndroid Build Coastguard Worker 
113*15dc779aSAndroid Build Coastguard Worker   ia_enhaacplus_enc_calc_gauss_window(pstr_tns_config->acf_window_float,
114*15dc779aSAndroid Build Coastguard Worker                                       (const WORD16)(pstr_tns_config->max_order + 1), sample_rate,
115*15dc779aSAndroid Build Coastguard Worker                                       LONG_WINDOW, pstr_tns_config->conf_tab.tns_time_resolution
116*15dc779aSAndroid Build Coastguard Worker 
117*15dc779aSAndroid Build Coastguard Worker   );
118*15dc779aSAndroid Build Coastguard Worker 
119*15dc779aSAndroid Build Coastguard Worker   ia_enhaacplus_enc_get_tns_max_bands(
120*15dc779aSAndroid Build Coastguard Worker       sample_rate, LONG_WINDOW, &pstr_tns_config->tns_max_sfb, pstr_tns_tab->tns_max_bands_table,
121*15dc779aSAndroid Build Coastguard Worker       sizeof(pstr_tns_tab->tns_max_bands_table), aot, frame_length);
122*15dc779aSAndroid Build Coastguard Worker 
123*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_active = 1;
124*15dc779aSAndroid Build Coastguard Worker 
125*15dc779aSAndroid Build Coastguard Worker   if (active == 0) {
126*15dc779aSAndroid Build Coastguard Worker     pstr_tns_config->tns_active = 0;
127*15dc779aSAndroid Build Coastguard Worker   }
128*15dc779aSAndroid Build Coastguard Worker 
129*15dc779aSAndroid Build Coastguard Worker   /*now calc band and line borders */
130*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_stop_band = MIN(pstr_psy_config->sfb_cnt, pstr_tns_config->tns_max_sfb);
131*15dc779aSAndroid Build Coastguard Worker 
132*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_stop_line = pstr_psy_config->sfb_offsets[pstr_tns_config->tns_stop_band];
133*15dc779aSAndroid Build Coastguard Worker 
134*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_start_band = ia_enhaacplus_enc_freq_to_band_with_rounding(
135*15dc779aSAndroid Build Coastguard Worker       pstr_tns_config->tns_start_freq, sample_rate, pstr_psy_config->sfb_cnt,
136*15dc779aSAndroid Build Coastguard Worker       pstr_psy_config->sfb_offsets);
137*15dc779aSAndroid Build Coastguard Worker 
138*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_modify_begin_cb = ia_enhaacplus_enc_freq_to_band_with_rounding(
139*15dc779aSAndroid Build Coastguard Worker       TEMPORAL_NOISE_SHAPING_MODIFY_BEGIN, sample_rate, pstr_psy_config->sfb_cnt,
140*15dc779aSAndroid Build Coastguard Worker       pstr_psy_config->sfb_offsets);
141*15dc779aSAndroid Build Coastguard Worker 
142*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_ratio_patch_lowest_cb = ia_enhaacplus_enc_freq_to_band_with_rounding(
143*15dc779aSAndroid Build Coastguard Worker       RATIO_PATCH_LOWER_BORDER, sample_rate, pstr_psy_config->sfb_cnt,
144*15dc779aSAndroid Build Coastguard Worker       pstr_psy_config->sfb_offsets);
145*15dc779aSAndroid Build Coastguard Worker 
146*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_start_line = pstr_psy_config->sfb_offsets[pstr_tns_config->tns_start_band];
147*15dc779aSAndroid Build Coastguard Worker 
148*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->lpc_stop_band = ia_enhaacplus_enc_freq_to_band_with_rounding(
149*15dc779aSAndroid Build Coastguard Worker       pstr_tns_config->conf_tab.lpc_stop_freq, sample_rate, pstr_psy_config->sfb_cnt,
150*15dc779aSAndroid Build Coastguard Worker       pstr_psy_config->sfb_offsets);
151*15dc779aSAndroid Build Coastguard Worker 
152*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->lpc_stop_band =
153*15dc779aSAndroid Build Coastguard Worker       MIN(pstr_tns_config->lpc_stop_band, pstr_psy_config->sfb_active);
154*15dc779aSAndroid Build Coastguard Worker 
155*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->lpc_stop_line = pstr_psy_config->sfb_offsets[pstr_tns_config->lpc_stop_band];
156*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->lpc_start_band = ia_enhaacplus_enc_freq_to_band_with_rounding(
157*15dc779aSAndroid Build Coastguard Worker       pstr_tns_config->conf_tab.lpc_start_freq, sample_rate, pstr_psy_config->sfb_cnt,
158*15dc779aSAndroid Build Coastguard Worker       pstr_psy_config->sfb_offsets);
159*15dc779aSAndroid Build Coastguard Worker 
160*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->lpc_start_line = pstr_psy_config->sfb_offsets[pstr_tns_config->lpc_start_band];
161*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->threshold = pstr_tns_config->conf_tab.thresh_on;
162*15dc779aSAndroid Build Coastguard Worker 
163*15dc779aSAndroid Build Coastguard Worker   return IA_NO_ERROR;
164*15dc779aSAndroid Build Coastguard Worker }
165*15dc779aSAndroid Build Coastguard Worker 
ia_enhaacplus_enc_init_tns_configuration_short(WORD32 bit_rate,WORD32 sample_rate,WORD32 channels,ixheaace_temporal_noise_shaping_config * pstr_tns_config,ixheaace_psy_configuration_short * pstr_psy_config,WORD32 active,ixheaace_temporal_noise_shaping_tables * pstr_tns_tab,WORD32 frame_length,WORD32 aot)166*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ia_enhaacplus_enc_init_tns_configuration_short(
167*15dc779aSAndroid Build Coastguard Worker     WORD32 bit_rate, WORD32 sample_rate, WORD32 channels,
168*15dc779aSAndroid Build Coastguard Worker     ixheaace_temporal_noise_shaping_config *pstr_tns_config,
169*15dc779aSAndroid Build Coastguard Worker     ixheaace_psy_configuration_short *pstr_psy_config, WORD32 active,
170*15dc779aSAndroid Build Coastguard Worker     ixheaace_temporal_noise_shaping_tables *pstr_tns_tab, WORD32 frame_length, WORD32 aot) {
171*15dc779aSAndroid Build Coastguard Worker   IA_ERRORCODE error = IA_NO_ERROR;
172*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->max_order = TEMPORAL_NOISE_SHAPING_MAX_ORDER_SHORT;
173*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_start_freq = TEMPORAL_NOISE_SHAPING_START_FREQ_SHORT;
174*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->coef_res = TEMPORAL_NOISE_SHAPING_COEF_RES_SHORT;
175*15dc779aSAndroid Build Coastguard Worker 
176*15dc779aSAndroid Build Coastguard Worker   error = ia_enhaacplus_enc_get_tns_param(&pstr_tns_config->conf_tab, bit_rate / channels,
177*15dc779aSAndroid Build Coastguard Worker                                           channels, SHORT_WINDOW, pstr_tns_tab->tns_info_tab,
178*15dc779aSAndroid Build Coastguard Worker                                           sizeof(pstr_tns_tab->tns_info_tab));
179*15dc779aSAndroid Build Coastguard Worker   if (error != IA_NO_ERROR) {
180*15dc779aSAndroid Build Coastguard Worker     return error;
181*15dc779aSAndroid Build Coastguard Worker   }
182*15dc779aSAndroid Build Coastguard Worker   ia_enhaacplus_enc_calc_gauss_window(
183*15dc779aSAndroid Build Coastguard Worker       pstr_tns_config->acf_window_float, (const WORD16)(pstr_tns_config->max_order + 1),
184*15dc779aSAndroid Build Coastguard Worker       sample_rate, SHORT_WINDOW, pstr_tns_config->conf_tab.tns_time_resolution);
185*15dc779aSAndroid Build Coastguard Worker 
186*15dc779aSAndroid Build Coastguard Worker   ia_enhaacplus_enc_get_tns_max_bands(
187*15dc779aSAndroid Build Coastguard Worker       sample_rate, SHORT_WINDOW, &pstr_tns_config->tns_max_sfb, pstr_tns_tab->tns_max_bands_table,
188*15dc779aSAndroid Build Coastguard Worker       sizeof(pstr_tns_tab->tns_max_bands_table), aot, frame_length);
189*15dc779aSAndroid Build Coastguard Worker 
190*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_active = 1;
191*15dc779aSAndroid Build Coastguard Worker 
192*15dc779aSAndroid Build Coastguard Worker   if (active == 0) {
193*15dc779aSAndroid Build Coastguard Worker     pstr_tns_config->tns_active = 0;
194*15dc779aSAndroid Build Coastguard Worker   }
195*15dc779aSAndroid Build Coastguard Worker 
196*15dc779aSAndroid Build Coastguard Worker   /*now calc band and line borders */
197*15dc779aSAndroid Build Coastguard Worker 
198*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_stop_band = MIN(pstr_psy_config->sfb_cnt, pstr_tns_config->tns_max_sfb);
199*15dc779aSAndroid Build Coastguard Worker 
200*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_stop_line = pstr_psy_config->sfb_offsets[pstr_tns_config->tns_stop_band];
201*15dc779aSAndroid Build Coastguard Worker 
202*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_start_band = ia_enhaacplus_enc_freq_to_band_with_rounding(
203*15dc779aSAndroid Build Coastguard Worker       pstr_tns_config->tns_start_freq, sample_rate, pstr_psy_config->sfb_cnt,
204*15dc779aSAndroid Build Coastguard Worker       pstr_psy_config->sfb_offsets);
205*15dc779aSAndroid Build Coastguard Worker 
206*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_modify_begin_cb = ia_enhaacplus_enc_freq_to_band_with_rounding(
207*15dc779aSAndroid Build Coastguard Worker       TEMPORAL_NOISE_SHAPING_MODIFY_BEGIN, sample_rate, pstr_psy_config->sfb_cnt,
208*15dc779aSAndroid Build Coastguard Worker       pstr_psy_config->sfb_offsets);
209*15dc779aSAndroid Build Coastguard Worker 
210*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_ratio_patch_lowest_cb = ia_enhaacplus_enc_freq_to_band_with_rounding(
211*15dc779aSAndroid Build Coastguard Worker       RATIO_PATCH_LOWER_BORDER, sample_rate, pstr_psy_config->sfb_cnt,
212*15dc779aSAndroid Build Coastguard Worker       pstr_psy_config->sfb_offsets);
213*15dc779aSAndroid Build Coastguard Worker 
214*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->tns_start_line = pstr_psy_config->sfb_offsets[pstr_tns_config->tns_start_band];
215*15dc779aSAndroid Build Coastguard Worker 
216*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->lpc_stop_band = ia_enhaacplus_enc_freq_to_band_with_rounding(
217*15dc779aSAndroid Build Coastguard Worker       pstr_tns_config->conf_tab.lpc_stop_freq, sample_rate, pstr_psy_config->sfb_cnt,
218*15dc779aSAndroid Build Coastguard Worker       pstr_psy_config->sfb_offsets);
219*15dc779aSAndroid Build Coastguard Worker 
220*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->lpc_stop_band =
221*15dc779aSAndroid Build Coastguard Worker       MIN(pstr_tns_config->lpc_stop_band, pstr_psy_config->sfb_active);
222*15dc779aSAndroid Build Coastguard Worker 
223*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->lpc_stop_line = pstr_psy_config->sfb_offsets[pstr_tns_config->lpc_stop_band];
224*15dc779aSAndroid Build Coastguard Worker 
225*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->lpc_start_band = ia_enhaacplus_enc_freq_to_band_with_rounding(
226*15dc779aSAndroid Build Coastguard Worker       pstr_tns_config->conf_tab.lpc_start_freq, sample_rate, pstr_psy_config->sfb_cnt,
227*15dc779aSAndroid Build Coastguard Worker       pstr_psy_config->sfb_offsets);
228*15dc779aSAndroid Build Coastguard Worker 
229*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->lpc_start_line = pstr_psy_config->sfb_offsets[pstr_tns_config->lpc_start_band];
230*15dc779aSAndroid Build Coastguard Worker   pstr_tns_config->threshold = pstr_tns_config->conf_tab.thresh_on;
231*15dc779aSAndroid Build Coastguard Worker 
232*15dc779aSAndroid Build Coastguard Worker   return IA_NO_ERROR;
233*15dc779aSAndroid Build Coastguard Worker }
234*15dc779aSAndroid Build Coastguard Worker 
235*15dc779aSAndroid Build Coastguard Worker const WORD32 ia_enhaacplus_enc_m_log2_table[INT_BITS] = {
236*15dc779aSAndroid Build Coastguard Worker     0x00000000, 0x4ae00d00, 0x2934f080, 0x15c01a3f, 0x0b31fb80, 0x05aeb4e0, 0x02dcf2d0,
237*15dc779aSAndroid Build Coastguard Worker     0x016fe50c, 0x00b84e23, 0x005c3e10, 0x002e24ca, 0x001713d6, 0x000b8a47, 0x0005c53b,
238*15dc779aSAndroid Build Coastguard Worker     0x0002e2a3, 0x00017153, 0x0000b8aa, 0x00005c55, 0x00002e2b, 0x00001715, 0x00000b8b,
239*15dc779aSAndroid Build Coastguard Worker     0x000005c5, 0x000002e3, 0x00000171, 0x000000b9, 0x0000005c, 0x0000002e, 0x00000017,
240*15dc779aSAndroid Build Coastguard Worker     0x0000000c, 0x00000006, 0x00000003, 0x00000001};
241