xref: /aosp_15_r20/external/libxaac/decoder/ixheaacd_drc_freq_dec.c (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker  *                                                                            *
3*15dc779aSAndroid Build Coastguard Worker  * Copyright (C) 2018 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 <stdio.h>
22*15dc779aSAndroid Build Coastguard Worker #include <math.h>
23*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_common.h"
25*15dc779aSAndroid Build Coastguard Worker 
26*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_cnst.h"
27*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_constants.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 #include "ixheaacd_bitbuffer.h"
33*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_error_standards.h"
34*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_basic_op.h"
35*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_intrinsics.h"
36*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_defines.h"
37*15dc779aSAndroid Build Coastguard Worker 
38*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_aac_rom.h"
39*15dc779aSAndroid Build Coastguard Worker 
40*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_definitions.h"
41*15dc779aSAndroid Build Coastguard Worker 
42*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_error_codes.h"
43*15dc779aSAndroid Build Coastguard Worker 
44*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_pulsedata.h"
45*15dc779aSAndroid Build Coastguard Worker 
46*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_pns.h"
47*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_drc_data_struct.h"
48*15dc779aSAndroid Build Coastguard Worker 
49*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_lt_predict.h"
50*15dc779aSAndroid Build Coastguard Worker 
51*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ec_defines.h"
52*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ec_struct_def.h"
53*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_channelinfo.h"
54*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_drc_dec.h"
55*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrdecoder.h"
56*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_block.h"
57*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_channel.h"
58*15dc779aSAndroid Build Coastguard Worker 
59*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_payload.h"
60*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_common_rom.h"
61*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbrdecsettings.h"
62*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_scale.h"
63*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_extr_part.h"
64*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_sbr_rom.h"
65*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_stereo.h"
66*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_lpp_tran.h"
67*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_hybrid.h"
68*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_ps_dec.h"
69*15dc779aSAndroid Build Coastguard Worker 
70*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_env_extr.h"
71*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_adts.h"
72*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_audioobjtypes.h"
73*15dc779aSAndroid Build Coastguard Worker 
74*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_memory_standards.h"
75*15dc779aSAndroid Build Coastguard Worker 
76*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_latmdemux.h"
77*15dc779aSAndroid Build Coastguard Worker 
78*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_aacdec.h"
79*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_config.h"
80*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_polyphase.h"
81*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_qmf_dec.h"
82*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_macro_def.h"
83*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_struct_def.h"
84*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_res_rom.h"
85*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_aac_struct.h"
86*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_mps_dec.h"
87*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_struct_def.h"
88*15dc779aSAndroid Build Coastguard Worker 
89*15dc779aSAndroid Build Coastguard Worker #define DRC_SBR_ONE_Q25 (1 << 25)
90*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_mult32x16in32_shift29(WORD32 a,WORD32 b)91*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD32 ixheaacd_mult32x16in32_shift29(WORD32 a,
92*15dc779aSAndroid Build Coastguard Worker                                                              WORD32 b) {
93*15dc779aSAndroid Build Coastguard Worker   WORD32 result;
94*15dc779aSAndroid Build Coastguard Worker   WORD64 temp_result;
95*15dc779aSAndroid Build Coastguard Worker 
96*15dc779aSAndroid Build Coastguard Worker   temp_result = (WORD64)a * (WORD64)b;
97*15dc779aSAndroid Build Coastguard Worker 
98*15dc779aSAndroid Build Coastguard Worker   result = (WORD32)(temp_result >> 29);
99*15dc779aSAndroid Build Coastguard Worker 
100*15dc779aSAndroid Build Coastguard Worker   return (result);
101*15dc779aSAndroid Build Coastguard Worker }
102*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_mult32x16in32_shift25(WORD32 a,WORD32 b)103*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD32 ixheaacd_mult32x16in32_shift25(WORD32 a,
104*15dc779aSAndroid Build Coastguard Worker                                                              WORD32 b) {
105*15dc779aSAndroid Build Coastguard Worker   WORD32 result;
106*15dc779aSAndroid Build Coastguard Worker   WORD64 temp_result;
107*15dc779aSAndroid Build Coastguard Worker 
108*15dc779aSAndroid Build Coastguard Worker   temp_result = (WORD64)a * (WORD64)b;
109*15dc779aSAndroid Build Coastguard Worker 
110*15dc779aSAndroid Build Coastguard Worker   temp_result = temp_result >> 25;
111*15dc779aSAndroid Build Coastguard Worker 
112*15dc779aSAndroid Build Coastguard Worker   if (temp_result >= MAX_32)
113*15dc779aSAndroid Build Coastguard Worker     result = MAX_32;
114*15dc779aSAndroid Build Coastguard Worker   else if (temp_result < MIN_32)
115*15dc779aSAndroid Build Coastguard Worker     result = MIN_32;
116*15dc779aSAndroid Build Coastguard Worker   else
117*15dc779aSAndroid Build Coastguard Worker     result = (WORD32)temp_result;
118*15dc779aSAndroid Build Coastguard Worker 
119*15dc779aSAndroid Build Coastguard Worker   return (result);
120*15dc779aSAndroid Build Coastguard Worker }
121*15dc779aSAndroid Build Coastguard Worker 
122*15dc779aSAndroid Build Coastguard Worker static const WORD32 ixheaacd_drc_pow_tbl_2_q29[] = {
123*15dc779aSAndroid Build Coastguard Worker     536870912,  537242967,  537615991,  537988562,  538361391,  538734479,
124*15dc779aSAndroid Build Coastguard Worker     539108539,  539482144,  539856009,  540230847,  540605230,  540979873,
125*15dc779aSAndroid Build Coastguard Worker     541354776,  541730654,  542106077,  542481760,  542858421,  543234626,
126*15dc779aSAndroid Build Coastguard Worker     543611091,  543987817,  544365523,  544742772,  545120282,  545498775,
127*15dc779aSAndroid Build Coastguard Worker     545876810,  546255106,  546633664,  547013208,  547392292,  547771638,
128*15dc779aSAndroid Build Coastguard Worker     548151972,  548531845,  548911981,  549293107,  549673770,  550054698,
129*15dc779aSAndroid Build Coastguard Worker     550435889,  550818073,  551199794,  551581779,  551964758,  552347273,
130*15dc779aSAndroid Build Coastguard Worker     552730053,  553113099,  553497142,  553880719,  554264562,  554649404,
131*15dc779aSAndroid Build Coastguard Worker     555033779,  555418421,  555803330,  556189241,  556574683,  556960393,
132*15dc779aSAndroid Build Coastguard Worker     557347107,  557733352,  558119865,  558506646,  558894433,  559281751,
133*15dc779aSAndroid Build Coastguard Worker     559669337,  560057931,  560446055,  560834448,  561223110,  561612784,
134*15dc779aSAndroid Build Coastguard Worker     562001985,  562391456,  562781941,  563171952,  563562234,  563952786,
135*15dc779aSAndroid Build Coastguard Worker     564344355,  564735450,  565126815,  565519199,  565911108,  566303288,
136*15dc779aSAndroid Build Coastguard Worker     566695739,  567089213,  567482209,  567875478,  568269771,  568663586,
137*15dc779aSAndroid Build Coastguard Worker     569057673,  569452034,  569847421,  570242329,  570637511,  571033721,
138*15dc779aSAndroid Build Coastguard Worker     571429451,  571825455,  572221734,  572619044,  573015873,  573412977,
139*15dc779aSAndroid Build Coastguard Worker     573811114,  574208769,  574606699,  575005666,  575404148,  575802907,
140*15dc779aSAndroid Build Coastguard Worker     576201942,  576602016,  577001605,  577401471,  577802378,  578202799,
141*15dc779aSAndroid Build Coastguard Worker     578603497,  579004473,  579406493,  579808025,  580209836,  580612693,
142*15dc779aSAndroid Build Coastguard Worker     581015061,  581417708,  581820634,  582224610,  582628095,  583031860,
143*15dc779aSAndroid Build Coastguard Worker     583436676,  583841002,  584245607,  584650493,  585056433,  585461881,
144*15dc779aSAndroid Build Coastguard Worker     585867610,  586274395,  586680687,  587087260,  587494116,  587902030,
145*15dc779aSAndroid Build Coastguard Worker     588309450,  588717152,  589125916,  589534184,  589942735,  590351569,
146*15dc779aSAndroid Build Coastguard Worker     590761467,  591170869,  591580554,  591991306,  592401560,  592812098,
147*15dc779aSAndroid Build Coastguard Worker     593222920,  593634813,  594046205,  594457883,  594870633,  595282882,
148*15dc779aSAndroid Build Coastguard Worker     595695417,  596108238,  596522133,  596935527,  597349207,  597763964,
149*15dc779aSAndroid Build Coastguard Worker     598178218,  598592760,  599008380,  599423497,  599838901,  600254594,
150*15dc779aSAndroid Build Coastguard Worker     600671368,  601087637,  601504195,  601921837,  602338973,  602756397,
151*15dc779aSAndroid Build Coastguard Worker     603174111,  603592913,  604011207,  604429790,  604849464,  605268628,
152*15dc779aSAndroid Build Coastguard Worker     605688083,  606107829,  606528668,  606948996,  607369615,  607791330,
153*15dc779aSAndroid Build Coastguard Worker     608212533,  608634029,  609055816,  609478701,  609901074,  610323739,
154*15dc779aSAndroid Build Coastguard Worker     610747505,  611170757,  611594302,  612018141,  612443083,  612867510,
155*15dc779aSAndroid Build Coastguard Worker     613292231,  613718058,  614143369,  614568974,  614994874,  615421883,
156*15dc779aSAndroid Build Coastguard Worker     615848375,  616275162,  616703060,  617130439,  617558114,  617986086,
157*15dc779aSAndroid Build Coastguard Worker     618415172,  618843738,  619272600,  619702579,  620132037,  620561793,
158*15dc779aSAndroid Build Coastguard Worker     620991846,  621423019,  621853669,  622284618,  622716688,  623148235,
159*15dc779aSAndroid Build Coastguard Worker     623580081,  624012226,  624445496,  624878241,  625311285,  625745457,
160*15dc779aSAndroid Build Coastguard Worker     626179103,  626613049,  627048125,  627482673,  627917523,  628352674,
161*15dc779aSAndroid Build Coastguard Worker     628788957,  629224712,  629660769,  630097961,  630534623,  630971588,
162*15dc779aSAndroid Build Coastguard Worker     631408855,  631847261,  632285135,  632723313,  633162631,  633601417,
163*15dc779aSAndroid Build Coastguard Worker     634040507,  634479901,  634920439,  635360443,  635800752,  636242207,
164*15dc779aSAndroid Build Coastguard Worker     636683127,  637124352,  637565884,  638008564,  638450708,  638893159,
165*15dc779aSAndroid Build Coastguard Worker     639336761,  639779826,  640223197,  640666876,  641111710,  641556004,
166*15dc779aSAndroid Build Coastguard Worker     642000607,  642446367,  642891586,  643337114,  643782951,  644229948,
167*15dc779aSAndroid Build Coastguard Worker     644676404,  645123169,  645571097,  646018482,  646466177,  646914182,
168*15dc779aSAndroid Build Coastguard Worker     647363354,  647811981,  648260918,  648711025,  649160586,  649610458,
169*15dc779aSAndroid Build Coastguard Worker     650060643,  650511999,  650962808,  651413929,  651866225,  652317973,
170*15dc779aSAndroid Build Coastguard Worker     652770033,  653223271,  653675959,  654128960,  654582276,  655036772,
171*15dc779aSAndroid Build Coastguard Worker     655490716,  655944976,  656400417,  656855307,  657310512,  657766033,
172*15dc779aSAndroid Build Coastguard Worker     658222739,  658678891,  659135360,  659593017,  660050119,  660507538,
173*15dc779aSAndroid Build Coastguard Worker     660965274,  661424202,  661882573,  662341262,  662801145,  663260471,
174*15dc779aSAndroid Build Coastguard Worker     663720114,  664180077,  664641237,  665101837,  665562757,  666024877,
175*15dc779aSAndroid Build Coastguard Worker     666486436,  666948316,  667410515,  667873918,  668336759,  668799921,
176*15dc779aSAndroid Build Coastguard Worker     669264288,  669728093,  670192218,  670656666,  671122323,  671587415,
177*15dc779aSAndroid Build Coastguard Worker     672052829,  672519455,  672985516,  673451899,  673918605,  674386527,
178*15dc779aSAndroid Build Coastguard Worker     674853881,  675321559,  675790455,  676258782,  676727434,  677196410,
179*15dc779aSAndroid Build Coastguard Worker     677666608,  678136235,  678606188,  679077364,  679547969,  680018900,
180*15dc779aSAndroid Build Coastguard Worker     680490157,  680962642,  681434553,  681906792,  682380260,  682853154,
181*15dc779aSAndroid Build Coastguard Worker     683326375,  683800829,  684274707,  684748914,  685223450,  685699220,
182*15dc779aSAndroid Build Coastguard Worker     686174414,  686649938,  687126699,  687602882,  688079395,  688556239,
183*15dc779aSAndroid Build Coastguard Worker     689034324,  689511829,  689989665,  690468745,  690947244,  691426075,
184*15dc779aSAndroid Build Coastguard Worker     691905238,  692385648,  692865476,  693345636,  693827046,  694307873,
185*15dc779aSAndroid Build Coastguard Worker     694789033,  695270526,  695753273,  696235434,  696717930,  697201682,
186*15dc779aSAndroid Build Coastguard Worker     697684847,  698168347,  698652182,  699137277,  699621784,  700106626,
187*15dc779aSAndroid Build Coastguard Worker     700592731,  701078246,  701564098,  702050286,  702537740,  703024604,
188*15dc779aSAndroid Build Coastguard Worker     703511804,  704000273,  704488150,  704976365,  705464918,  705954743,
189*15dc779aSAndroid Build Coastguard Worker     706443974,  706933544,  707424389,  707914639,  708405228,  708896158,
190*15dc779aSAndroid Build Coastguard Worker     709388365,  709879976,  710371927,  710865159,  711357793,  711850769,
191*15dc779aSAndroid Build Coastguard Worker     712345028,  712838688,  713332689,  713827033,  714322665,  714817695,
192*15dc779aSAndroid Build Coastguard Worker     715313068,  715809731,  716305792,  716802196,  717298945,  717796987,
193*15dc779aSAndroid Build Coastguard Worker     718294425,  718792207,  719291286,  719789759,  720288578,  720787743,
194*15dc779aSAndroid Build Coastguard Worker     721288207,  721788064,  722288268,  722789774,  723290672,  723791917,
195*15dc779aSAndroid Build Coastguard Worker     724293510,  724796408,  725298697,  725801333,  726305278,  726808613,
196*15dc779aSAndroid Build Coastguard Worker     727312296,  727816328,  728321672,  728826404,  729331485,  729837881,
197*15dc779aSAndroid Build Coastguard Worker     730343664,  730849797,  731356280,  731864082,  732371269,  732878807,
198*15dc779aSAndroid Build Coastguard Worker     733387666,  733895909,  734404503,  734913450,  735423722,  735933376,
199*15dc779aSAndroid Build Coastguard Worker     736443382,  736954717,  737465431,  737976499,  738487922,  739000676,
200*15dc779aSAndroid Build Coastguard Worker     739512808,  740025295,  740539116,  741052315,  741565869,  742079779,
201*15dc779aSAndroid Build Coastguard Worker     742595027,  743109650,  743624629,  744140950,  744656644,  745172696,
202*15dc779aSAndroid Build Coastguard Worker     745690092,  746206860,  746723986,  747241470,  747760302,  748278505,
203*15dc779aSAndroid Build Coastguard Worker     748797067,  749316978,  749836260,  750355901,  750875903,  751397258,
204*15dc779aSAndroid Build Coastguard Worker     751917981,  752439065,  752961506,  753483313,  754005482,  754528012,
205*15dc779aSAndroid Build Coastguard Worker     755051903,  755575159,  756098778,  756623759,  757148104,  757672813,
206*15dc779aSAndroid Build Coastguard Worker     758197885,  758724324,  759250125,  759776290,  760303825,  760830721,
207*15dc779aSAndroid Build Coastguard Worker     761357981,  761885607,  762414607,  762942965,  763471690,  764001790,
208*15dc779aSAndroid Build Coastguard Worker     764531249,  765061074,  765591266,  766122838,  766653766,  767185062,
209*15dc779aSAndroid Build Coastguard Worker     767717742,  768249775,  768782177,  769314948,  769849106,  770382616,
210*15dc779aSAndroid Build Coastguard Worker     770916497,  771451767,  771986388,  772521379,  773057763,  773593497,
211*15dc779aSAndroid Build Coastguard Worker     774129603,  774666080,  775203953,  775741174,  776278768,  776817761,
212*15dc779aSAndroid Build Coastguard Worker     777356101,  777894814,  778433900,  778974389,  779514224,  780054432,
213*15dc779aSAndroid Build Coastguard Worker     780596047,  781137005,  781678338,  782220046,  782763164,  783305624,
214*15dc779aSAndroid Build Coastguard Worker     783848460,  784392709,  784936298,  785480264,  786024607,  786570367,
215*15dc779aSAndroid Build Coastguard Worker     787115466,  787660942,  788207838,  788754071,  789300683,  789847673,
216*15dc779aSAndroid Build Coastguard Worker     790396087,  790943837,  791491966,  792041522,  792590412,  793139683,
217*15dc779aSAndroid Build Coastguard Worker     793689333,  794240415,  794790829,  795341624,  795893853,  796445413,
218*15dc779aSAndroid Build Coastguard Worker     796997355,  797549679,  798103441,  798656532,  799210006,  799764921,
219*15dc779aSAndroid Build Coastguard Worker     800319163,  800873790,  801428800,  801985256,  802541037,  803097203,
220*15dc779aSAndroid Build Coastguard Worker     803654817,  804211755,  804769079,  805326789,  805885951,  806444435,
221*15dc779aSAndroid Build Coastguard Worker     807003307,  807563633,  808123280,  808683314,  809243737,  809805619,
222*15dc779aSAndroid Build Coastguard Worker     810366819,  810928409,  811491460,  812053829,  812616587,  813179736,
223*15dc779aSAndroid Build Coastguard Worker     813744351,  814308281,  814872602,  815438392,  816003496,  816568991,
224*15dc779aSAndroid Build Coastguard Worker     817135959,  817702240,  818268913,  818835978,  819404520,  819972373,
225*15dc779aSAndroid Build Coastguard Worker     820540619,  821110344,  821679379,  822248808,  822818632,  823389939,
226*15dc779aSAndroid Build Coastguard Worker     823960554,  824531564,  825104060,  825675863,  826248061,  826820657,
227*15dc779aSAndroid Build Coastguard Worker     827394742,  827968132,  828541920,  829117201,  829691784,  830266766,
228*15dc779aSAndroid Build Coastguard Worker     830842146,  831419024,  831995203,  832571781,  833149860,  833727238,
229*15dc779aSAndroid Build Coastguard Worker     834305017,  834883195,  835462879,  836041861,  836621243,  837202134,
230*15dc779aSAndroid Build Coastguard Worker     837782320,  838362909,  838943900,  839526403,  840108200,  840690401,
231*15dc779aSAndroid Build Coastguard Worker     841274117,  841857125,  842440538,  843025469,  843609691,  844194318,
232*15dc779aSAndroid Build Coastguard Worker     844779350,  845365905,  845951749,  846537999,  847125775,  847712839,
233*15dc779aSAndroid Build Coastguard Worker     848300310,  848888187,  849477595,  850066289,  850655390,  851246025,
234*15dc779aSAndroid Build Coastguard Worker     851835944,  852426272,  853017009,  853609284,  854200840,  854792807,
235*15dc779aSAndroid Build Coastguard Worker     855386315,  855979103,  856572302,  857165912,  857761068,  858355502,
236*15dc779aSAndroid Build Coastguard Worker     858950348,  859546742,  860142413,  860738498,  861334995,  861933045,
237*15dc779aSAndroid Build Coastguard Worker     862530370,  863128110,  863727405,  864325973,  864924957,  865524355,
238*15dc779aSAndroid Build Coastguard Worker     866125314,  866725545,  867326191,  867928401,  868529881,  869131778,
239*15dc779aSAndroid Build Coastguard Worker     869734092,  870337974,  870941124,  871544692,  872149831,  872754236,
240*15dc779aSAndroid Build Coastguard Worker     873359061,  873964304,  874571123,  875177207,  875783710,  876391792,
241*15dc779aSAndroid Build Coastguard Worker     876999138,  877606904,  878215091,  878824861,  879433893,  880043346,
242*15dc779aSAndroid Build Coastguard Worker     880654386,  881264685,  881875407,  882486553,  883099289,  883711283,
243*15dc779aSAndroid Build Coastguard Worker     884323700,  884937712,  885550980,  886164672,  886778790,  887394507,
244*15dc779aSAndroid Build Coastguard Worker     888009477,  888624873,  889241872,  889858122,  890474799,  891093082,
245*15dc779aSAndroid Build Coastguard Worker     891710615,  892328577,  892946966,  893566965,  894186213,  894805890,
246*15dc779aSAndroid Build Coastguard Worker     895427180,  896047717,  896668684,  897290081,  897913096,  898535355,
247*15dc779aSAndroid Build Coastguard Worker     899158046,  899782358,  900405913,  901029900,  901654319,  902280365,
248*15dc779aSAndroid Build Coastguard Worker     902905651,  903531370,  904158719,  904785306,  905412328,  906039785,
249*15dc779aSAndroid Build Coastguard Worker     906668875,  907297202,  907925965,  908556365,  909186000,  909816072,
250*15dc779aSAndroid Build Coastguard Worker     910446581,  911078730,  911710114,  912341935,  912975401,  913608099,
251*15dc779aSAndroid Build Coastguard Worker     914241235,  914874810,  915510034,  916144489,  916779383,  917415930,
252*15dc779aSAndroid Build Coastguard Worker     918051705,  918687921,  919325793,  919962891,  920600432,  921238414,
253*15dc779aSAndroid Build Coastguard Worker     921878057,  922516924,  923156234,  923797209,  924437406,  925078047,
254*15dc779aSAndroid Build Coastguard Worker     925719132,  926361886,  927003861,  927646281,  928290373,  928933684,
255*15dc779aSAndroid Build Coastguard Worker     929577441,  930221644,  930867524,  931512622,  932158166,  932805391,
256*15dc779aSAndroid Build Coastguard Worker     933451831,  934098719,  934746055,  935395077,  936043312,  936691996,
257*15dc779aSAndroid Build Coastguard Worker     937342369,  937991953,  938641988,  939292472,  939944651,  940596039,
258*15dc779aSAndroid Build Coastguard Worker     941247878,  941901414,  942554158,  943207354,  943861002,  944516353,
259*15dc779aSAndroid Build Coastguard Worker     945170909,  945825918,  946482633,  947138552,  947794925,  948451753,
260*15dc779aSAndroid Build Coastguard Worker     949110291,  949768030,  950426226,  951086135,  951745243,  952404809,
261*15dc779aSAndroid Build Coastguard Worker     953064832,  953726573,  954387511,  955048908,  955712027,  956374341,
262*15dc779aSAndroid Build Coastguard Worker     957037115,  957700348,  958365307,  959029460,  959694074,  960360418,
263*15dc779aSAndroid Build Coastguard Worker     961025954,  961691951,  962358410,  963026603,  963693987,  964361833,
264*15dc779aSAndroid Build Coastguard Worker     965031418,  965700191,  966369428,  967039128,  967710571,  968381201,
265*15dc779aSAndroid Build Coastguard Worker     969052296,  969725137,  970397163,  971069654,  971743897,  972417321,
266*15dc779aSAndroid Build Coastguard Worker     973091213,  973765571,  974441685,  975116980,  975792742,  976470264,
267*15dc779aSAndroid Build Coastguard Worker     977146964,  977824133,  978501771,  979181174,  979859753,  980538802,
268*15dc779aSAndroid Build Coastguard Worker     981219619,  981899611,  982580073,  983261008,  983943715,  984625594,
269*15dc779aSAndroid Build Coastguard Worker     985307946,  985992074,  986675373,  987359145,  988043392,  988729419,
270*15dc779aSAndroid Build Coastguard Worker     989414615,  990100286,  990787742,  991474364,  992161462,  992849036,
271*15dc779aSAndroid Build Coastguard Worker     993538401,  994226929,  994915935,  995606734,  996296696,  996987136,
272*15dc779aSAndroid Build Coastguard Worker     997678055,  998370772,  999062649,  999755006,  1000449165, 1001142483,
273*15dc779aSAndroid Build Coastguard Worker     1001836281, 1002531886, 1003226647, 1003921889, 1004617614, 1005315149,
274*15dc779aSAndroid Build Coastguard Worker     1006011839, 1006709012, 1007407999, 1008106140, 1008804764, 1009503872,
275*15dc779aSAndroid Build Coastguard Worker     1010204800, 1010904879, 1011605442, 1012307830, 1013009365, 1013711388,
276*15dc779aSAndroid Build Coastguard Worker     1014413896, 1015118233, 1015821717, 1016525688, 1017231492, 1017936440,
277*15dc779aSAndroid Build Coastguard Worker     1018641876, 1019347801, 1020055565, 1020762470, 1021469865, 1022179101,
278*15dc779aSAndroid Build Coastguard Worker     1022887478, 1023596346, 1024305704, 1025016910, 1025727253, 1026438089,
279*15dc779aSAndroid Build Coastguard Worker     1027150775, 1027862597, 1028574913, 1029287722, 1030002386, 1030716185,
280*15dc779aSAndroid Build Coastguard Worker     1031430478, 1032146630, 1032861915, 1033577694, 1034293970, 1035012111,
281*15dc779aSAndroid Build Coastguard Worker     1035729381, 1036447148, 1037166784, 1037885547, 1038604809, 1039324569,
282*15dc779aSAndroid Build Coastguard Worker     1040046202, 1040766961, 1041488219, 1042211355, 1042933614, 1043656374,
283*15dc779aSAndroid Build Coastguard Worker     1044379635, 1045104778, 1045829042, 1046553809, 1047280462, 1048006234,
284*15dc779aSAndroid Build Coastguard Worker     1048732509, 1049459287, 1050187958, 1050915745, 1051644036, 1052374224,
285*15dc779aSAndroid Build Coastguard Worker     1053103526, 1053833333, 1054563647, 1055295861, 1056027188, 1056759022,
286*15dc779aSAndroid Build Coastguard Worker     1057492761, 1058225610, 1058958967, 1059694233, 1060428608, 1061163492,
287*15dc779aSAndroid Build Coastguard Worker     1061898885, 1062636193, 1063372607, 1064109531, 1064848373, 1065586320,
288*15dc779aSAndroid Build Coastguard Worker     1066324778, 1067063748, 1067804642, 1068544637, 1069285146, 1070027582,
289*15dc779aSAndroid Build Coastguard Worker     1070769118, 1071511168, 1072253732, 1072998229};
290*15dc779aSAndroid Build Coastguard Worker 
291*15dc779aSAndroid Build Coastguard Worker static const WORD32 ixheaacd_drc_pow_tbl_1_2_q29[] = {
292*15dc779aSAndroid Build Coastguard Worker     536870912, 536499115, 536126866, 535755584, 535384559, 535013791, 534642573,
293*15dc779aSAndroid Build Coastguard Worker     534272319, 533902321, 533531874, 533162389, 532793160, 532424187, 532054765,
294*15dc779aSAndroid Build Coastguard Worker     531686303, 531318096, 530949443, 530581746, 530214304, 529847117, 529479484,
295*15dc779aSAndroid Build Coastguard Worker     529112805, 528746380, 528379511, 528013594, 527647931, 527282520, 526916667,
296*15dc779aSAndroid Build Coastguard Worker     526551763, 526187112, 525822018, 525457872, 525093979, 524729644, 524366255,
297*15dc779aSAndroid Build Coastguard Worker     524003117, 523640231, 523276904, 522914521, 522552389, 522189817, 521828187,
298*15dc779aSAndroid Build Coastguard Worker     521466807, 521105678, 520744110, 520383480, 520023101, 519662284, 519302404,
299*15dc779aSAndroid Build Coastguard Worker     518942774, 518583392, 518223574, 517864691, 517506056, 517146985, 516788847,
300*15dc779aSAndroid Build Coastguard Worker     516430957, 516073315, 515715239, 515358092, 515001193, 514643861, 514287456,
301*15dc779aSAndroid Build Coastguard Worker     513931299, 513575388, 513219044, 512863627, 512508455, 512152852, 511798173,
302*15dc779aSAndroid Build Coastguard Worker     511443739, 511089551, 510734932, 510381235, 510027782, 509673901, 509320938,
303*15dc779aSAndroid Build Coastguard Worker     508968220, 508615746, 508262844, 507910858, 507559117, 507206948, 506855694,
304*15dc779aSAndroid Build Coastguard Worker     506504683, 506153915, 505802721, 505452439, 505102400, 504751936, 504402382,
305*15dc779aSAndroid Build Coastguard Worker     504053070, 503704000, 503354506, 503005920, 502657575, 502308807, 501960945,
306*15dc779aSAndroid Build Coastguard Worker     501613323, 501265280, 500918141, 500571242, 500224583, 499877503, 499531325,
307*15dc779aSAndroid Build Coastguard Worker     499185386, 498839027, 498493568, 498148348, 497803367, 497457967, 497113465,
308*15dc779aSAndroid Build Coastguard Worker     496769200, 496424518, 496080731, 495737182, 495393871, 495050143, 494707308,
309*15dc779aSAndroid Build Coastguard Worker     494364710, 494021696, 493679573, 493337687, 492996037, 492653973, 492312797,
310*15dc779aSAndroid Build Coastguard Worker     491971857, 491630504, 491290037, 490949805, 490609809, 490269401, 489929876,
311*15dc779aSAndroid Build Coastguard Worker     489590587, 489250886, 488912067, 488573482, 488235132, 487896371, 487558490,
312*15dc779aSAndroid Build Coastguard Worker     487220843, 486882786, 486545606, 486208661, 485871948, 485534827, 485198581,
313*15dc779aSAndroid Build Coastguard Worker     484862569, 484526148, 484190601, 483855286, 483520203, 483184714, 482850096,
314*15dc779aSAndroid Build Coastguard Worker     482515709, 482180917, 481846994, 481513302, 481179205, 480845976, 480512977,
315*15dc779aSAndroid Build Coastguard Worker     480180209, 479847037, 479514730, 479182654, 478850174, 478518557, 478187171,
316*15dc779aSAndroid Build Coastguard Worker     477856013, 477524454, 477193756, 476863286, 476532416, 476202404, 475872622,
317*15dc779aSAndroid Build Coastguard Worker     475543067, 475213113, 474884015, 474555145, 474225876, 473897462, 473569276,
318*15dc779aSAndroid Build Coastguard Worker     473241317, 472912959, 472585454, 472258176, 471930501, 471603677, 471277079,
319*15dc779aSAndroid Build Coastguard Worker     470950707, 470623939, 470298019, 469972325, 469646236, 469320994, 468995977,
320*15dc779aSAndroid Build Coastguard Worker     468671184, 468345998, 468021656, 467697539, 467373028, 467049359, 466725915,
321*15dc779aSAndroid Build Coastguard Worker     466402695, 466079083, 465756311, 465433762, 465110822, 464788720, 464466842,
322*15dc779aSAndroid Build Coastguard Worker     464145186, 463823140, 463501930, 463180943, 462859566, 462539024, 462218703,
323*15dc779aSAndroid Build Coastguard Worker     461898604, 461578117, 461258462, 460939028, 460619207, 460300216, 459981446,
324*15dc779aSAndroid Build Coastguard Worker     459662289, 459343960, 459025852, 458707965, 458389691, 458072244, 457755017,
325*15dc779aSAndroid Build Coastguard Worker     457437405, 457120617, 456804049, 456487700, 456170967, 455855057, 455539365,
326*15dc779aSAndroid Build Coastguard Worker     455223290, 454908036, 454593000, 454278182, 453962983, 453648601, 453334438,
327*15dc779aSAndroid Build Coastguard Worker     453019893, 452706164, 452392653, 452079359, 451765685, 451452825, 451140182,
328*15dc779aSAndroid Build Coastguard Worker     450827160, 450514950, 450202956, 449891179, 449579023, 449267678, 448956548,
329*15dc779aSAndroid Build Coastguard Worker     448645040, 448334342, 448023858, 447713590, 447402945, 447093107, 446783483,
330*15dc779aSAndroid Build Coastguard Worker     446473483, 446164288, 445855308, 445546541, 445237400, 444929061, 444620936,
331*15dc779aSAndroid Build Coastguard Worker     444312437, 444004738, 443697253, 443389981, 443082336, 442775490, 442468856,
332*15dc779aSAndroid Build Coastguard Worker     442161850, 441855641, 441549645, 441243276, 440937704, 440632343, 440327193,
333*15dc779aSAndroid Build Coastguard Worker     440021673, 439716946, 439412431, 439107545, 438803452, 438499569, 438195896,
334*15dc779aSAndroid Build Coastguard Worker     437891855, 437588603, 437285562, 436982152, 436679530, 436377118, 436074915,
335*15dc779aSAndroid Build Coastguard Worker     435772346, 435470562, 435168987, 434867046, 434565889, 434264941, 433964201,
336*15dc779aSAndroid Build Coastguard Worker     433663096, 433362772, 433062657, 432762178, 432462478, 432162987, 431863702,
337*15dc779aSAndroid Build Coastguard Worker     431564055, 431265185, 430966523, 430667498, 430369249, 430071207, 429773371,
338*15dc779aSAndroid Build Coastguard Worker     429475174, 429177751, 428880534, 428582956, 428286151, 427989552, 427693157,
339*15dc779aSAndroid Build Coastguard Worker     427396403, 427100420, 426804642, 426508504, 426213136, 425917972, 425623013,
340*15dc779aSAndroid Build Coastguard Worker     425327695, 425033144, 424738798, 424444094, 424150155, 423856420, 423562888,
341*15dc779aSAndroid Build Coastguard Worker     423269000, 422975875, 422682953, 422389675, 422097159, 421804845, 421512177,
342*15dc779aSAndroid Build Coastguard Worker     421220269, 420928563, 420637058, 420345200, 420054100, 419763202, 419471950,
343*15dc779aSAndroid Build Coastguard Worker     419181454, 418891160, 418601067, 418310622, 418020930, 417731440, 417441598,
344*15dc779aSAndroid Build Coastguard Worker     417152508, 416863619, 416574930, 416285891, 415997602, 415709512, 415421073,
345*15dc779aSAndroid Build Coastguard Worker     415133383, 414845892, 414558600, 414270960, 413984066, 413697371, 413410328,
346*15dc779aSAndroid Build Coastguard Worker     413124031, 412837931, 412552030, 412265782, 411980277, 411694970, 411409316,
347*15dc779aSAndroid Build Coastguard Worker     411124404, 410839690, 410555172, 410270309, 409986186, 409702260, 409417989,
348*15dc779aSAndroid Build Coastguard Worker     409134456, 408851120, 408567980, 408284496, 408001748, 407719196, 407436301,
349*15dc779aSAndroid Build Coastguard Worker     407154140, 406872175, 406590406, 406308294, 406026914, 405745730, 405464204,
350*15dc779aSAndroid Build Coastguard Worker     405183410, 404902809, 404621868, 404341657, 404061640, 403781816, 403501653,
351*15dc779aSAndroid Build Coastguard Worker     403222218, 402942976, 402663395, 402384540, 402105878, 401827409, 401548602,
352*15dc779aSAndroid Build Coastguard Worker     401270518, 400992628, 400714400, 400436895, 400159582, 399882461, 399605003,
353*15dc779aSAndroid Build Coastguard Worker     399328266, 399051721, 398774839, 398498677, 398222706, 397946927, 397670812,
354*15dc779aSAndroid Build Coastguard Worker     397395415, 397120208, 396844667, 396569841, 396295206, 396020761, 395745983,
355*15dc779aSAndroid Build Coastguard Worker     395471919, 395198044, 394923836, 394650341, 394377035, 394103919, 393830471,
356*15dc779aSAndroid Build Coastguard Worker     393557733, 393285184, 393012304, 392740132, 392468149, 392196355, 391924230,
357*15dc779aSAndroid Build Coastguard Worker     391652812, 391381582, 391110023, 390839169, 390568502, 390298023, 390027216,
358*15dc779aSAndroid Build Coastguard Worker     389757112, 389487195, 389216950, 388947407, 388678050, 388408881, 388139384,
359*15dc779aSAndroid Build Coastguard Worker     387870587, 387601977, 387333040, 387064801, 386796749, 386528371, 386260690,
360*15dc779aSAndroid Build Coastguard Worker     385993194, 385725883, 385458248, 385191308, 384924553, 384657474, 384391089,
361*15dc779aSAndroid Build Coastguard Worker     384124887, 383858871, 383592531, 383326883, 383061419, 382795633, 382530537,
362*15dc779aSAndroid Build Coastguard Worker     382265624, 382000895, 381735845, 381471483, 381207303, 380942804, 380678991,
363*15dc779aSAndroid Build Coastguard Worker     380415360, 380151913, 379888145, 379625062, 379362162, 379098943, 378836406,
364*15dc779aSAndroid Build Coastguard Worker     378574052, 378311880, 378049389, 377787580, 377525952, 377264006, 377002741,
365*15dc779aSAndroid Build Coastguard Worker     376741656, 376480753, 376219533, 375958991, 375698629, 375437951, 375177951,
366*15dc779aSAndroid Build Coastguard Worker     374918130, 374658489, 374398533, 374139252, 373880151, 373620735, 373361993,
367*15dc779aSAndroid Build Coastguard Worker     373103430, 372844553, 372586348, 372328322, 372070475, 371812315, 371554825,
368*15dc779aSAndroid Build Coastguard Worker     371297513, 371039889, 370782934, 370526157, 370269558, 370012648, 369756404,
369*15dc779aSAndroid Build Coastguard Worker     369500338, 369243961, 368988250, 368732715, 368477358, 368221691, 367966688,
370*15dc779aSAndroid Build Coastguard Worker     367711861, 367456725, 367202252, 366947954, 366693833, 366439403, 366185634,
371*15dc779aSAndroid Build Coastguard Worker     365932041, 365678140, 365424898, 365171832, 364918941, 364665743, 364413202,
372*15dc779aSAndroid Build Coastguard Worker     364160836, 363908164, 363656148, 363404306, 363152639, 362900667, 362649348,
373*15dc779aSAndroid Build Coastguard Worker     362398204, 362146755, 361895959, 361645336, 361394887, 361144134, 360894032,
374*15dc779aSAndroid Build Coastguard Worker     360644103, 360393871, 360144289, 359894880, 359645643, 359396104, 359147212,
375*15dc779aSAndroid Build Coastguard Worker     358898493, 358649472, 358401098, 358152896, 357904865, 357656534, 357408847,
376*15dc779aSAndroid Build Coastguard Worker     357161332, 356913517, 356666345, 356419344, 356172514, 355925384, 355678897,
377*15dc779aSAndroid Build Coastguard Worker     355432580, 355185964, 354939988, 354694182, 354448547, 354202614, 353957319,
378*15dc779aSAndroid Build Coastguard Worker     353712195, 353466772, 353221987, 352977371, 352732459, 352488182, 352244075,
379*15dc779aSAndroid Build Coastguard Worker     352000137, 351755902, 351512302, 351268870, 351025143, 350782049, 350539123,
380*15dc779aSAndroid Build Coastguard Worker     350296365, 350053313, 349810892, 349568639, 349326091, 349084174, 348842424,
381*15dc779aSAndroid Build Coastguard Worker     348600841, 348358965, 348117717, 347876636, 347635263, 347394516, 347153937,
382*15dc779aSAndroid Build Coastguard Worker     346913523, 346672818, 346432738, 346192824, 345952619, 345713038, 345473622,
383*15dc779aSAndroid Build Coastguard Worker     345234373, 344994832, 344755914, 344517162, 344278119, 344039698, 343801441,
384*15dc779aSAndroid Build Coastguard Worker     343563349, 343324969, 343087207, 342849610, 342611725, 342374457, 342137354,
385*15dc779aSAndroid Build Coastguard Worker     341899962, 341663188, 341426577, 341190130, 340953396, 340717277, 340481321,
386*15dc779aSAndroid Build Coastguard Worker     340245079, 340009450, 339773984, 339538682, 339303094, 339068117, 338833304,
387*15dc779aSAndroid Build Coastguard Worker     338598205, 338363717, 338129391, 337895227, 337660780, 337426941, 337193263,
388*15dc779aSAndroid Build Coastguard Worker     336959303, 336725949, 336492758, 336259728, 336026415, 335793707, 335561161,
389*15dc779aSAndroid Build Coastguard Worker     335328333, 335096109, 334864046, 334632144, 334399960, 334168380, 333936959,
390*15dc779aSAndroid Build Coastguard Worker     333705258, 333474158, 333243218, 333012438, 332781379, 332550919, 332320618,
391*15dc779aSAndroid Build Coastguard Worker     332090038, 331860057, 331630235, 331400573, 331170631, 330941287, 330712101,
392*15dc779aSAndroid Build Coastguard Worker     330482637, 330253769, 330025060, 329796509, 329567680, 329339446, 329111369,
393*15dc779aSAndroid Build Coastguard Worker     328883016, 328655256, 328427654, 328200209, 327972488, 327745358, 327518386,
394*15dc779aSAndroid Build Coastguard Worker     327291138, 327064480, 326837979, 326611635, 326385017, 326158986, 325933113,
395*15dc779aSAndroid Build Coastguard Worker     325706965, 325481404, 325255999, 325030751, 324805229, 324580293, 324355513,
396*15dc779aSAndroid Build Coastguard Worker     324130459, 323905990, 323681677, 323457091, 323233088, 323009241, 322785548,
397*15dc779aSAndroid Build Coastguard Worker     322561584, 322338202, 322114974, 321891476, 321668557, 321445793, 321223183,
398*15dc779aSAndroid Build Coastguard Worker     321000303, 320778002, 320555855, 320333438, 320111599, 319889913, 319668381,
399*15dc779aSAndroid Build Coastguard Worker     319446579, 319225354, 319004282, 318782942, 318562176, 318341563, 318121103,
400*15dc779aSAndroid Build Coastguard Worker     317900376, 317680221, 317460219, 317239950, 317020253, 316800708, 316581315,
401*15dc779aSAndroid Build Coastguard Worker     316361656, 316142567, 315923630, 315704427, 315485794, 315267311, 315048981,
402*15dc779aSAndroid Build Coastguard Worker     314830385, 314612356, 314394479, 314176337, 313958761, 313741337, 313523648,
403*15dc779aSAndroid Build Coastguard Worker     313306525, 313089551, 312872729, 312655643, 312439120, 312222748, 312006113,
404*15dc779aSAndroid Build Coastguard Worker     311790040, 311574117, 311358344, 311142309, 310926835, 310711510, 310495923,
405*15dc779aSAndroid Build Coastguard Worker     310280896, 310066019, 309851290, 309636300, 309421869, 309207586, 308993043,
406*15dc779aSAndroid Build Coastguard Worker     308779057, 308565219, 308351530, 308137581, 307924187, 307710942, 307497437,
407*15dc779aSAndroid Build Coastguard Worker     307284487, 307071684, 306859029, 306646116, 306433755, 306221542, 306009071,
408*15dc779aSAndroid Build Coastguard Worker     305797151, 305585378, 305373753, 305161870, 304950537, 304739351, 304527908,
409*15dc779aSAndroid Build Coastguard Worker     304317014, 304106267, 303895665, 303684808, 303474498, 303264334, 303053915,
410*15dc779aSAndroid Build Coastguard Worker     302844042, 302634314, 302424732, 302214895, 302005603, 301796456, 301587056,
411*15dc779aSAndroid Build Coastguard Worker     301378199, 301169486, 300960918, 300752097, 300543819, 300335684, 300127297,
412*15dc779aSAndroid Build Coastguard Worker     299919451, 299711748, 299504190, 299296380, 299089109, 298881982, 298674603,
413*15dc779aSAndroid Build Coastguard Worker     298467763, 298261067, 298054513, 297847708, 297641441, 297435316, 297228942,
414*15dc779aSAndroid Build Coastguard Worker     297023103, 296817406, 296611460, 296406049, 296200780, 295995653, 295790277,
415*15dc779aSAndroid Build Coastguard Worker     295585435, 295380734, 295175785, 294971367, 294767092, 294562958, 294358576,
416*15dc779aSAndroid Build Coastguard Worker     294154725, 293951015, 293747058, 293543630, 293340343, 293137197, 292933805,
417*15dc779aSAndroid Build Coastguard Worker     292730940, 292528217, 292325247, 292122804, 291920501, 291718338, 291515930,
418*15dc779aSAndroid Build Coastguard Worker     291314047, 291112305, 290910317, 290708854, 290507530, 290306346, 290104918,
419*15dc779aSAndroid Build Coastguard Worker     289904013, 289703246, 289502236, 289301748, 289101399, 288901189, 288700736,
420*15dc779aSAndroid Build Coastguard Worker     288500803, 288301008, 288100971, 287901454, 287702074, 287502453, 287303350,
421*15dc779aSAndroid Build Coastguard Worker     287104385, 286905557, 286706488, 286507937, 286309522, 286110867, 285912728,
422*15dc779aSAndroid Build Coastguard Worker     285714725, 285516860, 285318755, 285121164, 284923710, 284726017, 284528837,
423*15dc779aSAndroid Build Coastguard Worker     284331793, 284134885, 283937739, 283741105, 283544606, 283347870, 283151644,
424*15dc779aSAndroid Build Coastguard Worker     282955554, 282759600, 282563407, 282367725, 282172178, 281976393, 281781117,
425*15dc779aSAndroid Build Coastguard Worker     281585976, 281390970, 281195728, 281000992, 280806392, 280611555, 280417224,
426*15dc779aSAndroid Build Coastguard Worker     280223028, 280028966, 279834668, 279640875, 279447217, 279253323, 279059933,
427*15dc779aSAndroid Build Coastguard Worker     278866676, 278673554, 278480197, 278287342, 278094620, 277901665, 277709211,
428*15dc779aSAndroid Build Coastguard Worker     277516890, 277324702, 277132281, 276940359, 276748571, 276556549, 276365027,
429*15dc779aSAndroid Build Coastguard Worker     276173637, 275982379, 275790889, 275599897, 275409037, 275217945, 275027349,
430*15dc779aSAndroid Build Coastguard Worker     274836885, 274646553, 274455990, 274265922, 274075986, 273885819, 273696146,
431*15dc779aSAndroid Build Coastguard Worker     273506604, 273317193, 273127553, 272938405, 272749388, 272560141, 272371386,
432*15dc779aSAndroid Build Coastguard Worker     272182762, 271993908, 271805545, 271617313, 271429211, 271240880, 271053039,
433*15dc779aSAndroid Build Coastguard Worker     270865327, 270677388, 270489937, 270302615, 270115423, 269928004, 269741072,
434*15dc779aSAndroid Build Coastguard Worker     269554269, 269367240, 269180696, 268994281, 268807995, 268621484};
435*15dc779aSAndroid Build Coastguard Worker 
436*15dc779aSAndroid Build Coastguard Worker #define MUL_DRC_BAND 4
437*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_div_by_30(WORD32 op)438*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD32 ixheaacd_div_by_30(WORD32 op) {
439*15dc779aSAndroid Build Coastguard Worker   WORD32 ret;
440*15dc779aSAndroid Build Coastguard Worker   WORD64 temp;
441*15dc779aSAndroid Build Coastguard Worker 
442*15dc779aSAndroid Build Coastguard Worker   temp = (WORD64)op * 35791394;
443*15dc779aSAndroid Build Coastguard Worker 
444*15dc779aSAndroid Build Coastguard Worker   ret = (WORD32)((temp + 17895697) >> 30);
445*15dc779aSAndroid Build Coastguard Worker 
446*15dc779aSAndroid Build Coastguard Worker   return ret;
447*15dc779aSAndroid Build Coastguard Worker }
448*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_div_by_15(WORD64 op)449*15dc779aSAndroid Build Coastguard Worker static PLATFORM_INLINE WORD32 ixheaacd_div_by_15(WORD64 op) {
450*15dc779aSAndroid Build Coastguard Worker   WORD32 ret;
451*15dc779aSAndroid Build Coastguard Worker   WORD64 temp;
452*15dc779aSAndroid Build Coastguard Worker 
453*15dc779aSAndroid Build Coastguard Worker   temp = (WORD64)op * 71582788;
454*15dc779aSAndroid Build Coastguard Worker 
455*15dc779aSAndroid Build Coastguard Worker   ret = (WORD32)((temp + 134217728) >> 30);
456*15dc779aSAndroid Build Coastguard Worker 
457*15dc779aSAndroid Build Coastguard Worker   return ret;
458*15dc779aSAndroid Build Coastguard Worker }
459*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_copy_drc_data(ixheaac_drc_data_struct * ch_data,ixheaac_drc_bs_data_struct * ptr_bs_data,WORD32 frame_size)460*15dc779aSAndroid Build Coastguard Worker static VOID ixheaacd_copy_drc_data(ixheaac_drc_data_struct *ch_data,
461*15dc779aSAndroid Build Coastguard Worker                                    ixheaac_drc_bs_data_struct *ptr_bs_data,
462*15dc779aSAndroid Build Coastguard Worker                                    WORD32 frame_size) {
463*15dc779aSAndroid Build Coastguard Worker   WORD32 band_num;
464*15dc779aSAndroid Build Coastguard Worker 
465*15dc779aSAndroid Build Coastguard Worker   ch_data->n_drc_bands = ptr_bs_data->drc_num_bands;
466*15dc779aSAndroid Build Coastguard Worker 
467*15dc779aSAndroid Build Coastguard Worker   if (ch_data->n_drc_bands == 1) {
468*15dc779aSAndroid Build Coastguard Worker     ch_data->n_mdct_bands[0] = frame_size;
469*15dc779aSAndroid Build Coastguard Worker     ch_data->drc_fac[0] = ptr_bs_data->dyn_rng_dlbl[0];
470*15dc779aSAndroid Build Coastguard Worker     ch_data->drc_fac_dvb[0] = ptr_bs_data->dyn_rng_dlbl_dvb[0];
471*15dc779aSAndroid Build Coastguard Worker 
472*15dc779aSAndroid Build Coastguard Worker   } else {
473*15dc779aSAndroid Build Coastguard Worker     for (band_num = 0; band_num < ptr_bs_data->drc_num_bands; band_num++) {
474*15dc779aSAndroid Build Coastguard Worker       ch_data->n_mdct_bands[band_num] =
475*15dc779aSAndroid Build Coastguard Worker           (ptr_bs_data->drc_band_top[band_num] + 1) * MUL_DRC_BAND;
476*15dc779aSAndroid Build Coastguard Worker       ch_data->drc_fac[band_num] = ptr_bs_data->dyn_rng_dlbl[band_num];
477*15dc779aSAndroid Build Coastguard Worker       ch_data->drc_fac_dvb[band_num] = ptr_bs_data->dyn_rng_dlbl_dvb[band_num];
478*15dc779aSAndroid Build Coastguard Worker     }
479*15dc779aSAndroid Build Coastguard Worker   }
480*15dc779aSAndroid Build Coastguard Worker 
481*15dc779aSAndroid Build Coastguard Worker   ch_data->drc_interp_scheme = ptr_bs_data->drc_interpolation_scheme;
482*15dc779aSAndroid Build Coastguard Worker }
483*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_drc_map_channels(ia_drc_dec_struct * pstr_drc_dec,WORD32 num_channels,WORD32 frame_size)484*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_drc_map_channels(ia_drc_dec_struct *pstr_drc_dec,
485*15dc779aSAndroid Build Coastguard Worker                                  WORD32 num_channels, WORD32 frame_size) {
486*15dc779aSAndroid Build Coastguard Worker   WORD32 i, element;
487*15dc779aSAndroid Build Coastguard Worker   WORD32 num_drc_elements;
488*15dc779aSAndroid Build Coastguard Worker   ixheaac_drc_bs_data_struct *ptr_bs_data;
489*15dc779aSAndroid Build Coastguard Worker 
490*15dc779aSAndroid Build Coastguard Worker   num_drc_elements = pstr_drc_dec->num_drc_elements;
491*15dc779aSAndroid Build Coastguard Worker 
492*15dc779aSAndroid Build Coastguard Worker   if (num_drc_elements == 0) {
493*15dc779aSAndroid Build Coastguard Worker     return IA_NO_ERROR;
494*15dc779aSAndroid Build Coastguard Worker   }
495*15dc779aSAndroid Build Coastguard Worker 
496*15dc779aSAndroid Build Coastguard Worker   if (num_drc_elements == 1) {
497*15dc779aSAndroid Build Coastguard Worker   }
498*15dc779aSAndroid Build Coastguard Worker 
499*15dc779aSAndroid Build Coastguard Worker   if (num_drc_elements > 1) {
500*15dc779aSAndroid Build Coastguard Worker     for (i = 0; i < num_channels; i++) {
501*15dc779aSAndroid Build Coastguard Worker       WORD32 drc_on = 0;
502*15dc779aSAndroid Build Coastguard Worker 
503*15dc779aSAndroid Build Coastguard Worker       for (element = 0; element < num_drc_elements; element++) {
504*15dc779aSAndroid Build Coastguard Worker         ptr_bs_data = &pstr_drc_dec->str_drc_bs_data[element];
505*15dc779aSAndroid Build Coastguard Worker         if (ptr_bs_data->b_channel_on[i]) drc_on++;
506*15dc779aSAndroid Build Coastguard Worker       }
507*15dc779aSAndroid Build Coastguard Worker 
508*15dc779aSAndroid Build Coastguard Worker       if (drc_on > 1) {
509*15dc779aSAndroid Build Coastguard Worker         return IA_XHEAAC_DEC_EXE_FATAL_INVALID_DRC_DATA;
510*15dc779aSAndroid Build Coastguard Worker       }
511*15dc779aSAndroid Build Coastguard Worker     }
512*15dc779aSAndroid Build Coastguard Worker   }
513*15dc779aSAndroid Build Coastguard Worker 
514*15dc779aSAndroid Build Coastguard Worker   for (element = 0; element < num_drc_elements; element++) {
515*15dc779aSAndroid Build Coastguard Worker     ptr_bs_data = &pstr_drc_dec->str_drc_bs_data[element];
516*15dc779aSAndroid Build Coastguard Worker     if (ptr_bs_data->prog_ref_level_present)
517*15dc779aSAndroid Build Coastguard Worker       pstr_drc_dec->prog_ref_level = ptr_bs_data->prog_ref_level;
518*15dc779aSAndroid Build Coastguard Worker 
519*15dc779aSAndroid Build Coastguard Worker     for (i = 0; i < num_channels; i++) {
520*15dc779aSAndroid Build Coastguard Worker       if (!ptr_bs_data->b_channel_on[i]) continue;
521*15dc779aSAndroid Build Coastguard Worker 
522*15dc779aSAndroid Build Coastguard Worker       ixheaacd_copy_drc_data(&pstr_drc_dec->str_drc_channel_data[i],
523*15dc779aSAndroid Build Coastguard Worker                              &pstr_drc_dec->str_drc_bs_data[element],
524*15dc779aSAndroid Build Coastguard Worker                              frame_size);
525*15dc779aSAndroid Build Coastguard Worker     }
526*15dc779aSAndroid Build Coastguard Worker   }
527*15dc779aSAndroid Build Coastguard Worker   return IA_NO_ERROR;
528*15dc779aSAndroid Build Coastguard Worker }
529*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_drc_dec_create(ia_drc_dec_struct * pstr_drc_dec,WORD16 drc_ref_level,WORD16 drc_def_level)530*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_drc_dec_create(ia_drc_dec_struct *pstr_drc_dec,
531*15dc779aSAndroid Build Coastguard Worker                              WORD16 drc_ref_level, WORD16 drc_def_level) {
532*15dc779aSAndroid Build Coastguard Worker   WORD32 j, k;
533*15dc779aSAndroid Build Coastguard Worker   WORD32 ch;
534*15dc779aSAndroid Build Coastguard Worker 
535*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->sbr_allowed = 1;
536*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->sbr_found = 0;
537*15dc779aSAndroid Build Coastguard Worker 
538*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->drc_element_found = 0;
539*15dc779aSAndroid Build Coastguard Worker 
540*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->max_audio_channels = MAX_BS_ELEMENT;
541*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->drc_ref_level = drc_ref_level;
542*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->drc_def_level = drc_def_level;
543*15dc779aSAndroid Build Coastguard Worker 
544*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->num_drc_elements = 0;
545*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->target_ref_level = 108;
546*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->prog_ref_level = 108;
547*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->cut_factor = 0;
548*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->boost_factor = 0;
549*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->drc_on = 0;
550*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->drc_dig_norm = 1;
551*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->pres_mode = -1;
552*15dc779aSAndroid Build Coastguard Worker 
553*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->length_history = 2;
554*15dc779aSAndroid Build Coastguard Worker   if (pstr_drc_dec->sbr_allowed) pstr_drc_dec->length_history++;
555*15dc779aSAndroid Build Coastguard Worker 
556*15dc779aSAndroid Build Coastguard Worker   for (ch = 0; ch < MAX_BS_ELEMENT; ch++) {
557*15dc779aSAndroid Build Coastguard Worker     ixheaac_drc_data_struct *pstr_drc_data =
558*15dc779aSAndroid Build Coastguard Worker         (ixheaac_drc_data_struct *)&pstr_drc_dec->str_drc_channel_data[ch];
559*15dc779aSAndroid Build Coastguard Worker     pstr_drc_dec->drc_channel_next_index[ch] = 0;
560*15dc779aSAndroid Build Coastguard Worker     pstr_drc_dec->state = 0;
561*15dc779aSAndroid Build Coastguard Worker 
562*15dc779aSAndroid Build Coastguard Worker     for (j = 0; j < 64; j++) {
563*15dc779aSAndroid Build Coastguard Worker       for (k = 0; k < 64; k++) {
564*15dc779aSAndroid Build Coastguard Worker         pstr_drc_data->drc_factors_sbr[j][k] = DRC_SBR_ONE_Q25;
565*15dc779aSAndroid Build Coastguard Worker         pstr_drc_data->drc_factors_sbr_lat[j][k] = DRC_SBR_ONE_Q25;
566*15dc779aSAndroid Build Coastguard Worker       }
567*15dc779aSAndroid Build Coastguard Worker     }
568*15dc779aSAndroid Build Coastguard Worker     for (j = 0; j < MAX_DRC_BANDS; j++) pstr_drc_data->drc_fac[j] = 0;
569*15dc779aSAndroid Build Coastguard Worker 
570*15dc779aSAndroid Build Coastguard Worker     pstr_drc_data->n_mdct_bands[0] = FRAME_SIZE;
571*15dc779aSAndroid Build Coastguard Worker     pstr_drc_data->drc_exp = 1;
572*15dc779aSAndroid Build Coastguard Worker     pstr_drc_data->short_block = 0;
573*15dc779aSAndroid Build Coastguard Worker     pstr_drc_data->drc_interp_scheme = 0;
574*15dc779aSAndroid Build Coastguard Worker     pstr_drc_data->n_drc_bands = 1;
575*15dc779aSAndroid Build Coastguard Worker     pstr_drc_data->new_prog_ref_level = 0;
576*15dc779aSAndroid Build Coastguard Worker     pstr_drc_data->new_drc_fac = 0;
577*15dc779aSAndroid Build Coastguard Worker   }
578*15dc779aSAndroid Build Coastguard Worker }
579*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_drc_excluded_channels(ia_bit_buf_struct * it_bit_buf,WORD32 nch,UWORD8 * b_channel_on)580*15dc779aSAndroid Build Coastguard Worker static WORD32 ixheaacd_drc_excluded_channels(ia_bit_buf_struct *it_bit_buf,
581*15dc779aSAndroid Build Coastguard Worker                                              WORD32 nch, UWORD8 *b_channel_on) {
582*15dc779aSAndroid Build Coastguard Worker   WORD32 ich, nbyte = 0;
583*15dc779aSAndroid Build Coastguard Worker   WORD32 num_excl_chan;
584*15dc779aSAndroid Build Coastguard Worker   UWORD8 exclude_mask;
585*15dc779aSAndroid Build Coastguard Worker 
586*15dc779aSAndroid Build Coastguard Worker   num_excl_chan = 7;
587*15dc779aSAndroid Build Coastguard Worker   for (ich = 0; ich < 7; ich++) {
588*15dc779aSAndroid Build Coastguard Worker     exclude_mask = ixheaacd_read_bits_buf(it_bit_buf, 1);
589*15dc779aSAndroid Build Coastguard Worker     if (ich < nch) {
590*15dc779aSAndroid Build Coastguard Worker       b_channel_on[ich] = !exclude_mask;
591*15dc779aSAndroid Build Coastguard Worker     }
592*15dc779aSAndroid Build Coastguard Worker   }
593*15dc779aSAndroid Build Coastguard Worker   nbyte++;
594*15dc779aSAndroid Build Coastguard Worker 
595*15dc779aSAndroid Build Coastguard Worker   while (ixheaacd_read_bits_buf(it_bit_buf, 1)) {
596*15dc779aSAndroid Build Coastguard Worker     for (ich = num_excl_chan; ich < num_excl_chan + 7; ich++) {
597*15dc779aSAndroid Build Coastguard Worker       exclude_mask = ixheaacd_read_bits_buf(it_bit_buf, 1);
598*15dc779aSAndroid Build Coastguard Worker       if (ich < nch) {
599*15dc779aSAndroid Build Coastguard Worker         b_channel_on[ich] = !exclude_mask;
600*15dc779aSAndroid Build Coastguard Worker       }
601*15dc779aSAndroid Build Coastguard Worker     }
602*15dc779aSAndroid Build Coastguard Worker     nbyte++;
603*15dc779aSAndroid Build Coastguard Worker     num_excl_chan += 7;
604*15dc779aSAndroid Build Coastguard Worker   }
605*15dc779aSAndroid Build Coastguard Worker 
606*15dc779aSAndroid Build Coastguard Worker   return nbyte;
607*15dc779aSAndroid Build Coastguard Worker }
608*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_drc_element_read(ia_bit_buf_struct * it_bit_buf,ixheaac_drc_bs_data_struct * pstr_bs_data)609*15dc779aSAndroid Build Coastguard Worker static WORD32 ixheaacd_drc_element_read(
610*15dc779aSAndroid Build Coastguard Worker     ia_bit_buf_struct *it_bit_buf, ixheaac_drc_bs_data_struct *pstr_bs_data) {
611*15dc779aSAndroid Build Coastguard Worker   WORD32 ich, idrc, nbyte = 1;
612*15dc779aSAndroid Build Coastguard Worker   WORD32 pce_tag_present, drc_bands_present;
613*15dc779aSAndroid Build Coastguard Worker   WORD32 excluded_chns_present;
614*15dc779aSAndroid Build Coastguard Worker   UWORD8 drc_band_incr;
615*15dc779aSAndroid Build Coastguard Worker   WORD8 max_dyn_rng_dlbl = -128;
616*15dc779aSAndroid Build Coastguard Worker 
617*15dc779aSAndroid Build Coastguard Worker   pstr_bs_data->drc_num_bands = 1;
618*15dc779aSAndroid Build Coastguard Worker 
619*15dc779aSAndroid Build Coastguard Worker   pce_tag_present = ixheaacd_read_bits_buf(it_bit_buf, 1);
620*15dc779aSAndroid Build Coastguard Worker   if (pce_tag_present) {
621*15dc779aSAndroid Build Coastguard Worker     ixheaacd_read_bits_buf(it_bit_buf, 4);/*pce_instance_tag*/
622*15dc779aSAndroid Build Coastguard Worker     ixheaacd_read_bits_buf(it_bit_buf, 4);/*drc_tag_reserved_bits*/
623*15dc779aSAndroid Build Coastguard Worker     nbyte++;
624*15dc779aSAndroid Build Coastguard Worker   }
625*15dc779aSAndroid Build Coastguard Worker 
626*15dc779aSAndroid Build Coastguard Worker   for (ich = 0; ich < MAX_AUDIO_CHANNELS; ich++) {
627*15dc779aSAndroid Build Coastguard Worker     pstr_bs_data->b_channel_on[ich] = 1;
628*15dc779aSAndroid Build Coastguard Worker   }
629*15dc779aSAndroid Build Coastguard Worker 
630*15dc779aSAndroid Build Coastguard Worker   excluded_chns_present = ixheaacd_read_bits_buf(it_bit_buf, 1);
631*15dc779aSAndroid Build Coastguard Worker   if (excluded_chns_present) {
632*15dc779aSAndroid Build Coastguard Worker     nbyte += ixheaacd_drc_excluded_channels(it_bit_buf, MAX_AUDIO_CHANNELS,
633*15dc779aSAndroid Build Coastguard Worker                                             pstr_bs_data->b_channel_on);
634*15dc779aSAndroid Build Coastguard Worker   }
635*15dc779aSAndroid Build Coastguard Worker 
636*15dc779aSAndroid Build Coastguard Worker   drc_bands_present = ixheaacd_read_bits_buf(it_bit_buf, 1);
637*15dc779aSAndroid Build Coastguard Worker   if (drc_bands_present) {
638*15dc779aSAndroid Build Coastguard Worker     drc_band_incr = ixheaacd_read_bits_buf(it_bit_buf, 4);
639*15dc779aSAndroid Build Coastguard Worker     pstr_bs_data->drc_interpolation_scheme = ixheaacd_read_bits_buf(it_bit_buf, 4);
640*15dc779aSAndroid Build Coastguard Worker     nbyte++;
641*15dc779aSAndroid Build Coastguard Worker 
642*15dc779aSAndroid Build Coastguard Worker     pstr_bs_data->drc_num_bands += drc_band_incr;
643*15dc779aSAndroid Build Coastguard Worker     for (idrc = 0; idrc < pstr_bs_data->drc_num_bands; idrc++) {
644*15dc779aSAndroid Build Coastguard Worker       pstr_bs_data->drc_band_top[idrc] = ixheaacd_read_bits_buf(it_bit_buf, 8);
645*15dc779aSAndroid Build Coastguard Worker       nbyte++;
646*15dc779aSAndroid Build Coastguard Worker     }
647*15dc779aSAndroid Build Coastguard Worker   } else {
648*15dc779aSAndroid Build Coastguard Worker     pstr_bs_data->drc_band_top[0] = FRAME_SIZE / 4 - 1;
649*15dc779aSAndroid Build Coastguard Worker     pstr_bs_data->drc_interpolation_scheme = 0;
650*15dc779aSAndroid Build Coastguard Worker   }
651*15dc779aSAndroid Build Coastguard Worker 
652*15dc779aSAndroid Build Coastguard Worker   pstr_bs_data->prog_ref_level_present = ixheaacd_read_bits_buf(it_bit_buf, 1);
653*15dc779aSAndroid Build Coastguard Worker   if (pstr_bs_data->prog_ref_level_present) {
654*15dc779aSAndroid Build Coastguard Worker     pstr_bs_data->prog_ref_level = ixheaacd_read_bits_buf(it_bit_buf, 7);
655*15dc779aSAndroid Build Coastguard Worker 
656*15dc779aSAndroid Build Coastguard Worker     ixheaacd_read_bits_buf(it_bit_buf, 1);/*prog_ref_level_reserved_bits*/
657*15dc779aSAndroid Build Coastguard Worker     nbyte++;
658*15dc779aSAndroid Build Coastguard Worker   }
659*15dc779aSAndroid Build Coastguard Worker 
660*15dc779aSAndroid Build Coastguard Worker   for (idrc = 0; idrc < pstr_bs_data->drc_num_bands; idrc++) {
661*15dc779aSAndroid Build Coastguard Worker     WORD32 sign = ixheaacd_read_bits_buf(it_bit_buf, 1);
662*15dc779aSAndroid Build Coastguard Worker     pstr_bs_data->dyn_rng_dlbl[idrc] = ixheaacd_read_bits_buf(it_bit_buf, 7);
663*15dc779aSAndroid Build Coastguard Worker     if (sign)
664*15dc779aSAndroid Build Coastguard Worker       pstr_bs_data->dyn_rng_dlbl[idrc] = -pstr_bs_data->dyn_rng_dlbl[idrc];
665*15dc779aSAndroid Build Coastguard Worker     max_dyn_rng_dlbl = max(max_dyn_rng_dlbl, pstr_bs_data->dyn_rng_dlbl[idrc]);
666*15dc779aSAndroid Build Coastguard Worker 
667*15dc779aSAndroid Build Coastguard Worker     nbyte++;
668*15dc779aSAndroid Build Coastguard Worker   }
669*15dc779aSAndroid Build Coastguard Worker   pstr_bs_data->max_dyn_rng_dlbl = max_dyn_rng_dlbl;
670*15dc779aSAndroid Build Coastguard Worker 
671*15dc779aSAndroid Build Coastguard Worker   return nbyte;
672*15dc779aSAndroid Build Coastguard Worker }
673*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_drc_read_compression(ia_bit_buf_struct * it_bit_buf,ia_drc_dec_struct * pstr_drc_dec,WORD32 bs_pos)674*15dc779aSAndroid Build Coastguard Worker static WORD32 ixheaacd_drc_read_compression(ia_bit_buf_struct *it_bit_buf,
675*15dc779aSAndroid Build Coastguard Worker                                          ia_drc_dec_struct *pstr_drc_dec,
676*15dc779aSAndroid Build Coastguard Worker                                          WORD32 bs_pos) {
677*15dc779aSAndroid Build Coastguard Worker   WORD32 bit_count = 0;
678*15dc779aSAndroid Build Coastguard Worker   WORD32 dmx_lvl_present, ext_present, compression_present;
679*15dc779aSAndroid Build Coastguard Worker   WORD32 coarse_gain_present, fine_grain_present;
680*15dc779aSAndroid Build Coastguard Worker   ia_bit_buf_struct local_bs = {0};
681*15dc779aSAndroid Build Coastguard Worker   WORD32 bytes = 0, bits = 0;
682*15dc779aSAndroid Build Coastguard Worker 
683*15dc779aSAndroid Build Coastguard Worker   memcpy(&local_bs, it_bit_buf, sizeof(ia_bit_buf_struct));
684*15dc779aSAndroid Build Coastguard Worker 
685*15dc779aSAndroid Build Coastguard Worker   if (local_bs.size < bs_pos) {
686*15dc779aSAndroid Build Coastguard Worker     longjmp(*(local_bs.xaac_jmp_buf),
687*15dc779aSAndroid Build Coastguard Worker             IA_XHEAAC_DEC_EXE_NONFATAL_INSUFFICIENT_INPUT_BYTES);
688*15dc779aSAndroid Build Coastguard Worker   }
689*15dc779aSAndroid Build Coastguard Worker   bytes = (local_bs.size - bs_pos) >> 3;
690*15dc779aSAndroid Build Coastguard Worker   bits = (local_bs.size - bs_pos) % 8;
691*15dc779aSAndroid Build Coastguard Worker 
692*15dc779aSAndroid Build Coastguard Worker   local_bs.cnt_bits = bs_pos;
693*15dc779aSAndroid Build Coastguard Worker   local_bs.ptr_read_next = local_bs.ptr_bit_buf_base;
694*15dc779aSAndroid Build Coastguard Worker   local_bs.ptr_read_next += bytes;
695*15dc779aSAndroid Build Coastguard Worker   local_bs.bit_pos = 7 - bits;
696*15dc779aSAndroid Build Coastguard Worker 
697*15dc779aSAndroid Build Coastguard Worker   if (ixheaacd_read_bits_buf(&local_bs, 8) != DVB_ANC_DATA_SYNC_BYTE) {
698*15dc779aSAndroid Build Coastguard Worker     return 0;
699*15dc779aSAndroid Build Coastguard Worker   }
700*15dc779aSAndroid Build Coastguard Worker 
701*15dc779aSAndroid Build Coastguard Worker   if (ixheaacd_read_bits_buf(&local_bs, 2) != 3) return 0;
702*15dc779aSAndroid Build Coastguard Worker 
703*15dc779aSAndroid Build Coastguard Worker   ixheaacd_read_bits_buf(&local_bs, 2);
704*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->pres_mode = ixheaacd_read_bits_buf(&local_bs, 2);
705*15dc779aSAndroid Build Coastguard Worker   ixheaacd_read_bits_buf(&local_bs, 1);
706*15dc779aSAndroid Build Coastguard Worker   if (ixheaacd_read_bits_buf(&local_bs, 1) != 0) return 0;
707*15dc779aSAndroid Build Coastguard Worker 
708*15dc779aSAndroid Build Coastguard Worker   if (ixheaacd_read_bits_buf(&local_bs, 3) != 0) return 0;
709*15dc779aSAndroid Build Coastguard Worker 
710*15dc779aSAndroid Build Coastguard Worker   dmx_lvl_present = ixheaacd_read_bits_buf(&local_bs, 1);
711*15dc779aSAndroid Build Coastguard Worker   ext_present = ixheaacd_read_bits_buf(&local_bs, 1);
712*15dc779aSAndroid Build Coastguard Worker   compression_present = ixheaacd_read_bits_buf(&local_bs, 1);
713*15dc779aSAndroid Build Coastguard Worker   coarse_gain_present = ixheaacd_read_bits_buf(&local_bs, 1);
714*15dc779aSAndroid Build Coastguard Worker   fine_grain_present = ixheaacd_read_bits_buf(&local_bs, 1);
715*15dc779aSAndroid Build Coastguard Worker   bit_count += 24;
716*15dc779aSAndroid Build Coastguard Worker 
717*15dc779aSAndroid Build Coastguard Worker   if (dmx_lvl_present) {
718*15dc779aSAndroid Build Coastguard Worker     ixheaacd_read_bits_buf(&local_bs, 8);
719*15dc779aSAndroid Build Coastguard Worker     bit_count += 8;
720*15dc779aSAndroid Build Coastguard Worker   }
721*15dc779aSAndroid Build Coastguard Worker 
722*15dc779aSAndroid Build Coastguard Worker   if (compression_present) {
723*15dc779aSAndroid Build Coastguard Worker     UWORD8 compression_on, compression_val;
724*15dc779aSAndroid Build Coastguard Worker 
725*15dc779aSAndroid Build Coastguard Worker     if (ixheaacd_read_bits_buf(&local_bs, 7) != 0) return 0;
726*15dc779aSAndroid Build Coastguard Worker 
727*15dc779aSAndroid Build Coastguard Worker     compression_on = (UWORD8)ixheaacd_read_bits_buf(&local_bs, 1);
728*15dc779aSAndroid Build Coastguard Worker     compression_val = (UWORD8)ixheaacd_read_bits_buf(&local_bs, 8);
729*15dc779aSAndroid Build Coastguard Worker     bit_count += 16;
730*15dc779aSAndroid Build Coastguard Worker 
731*15dc779aSAndroid Build Coastguard Worker     if (compression_on) {
732*15dc779aSAndroid Build Coastguard Worker       pstr_drc_dec->str_drc_bs_data[0].drc_num_bands = 1;
733*15dc779aSAndroid Build Coastguard Worker       pstr_drc_dec->str_drc_bs_data[0].dyn_rng_dlbl_dvb[0] = compression_val;
734*15dc779aSAndroid Build Coastguard Worker       pstr_drc_dec->str_drc_bs_data[0].drc_band_top[0] = (1024 >> 2) - 1;
735*15dc779aSAndroid Build Coastguard Worker       pstr_drc_dec->drc_ref_level = -1;
736*15dc779aSAndroid Build Coastguard Worker       pstr_drc_dec->str_drc_bs_data[0].drc_data_type = DVB_DRC_ANC_DATA;
737*15dc779aSAndroid Build Coastguard Worker     } else {
738*15dc779aSAndroid Build Coastguard Worker       pstr_drc_dec->str_drc_bs_data[0].drc_num_bands = 1;
739*15dc779aSAndroid Build Coastguard Worker       pstr_drc_dec->str_drc_bs_data[0].dyn_rng_dlbl_dvb[0] = (WORD8)0x80;
740*15dc779aSAndroid Build Coastguard Worker       pstr_drc_dec->str_drc_bs_data[0].drc_band_top[0] = (1024 >> 2) - 1;
741*15dc779aSAndroid Build Coastguard Worker       pstr_drc_dec->str_drc_bs_data[0].drc_data_type = DVB_DRC_ANC_DATA;
742*15dc779aSAndroid Build Coastguard Worker 
743*15dc779aSAndroid Build Coastguard Worker       if (compression_val != 0) return 0;
744*15dc779aSAndroid Build Coastguard Worker     }
745*15dc779aSAndroid Build Coastguard Worker   }
746*15dc779aSAndroid Build Coastguard Worker 
747*15dc779aSAndroid Build Coastguard Worker   if (coarse_gain_present) {
748*15dc779aSAndroid Build Coastguard Worker     ixheaacd_read_bits_buf(&local_bs, 16);
749*15dc779aSAndroid Build Coastguard Worker     bit_count += 16;
750*15dc779aSAndroid Build Coastguard Worker   }
751*15dc779aSAndroid Build Coastguard Worker   if (fine_grain_present) {
752*15dc779aSAndroid Build Coastguard Worker     ixheaacd_read_bits_buf(&local_bs, 16);
753*15dc779aSAndroid Build Coastguard Worker     bit_count += 16;
754*15dc779aSAndroid Build Coastguard Worker   }
755*15dc779aSAndroid Build Coastguard Worker 
756*15dc779aSAndroid Build Coastguard Worker   if (ext_present) {
757*15dc779aSAndroid Build Coastguard Worker     WORD32 ext_bits = 8;
758*15dc779aSAndroid Build Coastguard Worker 
759*15dc779aSAndroid Build Coastguard Worker     ixheaacd_read_bits_buf(&local_bs, 1);
760*15dc779aSAndroid Build Coastguard Worker     if (ixheaacd_read_bits_buf(&local_bs, 1)) ext_bits += 8;
761*15dc779aSAndroid Build Coastguard Worker     if (ixheaacd_read_bits_buf(&local_bs, 1)) ext_bits += 16;
762*15dc779aSAndroid Build Coastguard Worker     if (ixheaacd_read_bits_buf(&local_bs, 1)) ext_bits += 8;
763*15dc779aSAndroid Build Coastguard Worker 
764*15dc779aSAndroid Build Coastguard Worker     ixheaacd_read_bits_buf(&local_bs, ext_bits - 4);
765*15dc779aSAndroid Build Coastguard Worker     bit_count += ext_bits;
766*15dc779aSAndroid Build Coastguard Worker   }
767*15dc779aSAndroid Build Coastguard Worker 
768*15dc779aSAndroid Build Coastguard Worker   return (bit_count);
769*15dc779aSAndroid Build Coastguard Worker }
770*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_dec_drc_read_element(ia_drc_dec_struct * pstr_drc_dec,ia_drc_dec_struct * drc_dummy,ia_bit_buf_struct * it_bit_buf)771*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_dec_drc_read_element(ia_drc_dec_struct *pstr_drc_dec,
772*15dc779aSAndroid Build Coastguard Worker                                      ia_drc_dec_struct *drc_dummy,
773*15dc779aSAndroid Build Coastguard Worker                                      ia_bit_buf_struct *it_bit_buf) {
774*15dc779aSAndroid Build Coastguard Worker   WORD32 bits_read = 0;
775*15dc779aSAndroid Build Coastguard Worker   if (pstr_drc_dec->num_drc_elements < pstr_drc_dec->max_audio_channels) {
776*15dc779aSAndroid Build Coastguard Worker     bits_read = ixheaacd_drc_element_read(
777*15dc779aSAndroid Build Coastguard Worker         it_bit_buf, &pstr_drc_dec->str_drc_bs_data[pstr_drc_dec->num_drc_elements]);
778*15dc779aSAndroid Build Coastguard Worker 
779*15dc779aSAndroid Build Coastguard Worker     if (pstr_drc_dec->dvb_anc_data_present) {
780*15dc779aSAndroid Build Coastguard Worker       ixheaacd_drc_read_compression(
781*15dc779aSAndroid Build Coastguard Worker           it_bit_buf, pstr_drc_dec, pstr_drc_dec->dvb_anc_data_pos);
782*15dc779aSAndroid Build Coastguard Worker     }
783*15dc779aSAndroid Build Coastguard Worker     pstr_drc_dec->num_drc_elements++;
784*15dc779aSAndroid Build Coastguard Worker 
785*15dc779aSAndroid Build Coastguard Worker   } else {
786*15dc779aSAndroid Build Coastguard Worker     ixheaac_drc_bs_data_struct drc_ele_dummy;
787*15dc779aSAndroid Build Coastguard Worker 
788*15dc779aSAndroid Build Coastguard Worker     bits_read = ixheaacd_drc_element_read(it_bit_buf, &drc_ele_dummy);
789*15dc779aSAndroid Build Coastguard Worker     if (pstr_drc_dec->dvb_anc_data_present) {
790*15dc779aSAndroid Build Coastguard Worker       ixheaacd_drc_read_compression(
791*15dc779aSAndroid Build Coastguard Worker           it_bit_buf, drc_dummy, pstr_drc_dec->dvb_anc_data_pos);
792*15dc779aSAndroid Build Coastguard Worker     }
793*15dc779aSAndroid Build Coastguard Worker   }
794*15dc779aSAndroid Build Coastguard Worker 
795*15dc779aSAndroid Build Coastguard Worker   pstr_drc_dec->dvb_anc_data_present = 0;
796*15dc779aSAndroid Build Coastguard Worker 
797*15dc779aSAndroid Build Coastguard Worker   return bits_read;
798*15dc779aSAndroid Build Coastguard Worker }
799*15dc779aSAndroid Build Coastguard Worker 
800*15dc779aSAndroid Build Coastguard Worker static const WORD32 ixheaacd_drc_offset[2][16] = {
801*15dc779aSAndroid Build Coastguard Worker     {0, 4, 8, 12, 16, 20, 24, 28, 0, 0, 0, 0, 0, 0, 0, 0},
802*15dc779aSAndroid Build Coastguard Worker 
803*15dc779aSAndroid Build Coastguard Worker     {0, 4, 8, 12, 16, 19, 22, 26, 0, 0, 0, 0, 0, 0, 0, 0}};
804*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_get_div_value_24(WORD32 value)805*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_get_div_value_24(WORD32 value) {
806*15dc779aSAndroid Build Coastguard Worker   WORD32 ret;
807*15dc779aSAndroid Build Coastguard Worker   WORD64 temp;
808*15dc779aSAndroid Build Coastguard Worker 
809*15dc779aSAndroid Build Coastguard Worker   temp = (WORD64)value * 44739243;
810*15dc779aSAndroid Build Coastguard Worker 
811*15dc779aSAndroid Build Coastguard Worker   ret = (WORD32)((temp + 22369621) >> 30);
812*15dc779aSAndroid Build Coastguard Worker 
813*15dc779aSAndroid Build Coastguard Worker   return ret;
814*15dc779aSAndroid Build Coastguard Worker }
815*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_get_div_value_2400(WORD32 value)816*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_get_div_value_2400(WORD32 value) {
817*15dc779aSAndroid Build Coastguard Worker   WORD32 ret;
818*15dc779aSAndroid Build Coastguard Worker   WORD64 temp;
819*15dc779aSAndroid Build Coastguard Worker 
820*15dc779aSAndroid Build Coastguard Worker   temp = (WORD64)value * 447392;
821*15dc779aSAndroid Build Coastguard Worker 
822*15dc779aSAndroid Build Coastguard Worker   ret = (WORD32)((temp + 223696) >> 30);
823*15dc779aSAndroid Build Coastguard Worker 
824*15dc779aSAndroid Build Coastguard Worker   return ret;
825*15dc779aSAndroid Build Coastguard Worker }
826*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_drc_div_120_floor(WORD32 value)827*15dc779aSAndroid Build Coastguard Worker static WORD32 ixheaacd_drc_div_120_floor(WORD32 value) {
828*15dc779aSAndroid Build Coastguard Worker   WORD32 ret_val;
829*15dc779aSAndroid Build Coastguard Worker   WORD64 temp;
830*15dc779aSAndroid Build Coastguard Worker 
831*15dc779aSAndroid Build Coastguard Worker   temp = (WORD64)value * 8947849;
832*15dc779aSAndroid Build Coastguard Worker 
833*15dc779aSAndroid Build Coastguard Worker   ret_val = (WORD32)(temp >> 30);
834*15dc779aSAndroid Build Coastguard Worker 
835*15dc779aSAndroid Build Coastguard Worker   return ret_val;
836*15dc779aSAndroid Build Coastguard Worker }
837*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_drc_floor(WORD32 bottom,WORD32 frame_size)838*15dc779aSAndroid Build Coastguard Worker static WORD32 ixheaacd_drc_floor(WORD32 bottom, WORD32 frame_size) {
839*15dc779aSAndroid Build Coastguard Worker   WORD32 ret_val;
840*15dc779aSAndroid Build Coastguard Worker   if (960 == frame_size) {
841*15dc779aSAndroid Build Coastguard Worker     ret_val = ixheaacd_drc_div_120_floor(bottom);
842*15dc779aSAndroid Build Coastguard Worker     ret_val *= 30;
843*15dc779aSAndroid Build Coastguard Worker     ret_val = ret_val >> 3;
844*15dc779aSAndroid Build Coastguard Worker   } else {
845*15dc779aSAndroid Build Coastguard Worker     ret_val = bottom >> 7;
846*15dc779aSAndroid Build Coastguard Worker     ret_val = ret_val << 2;
847*15dc779aSAndroid Build Coastguard Worker   }
848*15dc779aSAndroid Build Coastguard Worker   return ret_val;
849*15dc779aSAndroid Build Coastguard Worker }
850*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_drc_ceil(WORD32 top,WORD32 frame_size)851*15dc779aSAndroid Build Coastguard Worker static WORD32 ixheaacd_drc_ceil(WORD32 top, WORD32 frame_size) {
852*15dc779aSAndroid Build Coastguard Worker   WORD32 ret_val;
853*15dc779aSAndroid Build Coastguard Worker   if (960 == frame_size) {
854*15dc779aSAndroid Build Coastguard Worker     top += 119;
855*15dc779aSAndroid Build Coastguard Worker     ret_val = ixheaacd_drc_div_120_floor(top);
856*15dc779aSAndroid Build Coastguard Worker     ret_val *= 30;
857*15dc779aSAndroid Build Coastguard Worker     ret_val = ret_val >> 3;
858*15dc779aSAndroid Build Coastguard Worker   } else {
859*15dc779aSAndroid Build Coastguard Worker     top += 127;
860*15dc779aSAndroid Build Coastguard Worker     ret_val = top >> 7;
861*15dc779aSAndroid Build Coastguard Worker     ret_val = ret_val << 2;
862*15dc779aSAndroid Build Coastguard Worker   }
863*15dc779aSAndroid Build Coastguard Worker   return ret_val;
864*15dc779aSAndroid Build Coastguard Worker }
865*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_drc_get_bottom_qmf(WORD32 bottom,WORD32 frame_size)866*15dc779aSAndroid Build Coastguard Worker static WORD32 ixheaacd_drc_get_bottom_qmf(WORD32 bottom, WORD32 frame_size) {
867*15dc779aSAndroid Build Coastguard Worker   WORD32 ret_val;
868*15dc779aSAndroid Build Coastguard Worker   if (960 == frame_size) {
869*15dc779aSAndroid Build Coastguard Worker     ret_val = bottom % 120;
870*15dc779aSAndroid Build Coastguard Worker     ret_val = ret_val << 5;
871*15dc779aSAndroid Build Coastguard Worker     ret_val = ixheaacd_drc_div_120_floor(ret_val);
872*15dc779aSAndroid Build Coastguard Worker   } else {
873*15dc779aSAndroid Build Coastguard Worker     ret_val = bottom & 0x7F;
874*15dc779aSAndroid Build Coastguard Worker     ret_val = ret_val >> 2;
875*15dc779aSAndroid Build Coastguard Worker   }
876*15dc779aSAndroid Build Coastguard Worker   return ret_val;
877*15dc779aSAndroid Build Coastguard Worker };
878*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_drc_apply(ia_drc_dec_struct * pstr_drc_dec,WORD32 * ptr_spectral_coef,WORD32 win_seq,WORD32 channel,WORD32 frame_size,WORD32 esbr_flag,WORD32 audio_object_type)879*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_drc_apply(ia_drc_dec_struct *pstr_drc_dec,
880*15dc779aSAndroid Build Coastguard Worker                         WORD32 *ptr_spectral_coef, WORD32 win_seq, WORD32 channel,
881*15dc779aSAndroid Build Coastguard Worker                         WORD32 frame_size, WORD32 esbr_flag, WORD32 audio_object_type) {
882*15dc779aSAndroid Build Coastguard Worker   WORD32 drc_band, spec_pos, start_pos, end_pos;
883*15dc779aSAndroid Build Coastguard Worker   WORD32 low_hi, drc_norm, drc_freq_fac;
884*15dc779aSAndroid Build Coastguard Worker   WORD32 drc_fac, div_val, mod_val, ret_val, offset_value;
885*15dc779aSAndroid Build Coastguard Worker   const WORD32 *table;
886*15dc779aSAndroid Build Coastguard Worker   ixheaac_drc_data_struct *pstr_drc_data;
887*15dc779aSAndroid Build Coastguard Worker   WORD32 num_qmf_sub_sample = (frame_size >> 5);
888*15dc779aSAndroid Build Coastguard Worker   WORD32 num_qmf_sub_sample_by_2 = (frame_size >> 6);
889*15dc779aSAndroid Build Coastguard Worker   WORD32 diff_ref_level;
890*15dc779aSAndroid Build Coastguard Worker 
891*15dc779aSAndroid Build Coastguard Worker   WORD32 *drc_sbr_factors[64];
892*15dc779aSAndroid Build Coastguard Worker   WORD32 qmf_start_pos, qmf_stop_pos, qmf_start, i, j;
893*15dc779aSAndroid Build Coastguard Worker   WORD32 prev_frame_drc_sbr_factors[64];
894*15dc779aSAndroid Build Coastguard Worker   WORD32 *ptr_drc_fac;
895*15dc779aSAndroid Build Coastguard Worker 
896*15dc779aSAndroid Build Coastguard Worker   if ((audio_object_type != AOT_ER_AAC_ELD) && (audio_object_type != AOT_ER_AAC_LD)
897*15dc779aSAndroid Build Coastguard Worker       && esbr_flag)
898*15dc779aSAndroid Build Coastguard Worker   {
899*15dc779aSAndroid Build Coastguard Worker     for (i = 0; i < SBR_QMF_SUB_SAMPLES; i++)
900*15dc779aSAndroid Build Coastguard Worker     {
901*15dc779aSAndroid Build Coastguard Worker       for (j = 0; j < SBR_QMF_SUB_BANDS; j++)
902*15dc779aSAndroid Build Coastguard Worker       {
903*15dc779aSAndroid Build Coastguard Worker         pstr_drc_dec->str_drc_channel_data[channel].drc_factors_sbr[i][j] =
904*15dc779aSAndroid Build Coastguard Worker           pstr_drc_dec->str_drc_channel_data[channel].drc_factors_sbr_lat[i][j];
905*15dc779aSAndroid Build Coastguard Worker       }
906*15dc779aSAndroid Build Coastguard Worker     }
907*15dc779aSAndroid Build Coastguard Worker     for (j = 0; j < 32; j++)
908*15dc779aSAndroid Build Coastguard Worker     {
909*15dc779aSAndroid Build Coastguard Worker       memcpy(pstr_drc_dec->str_drc_channel_data[channel].drc_factors_sbr_lat[j],
910*15dc779aSAndroid Build Coastguard Worker              pstr_drc_dec->str_drc_channel_data[channel].drc_factors_sbr_lat[j + 32],
911*15dc779aSAndroid Build Coastguard Worker              SBR_QMF_SUB_BANDS * sizeof(WORD32));
912*15dc779aSAndroid Build Coastguard Worker     }
913*15dc779aSAndroid Build Coastguard Worker     ptr_drc_fac =
914*15dc779aSAndroid Build Coastguard Worker       &pstr_drc_dec->str_drc_channel_data[channel].drc_factors_sbr_lat[0][0];
915*15dc779aSAndroid Build Coastguard Worker   } else {
916*15dc779aSAndroid Build Coastguard Worker     ptr_drc_fac =
917*15dc779aSAndroid Build Coastguard Worker       &pstr_drc_dec->str_drc_channel_data[channel].drc_factors_sbr[0][0];
918*15dc779aSAndroid Build Coastguard Worker   }
919*15dc779aSAndroid Build Coastguard Worker   for (i = 0; i < 64; i++) {
920*15dc779aSAndroid Build Coastguard Worker     drc_sbr_factors[i] = ptr_drc_fac;
921*15dc779aSAndroid Build Coastguard Worker     ptr_drc_fac += 64;
922*15dc779aSAndroid Build Coastguard Worker   }
923*15dc779aSAndroid Build Coastguard Worker 
924*15dc779aSAndroid Build Coastguard Worker   memcpy(prev_frame_drc_sbr_factors,
925*15dc779aSAndroid Build Coastguard Worker          drc_sbr_factors[2 * num_qmf_sub_sample - 1], 64 * sizeof(WORD32));
926*15dc779aSAndroid Build Coastguard Worker 
927*15dc779aSAndroid Build Coastguard Worker   pstr_drc_data = &pstr_drc_dec->str_drc_channel_data[channel];
928*15dc779aSAndroid Build Coastguard Worker   if (!pstr_drc_dec->drc_on) return;
929*15dc779aSAndroid Build Coastguard Worker 
930*15dc779aSAndroid Build Coastguard Worker   if (pstr_drc_dec->drc_dig_norm) {
931*15dc779aSAndroid Build Coastguard Worker     diff_ref_level =
932*15dc779aSAndroid Build Coastguard Worker         pstr_drc_dec->target_ref_level - pstr_drc_dec->prog_ref_level;
933*15dc779aSAndroid Build Coastguard Worker 
934*15dc779aSAndroid Build Coastguard Worker     if (diff_ref_level < 0) {
935*15dc779aSAndroid Build Coastguard Worker       diff_ref_level = -diff_ref_level;
936*15dc779aSAndroid Build Coastguard Worker       table = ixheaacd_drc_pow_tbl_2_q29;
937*15dc779aSAndroid Build Coastguard Worker       div_val = ixheaacd_get_div_value_24(diff_ref_level);
938*15dc779aSAndroid Build Coastguard Worker       drc_norm = 1 << (25 + div_val);
939*15dc779aSAndroid Build Coastguard Worker       mod_val = diff_ref_level - (div_val * 24);
940*15dc779aSAndroid Build Coastguard Worker       diff_ref_level = mod_val * 1000;
941*15dc779aSAndroid Build Coastguard Worker 
942*15dc779aSAndroid Build Coastguard Worker     } else {
943*15dc779aSAndroid Build Coastguard Worker       table = ixheaacd_drc_pow_tbl_1_2_q29;
944*15dc779aSAndroid Build Coastguard Worker       div_val = ixheaacd_get_div_value_24(diff_ref_level);
945*15dc779aSAndroid Build Coastguard Worker       drc_norm = 1 << (25 - div_val);
946*15dc779aSAndroid Build Coastguard Worker       mod_val = diff_ref_level - (div_val * 24);
947*15dc779aSAndroid Build Coastguard Worker       diff_ref_level = mod_val * 1000;
948*15dc779aSAndroid Build Coastguard Worker     }
949*15dc779aSAndroid Build Coastguard Worker     ret_val = ixheaacd_get_div_value_24(diff_ref_level);
950*15dc779aSAndroid Build Coastguard Worker     drc_norm = ixheaacd_mult32x16in32_shift29(drc_norm, table[ret_val]);
951*15dc779aSAndroid Build Coastguard Worker 
952*15dc779aSAndroid Build Coastguard Worker   } else {
953*15dc779aSAndroid Build Coastguard Worker     drc_norm = (1 << 25);
954*15dc779aSAndroid Build Coastguard Worker   }
955*15dc779aSAndroid Build Coastguard Worker 
956*15dc779aSAndroid Build Coastguard Worker   start_pos = 0;
957*15dc779aSAndroid Build Coastguard Worker   for (drc_band = 0; drc_band < pstr_drc_data->n_drc_bands; drc_band++) {
958*15dc779aSAndroid Build Coastguard Worker     if ((pstr_drc_dec->str_drc_bs_data[0].drc_data_type == DVB_DRC_ANC_DATA) &&
959*15dc779aSAndroid Build Coastguard Worker         (pstr_drc_dec->heavy_mode)) {
960*15dc779aSAndroid Build Coastguard Worker       WORD32 val_x, val_y;
961*15dc779aSAndroid Build Coastguard Worker       float compression_factor;
962*15dc779aSAndroid Build Coastguard Worker       float temp;
963*15dc779aSAndroid Build Coastguard Worker       val_x = ((UWORD8)pstr_drc_data->drc_fac_dvb[drc_band]) >> 4;
964*15dc779aSAndroid Build Coastguard Worker       val_y = ((UWORD8)pstr_drc_data->drc_fac_dvb[drc_band]) & 0x0F;
965*15dc779aSAndroid Build Coastguard Worker 
966*15dc779aSAndroid Build Coastguard Worker       compression_factor = (FLOAT32)(48.164 - 6.0206 * val_x - 0.4014 * val_y);
967*15dc779aSAndroid Build Coastguard Worker 
968*15dc779aSAndroid Build Coastguard Worker       temp = (FLOAT32)(pow(10, (float)compression_factor / 20.0));
969*15dc779aSAndroid Build Coastguard Worker       drc_freq_fac = (WORD32)(temp * 33554431.0f);
970*15dc779aSAndroid Build Coastguard Worker 
971*15dc779aSAndroid Build Coastguard Worker     } else {
972*15dc779aSAndroid Build Coastguard Worker       if (pstr_drc_data->drc_fac[drc_band] < 0) {
973*15dc779aSAndroid Build Coastguard Worker         low_hi = pstr_drc_dec->cut_factor;
974*15dc779aSAndroid Build Coastguard Worker       } else {
975*15dc779aSAndroid Build Coastguard Worker         low_hi = pstr_drc_dec->boost_factor;
976*15dc779aSAndroid Build Coastguard Worker       }
977*15dc779aSAndroid Build Coastguard Worker 
978*15dc779aSAndroid Build Coastguard Worker       {
979*15dc779aSAndroid Build Coastguard Worker         drc_fac =
980*15dc779aSAndroid Build Coastguard Worker             pstr_drc_dec->str_drc_channel_data[channel].drc_fac[drc_band] *
981*15dc779aSAndroid Build Coastguard Worker             low_hi;
982*15dc779aSAndroid Build Coastguard Worker         if (drc_fac < 0) {
983*15dc779aSAndroid Build Coastguard Worker           drc_fac *= -1;
984*15dc779aSAndroid Build Coastguard Worker           table = ixheaacd_drc_pow_tbl_1_2_q29;
985*15dc779aSAndroid Build Coastguard Worker 
986*15dc779aSAndroid Build Coastguard Worker           div_val = ixheaacd_get_div_value_2400(drc_fac);
987*15dc779aSAndroid Build Coastguard Worker           drc_freq_fac = 1 << (25 - div_val);
988*15dc779aSAndroid Build Coastguard Worker 
989*15dc779aSAndroid Build Coastguard Worker           mod_val = drc_fac - (div_val * 2400);
990*15dc779aSAndroid Build Coastguard Worker           drc_fac = mod_val * 10;
991*15dc779aSAndroid Build Coastguard Worker         } else {
992*15dc779aSAndroid Build Coastguard Worker           table = ixheaacd_drc_pow_tbl_2_q29;
993*15dc779aSAndroid Build Coastguard Worker 
994*15dc779aSAndroid Build Coastguard Worker           div_val = ixheaacd_get_div_value_2400(drc_fac);
995*15dc779aSAndroid Build Coastguard Worker           drc_freq_fac = 1 << (25 + div_val);
996*15dc779aSAndroid Build Coastguard Worker 
997*15dc779aSAndroid Build Coastguard Worker           mod_val = drc_fac - (div_val * 2400);
998*15dc779aSAndroid Build Coastguard Worker           drc_fac = mod_val * 10;
999*15dc779aSAndroid Build Coastguard Worker         }
1000*15dc779aSAndroid Build Coastguard Worker 
1001*15dc779aSAndroid Build Coastguard Worker         ret_val = ixheaacd_get_div_value_24(drc_fac);
1002*15dc779aSAndroid Build Coastguard Worker 
1003*15dc779aSAndroid Build Coastguard Worker         drc_freq_fac =
1004*15dc779aSAndroid Build Coastguard Worker             ixheaacd_mult32x16in32_shift29(drc_freq_fac, table[ret_val]);
1005*15dc779aSAndroid Build Coastguard Worker 
1006*15dc779aSAndroid Build Coastguard Worker         drc_freq_fac = ixheaacd_mult32x16in32_shift25(drc_freq_fac, drc_norm);
1007*15dc779aSAndroid Build Coastguard Worker       }
1008*15dc779aSAndroid Build Coastguard Worker     }
1009*15dc779aSAndroid Build Coastguard Worker 
1010*15dc779aSAndroid Build Coastguard Worker     end_pos = pstr_drc_data->n_mdct_bands[drc_band];
1011*15dc779aSAndroid Build Coastguard Worker 
1012*15dc779aSAndroid Build Coastguard Worker     if (!pstr_drc_dec->sbr_found) {
1013*15dc779aSAndroid Build Coastguard Worker       for (spec_pos = start_pos; spec_pos < end_pos; spec_pos++) {
1014*15dc779aSAndroid Build Coastguard Worker         ptr_spectral_coef[spec_pos] = ixheaacd_mult32x16in32_shift25(
1015*15dc779aSAndroid Build Coastguard Worker             ptr_spectral_coef[spec_pos], drc_freq_fac);
1016*15dc779aSAndroid Build Coastguard Worker       }
1017*15dc779aSAndroid Build Coastguard Worker     }
1018*15dc779aSAndroid Build Coastguard Worker 
1019*15dc779aSAndroid Build Coastguard Worker     if (pstr_drc_dec->sbr_found) {
1020*15dc779aSAndroid Build Coastguard Worker       if (win_seq != EIGHT_SHORT_SEQUENCE) {
1021*15dc779aSAndroid Build Coastguard Worker         if (960 == frame_size) {
1022*15dc779aSAndroid Build Coastguard Worker           qmf_start = ixheaacd_div_by_30(start_pos);
1023*15dc779aSAndroid Build Coastguard Worker           offset_value = 1;
1024*15dc779aSAndroid Build Coastguard Worker         } else {
1025*15dc779aSAndroid Build Coastguard Worker           qmf_start = start_pos >> 5;
1026*15dc779aSAndroid Build Coastguard Worker           offset_value = 0;
1027*15dc779aSAndroid Build Coastguard Worker         }
1028*15dc779aSAndroid Build Coastguard Worker 
1029*15dc779aSAndroid Build Coastguard Worker         for (j = -num_qmf_sub_sample_by_2; j < num_qmf_sub_sample; j++) {
1030*15dc779aSAndroid Build Coastguard Worker           WORD32 alpha_val = 0;
1031*15dc779aSAndroid Build Coastguard Worker 
1032*15dc779aSAndroid Build Coastguard Worker           if (j + num_qmf_sub_sample_by_2 < num_qmf_sub_sample) {
1033*15dc779aSAndroid Build Coastguard Worker             if (pstr_drc_data->drc_interp_scheme == 0) {
1034*15dc779aSAndroid Build Coastguard Worker               alpha_val = (j + num_qmf_sub_sample_by_2);
1035*15dc779aSAndroid Build Coastguard Worker               for (i = qmf_start; i < 64; i++) {
1036*15dc779aSAndroid Build Coastguard Worker                 WORD64 temp_drc = (WORD64)alpha_val * drc_freq_fac +
1037*15dc779aSAndroid Build Coastguard Worker                                   (num_qmf_sub_sample - alpha_val) *
1038*15dc779aSAndroid Build Coastguard Worker                                       (WORD64)prev_frame_drc_sbr_factors[i];
1039*15dc779aSAndroid Build Coastguard Worker 
1040*15dc779aSAndroid Build Coastguard Worker                 if (frame_size == 512) {
1041*15dc779aSAndroid Build Coastguard Worker                   drc_sbr_factors[num_qmf_sub_sample + j][i] =
1042*15dc779aSAndroid Build Coastguard Worker                       (WORD32)(temp_drc >> 4);
1043*15dc779aSAndroid Build Coastguard Worker                 } else if (frame_size == 480) {
1044*15dc779aSAndroid Build Coastguard Worker                   drc_sbr_factors[num_qmf_sub_sample + j][i] =
1045*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_div_by_15(temp_drc);
1046*15dc779aSAndroid Build Coastguard Worker                 } else {
1047*15dc779aSAndroid Build Coastguard Worker                   drc_sbr_factors[num_qmf_sub_sample + j][i] =
1048*15dc779aSAndroid Build Coastguard Worker                       (WORD32)(temp_drc >> 5);
1049*15dc779aSAndroid Build Coastguard Worker                 }
1050*15dc779aSAndroid Build Coastguard Worker 
1051*15dc779aSAndroid Build Coastguard Worker                 if (960 == frame_size) {
1052*15dc779aSAndroid Build Coastguard Worker                   drc_sbr_factors[num_qmf_sub_sample + j][i] =
1053*15dc779aSAndroid Build Coastguard Worker                       ixheaacd_div_by_30(
1054*15dc779aSAndroid Build Coastguard Worker                           drc_sbr_factors[num_qmf_sub_sample + j][i]);
1055*15dc779aSAndroid Build Coastguard Worker                 }
1056*15dc779aSAndroid Build Coastguard Worker               }
1057*15dc779aSAndroid Build Coastguard Worker 
1058*15dc779aSAndroid Build Coastguard Worker             } else {
1059*15dc779aSAndroid Build Coastguard Worker               if (j + num_qmf_sub_sample_by_2 >=
1060*15dc779aSAndroid Build Coastguard Worker                   ixheaacd_drc_offset[offset_value]
1061*15dc779aSAndroid Build Coastguard Worker                                      [pstr_drc_data->drc_interp_scheme - 1]) {
1062*15dc779aSAndroid Build Coastguard Worker                 alpha_val = 1;
1063*15dc779aSAndroid Build Coastguard Worker                 for (i = qmf_start; i < 64; i++) {
1064*15dc779aSAndroid Build Coastguard Worker                   drc_sbr_factors[num_qmf_sub_sample + j][i] = drc_freq_fac;
1065*15dc779aSAndroid Build Coastguard Worker                 }
1066*15dc779aSAndroid Build Coastguard Worker               } else {
1067*15dc779aSAndroid Build Coastguard Worker                 alpha_val = 0;
1068*15dc779aSAndroid Build Coastguard Worker                 for (i = qmf_start; i < 64; i++) {
1069*15dc779aSAndroid Build Coastguard Worker                   drc_sbr_factors[num_qmf_sub_sample + j][i] =
1070*15dc779aSAndroid Build Coastguard Worker                       prev_frame_drc_sbr_factors[i];
1071*15dc779aSAndroid Build Coastguard Worker                 }
1072*15dc779aSAndroid Build Coastguard Worker               }
1073*15dc779aSAndroid Build Coastguard Worker             }
1074*15dc779aSAndroid Build Coastguard Worker           } else {
1075*15dc779aSAndroid Build Coastguard Worker             alpha_val = 1;
1076*15dc779aSAndroid Build Coastguard Worker             for (i = qmf_start; i < 64; i++) {
1077*15dc779aSAndroid Build Coastguard Worker               drc_sbr_factors[num_qmf_sub_sample + j][i] = drc_freq_fac;
1078*15dc779aSAndroid Build Coastguard Worker             }
1079*15dc779aSAndroid Build Coastguard Worker           }
1080*15dc779aSAndroid Build Coastguard Worker         }
1081*15dc779aSAndroid Build Coastguard Worker       } else {
1082*15dc779aSAndroid Build Coastguard Worker         qmf_start_pos = ixheaacd_drc_floor(start_pos, frame_size);
1083*15dc779aSAndroid Build Coastguard Worker 
1084*15dc779aSAndroid Build Coastguard Worker         qmf_stop_pos = ixheaacd_drc_ceil(end_pos, frame_size);
1085*15dc779aSAndroid Build Coastguard Worker 
1086*15dc779aSAndroid Build Coastguard Worker         qmf_start = ixheaacd_drc_get_bottom_qmf(start_pos, frame_size);
1087*15dc779aSAndroid Build Coastguard Worker         for (j = qmf_start_pos; j < qmf_stop_pos; j++) {
1088*15dc779aSAndroid Build Coastguard Worker           if (j > qmf_start_pos && ((j & 0x03) == 0)) {
1089*15dc779aSAndroid Build Coastguard Worker             qmf_start = 0;
1090*15dc779aSAndroid Build Coastguard Worker           }
1091*15dc779aSAndroid Build Coastguard Worker           for (i = qmf_start; i < 64; i++) {
1092*15dc779aSAndroid Build Coastguard Worker             drc_sbr_factors[num_qmf_sub_sample + j][i] = drc_freq_fac;
1093*15dc779aSAndroid Build Coastguard Worker           }
1094*15dc779aSAndroid Build Coastguard Worker         }
1095*15dc779aSAndroid Build Coastguard Worker       }
1096*15dc779aSAndroid Build Coastguard Worker     }
1097*15dc779aSAndroid Build Coastguard Worker 
1098*15dc779aSAndroid Build Coastguard Worker     start_pos = end_pos;
1099*15dc779aSAndroid Build Coastguard Worker   }
1100*15dc779aSAndroid Build Coastguard Worker 
1101*15dc779aSAndroid Build Coastguard Worker   if (win_seq != EIGHT_SHORT_SEQUENCE) {
1102*15dc779aSAndroid Build Coastguard Worker     pstr_drc_data->prev_interp_scheme = pstr_drc_data->drc_interp_scheme;
1103*15dc779aSAndroid Build Coastguard Worker   } else {
1104*15dc779aSAndroid Build Coastguard Worker     pstr_drc_data->prev_interp_scheme = 8;
1105*15dc779aSAndroid Build Coastguard Worker   }
1106*15dc779aSAndroid Build Coastguard Worker }
1107