xref: /aosp_15_r20/external/libxaac/encoder/iusace_psy_rom.c (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1 /******************************************************************************
2  *                                                                            *
3  * Copyright (C) 2023 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************
18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19  */
20 
21 #include "iusace_type_def.h"
22 #include "iusace_cnst.h"
23 #include "iusace_tns_usac.h"
24 #include "iusace_psy_mod.h"
25 #include "iusace_psy_utils.h"
26 
27 const WORD16 iusace_sfb_96_1024[] = {4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  44,
28                                      48,  52,  56,  64,  72,  80,  88,  96,  108, 120, 132,
29                                      144, 156, 172, 188, 212, 240, 276, 320, 384, 448, 512,
30                                      576, 640, 704, 768, 832, 896, 960, 1024};
31 
32 const WORD16 iexheaac_sfb_96_768[] = {
33     4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  44,  48,  52,  56,  64,  72,  80,  88, 96,
34     108, 120, 132, 144, 156, 172, 188, 212, 240, 276, 320, 384, 448, 512, 576, 640, 704, 768};
35 
36 const WORD16 iusace_sfb_96_128[] = {4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128};
37 
38 const WORD16 iexheaac_sfb_96_96[] = {4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 96};
39 
40 const WORD16 iusace_sfb_64_1024[] = {4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  44,  48,
41                                      52,  56,  64,  72,  80,  88,  100, 112, 124, 140, 156, 172,
42                                      192, 216, 240, 268, 304, 344, 384, 424, 464, 504, 544, 584,
43                                      624, 664, 704, 744, 784, 824, 864, 904, 944, 984, 1024};
44 
45 const WORD16 iusace_sfb_64_768[] = {4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  44,
46                                     48,  52,  56,  64,  72,  80,  88,  100, 112, 124, 140,
47                                     156, 172, 192, 216, 240, 268, 304, 344, 384, 424, 464,
48                                     504, 544, 584, 624, 664, 704, 744, 768};
49 
50 const WORD16 iusace_sfb_64_128[] = {4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128};
51 
52 const WORD16 iusace_sfb_64_96[] = {4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 96};
53 
54 const WORD16 iusace_sfb_48_1024[] = {
55     4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  48,  56,  64,  72,  80,  88,  96,
56     108, 120, 132, 144, 160, 176, 196, 216, 240, 264, 292, 320, 352, 384, 416, 448, 480,
57     512, 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 1024};
58 
59 const WORD16 iexheaac_sfb_48_768[] = {4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  48,
60                                       56,  64,  72,  80,  88,  96,  108, 120, 132, 144, 160,
61                                       176, 196, 216, 240, 264, 292, 320, 352, 384, 416, 448,
62                                       480, 512, 544, 576, 608, 640, 672, 704, 736, 768};
63 
64 const WORD16 iusace_sfb_48_128[] = {4, 8, 12, 16, 20, 28, 36, 44, 56, 68, 80, 96, 112, 128};
65 
66 const WORD16 iexheaac_sfb_48_96[] = {4, 8, 12, 16, 20, 28, 36, 44, 56, 68, 80, 96};
67 
68 const WORD16 iusace_sfb_32_1024[] = {
69     4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  48,  56,  64,  72,  80,  88,  96,
70     108, 120, 132, 144, 160, 176, 196, 216, 240, 264, 292, 320, 352, 384, 416, 448, 480,
71     512, 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 960, 992, 1024};
72 
73 const WORD16 iexheaac_sfb_32_768[] = {4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  48,
74                                       56,  64,  72,  80,  88,  96,  108, 120, 132, 144, 160,
75                                       176, 196, 216, 240, 264, 292, 320, 352, 384, 416, 448,
76                                       480, 512, 544, 576, 608, 640, 672, 704, 736, 768};
77 
78 const WORD16 iusace_sfb_24_1024[] = {4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  44,  52,
79                                      60,  68,  76,  84,  92,  100, 108, 116, 124, 136, 148, 160,
80                                      172, 188, 204, 220, 240, 260, 284, 308, 336, 364, 396, 432,
81                                      468, 508, 552, 600, 652, 704, 768, 832, 896, 960, 1024};
82 
83 const WORD16 iexheaac_sfb_24_768[] = {4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  44,
84                                       52,  60,  68,  76,  84,  92,  100, 108, 116, 124, 136,
85                                       148, 160, 172, 188, 204, 220, 240, 260, 284, 308, 336,
86                                       364, 396, 432, 468, 508, 552, 600, 652, 704, 768};
87 
88 const WORD16 iusace_sfb_24_128[] = {4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 64, 76, 92, 108, 128};
89 
90 const WORD16 iexheaac_sfb_24_96[] = {4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 64, 76, 92, 96};
91 
92 const WORD16 iusace_sfb_16_1024[] = {8,   16,  24,  32,  40,  48,  56,  64,  72,  80,  88,
93                                      100, 112, 124, 136, 148, 160, 172, 184, 196, 212, 228,
94                                      244, 260, 280, 300, 320, 344, 368, 396, 424, 456, 492,
95                                      532, 572, 616, 664, 716, 772, 832, 896, 960, 1024};
96 
97 const WORD16 iexheaac_sfb_16_768[] = {8,   16,  24,  32,  40,  48,  56,  64,  72,  80,
98                                       88,  100, 112, 124, 136, 148, 160, 172, 184, 196,
99                                       212, 228, 244, 260, 280, 300, 320, 344, 368, 396,
100                                       424, 456, 492, 532, 572, 616, 664, 716, 768};
101 
102 const WORD16 iusace_sfb_16_128[] = {4, 8, 12, 16, 20, 24, 28, 32, 40, 48, 60, 72, 88, 108, 128};
103 
104 const WORD16 iexheaac_sfb_16_96[] = {4, 8, 12, 16, 20, 24, 28, 32, 40, 48, 60, 72, 88, 96};
105 
106 const WORD16 iusace_sfb_8_1024[] = {12,  24,  36,  48,  60,  72,  84,  96,  108, 120,
107                                     132, 144, 156, 172, 188, 204, 220, 236, 252, 268,
108                                     288, 308, 328, 348, 372, 396, 420, 448, 476, 508,
109                                     544, 580, 620, 664, 712, 764, 820, 880, 944, 1024};
110 
111 const WORD16 iusace_sfb_8_128[] = {4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 60, 72, 88, 108, 128};
112 
113 const WORD16 iusace_sfb_8_768[] = {
114     12,  24,  36,  48,  60,  72,  84,  96,  108, 120, 132, 144, 156, 172, 188, 204, 220, 236, 252,
115     268, 288, 308, 328, 348, 372, 396, 420, 448, 476, 508, 544, 580, 620, 664, 712, 764, 768};
116 
117 const WORD16 iusace_sfb_8_96[] = {4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 60, 72, 88, 96};
118 
119 ia_sfb_info_struct iusace_sfb_info_1024[12] = {
120     {8000, 40, 15, iusace_sfb_8_1024, iusace_sfb_8_128, {0}, {0}},
121     {11025, 43, 15, iusace_sfb_16_1024, iusace_sfb_16_128, {0}, {0}},
122     {12000, 43, 15, iusace_sfb_16_1024, iusace_sfb_16_128, {0}, {0}},
123     {16000, 43, 15, iusace_sfb_16_1024, iusace_sfb_16_128, {0}, {0}},
124     {22050, 47, 15, iusace_sfb_24_1024, iusace_sfb_24_128, {0}, {0}},
125     {24000, 47, 15, iusace_sfb_24_1024, iusace_sfb_24_128, {0}, {0}},
126     {32000, 51, 14, iusace_sfb_32_1024, iusace_sfb_48_128, {0}, {0}},
127     {44100, 49, 14, iusace_sfb_48_1024, iusace_sfb_48_128, {0}, {0}},
128     {48000, 49, 14, iusace_sfb_48_1024, iusace_sfb_48_128, {0}, {0}},
129     {64000, 47, 12, iusace_sfb_64_1024, iusace_sfb_64_128, {0}, {0}},
130     {88200, 41, 12, iusace_sfb_64_1024, iusace_sfb_64_128, {0}, {0}},
131     {96000, 41, 12, iusace_sfb_96_1024, iusace_sfb_96_128, {0}, {0}}};
132 
133 #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
134 
135 ia_sfb_info_struct iusace_sfb_info_768[12] = {{8000,
136                                                ARRAY_SIZE(iusace_sfb_8_768),
137                                                ARRAY_SIZE(iusace_sfb_8_96),
138                                                iusace_sfb_8_768,
139                                                iusace_sfb_8_96,
140                                                {0},
141                                                {0}},
142                                               {11025,
143                                                ARRAY_SIZE(iexheaac_sfb_16_768),
144                                                ARRAY_SIZE(iexheaac_sfb_16_96),
145                                                iexheaac_sfb_16_768,
146                                                iexheaac_sfb_16_96,
147                                                {0},
148                                                {0}},
149                                               {12000,
150                                                ARRAY_SIZE(iexheaac_sfb_16_768),
151                                                ARRAY_SIZE(iexheaac_sfb_16_96),
152                                                iexheaac_sfb_16_768,
153                                                iexheaac_sfb_16_96,
154                                                {0},
155                                                {0}},
156                                               {16000,
157                                                ARRAY_SIZE(iexheaac_sfb_16_768),
158                                                ARRAY_SIZE(iexheaac_sfb_16_96),
159                                                iexheaac_sfb_16_768,
160                                                iexheaac_sfb_16_96,
161                                                {0},
162                                                {0}},
163                                               {22050,
164                                                ARRAY_SIZE(iexheaac_sfb_24_768),
165                                                ARRAY_SIZE(iexheaac_sfb_24_96),
166                                                iexheaac_sfb_24_768,
167                                                iexheaac_sfb_24_96,
168                                                {0},
169                                                {0}},
170                                               {24000,
171                                                ARRAY_SIZE(iexheaac_sfb_24_768),
172                                                ARRAY_SIZE(iexheaac_sfb_24_96),
173                                                iexheaac_sfb_24_768,
174                                                iexheaac_sfb_24_96,
175                                                {0},
176                                                {0}},
177                                               {32000,
178                                                ARRAY_SIZE(iexheaac_sfb_48_768),
179                                                ARRAY_SIZE(iexheaac_sfb_48_96),
180                                                iexheaac_sfb_48_768,
181                                                iexheaac_sfb_48_96,
182                                                {0},
183                                                {0}},
184                                               {44100,
185                                                ARRAY_SIZE(iexheaac_sfb_48_768),
186                                                ARRAY_SIZE(iexheaac_sfb_48_96),
187                                                iexheaac_sfb_48_768,
188                                                iexheaac_sfb_48_96,
189                                                {0},
190                                                {0}},
191                                               {48000,
192                                                ARRAY_SIZE(iexheaac_sfb_48_768),
193                                                ARRAY_SIZE(iexheaac_sfb_48_96),
194                                                iexheaac_sfb_48_768,
195                                                iexheaac_sfb_48_96,
196                                                {0},
197                                                {0}},
198                                               {64000,
199                                                ARRAY_SIZE(iusace_sfb_64_768),
200                                                ARRAY_SIZE(iusace_sfb_64_96),
201                                                iusace_sfb_64_768,
202                                                iusace_sfb_64_96,
203                                                {0},
204                                                {0}},
205                                               {88200,
206                                                ARRAY_SIZE(iexheaac_sfb_96_768),
207                                                ARRAY_SIZE(iexheaac_sfb_96_96),
208                                                iexheaac_sfb_96_768,
209                                                iexheaac_sfb_96_96,
210                                                {0},
211                                                {0}},
212                                               {96000,
213                                                ARRAY_SIZE(iexheaac_sfb_96_768),
214                                                ARRAY_SIZE(iexheaac_sfb_96_96),
215                                                iexheaac_sfb_96_768,
216                                                iexheaac_sfb_96_96,
217                                                {0},
218                                                {0}}};
219