xref: /aosp_15_r20/external/libxaac/decoder/ixheaacd_mps_blind.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 #include <string.h>
21*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
22*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_struct_def.h"
23*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_error_codes.h"
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_res_rom.h"
25*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_aac_struct.h"
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops32.h"
28*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_ops40.h"
29*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_bitbuffer.h"
30*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_common_rom.h"
31*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrdecsettings.h"
32*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_scale.h"
33*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_extr_part.h"
34*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_rom.h"
35*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_hybrid.h"
36*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ps_dec.h"
37*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_error_standards.h"
38*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_polyphase.h"
39*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_config.h"
40*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_qmf_dec.h"
41*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_dec.h"
42*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_bitdec.h"
43*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_macro_def.h"
44*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_basic_op.h"
45*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_blind.h"
46*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_get_sampling_freq_idx(WORD32 sampling_freq,ia_mps_dec_bitdec_tables_struct * ixheaacd_mps_dec_bitdec_tables,WORD32 * idx)47*15dc779aSAndroid Build Coastguard Worker static IA_ERRORCODE ixheaacd_get_sampling_freq_idx(
48*15dc779aSAndroid Build Coastguard Worker     WORD32 sampling_freq, ia_mps_dec_bitdec_tables_struct *ixheaacd_mps_dec_bitdec_tables,
49*15dc779aSAndroid Build Coastguard Worker     WORD32 *idx) {
50*15dc779aSAndroid Build Coastguard Worker   WORD32 i;
51*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < 13; i++) {
52*15dc779aSAndroid Build Coastguard Worker     if (ixheaacd_mps_dec_bitdec_tables->sampling_freq_table[i] == sampling_freq) {
53*15dc779aSAndroid Build Coastguard Worker       *idx = i;
54*15dc779aSAndroid Build Coastguard Worker       return IA_NO_ERROR;
55*15dc779aSAndroid Build Coastguard Worker     }
56*15dc779aSAndroid Build Coastguard Worker   }
57*15dc779aSAndroid Build Coastguard Worker   *idx = 3;
58*15dc779aSAndroid Build Coastguard Worker   return IA_XHEAAC_DEC_CONFIG_FATAL_INVALID_SAMPLE_RATE;
59*15dc779aSAndroid Build Coastguard Worker }
60*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_init_blind(ia_heaac_mps_state_struct * pstr_mps_state)61*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_init_blind(ia_heaac_mps_state_struct *pstr_mps_state) {
62*15dc779aSAndroid Build Coastguard Worker   ia_mps_dec_blind_decoder_struct *blind = pstr_mps_state->mps_persistent_mem.blind_decoder;
63*15dc779aSAndroid Build Coastguard Worker   ia_mps_dec_blind_tables_struct *p_blind_table =
64*15dc779aSAndroid Build Coastguard Worker       pstr_mps_state->ia_mps_dec_mps_table.blind_table_ptr;
65*15dc779aSAndroid Build Coastguard Worker   ia_mps_dec_auxilary_struct *p_aux_struct = pstr_mps_state->aux_struct;
66*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_1, temp_2;
67*15dc779aSAndroid Build Coastguard Worker   WORD32 q_64, q_32, q_16, q_8, q_4, q_2;
68*15dc779aSAndroid Build Coastguard Worker   WORD32 r_64, r_32, r_16, r_8, r_4, r_2;
69*15dc779aSAndroid Build Coastguard Worker   WORD32 i;
70*15dc779aSAndroid Build Coastguard Worker   WORD32 qmf_bands = pstr_mps_state->qmf_bands;
71*15dc779aSAndroid Build Coastguard Worker 
72*15dc779aSAndroid Build Coastguard Worker   ixheaacd_get_sampling_freq_idx(pstr_mps_state->sampling_freq,
73*15dc779aSAndroid Build Coastguard Worker                                  pstr_mps_state->ia_mps_dec_mps_table.bitdec_table_ptr, &temp_1);
74*15dc779aSAndroid Build Coastguard Worker   if (pstr_mps_state->qmf_bands == 128)
75*15dc779aSAndroid Build Coastguard Worker     blind->filter_coeff = p_blind_table->exp_128[temp_1];
76*15dc779aSAndroid Build Coastguard Worker   else {
77*15dc779aSAndroid Build Coastguard Worker     q_64 = (WORD32)(qmf_bands >> 6) ? p_blind_table->exp_64[temp_1] : ONE_IN_Q15;
78*15dc779aSAndroid Build Coastguard Worker     r_64 = (WORD32)(qmf_bands & SIX_BIT_MASK);
79*15dc779aSAndroid Build Coastguard Worker 
80*15dc779aSAndroid Build Coastguard Worker     q_32 = (WORD32)(r_64 >> 5) ? p_blind_table->exp_32[temp_1] : ONE_IN_Q15;
81*15dc779aSAndroid Build Coastguard Worker     r_32 = (WORD32)(r_64 & FIVE_BIT_MASK);
82*15dc779aSAndroid Build Coastguard Worker 
83*15dc779aSAndroid Build Coastguard Worker     q_16 = (WORD32)(r_32 >> 4) ? p_blind_table->exp_16[temp_1] : ONE_IN_Q15;
84*15dc779aSAndroid Build Coastguard Worker     r_16 = (WORD32)(r_32 & FOUR_BIT_MASK);
85*15dc779aSAndroid Build Coastguard Worker 
86*15dc779aSAndroid Build Coastguard Worker     q_8 = (WORD32)(r_16 >> 3) ? p_blind_table->exp_8[temp_1] : ONE_IN_Q15;
87*15dc779aSAndroid Build Coastguard Worker     r_8 = (WORD32)(r_16 & THREE_BIT_MASK);
88*15dc779aSAndroid Build Coastguard Worker 
89*15dc779aSAndroid Build Coastguard Worker     q_4 = (WORD32)(r_8 >> 2) ? p_blind_table->exp_4[temp_1] : ONE_IN_Q15;
90*15dc779aSAndroid Build Coastguard Worker     r_4 = (WORD32)(r_8 & TWO_BIT_MASK);
91*15dc779aSAndroid Build Coastguard Worker 
92*15dc779aSAndroid Build Coastguard Worker     q_2 = (WORD32)(r_4 >> 1) ? p_blind_table->exp_2[temp_1] : ONE_IN_Q15;
93*15dc779aSAndroid Build Coastguard Worker     r_2 = (WORD32)(r_4 & ONE_BIT_MASK) ? p_blind_table->exp_1[temp_1] : ONE_IN_Q15;
94*15dc779aSAndroid Build Coastguard Worker 
95*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32_shr_15(ixheaacd_mps_mult32_shr_15(q_64, q_32), q_16);
96*15dc779aSAndroid Build Coastguard Worker     temp_2 = ixheaacd_mps_mult32_shr_15(ixheaacd_mps_mult32_shr_15(q_8, q_4), q_2);
97*15dc779aSAndroid Build Coastguard Worker     blind->filter_coeff =
98*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_mult32_shr_15(ixheaacd_mps_mult32_shr_15(temp_1, temp_2), r_2);
99*15dc779aSAndroid Build Coastguard Worker   }
100*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < MAX_PARAMETER_BANDS; i++) {
101*15dc779aSAndroid Build Coastguard Worker     blind->excitation[0][i] = ABS_THR_FIX;
102*15dc779aSAndroid Build Coastguard Worker     blind->excitation[1][i] = ABS_THR_FIX;
103*15dc779aSAndroid Build Coastguard Worker     blind->excitation[2][i] = ABS_THR_FIX;
104*15dc779aSAndroid Build Coastguard Worker 
105*15dc779aSAndroid Build Coastguard Worker     blind->q_excitation[0][i] = 15;
106*15dc779aSAndroid Build Coastguard Worker     blind->q_excitation[1][i] = 15;
107*15dc779aSAndroid Build Coastguard Worker     blind->q_excitation[2][i] = 15;
108*15dc779aSAndroid Build Coastguard Worker   }
109*15dc779aSAndroid Build Coastguard Worker 
110*15dc779aSAndroid Build Coastguard Worker   memset(p_aux_struct->temp_shape_enable_channel_stp, 0,
111*15dc779aSAndroid Build Coastguard Worker          MAX_OUTPUT_CHANNELS_MPS * sizeof(p_aux_struct->temp_shape_enable_channel_stp[0]));
112*15dc779aSAndroid Build Coastguard Worker   memset(p_aux_struct->temp_shape_enable_channel_ges, 0,
113*15dc779aSAndroid Build Coastguard Worker          MAX_OUTPUT_CHANNELS_MPS * sizeof(p_aux_struct->temp_shape_enable_channel_ges[0]));
114*15dc779aSAndroid Build Coastguard Worker }
115*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_signal_2_parameters(ia_heaac_mps_state_struct * pstr_mps_state,WORD32 ps)116*15dc779aSAndroid Build Coastguard Worker static VOID ixheaacd_signal_2_parameters(ia_heaac_mps_state_struct *pstr_mps_state, WORD32 ps) {
117*15dc779aSAndroid Build Coastguard Worker   ia_mps_dec_blind_decoder_struct *blind = pstr_mps_state->mps_persistent_mem.blind_decoder;
118*15dc779aSAndroid Build Coastguard Worker   ia_mps_dec_blind_tables_struct *p_blind_table =
119*15dc779aSAndroid Build Coastguard Worker       pstr_mps_state->ia_mps_dec_mps_table.blind_table_ptr;
120*15dc779aSAndroid Build Coastguard Worker   ia_mps_dec_auxilary_struct *p_aux_struct = pstr_mps_state->aux_struct;
121*15dc779aSAndroid Build Coastguard Worker 
122*15dc779aSAndroid Build Coastguard Worker   WORD32 cld_index;
123*15dc779aSAndroid Build Coastguard Worker   WORD32 icc_index;
124*15dc779aSAndroid Build Coastguard Worker   WORD32 mesh[2][2];
125*15dc779aSAndroid Build Coastguard Worker   WORD32 pb;
126*15dc779aSAndroid Build Coastguard Worker   WORD32 *dequant_cld;
127*15dc779aSAndroid Build Coastguard Worker   WORD32 *dequant_icc;
128*15dc779aSAndroid Build Coastguard Worker   WORD32 *dequant_cpc;
129*15dc779aSAndroid Build Coastguard Worker   WORD32 cld;
130*15dc779aSAndroid Build Coastguard Worker   WORD32 icc;
131*15dc779aSAndroid Build Coastguard Worker   WORD16 q_icc;
132*15dc779aSAndroid Build Coastguard Worker   WORD32 cld_delta;
133*15dc779aSAndroid Build Coastguard Worker   WORD32 icc_delta;
134*15dc779aSAndroid Build Coastguard Worker   WORD16 q_icc_delta;
135*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_1;
136*15dc779aSAndroid Build Coastguard Worker   WORD16 qtemp1, qtemp;
137*15dc779aSAndroid Build Coastguard Worker   const WORD32 *sqrt_tab = pstr_mps_state->ia_mps_dec_mps_table.common_table_ptr->sqrt_tab;
138*15dc779aSAndroid Build Coastguard Worker 
139*15dc779aSAndroid Build Coastguard Worker   WORD32 num_parameter_bands = pstr_mps_state->num_parameter_bands;
140*15dc779aSAndroid Build Coastguard Worker 
141*15dc779aSAndroid Build Coastguard Worker   ixheaacd_get_dequant_tables(&dequant_cld, &dequant_icc, &dequant_cpc,
142*15dc779aSAndroid Build Coastguard Worker                               pstr_mps_state->ia_mps_dec_mps_table.bitdec_table_ptr);
143*15dc779aSAndroid Build Coastguard Worker 
144*15dc779aSAndroid Build Coastguard Worker   for (pb = 0; pb < num_parameter_bands; pb++) {
145*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_div_32(blind->excitation[0][pb], blind->excitation[1][pb], &qtemp1);
146*15dc779aSAndroid Build Coastguard Worker     qtemp1 = qtemp1 + blind->q_excitation[0][pb] - blind->q_excitation[1][pb];
147*15dc779aSAndroid Build Coastguard Worker     cld = 10 * ixheaacd_mps_log10(temp_1, qtemp1);
148*15dc779aSAndroid Build Coastguard Worker 
149*15dc779aSAndroid Build Coastguard Worker     qtemp1 = blind->q_excitation[0][pb];
150*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(blind->excitation[0][pb], blind->excitation[1][pb], &qtemp1,
151*15dc779aSAndroid Build Coastguard Worker                                  blind->q_excitation[1][pb]);
152*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_sqrt(temp_1, &qtemp1, sqrt_tab);
153*15dc779aSAndroid Build Coastguard Worker     icc = ixheaacd_mps_div_32(blind->excitation[2][pb], temp_1, &q_icc);
154*15dc779aSAndroid Build Coastguard Worker     q_icc = q_icc + blind->q_excitation[2][pb] - qtemp1;
155*15dc779aSAndroid Build Coastguard Worker 
156*15dc779aSAndroid Build Coastguard Worker     if (abs(cld) > THIRTY_IN_Q16)
157*15dc779aSAndroid Build Coastguard Worker       cld_delta = THIRTY_IN_Q16;
158*15dc779aSAndroid Build Coastguard Worker     else
159*15dc779aSAndroid Build Coastguard Worker       cld_delta = ixheaac_abs32(cld);
160*15dc779aSAndroid Build Coastguard Worker 
161*15dc779aSAndroid Build Coastguard Worker     q_icc_delta = q_icc;
162*15dc779aSAndroid Build Coastguard Worker     icc_delta = ixheaacd_mps_add32(icc, ONE_IN_Q15, &q_icc_delta, 15);
163*15dc779aSAndroid Build Coastguard Worker     icc_delta = ixheaacd_mps_mult32(icc_delta, 10, &q_icc_delta, 0);
164*15dc779aSAndroid Build Coastguard Worker 
165*15dc779aSAndroid Build Coastguard Worker     temp_1 = cld_delta >> 16;
166*15dc779aSAndroid Build Coastguard Worker     if (temp_1 > 29)
167*15dc779aSAndroid Build Coastguard Worker       cld_index = 29;
168*15dc779aSAndroid Build Coastguard Worker     else
169*15dc779aSAndroid Build Coastguard Worker       cld_index = temp_1;
170*15dc779aSAndroid Build Coastguard Worker 
171*15dc779aSAndroid Build Coastguard Worker     temp_1 = icc_delta >> q_icc_delta;
172*15dc779aSAndroid Build Coastguard Worker     if (temp_1 > 19)
173*15dc779aSAndroid Build Coastguard Worker       icc_index = 19;
174*15dc779aSAndroid Build Coastguard Worker     else
175*15dc779aSAndroid Build Coastguard Worker       icc_index = temp_1;
176*15dc779aSAndroid Build Coastguard Worker 
177*15dc779aSAndroid Build Coastguard Worker     cld_delta -= (cld_index << 16);
178*15dc779aSAndroid Build Coastguard Worker     icc_delta -= (icc_index << q_icc_delta);
179*15dc779aSAndroid Build Coastguard Worker 
180*15dc779aSAndroid Build Coastguard Worker     mesh[0][0] = p_blind_table->mesh_table.blind_cld_mesh[cld_index][icc_index] + 15;
181*15dc779aSAndroid Build Coastguard Worker     mesh[0][1] = p_blind_table->mesh_table.blind_cld_mesh[cld_index][icc_index + 1] + 15;
182*15dc779aSAndroid Build Coastguard Worker     mesh[1][0] = p_blind_table->mesh_table.blind_cld_mesh[cld_index + 1][icc_index] + 15;
183*15dc779aSAndroid Build Coastguard Worker     mesh[1][1] = p_blind_table->mesh_table.blind_cld_mesh[cld_index + 1][icc_index + 1] + 15;
184*15dc779aSAndroid Build Coastguard Worker 
185*15dc779aSAndroid Build Coastguard Worker     qtemp1 = q_icc_delta;
186*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(icc_delta, (mesh[0][1] - mesh[0][0]), &qtemp1, 0);
187*15dc779aSAndroid Build Coastguard Worker     qtemp = 15;
188*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ott_cld[0][ps][pb] =
189*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32((mesh[0][0] << 15), temp_1, &qtemp, qtemp1);
190*15dc779aSAndroid Build Coastguard Worker     qtemp1 = 16;
191*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(cld_delta, (mesh[1][0] - mesh[0][0]), &qtemp1, 0);
192*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ott_cld[0][ps][pb] =
193*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ott_cld[0][ps][pb], temp_1, &qtemp, qtemp1);
194*15dc779aSAndroid Build Coastguard Worker     qtemp1 = q_icc_delta;
195*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(icc_delta, cld_delta, &qtemp1, 16);
196*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(temp_1, (mesh[1][1] - mesh[0][1] - mesh[1][0] + mesh[0][0]),
197*15dc779aSAndroid Build Coastguard Worker                                  &qtemp1, 0);
198*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ott_cld[0][ps][pb] =
199*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ott_cld[0][ps][pb], temp_1, &qtemp, qtemp1);
200*15dc779aSAndroid Build Coastguard Worker 
201*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ott_cld[0][ps][pb] =
202*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ott_cld[0][ps][pb], ONE_IN_Q14, &qtemp, 15);
203*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ott_cld[0][ps][pb] = dequant_cld[((p_aux_struct->ott_cld[0][ps][pb]) >> qtemp)];
204*15dc779aSAndroid Build Coastguard Worker 
205*15dc779aSAndroid Build Coastguard Worker     mesh[0][0] = p_blind_table->mesh_table.blind_icc_mesh[cld_index][icc_index];
206*15dc779aSAndroid Build Coastguard Worker     mesh[0][1] = p_blind_table->mesh_table.blind_icc_mesh[cld_index][icc_index + 1];
207*15dc779aSAndroid Build Coastguard Worker     mesh[1][0] = p_blind_table->mesh_table.blind_icc_mesh[cld_index + 1][icc_index];
208*15dc779aSAndroid Build Coastguard Worker     mesh[1][1] = p_blind_table->mesh_table.blind_icc_mesh[cld_index + 1][icc_index + 1];
209*15dc779aSAndroid Build Coastguard Worker 
210*15dc779aSAndroid Build Coastguard Worker     qtemp1 = q_icc_delta;
211*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(icc_delta, (mesh[0][1] - mesh[0][0]), &qtemp1, 0);
212*15dc779aSAndroid Build Coastguard Worker     qtemp = 15;
213*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ott_icc[0][ps][pb] =
214*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32((mesh[0][0] << 15), temp_1, &qtemp, qtemp1);
215*15dc779aSAndroid Build Coastguard Worker     qtemp1 = 16;
216*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(cld_delta, (mesh[1][0] - mesh[0][0]), &qtemp1, 0);
217*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ott_icc[0][ps][pb] =
218*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ott_icc[0][ps][pb], temp_1, &qtemp, qtemp1);
219*15dc779aSAndroid Build Coastguard Worker     qtemp1 = q_icc_delta;
220*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(icc_delta, cld_delta, &qtemp1, 16);
221*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(temp_1, (mesh[1][1] - mesh[0][1] - mesh[1][0] + mesh[0][0]),
222*15dc779aSAndroid Build Coastguard Worker                                  &qtemp1, 0);
223*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ott_icc[0][ps][pb] =
224*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ott_icc[0][ps][pb], temp_1, &qtemp, qtemp1);
225*15dc779aSAndroid Build Coastguard Worker 
226*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ott_icc[0][ps][pb] =
227*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ott_icc[0][ps][pb], ONE_IN_Q14, &qtemp, 15);
228*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ott_icc[0][ps][pb] = dequant_icc[((p_aux_struct->ott_icc[0][ps][pb]) >> qtemp)];
229*15dc779aSAndroid Build Coastguard Worker 
230*15dc779aSAndroid Build Coastguard Worker     mesh[0][0] = p_blind_table->mesh_table.blind_cpc_1_mesh[cld_index][icc_index] + 20;
231*15dc779aSAndroid Build Coastguard Worker     mesh[0][1] = p_blind_table->mesh_table.blind_cpc_1_mesh[cld_index][icc_index + 1] + 20;
232*15dc779aSAndroid Build Coastguard Worker     mesh[1][0] = p_blind_table->mesh_table.blind_cpc_1_mesh[cld_index + 1][icc_index] + 20;
233*15dc779aSAndroid Build Coastguard Worker     mesh[1][1] = p_blind_table->mesh_table.blind_cpc_1_mesh[cld_index + 1][icc_index + 1] + 20;
234*15dc779aSAndroid Build Coastguard Worker 
235*15dc779aSAndroid Build Coastguard Worker     qtemp1 = q_icc_delta;
236*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(icc_delta, (mesh[0][1] - mesh[0][0]), &qtemp1, 0);
237*15dc779aSAndroid Build Coastguard Worker     qtemp = 15;
238*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ttt_cpc_1[0][ps][pb] =
239*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32((mesh[0][0] << 15), temp_1, &qtemp, qtemp1);
240*15dc779aSAndroid Build Coastguard Worker     qtemp1 = 16;
241*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(cld_delta, (mesh[1][0] - mesh[0][0]), &qtemp1, 0);
242*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ttt_cpc_1[0][ps][pb] =
243*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ttt_cpc_1[0][ps][pb], temp_1, &qtemp, qtemp1);
244*15dc779aSAndroid Build Coastguard Worker     qtemp1 = q_icc_delta;
245*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(icc_delta, cld_delta, &qtemp1, 16);
246*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(temp_1, (mesh[1][1] - mesh[0][1] - mesh[1][0] + mesh[0][0]),
247*15dc779aSAndroid Build Coastguard Worker                                  &qtemp1, 0);
248*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ttt_cpc_1[0][ps][pb] =
249*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ttt_cpc_1[0][ps][pb], temp_1, &qtemp, qtemp1);
250*15dc779aSAndroid Build Coastguard Worker 
251*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ttt_cpc_1[0][ps][pb] =
252*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ttt_cpc_1[0][ps][pb], ONE_IN_Q14, &qtemp, 15);
253*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ttt_cpc_1[0][ps][pb] =
254*15dc779aSAndroid Build Coastguard Worker         dequant_cpc[((p_aux_struct->ttt_cpc_1[0][ps][pb]) >> qtemp)];
255*15dc779aSAndroid Build Coastguard Worker 
256*15dc779aSAndroid Build Coastguard Worker     mesh[0][0] = p_blind_table->mesh_table.blind_cpc_2_mesh[cld_index][icc_index] + 20;
257*15dc779aSAndroid Build Coastguard Worker     mesh[0][1] = p_blind_table->mesh_table.blind_cpc_2_mesh[cld_index][icc_index + 1] + 20;
258*15dc779aSAndroid Build Coastguard Worker     mesh[1][0] = p_blind_table->mesh_table.blind_cpc_2_mesh[cld_index + 1][icc_index] + 20;
259*15dc779aSAndroid Build Coastguard Worker     mesh[1][1] = p_blind_table->mesh_table.blind_cpc_2_mesh[cld_index + 1][icc_index + 1] + 20;
260*15dc779aSAndroid Build Coastguard Worker 
261*15dc779aSAndroid Build Coastguard Worker     qtemp1 = q_icc_delta;
262*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(icc_delta, (mesh[0][1] - mesh[0][0]), &qtemp1, 0);
263*15dc779aSAndroid Build Coastguard Worker     qtemp = 15;
264*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ttt_cpc_2[0][ps][pb] =
265*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32((mesh[0][0] < 15), temp_1, &qtemp, qtemp1);
266*15dc779aSAndroid Build Coastguard Worker     qtemp1 = 16;
267*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(cld_delta, (mesh[1][0] - mesh[0][0]), &qtemp1, 0);
268*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ttt_cpc_2[0][ps][pb] =
269*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ttt_cpc_2[0][ps][pb], temp_1, &qtemp, qtemp1);
270*15dc779aSAndroid Build Coastguard Worker     qtemp1 = q_icc_delta;
271*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(icc_delta, cld_delta, &qtemp1, 16);
272*15dc779aSAndroid Build Coastguard Worker     temp_1 = ixheaacd_mps_mult32(temp_1, (mesh[1][1] - mesh[0][1] - mesh[1][0] + mesh[0][0]),
273*15dc779aSAndroid Build Coastguard Worker                                  &qtemp1, 0);
274*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ttt_cpc_2[0][ps][pb] =
275*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ttt_cpc_2[0][ps][pb], temp_1, &qtemp, qtemp1);
276*15dc779aSAndroid Build Coastguard Worker 
277*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ttt_cpc_2[0][ps][pb] =
278*15dc779aSAndroid Build Coastguard Worker         ixheaacd_mps_add32(p_aux_struct->ttt_cpc_2[0][ps][pb], ONE_IN_Q14, &qtemp, 15);
279*15dc779aSAndroid Build Coastguard Worker     p_aux_struct->ttt_cpc_2[0][ps][pb] =
280*15dc779aSAndroid Build Coastguard Worker         dequant_cpc[((p_aux_struct->ttt_cpc_2[0][ps][pb]) >> qtemp)];
281*15dc779aSAndroid Build Coastguard Worker 
282*15dc779aSAndroid Build Coastguard Worker     if (cld < 0) {
283*15dc779aSAndroid Build Coastguard Worker       cld = p_aux_struct->ttt_cpc_2[0][ps][pb];
284*15dc779aSAndroid Build Coastguard Worker       p_aux_struct->ttt_cpc_2[0][ps][pb] = p_aux_struct->ttt_cpc_1[0][ps][pb];
285*15dc779aSAndroid Build Coastguard Worker       p_aux_struct->ttt_cpc_1[0][ps][pb] = cld;
286*15dc779aSAndroid Build Coastguard Worker     }
287*15dc779aSAndroid Build Coastguard Worker   }
288*15dc779aSAndroid Build Coastguard Worker }
289*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_update_down_mix_state(ia_heaac_mps_state_struct * pstr_mps_state,WORD32 offset)290*15dc779aSAndroid Build Coastguard Worker static VOID ixheaacd_update_down_mix_state(ia_heaac_mps_state_struct *pstr_mps_state,
291*15dc779aSAndroid Build Coastguard Worker                                            WORD32 offset) {
292*15dc779aSAndroid Build Coastguard Worker   ia_mps_dec_blind_decoder_struct *blind = pstr_mps_state->mps_persistent_mem.blind_decoder;
293*15dc779aSAndroid Build Coastguard Worker   WORD32 ts;
294*15dc779aSAndroid Build Coastguard Worker   WORD32 hb;
295*15dc779aSAndroid Build Coastguard Worker   WORD32 pb;
296*15dc779aSAndroid Build Coastguard Worker   WORD32 *excitation_0, *excitation_1, *excitation_2;
297*15dc779aSAndroid Build Coastguard Worker   WORD16 *q_excitation_0, *q_excitation_1, *q_excitation_2;
298*15dc779aSAndroid Build Coastguard Worker   WORD32 temp_1, temp_2;
299*15dc779aSAndroid Build Coastguard Worker   WORD16 qtemp1, qtemp2;
300*15dc779aSAndroid Build Coastguard Worker   WORD32 *p_x_real, *p_x_imag;
301*15dc779aSAndroid Build Coastguard Worker   WORD32 num_parameter_bands = pstr_mps_state->num_parameter_bands;
302*15dc779aSAndroid Build Coastguard Worker   WORD32 hybrid_bands = pstr_mps_state->hybrid_bands;
303*15dc779aSAndroid Build Coastguard Worker   excitation_0 = pstr_mps_state->mps_scratch_mem_v;
304*15dc779aSAndroid Build Coastguard Worker   q_excitation_0 =
305*15dc779aSAndroid Build Coastguard Worker       (WORD16 *)pstr_mps_state->mps_scratch_mem_v +
306*15dc779aSAndroid Build Coastguard Worker       IXHEAAC_GET_SIZE_ALIGNED_TYPE(PARAMETER_BANDSX2, sizeof(*q_excitation_0), BYTE_ALIGN_8);
307*15dc779aSAndroid Build Coastguard Worker   excitation_1 = excitation_0 + IXHEAAC_GET_SIZE_ALIGNED_TYPE(
308*15dc779aSAndroid Build Coastguard Worker                                     PARAMETER_BANDSX1_5, sizeof(*excitation_1), BYTE_ALIGN_8);
309*15dc779aSAndroid Build Coastguard Worker   q_excitation_1 = q_excitation_0 + IXHEAAC_GET_SIZE_ALIGNED_TYPE(
310*15dc779aSAndroid Build Coastguard Worker                                         PARAMETER_BANDSX3, sizeof(*q_excitation_1), BYTE_ALIGN_8);
311*15dc779aSAndroid Build Coastguard Worker   excitation_2 = excitation_1 + IXHEAAC_GET_SIZE_ALIGNED_TYPE(
312*15dc779aSAndroid Build Coastguard Worker                                     PARAMETER_BANDSX1_5, sizeof(*excitation_2), BYTE_ALIGN_8);
313*15dc779aSAndroid Build Coastguard Worker   q_excitation_2 = q_excitation_1 + IXHEAAC_GET_SIZE_ALIGNED_TYPE(
314*15dc779aSAndroid Build Coastguard Worker                                         PARAMETER_BANDSX3, sizeof(*q_excitation_2), BYTE_ALIGN_8);
315*15dc779aSAndroid Build Coastguard Worker 
316*15dc779aSAndroid Build Coastguard Worker   p_x_real = &pstr_mps_state->array_struct->x_real[offset * MAX_HYBRID_BANDS];
317*15dc779aSAndroid Build Coastguard Worker   p_x_imag = &pstr_mps_state->array_struct->x_imag[offset * MAX_HYBRID_BANDS];
318*15dc779aSAndroid Build Coastguard Worker   for (ts = 0; ts < HOP_SLOTS; ts++) {
319*15dc779aSAndroid Build Coastguard Worker     WORD32 *x_real_0 = p_x_real;
320*15dc779aSAndroid Build Coastguard Worker     WORD32 *x_imag_0 = p_x_imag;
321*15dc779aSAndroid Build Coastguard Worker 
322*15dc779aSAndroid Build Coastguard Worker     WORD32 *x_real_1 = p_x_real + TSXHB;
323*15dc779aSAndroid Build Coastguard Worker     WORD32 *x_imag_1 = p_x_imag + TSXHB;
324*15dc779aSAndroid Build Coastguard Worker 
325*15dc779aSAndroid Build Coastguard Worker     for (pb = 0; pb < num_parameter_bands; pb++) {
326*15dc779aSAndroid Build Coastguard Worker       excitation_0[pb] = ABS_THR_FIX;
327*15dc779aSAndroid Build Coastguard Worker       excitation_1[pb] = ABS_THR_FIX;
328*15dc779aSAndroid Build Coastguard Worker       excitation_2[pb] = ABS_THR_FIX;
329*15dc779aSAndroid Build Coastguard Worker 
330*15dc779aSAndroid Build Coastguard Worker       q_excitation_0[pb] = 15;
331*15dc779aSAndroid Build Coastguard Worker       q_excitation_1[pb] = 15;
332*15dc779aSAndroid Build Coastguard Worker       q_excitation_2[pb] = 15;
333*15dc779aSAndroid Build Coastguard Worker     }
334*15dc779aSAndroid Build Coastguard Worker 
335*15dc779aSAndroid Build Coastguard Worker     for (hb = 0; hb < hybrid_bands; hb++) {
336*15dc779aSAndroid Build Coastguard Worker       WORD64 temp;
337*15dc779aSAndroid Build Coastguard Worker       pb = (WORD32)pstr_mps_state->kernels[hb];
338*15dc779aSAndroid Build Coastguard Worker 
339*15dc779aSAndroid Build Coastguard Worker       temp =
340*15dc779aSAndroid Build Coastguard Worker           (WORD64)((WORD64)*x_real_0 * (WORD64)*x_real_0 + (WORD64)*x_imag_0 * (WORD64)*x_imag_0);
341*15dc779aSAndroid Build Coastguard Worker       temp >>= 10;
342*15dc779aSAndroid Build Coastguard Worker       temp_1 = (WORD32)temp;
343*15dc779aSAndroid Build Coastguard Worker       qtemp1 = 10;
344*15dc779aSAndroid Build Coastguard Worker       excitation_0[pb] =
345*15dc779aSAndroid Build Coastguard Worker           ixheaacd_mps_add32(excitation_0[pb], temp_1, &(q_excitation_0[pb]), qtemp1);
346*15dc779aSAndroid Build Coastguard Worker 
347*15dc779aSAndroid Build Coastguard Worker       temp =
348*15dc779aSAndroid Build Coastguard Worker           (WORD64)((WORD64)*x_real_1 * (WORD64)*x_real_1 + (WORD64)*x_imag_1 * (WORD64)*x_imag_1);
349*15dc779aSAndroid Build Coastguard Worker       temp >>= 10;
350*15dc779aSAndroid Build Coastguard Worker       temp_1 = (WORD32)temp;
351*15dc779aSAndroid Build Coastguard Worker       qtemp1 = 10;
352*15dc779aSAndroid Build Coastguard Worker       excitation_1[pb] =
353*15dc779aSAndroid Build Coastguard Worker           ixheaacd_mps_add32(excitation_1[pb], temp_1, &(q_excitation_1[pb]), qtemp1);
354*15dc779aSAndroid Build Coastguard Worker 
355*15dc779aSAndroid Build Coastguard Worker       temp =
356*15dc779aSAndroid Build Coastguard Worker           (WORD64)((WORD64)*x_real_0 * (WORD64)*x_real_1 + (WORD64)*x_imag_0 * (WORD64)*x_imag_1);
357*15dc779aSAndroid Build Coastguard Worker       temp >>= 10;
358*15dc779aSAndroid Build Coastguard Worker       temp_1 = (WORD32)temp;
359*15dc779aSAndroid Build Coastguard Worker       qtemp1 = 10;
360*15dc779aSAndroid Build Coastguard Worker       excitation_2[pb] =
361*15dc779aSAndroid Build Coastguard Worker           ixheaacd_mps_add32(excitation_2[pb], temp_1, &(q_excitation_2[pb]), qtemp1);
362*15dc779aSAndroid Build Coastguard Worker 
363*15dc779aSAndroid Build Coastguard Worker       x_real_0++;
364*15dc779aSAndroid Build Coastguard Worker       x_imag_0++;
365*15dc779aSAndroid Build Coastguard Worker       x_real_1++;
366*15dc779aSAndroid Build Coastguard Worker       x_imag_1++;
367*15dc779aSAndroid Build Coastguard Worker     }
368*15dc779aSAndroid Build Coastguard Worker 
369*15dc779aSAndroid Build Coastguard Worker     for (pb = 0; pb < num_parameter_bands; pb++) {
370*15dc779aSAndroid Build Coastguard Worker       blind->excitation[0][pb] =
371*15dc779aSAndroid Build Coastguard Worker           ixheaacd_mps_mult32_shr_15(blind->excitation[0][pb], blind->filter_coeff);
372*15dc779aSAndroid Build Coastguard Worker       blind->excitation[1][pb] =
373*15dc779aSAndroid Build Coastguard Worker           ixheaacd_mps_mult32_shr_15(blind->excitation[1][pb], blind->filter_coeff);
374*15dc779aSAndroid Build Coastguard Worker       blind->excitation[2][pb] =
375*15dc779aSAndroid Build Coastguard Worker           ixheaacd_mps_mult32_shr_15(blind->excitation[2][pb], blind->filter_coeff);
376*15dc779aSAndroid Build Coastguard Worker 
377*15dc779aSAndroid Build Coastguard Worker       temp_1 = ONE_IN_Q15 - blind->filter_coeff;
378*15dc779aSAndroid Build Coastguard Worker 
379*15dc779aSAndroid Build Coastguard Worker       qtemp2 = *q_excitation_0++;
380*15dc779aSAndroid Build Coastguard Worker       temp_2 = ixheaacd_mps_mult32_shr_15(temp_1, *excitation_0);
381*15dc779aSAndroid Build Coastguard Worker       excitation_0++;
382*15dc779aSAndroid Build Coastguard Worker 
383*15dc779aSAndroid Build Coastguard Worker       blind->excitation[0][pb] = ixheaacd_mps_add32(blind->excitation[0][pb], temp_2,
384*15dc779aSAndroid Build Coastguard Worker                                                     &(blind->q_excitation[0][pb]), qtemp2);
385*15dc779aSAndroid Build Coastguard Worker 
386*15dc779aSAndroid Build Coastguard Worker       qtemp2 = *q_excitation_1++;
387*15dc779aSAndroid Build Coastguard Worker       temp_2 = ixheaacd_mps_mult32_shr_15(temp_1, *excitation_1);
388*15dc779aSAndroid Build Coastguard Worker       excitation_1++;
389*15dc779aSAndroid Build Coastguard Worker 
390*15dc779aSAndroid Build Coastguard Worker       blind->excitation[1][pb] = ixheaacd_mps_add32(blind->excitation[1][pb], temp_2,
391*15dc779aSAndroid Build Coastguard Worker                                                     &(blind->q_excitation[1][pb]), qtemp2);
392*15dc779aSAndroid Build Coastguard Worker 
393*15dc779aSAndroid Build Coastguard Worker       qtemp2 = *q_excitation_2++;
394*15dc779aSAndroid Build Coastguard Worker       temp_2 = ixheaacd_mps_mult32_shr_15(temp_1, *excitation_2);
395*15dc779aSAndroid Build Coastguard Worker       excitation_2++;
396*15dc779aSAndroid Build Coastguard Worker 
397*15dc779aSAndroid Build Coastguard Worker       blind->excitation[2][pb] = ixheaacd_mps_add32(blind->excitation[2][pb], temp_2,
398*15dc779aSAndroid Build Coastguard Worker                                                     &(blind->q_excitation[2][pb]), qtemp2);
399*15dc779aSAndroid Build Coastguard Worker     }
400*15dc779aSAndroid Build Coastguard Worker     excitation_0[pb] -= num_parameter_bands;
401*15dc779aSAndroid Build Coastguard Worker     excitation_1[pb] -= num_parameter_bands;
402*15dc779aSAndroid Build Coastguard Worker     excitation_2[pb] -= num_parameter_bands;
403*15dc779aSAndroid Build Coastguard Worker 
404*15dc779aSAndroid Build Coastguard Worker     q_excitation_0[pb] -= num_parameter_bands;
405*15dc779aSAndroid Build Coastguard Worker     q_excitation_1[pb] -= num_parameter_bands;
406*15dc779aSAndroid Build Coastguard Worker     q_excitation_2[pb] -= num_parameter_bands;
407*15dc779aSAndroid Build Coastguard Worker 
408*15dc779aSAndroid Build Coastguard Worker     p_x_real += MAX_HYBRID_BANDS;
409*15dc779aSAndroid Build Coastguard Worker     p_x_imag += MAX_HYBRID_BANDS;
410*15dc779aSAndroid Build Coastguard Worker   }
411*15dc779aSAndroid Build Coastguard Worker }
412*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_apply_blind(ia_heaac_mps_state_struct * pstr_mps_state)413*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_apply_blind(ia_heaac_mps_state_struct *pstr_mps_state) {
414*15dc779aSAndroid Build Coastguard Worker   ia_mps_dec_spatial_bs_frame_struct *frame = pstr_mps_state->bs_frame;
415*15dc779aSAndroid Build Coastguard Worker   WORD32 ts;
416*15dc779aSAndroid Build Coastguard Worker   WORD32 ps;
417*15dc779aSAndroid Build Coastguard Worker   WORD32 time_slots = pstr_mps_state->time_slots;
418*15dc779aSAndroid Build Coastguard Worker   WORD32 *param_slot = pstr_mps_state->aux_struct->param_slot;
419*15dc779aSAndroid Build Coastguard Worker 
420*15dc779aSAndroid Build Coastguard Worker   for (ts = 0, ps = 0; ts < time_slots; ts += HOP_SLOTS, ps++) {
421*15dc779aSAndroid Build Coastguard Worker     param_slot[ps] = ts + HOP_SLOTS - 1;
422*15dc779aSAndroid Build Coastguard Worker 
423*15dc779aSAndroid Build Coastguard Worker     ixheaacd_signal_2_parameters(pstr_mps_state, ps);
424*15dc779aSAndroid Build Coastguard Worker     ixheaacd_update_down_mix_state(pstr_mps_state, ts);
425*15dc779aSAndroid Build Coastguard Worker   }
426*15dc779aSAndroid Build Coastguard Worker 
427*15dc779aSAndroid Build Coastguard Worker   pstr_mps_state->num_parameter_sets_prev = ps;
428*15dc779aSAndroid Build Coastguard Worker   pstr_mps_state->num_parameter_sets = ps;
429*15dc779aSAndroid Build Coastguard Worker   frame->bs_independency_flag = 0;
430*15dc779aSAndroid Build Coastguard Worker   pstr_mps_state->aux_struct->num_ott_bands[0] = pstr_mps_state->num_parameter_bands;
431*15dc779aSAndroid Build Coastguard Worker 
432*15dc779aSAndroid Build Coastguard Worker   return;
433*15dc779aSAndroid Build Coastguard Worker }
434