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