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