1 /****************************************************************************** 2 * 3 * Copyright 1999-2012 Broadcom Corporation 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 19 /****************************************************************************** 20 * 21 * This file contains the code that performs Analysis of the input audio 22 * stream. 23 * 24 ******************************************************************************/ 25 #include <string.h> 26 #include "sbc_enc_func_declare.h" 27 #include "sbc_encoder.h" 28 /*#include <math.h>*/ 29 30 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE) 31 #define WIND_4_SUBBANDS_0_1 \ 32 (int32_t)0x01659F45 /* gas32CoeffFor4SBs[8] = -gas32CoeffFor4SBs[32] = \ 33 0x01659F45 */ 34 #define WIND_4_SUBBANDS_0_2 \ 35 (int32_t)0x115B1ED2 /* gas32CoeffFor4SBs[16] = -gas32CoeffFor4SBs[24] = \ 36 0x115B1ED2 */ 37 #define WIND_4_SUBBANDS_1_0 \ 38 (int32_t)0x001194E6 /* gas32CoeffFor4SBs[1 et 39] = 0x001194E6 */ 39 #define WIND_4_SUBBANDS_1_1 \ 40 (int32_t)0x029DBAA3 /* gas32CoeffFor4SBs[9 et 31] = 0x029DBAA3 */ 41 #define WIND_4_SUBBANDS_1_2 \ 42 (int32_t)0x18F55C90 /* gas32CoeffFor4SBs[17 et 23] = 0x18F55C90 */ 43 #define WIND_4_SUBBANDS_1_3 \ 44 (int32_t)0xF60FAF37 /* gas32CoeffFor4SBs[15 et 25] = 0xF60FAF37 */ 45 #define WIND_4_SUBBANDS_1_4 \ 46 (int32_t)0xFF9BB9D5 /* gas32CoeffFor4SBs[7 et 33] = 0xFF9BB9D5 */ 47 #define WIND_4_SUBBANDS_2_0 \ 48 (int32_t)0x0030E2D3 /* gas32CoeffFor4SBs[2 et 38] = 0x0030E2D3 */ 49 #define WIND_4_SUBBANDS_2_1 \ 50 (int32_t)0x03B23341 /* gas32CoeffFor4SBs[10 et 30] = 0x03B23341 */ 51 #define WIND_4_SUBBANDS_2_2 \ 52 (int32_t)0x1F91CA46 /* gas32CoeffFor4SBs[18 et 22] = 0x1F91CA46 */ 53 #define WIND_4_SUBBANDS_2_3 \ 54 (int32_t)0xFC4F91D4 /* gas32CoeffFor4SBs[14 et 26] = 0xFC4F91D4 */ 55 #define WIND_4_SUBBANDS_2_4 \ 56 (int32_t)0x003D239B /* gas32CoeffFor4SBs[6 et 34] = 0x003D239B */ 57 #define WIND_4_SUBBANDS_3_0 \ 58 (int32_t)0x00599403 /* gas32CoeffFor4SBs[3 et 37] = 0x00599403 */ 59 #define WIND_4_SUBBANDS_3_1 \ 60 (int32_t)0x041EEE40 /* gas32CoeffFor4SBs[11 et 29] = 0x041EEE40 */ 61 #define WIND_4_SUBBANDS_3_2 \ 62 (int32_t)0x2412F251 /* gas32CoeffFor4SBs[19 et 21] = 0x2412F251 */ 63 #define WIND_4_SUBBANDS_3_3 \ 64 (int32_t)0x00C8F2BC /* gas32CoeffFor4SBs[13 et 27] = 0x00C8F2BC */ 65 #define WIND_4_SUBBANDS_3_4 \ 66 (int32_t)0x007F88E4 /* gas32CoeffFor4SBs[5 et 35] = 0x007F88E4 */ 67 #define WIND_4_SUBBANDS_4_0 \ 68 (int32_t)0x007DBCC8 /* gas32CoeffFor4SBs[4 et 36] = 0x007DBCC8 */ 69 #define WIND_4_SUBBANDS_4_1 \ 70 (int32_t)0x034FEE2C /* gas32CoeffFor4SBs[12 et 28] = 0x034FEE2C */ 71 #define WIND_4_SUBBANDS_4_2 \ 72 (int32_t)0x25AC1FF2 /* gas32CoeffFor4SBs[20] = 0x25AC1FF2 */ 73 74 #define WIND_8_SUBBANDS_0_1 (int32_t)0x00B97348 /* 16 0x00B97348 */ 75 #define WIND_8_SUBBANDS_0_2 (int32_t)0x08B4307A /* 32 0x08B4307A */ 76 #define WIND_8_SUBBANDS_1_0 (int32_t)0x00052173 /* 1 et 79 = 0x00052173 */ 77 #define WIND_8_SUBBANDS_1_1 (int32_t)0x01071B96 /* 17 et 63 = 0x01071B96 */ 78 #define WIND_8_SUBBANDS_1_2 (int32_t)0x0A9F3E9A /* 33 et 47 = 0x0A9F3E9A*/ 79 #define WIND_8_SUBBANDS_1_3 (int32_t)0xF9312891 /* 31 et 49 = 0xF9312891 */ 80 #define WIND_8_SUBBANDS_1_4 (int32_t)0xFF8D6793 /* 15 et 65 = 0xFF8D6793 */ 81 #define WIND_8_SUBBANDS_2_0 (int32_t)0x000B3F71 /* 2 et 78 = 0x000B3F71 */ 82 #define WIND_8_SUBBANDS_2_1 (int32_t)0x0156B3CA /* 18 et 62 = 0x0156B3CA */ 83 #define WIND_8_SUBBANDS_2_2 (int32_t)0x0C7D59B6 /* 34 et 46 = 0x0C7D59B6 */ 84 #define WIND_8_SUBBANDS_2_3 (int32_t)0xFAFF95FC /* 30 et 50 = 0xFAFF95FC */ 85 #define WIND_8_SUBBANDS_2_4 (int32_t)0xFFC9F10E /* 14 et 66 = 0xFFC9F10E */ 86 #define WIND_8_SUBBANDS_3_0 (int32_t)0x00122C7D /* 3 et 77 = 0x00122C7D*/ 87 #define WIND_8_SUBBANDS_3_1 (int32_t)0x01A1B38B /* 19 et 61 = 0x01A1B38B */ 88 #define WIND_8_SUBBANDS_3_2 (int32_t)0x0E3BB16F /* 35 et 45 = 0x0E3BB16F */ 89 #define WIND_8_SUBBANDS_3_3 (int32_t)0xFCA86E7E /* 29 et 51 = 0xFCA86E7E */ 90 #define WIND_8_SUBBANDS_3_4 (int32_t)0xFFFA2413 /* 13 et 67 = 0xFFFA2413 */ 91 #define WIND_8_SUBBANDS_4_0 (int32_t)0x001AFF89 /* 4 et 66 = 0x001AFF89 */ 92 #define WIND_8_SUBBANDS_4_1 (int32_t)0x01E0224C /* 20 et 60 = 0x01E0224C */ 93 #define WIND_8_SUBBANDS_4_2 (int32_t)0x0FC721F9 /* 36 et 44 = 0x0FC721F9 */ 94 #define WIND_8_SUBBANDS_4_3 (int32_t)0xFE20435D /* 28 et 52 = 0xFE20435D */ 95 #define WIND_8_SUBBANDS_4_4 (int32_t)0x001D8FD2 /* 12 et 68 = 0x001D8FD2 */ 96 #define WIND_8_SUBBANDS_5_0 (int32_t)0x00255A62 /* 5 et 75 = 0x00255A62 */ 97 #define WIND_8_SUBBANDS_5_1 (int32_t)0x0209291F /* 21 et 59 = 0x0209291F */ 98 #define WIND_8_SUBBANDS_5_2 (int32_t)0x110ECEF0 /* 37 et 43 = 0x110ECEF0 */ 99 #define WIND_8_SUBBANDS_5_3 (int32_t)0xFF5EEB73 /* 27 et 53 = 0xFF5EEB73 */ 100 #define WIND_8_SUBBANDS_5_4 (int32_t)0x0034F8B6 /* 11 et 69 = 0x0034F8B6 */ 101 #define WIND_8_SUBBANDS_6_0 (int32_t)0x003060F4 /* 6 et 74 = 0x003060F4 */ 102 #define WIND_8_SUBBANDS_6_1 (int32_t)0x02138653 /* 22 et 58 = 0x02138653 */ 103 #define WIND_8_SUBBANDS_6_2 (int32_t)0x120435FA /* 38 et 42 = 0x120435FA */ 104 #define WIND_8_SUBBANDS_6_3 (int32_t)0x005FD0FF /* 26 et 54 = 0x005FD0FF */ 105 #define WIND_8_SUBBANDS_6_4 (int32_t)0x00415B75 /* 10 et 70 = 0x00415B75 */ 106 #define WIND_8_SUBBANDS_7_0 (int32_t)0x003A72E7 /* 7 et 73 = 0x003A72E7 */ 107 #define WIND_8_SUBBANDS_7_1 (int32_t)0x01F5F424 /* 23 et 57 = 0x01F5F424 */ 108 #define WIND_8_SUBBANDS_7_2 (int32_t)0x129C226F /* 39 et 41 = 0x129C226F */ 109 #define WIND_8_SUBBANDS_7_3 (int32_t)0x01223EBA /* 25 et 55 = 0x01223EBA */ 110 #define WIND_8_SUBBANDS_7_4 (int32_t)0x0044EF48 /* 9 et 71 = 0x0044EF48 */ 111 #define WIND_8_SUBBANDS_8_0 (int32_t)0x0041EC6A /* 8 et 72 = 0x0041EC6A */ 112 #define WIND_8_SUBBANDS_8_1 (int32_t)0x01A7ECEF /* 24 et 56 = 0x01A7ECEF */ 113 #define WIND_8_SUBBANDS_8_2 (int32_t)0x12CF6C75 /* 40 = 0x12CF6C75 */ 114 #else 115 #define WIND_4_SUBBANDS_0_1 \ 116 (int16_t)0x0166 /* gas32CoeffFor4SBs[8] = -gas32CoeffFor4SBs[32] = \ 117 0x01659F45 */ 118 #define WIND_4_SUBBANDS_0_2 \ 119 (int16_t)0x115B /* gas32CoeffFor4SBs[16] = -gas32CoeffFor4SBs[24] = \ 120 0x115B1ED2 */ 121 #define WIND_4_SUBBANDS_1_0 \ 122 (int16_t)0x0012 /* gas32CoeffFor4SBs[1 et 39] = 0x001194E6 */ 123 #define WIND_4_SUBBANDS_1_1 \ 124 (int16_t)0x029E /* gas32CoeffFor4SBs[9 et 31] = 0x029DBAA3 */ 125 #define WIND_4_SUBBANDS_1_2 \ 126 (int16_t)0x18F5 /* gas32CoeffFor4SBs[17 et 23] = 0x18F55C90 */ 127 #define WIND_4_SUBBANDS_1_3 \ 128 (int16_t)0xF610 /* gas32CoeffFor4SBs[15 et 25] = 0xF60FAF37 */ 129 #define WIND_4_SUBBANDS_1_4 \ 130 (int16_t)0xFF9C /* gas32CoeffFor4SBs[7 et 33] = 0xFF9BB9D5 */ 131 #define WIND_4_SUBBANDS_2_0 \ 132 (int16_t)0x0031 /* gas32CoeffFor4SBs[2 et 38] = 0x0030E2D3 */ 133 #define WIND_4_SUBBANDS_2_1 \ 134 (int16_t)0x03B2 /* gas32CoeffFor4SBs[10 et 30] = 0x03B23341 */ 135 #define WIND_4_SUBBANDS_2_2 \ 136 (int16_t)0x1F91 /* gas32CoeffFor4SBs[18 et 22] = 0x1F91CA46 */ 137 #define WIND_4_SUBBANDS_2_3 \ 138 (int16_t)0xFC50 /* gas32CoeffFor4SBs[14 et 26] = 0xFC4F91D4 */ 139 #define WIND_4_SUBBANDS_2_4 \ 140 (int16_t)0x003D /* gas32CoeffFor4SBs[6 et 34] = 0x003D239B */ 141 #define WIND_4_SUBBANDS_3_0 \ 142 (int16_t)0x005A /* gas32CoeffFor4SBs[3 et 37] = 0x00599403 */ 143 #define WIND_4_SUBBANDS_3_1 \ 144 (int16_t)0x041F /* gas32CoeffFor4SBs[11 et 29] = 0x041EEE40 */ 145 #define WIND_4_SUBBANDS_3_2 \ 146 (int16_t)0x2413 /* gas32CoeffFor4SBs[19 et 21] = 0x2412F251 */ 147 #define WIND_4_SUBBANDS_3_3 \ 148 (int16_t)0x00C9 /* gas32CoeffFor4SBs[13 et 27] = 0x00C8F2BC */ 149 #define WIND_4_SUBBANDS_3_4 \ 150 (int16_t)0x0080 /* gas32CoeffFor4SBs[5 et 35] = 0x007F88E4 */ 151 #define WIND_4_SUBBANDS_4_0 \ 152 (int16_t)0x007E /* gas32CoeffFor4SBs[4 et 36] = 0x007DBCC8 */ 153 #define WIND_4_SUBBANDS_4_1 \ 154 (int16_t)0x0350 /* gas32CoeffFor4SBs[12 et 28] = 0x034FEE2C */ 155 #define WIND_4_SUBBANDS_4_2 \ 156 (int16_t)0x25AC /* gas32CoeffFor4SBs[20] = 25AC1FF2 */ 157 158 #define WIND_8_SUBBANDS_0_1 (int16_t)0x00B9 /* 16 0x12CF6C75 */ 159 #define WIND_8_SUBBANDS_0_2 (int16_t)0x08B4 /* 32 0x08B4307A */ 160 #define WIND_8_SUBBANDS_1_0 (int16_t)0x0005 /* 1 et 79 = 0x00052173 */ 161 #define WIND_8_SUBBANDS_1_1 (int16_t)0x0107 /* 17 et 63 = 0x01071B96 */ 162 #define WIND_8_SUBBANDS_1_2 (int16_t)0x0A9F /* 33 et 47 = 0x0A9F3E9A*/ 163 #define WIND_8_SUBBANDS_1_3 (int16_t)0xF931 /* 31 et 49 = 0xF9312891 */ 164 #define WIND_8_SUBBANDS_1_4 (int16_t)0xFF8D /* 15 et 65 = 0xFF8D6793 */ 165 #define WIND_8_SUBBANDS_2_0 (int16_t)0x000B /* 2 et 78 = 0x000B3F71 */ 166 #define WIND_8_SUBBANDS_2_1 (int16_t)0x0157 /* 18 et 62 = 0x0156B3CA */ 167 #define WIND_8_SUBBANDS_2_2 (int16_t)0x0C7D /* 34 et 46 = 0x0C7D59B6 */ 168 #define WIND_8_SUBBANDS_2_3 (int16_t)0xFB00 /* 30 et 50 = 0xFAFF95FC */ 169 #define WIND_8_SUBBANDS_2_4 (int16_t)0xFFCA /* 14 et 66 = 0xFFC9F10E */ 170 #define WIND_8_SUBBANDS_3_0 (int16_t)0x0012 /* 3 et 77 = 0x00122C7D*/ 171 #define WIND_8_SUBBANDS_3_1 (int16_t)0x01A2 /* 19 et 61 = 0x01A1B38B */ 172 #define WIND_8_SUBBANDS_3_2 (int16_t)0x0E3C /* 35 et 45 = 0x0E3BB16F */ 173 #define WIND_8_SUBBANDS_3_3 (int16_t)0xFCA8 /* 29 et 51 = 0xFCA86E7E */ 174 #define WIND_8_SUBBANDS_3_4 (int16_t)0xFFFA /* 13 et 67 = 0xFFFA2413 */ 175 #define WIND_8_SUBBANDS_4_0 (int16_t)0x001B /* 4 et 66 = 0x001AFF89 */ 176 #define WIND_8_SUBBANDS_4_1 (int16_t)0x01E0 /* 20 et 60 = 0x01E0224C */ 177 #define WIND_8_SUBBANDS_4_2 (int16_t)0x0FC7 /* 36 et 44 = 0x0FC721F9 */ 178 #define WIND_8_SUBBANDS_4_3 (int16_t)0xFE20 /* 28 et 52 = 0xFE20435D */ 179 #define WIND_8_SUBBANDS_4_4 (int16_t)0x001E /* 12 et 68 = 0x001D8FD2 */ 180 #define WIND_8_SUBBANDS_5_0 (int16_t)0x0025 /* 5 et 75 = 0x00255A62 */ 181 #define WIND_8_SUBBANDS_5_1 (int16_t)0x0209 /* 21 et 59 = 0x0209291F */ 182 #define WIND_8_SUBBANDS_5_2 (int16_t)0x110F /* 37 et 43 = 0x110ECEF0 */ 183 #define WIND_8_SUBBANDS_5_3 (int16_t)0xFF5F /* 27 et 53 = 0xFF5EEB73 */ 184 #define WIND_8_SUBBANDS_5_4 (int16_t)0x0035 /* 11 et 69 = 0x0034F8B6 */ 185 #define WIND_8_SUBBANDS_6_0 (int16_t)0x0030 /* 6 et 74 = 0x003060F4 */ 186 #define WIND_8_SUBBANDS_6_1 (int16_t)0x0214 /* 22 et 58 = 0x02138653 */ 187 #define WIND_8_SUBBANDS_6_2 (int16_t)0x1204 /* 38 et 42 = 0x120435FA */ 188 #define WIND_8_SUBBANDS_6_3 (int16_t)0x0060 /* 26 et 54 = 0x005FD0FF */ 189 #define WIND_8_SUBBANDS_6_4 (int16_t)0x0041 /* 10 et 70 = 0x00415B75 */ 190 #define WIND_8_SUBBANDS_7_0 (int16_t)0x003A /* 7 et 73 = 0x003A72E7 */ 191 #define WIND_8_SUBBANDS_7_1 (int16_t)0x01F6 /* 23 et 57 = 0x01F5F424 */ 192 #define WIND_8_SUBBANDS_7_2 (int16_t)0x129C /* 39 et 41 = 0x129C226F */ 193 #define WIND_8_SUBBANDS_7_3 (int16_t)0x0122 /* 25 et 55 = 0x01223EBA */ 194 #define WIND_8_SUBBANDS_7_4 (int16_t)0x0045 /* 9 et 71 = 0x0044EF48 */ 195 #define WIND_8_SUBBANDS_8_0 (int16_t)0x0042 /* 8 et 72 = 0x0041EC6A */ 196 #define WIND_8_SUBBANDS_8_1 (int16_t)0x01A8 /* 24 et 56 = 0x01A7ECEF */ 197 #define WIND_8_SUBBANDS_8_2 (int16_t)0x12CF /* 40 = 0x12CF6C75 */ 198 #endif 199 200 #if (SBC_USE_ARM_PRAGMA == TRUE) 201 #pragma arm section zidata = "sbc_s32_analysis_section" 202 #endif 203 static int32_t s32DCTY[16] = {0}; 204 static int32_t s32X[ENC_VX_BUFFER_SIZE / 2]; 205 static int16_t* s16X = 206 (int16_t*)s32X; /* s16X must be 32 bits aligned cf SHIFTUP_X8_2*/ 207 #if (SBC_USE_ARM_PRAGMA == TRUE) 208 #pragma arm section zidata 209 #endif 210 211 /* This macro is for 4 subbands */ 212 #define SHIFTUP_X4 \ 213 { \ 214 ps32X = (int32_t*)(s16X + EncMaxShiftCounter + 38); \ 215 for (i = 0; i < 9; i++) { \ 216 *ps32X = *(ps32X - 2 - (ShiftCounter >> 1)); \ 217 ps32X--; \ 218 *ps32X = *(ps32X - 2 - (ShiftCounter >> 1)); \ 219 ps32X--; \ 220 } \ 221 } 222 #define SHIFTUP_X4_2 \ 223 { \ 224 ps32X = (int32_t*)(s16X + EncMaxShiftCounter + 38); \ 225 ps32X2 = (int32_t*)(s16X + (EncMaxShiftCounter << 1) + 78); \ 226 for (i = 0; i < 9; i++) { \ 227 *ps32X = *(ps32X - 2 - (ShiftCounter >> 1)); \ 228 *(ps32X2) = *(ps32X2 - 2 - (ShiftCounter >> 1)); \ 229 ps32X--; \ 230 ps32X2--; \ 231 *ps32X = *(ps32X - 2 - (ShiftCounter >> 1)); \ 232 *(ps32X2) = *(ps32X2 - 2 - (ShiftCounter >> 1)); \ 233 ps32X--; \ 234 ps32X2--; \ 235 } \ 236 } 237 238 /* This macro is for 8 subbands */ 239 #define SHIFTUP_X8 \ 240 { \ 241 ps32X = (int32_t*)(s16X + EncMaxShiftCounter + 78); \ 242 for (i = 0; i < 9; i++) { \ 243 *ps32X = *(ps32X - 4 - (ShiftCounter >> 1)); \ 244 ps32X--; \ 245 *ps32X = *(ps32X - 4 - (ShiftCounter >> 1)); \ 246 ps32X--; \ 247 *ps32X = *(ps32X - 4 - (ShiftCounter >> 1)); \ 248 ps32X--; \ 249 *ps32X = *(ps32X - 4 - (ShiftCounter >> 1)); \ 250 ps32X--; \ 251 } \ 252 } 253 #define SHIFTUP_X8_2 \ 254 { \ 255 ps32X = (int32_t*)(s16X + EncMaxShiftCounter + 78); \ 256 ps32X2 = (int32_t*)(s16X + (EncMaxShiftCounter << 1) + 158); \ 257 for (i = 0; i < 9; i++) { \ 258 *ps32X = *(ps32X - 4 - (ShiftCounter >> 1)); \ 259 *(ps32X2) = *(ps32X2 - 4 - (ShiftCounter >> 1)); \ 260 ps32X--; \ 261 ps32X2--; \ 262 *ps32X = *(ps32X - 4 - (ShiftCounter >> 1)); \ 263 *(ps32X2) = *(ps32X2 - 4 - (ShiftCounter >> 1)); \ 264 ps32X--; \ 265 ps32X2--; \ 266 *ps32X = *(ps32X - 4 - (ShiftCounter >> 1)); \ 267 *(ps32X2) = *(ps32X2 - 4 - (ShiftCounter >> 1)); \ 268 ps32X--; \ 269 ps32X2--; \ 270 *ps32X = *(ps32X - 4 - (ShiftCounter >> 1)); \ 271 *(ps32X2) = *(ps32X2 - 4 - (ShiftCounter >> 1)); \ 272 ps32X--; \ 273 ps32X2--; \ 274 } \ 275 } 276 277 #if (SBC_ARM_ASM_OPT == TRUE) 278 #define WINDOW_ACCU_8_0 \ 279 { \ 280 __asm {\ 281 MUL s32Hi,WIND_8_SUBBANDS_0_1,(s16X[ChOffset+16]-s16X[ChOffset+64]);\ 282 MLA s32Hi,WIND_8_SUBBANDS_0_2,(s16X[ChOffset+32]-s16X[ChOffset+48]),s32Hi;\ 283 MOV s32DCTY[0],s32Hi; \ 284 } \ 285 } 286 #define WINDOW_ACCU_8_1_15 \ 287 { \ 288 __asm {\ 289 MUL s32Hi,WIND_8_SUBBANDS_1_0,s16X[ChOffset+1];\ 290 MUL s32Hi2,WIND_8_SUBBANDS_1_0,s16X[ChOffset+64+15];\ 291 MLA s32Hi,WIND_8_SUBBANDS_1_1,s16X[ChOffset+16+1],s32Hi;\ 292 MLA s32Hi2,WIND_8_SUBBANDS_1_1,s16X[ChOffset+48+15],s32Hi2;\ 293 MLA s32Hi,WIND_8_SUBBANDS_1_2,s16X[ChOffset+32+1],s32Hi;\ 294 MLA s32Hi2,WIND_8_SUBBANDS_1_2,s16X[ChOffset+32+15],s32Hi2;\ 295 MLA s32Hi,WIND_8_SUBBANDS_1_3,s16X[ChOffset+48+1],s32Hi;\ 296 MLA s32Hi2,WIND_8_SUBBANDS_1_3,s16X[ChOffset+16+15],s32Hi2;\ 297 MLA s32Hi,WIND_8_SUBBANDS_1_4,s16X[ChOffset+64+1],s32Hi;\ 298 MLA s32Hi2,WIND_8_SUBBANDS_1_4,s16X[ChOffset+15],s32Hi2;\ 299 MOV s32DCTY[1],s32Hi;\ 300 MOV s32DCTY[15],s32Hi2; \ 301 } \ 302 } 303 #define WINDOW_ACCU_8_2_14 \ 304 { \ 305 __asm {\ 306 MUL s32Hi,WIND_8_SUBBANDS_2_0,s16X[ChOffset+2];\ 307 MUL s32Hi2,WIND_8_SUBBANDS_2_0,s16X[ChOffset+64+14];\ 308 MLA s32Hi,WIND_8_SUBBANDS_2_1,s16X[ChOffset+16+2],s32Hi;\ 309 MLA s32Hi2,WIND_8_SUBBANDS_2_1,s16X[ChOffset+48+14],s32Hi2;\ 310 MLA s32Hi,WIND_8_SUBBANDS_2_2,s16X[ChOffset+32+2],s32Hi;\ 311 MLA s32Hi2,WIND_8_SUBBANDS_2_2,s16X[ChOffset+32+14],s32Hi2;\ 312 MLA s32Hi,WIND_8_SUBBANDS_2_3,s16X[ChOffset+48+2],s32Hi;\ 313 MLA s32Hi2,WIND_8_SUBBANDS_2_3,s16X[ChOffset+16+14],s32Hi2;\ 314 MLA s32Hi,WIND_8_SUBBANDS_2_4,s16X[ChOffset+64+2],s32Hi;\ 315 MLA s32Hi2,WIND_8_SUBBANDS_2_4,s16X[ChOffset+14],s32Hi2;\ 316 MOV s32DCTY[2],s32Hi;\ 317 MOV s32DCTY[14],s32Hi2; \ 318 } \ 319 } 320 #define WINDOW_ACCU_8_3_13 \ 321 { \ 322 __asm {\ 323 MUL s32Hi,WIND_8_SUBBANDS_3_0,s16X[ChOffset+3];\ 324 MUL s32Hi2,WIND_8_SUBBANDS_3_0,s16X[ChOffset+64+13];\ 325 MLA s32Hi,WIND_8_SUBBANDS_3_1,s16X[ChOffset+16+3],s32Hi;\ 326 MLA s32Hi2,WIND_8_SUBBANDS_3_1,s16X[ChOffset+48+13],s32Hi2;\ 327 MLA s32Hi,WIND_8_SUBBANDS_3_2,s16X[ChOffset+32+3],s32Hi;\ 328 MLA s32Hi2,WIND_8_SUBBANDS_3_2,s16X[ChOffset+32+13],s32Hi2;\ 329 MLA s32Hi,WIND_8_SUBBANDS_3_3,s16X[ChOffset+48+3],s32Hi;\ 330 MLA s32Hi2,WIND_8_SUBBANDS_3_3,s16X[ChOffset+16+13],s32Hi2;\ 331 MLA s32Hi,WIND_8_SUBBANDS_3_4,s16X[ChOffset+64+3],s32Hi;\ 332 MLA s32Hi2,WIND_8_SUBBANDS_3_4,s16X[ChOffset+13],s32Hi2;\ 333 MOV s32DCTY[3],s32Hi;\ 334 MOV s32DCTY[13],s32Hi2; \ 335 } \ 336 } 337 #define WINDOW_ACCU_8_4_12 \ 338 { \ 339 __asm {\ 340 MUL s32Hi,WIND_8_SUBBANDS_4_0,s16X[ChOffset+4];\ 341 MUL s32Hi2,WIND_8_SUBBANDS_4_0,s16X[ChOffset+64+12];\ 342 MLA s32Hi,WIND_8_SUBBANDS_4_1,s16X[ChOffset+16+4],s32Hi;\ 343 MLA s32Hi2,WIND_8_SUBBANDS_4_1,s16X[ChOffset+48+12],s32Hi2;\ 344 MLA s32Hi,WIND_8_SUBBANDS_4_2,s16X[ChOffset+32+4],s32Hi;\ 345 MLA s32Hi2,WIND_8_SUBBANDS_4_2,s16X[ChOffset+32+12],s32Hi2;\ 346 MLA s32Hi,WIND_8_SUBBANDS_4_3,s16X[ChOffset+48+4],s32Hi;\ 347 MLA s32Hi2,WIND_8_SUBBANDS_4_3,s16X[ChOffset+16+12],s32Hi2;\ 348 MLA s32Hi,WIND_8_SUBBANDS_4_4,s16X[ChOffset+64+4],s32Hi;\ 349 MLA s32Hi2,WIND_8_SUBBANDS_4_4,s16X[ChOffset+12],s32Hi2;\ 350 MOV s32DCTY[4],s32Hi;\ 351 MOV s32DCTY[12],s32Hi2; \ 352 } \ 353 } 354 #define WINDOW_ACCU_8_5_11 \ 355 { \ 356 __asm {\ 357 MUL s32Hi,WIND_8_SUBBANDS_5_0,s16X[ChOffset+5];\ 358 MUL s32Hi2,WIND_8_SUBBANDS_5_0,s16X[ChOffset+64+11];\ 359 MLA s32Hi,WIND_8_SUBBANDS_5_1,s16X[ChOffset+16+5],s32Hi;\ 360 MLA s32Hi2,WIND_8_SUBBANDS_5_1,s16X[ChOffset+48+11],s32Hi2;\ 361 MLA s32Hi,WIND_8_SUBBANDS_5_2,s16X[ChOffset+32+5],s32Hi;\ 362 MLA s32Hi2,WIND_8_SUBBANDS_5_2,s16X[ChOffset+32+11],s32Hi2;\ 363 MLA s32Hi,WIND_8_SUBBANDS_5_3,s16X[ChOffset+48+5],s32Hi;\ 364 MLA s32Hi2,WIND_8_SUBBANDS_5_3,s16X[ChOffset+16+11],s32Hi2;\ 365 MLA s32Hi,WIND_8_SUBBANDS_5_4,s16X[ChOffset+64+5],s32Hi;\ 366 MLA s32Hi2,WIND_8_SUBBANDS_5_4,s16X[ChOffset+11],s32Hi2;\ 367 MOV s32DCTY[5],s32Hi;\ 368 MOV s32DCTY[11],s32Hi2; \ 369 } \ 370 } 371 #define WINDOW_ACCU_8_6_10 \ 372 { \ 373 __asm {\ 374 MUL s32Hi,WIND_8_SUBBANDS_6_0,s16X[ChOffset+6];\ 375 MUL s32Hi2,WIND_8_SUBBANDS_6_0,s16X[ChOffset+64+10];\ 376 MLA s32Hi,WIND_8_SUBBANDS_6_1,s16X[ChOffset+16+6],s32Hi;\ 377 MLA s32Hi2,WIND_8_SUBBANDS_6_1,s16X[ChOffset+48+10],s32Hi2;\ 378 MLA s32Hi,WIND_8_SUBBANDS_6_2,s16X[ChOffset+32+6],s32Hi;\ 379 MLA s32Hi2,WIND_8_SUBBANDS_6_2,s16X[ChOffset+32+10],s32Hi2;\ 380 MLA s32Hi,WIND_8_SUBBANDS_6_3,s16X[ChOffset+48+6],s32Hi;\ 381 MLA s32Hi2,WIND_8_SUBBANDS_6_3,s16X[ChOffset+16+10],s32Hi2;\ 382 MLA s32Hi,WIND_8_SUBBANDS_6_4,s16X[ChOffset+64+6],s32Hi;\ 383 MLA s32Hi2,WIND_8_SUBBANDS_6_4,s16X[ChOffset+10],s32Hi2;\ 384 MOV s32DCTY[6],s32Hi;\ 385 MOV s32DCTY[10],s32Hi2; \ 386 } \ 387 } 388 #define WINDOW_ACCU_8_7_9 \ 389 { \ 390 __asm {\ 391 MUL s32Hi,WIND_8_SUBBANDS_7_0,s16X[ChOffset+7];\ 392 MUL s32Hi2,WIND_8_SUBBANDS_7_0,s16X[ChOffset+64+9];\ 393 MLA s32Hi,WIND_8_SUBBANDS_7_1,s16X[ChOffset+16+7],s32Hi;\ 394 MLA s32Hi2,WIND_8_SUBBANDS_7_1,s16X[ChOffset+48+9],s32Hi2;\ 395 MLA s32Hi,WIND_8_SUBBANDS_7_2,s16X[ChOffset+32+7],s32Hi;\ 396 MLA s32Hi2,WIND_8_SUBBANDS_7_2,s16X[ChOffset+32+9],s32Hi2;\ 397 MLA s32Hi,WIND_8_SUBBANDS_7_3,s16X[ChOffset+48+7],s32Hi;\ 398 MLA s32Hi2,WIND_8_SUBBANDS_7_3,s16X[ChOffset+16+9],s32Hi2;\ 399 MLA s32Hi,WIND_8_SUBBANDS_7_4,s16X[ChOffset+64+7],s32Hi;\ 400 MLA s32Hi2,WIND_8_SUBBANDS_7_4,s16X[ChOffset+9],s32Hi2;\ 401 MOV s32DCTY[7],s32Hi;\ 402 MOV s32DCTY[9],s32Hi2; \ 403 } \ 404 } 405 #define WINDOW_ACCU_8_8 \ 406 { \ 407 __asm {\ 408 MUL s32Hi,WIND_8_SUBBANDS_8_0,(s16X[ChOffset+8]+s16X[ChOffset+8+64]);\ 409 MLA s32Hi,WIND_8_SUBBANDS_8_1,(s16X[ChOffset+8+16]+s16X[ChOffset+8+64]),s32Hi;\ 410 MLA s32Hi,WIND_8_SUBBANDS_8_2,s16X[ChOffset+8+32],s32Hi;\ 411 MOV s32DCTY[8],s32Hi; \ 412 } \ 413 } 414 #define WINDOW_ACCU_4_0 \ 415 { \ 416 __asm {\ 417 MUL s32Hi,WIND_4_SUBBANDS_0_1,(s16X[ChOffset+8]-s16X[ChOffset+32]);\ 418 MLA s32Hi,WIND_4_SUBBANDS_0_2,(s16X[ChOffset+16]-s16X[ChOffset+24]),s32Hi;\ 419 MOV s32DCTY[0],s32Hi; \ 420 } \ 421 } 422 #define WINDOW_ACCU_4_1_7 \ 423 { \ 424 __asm {\ 425 MUL s32Hi,WIND_4_SUBBANDS_1_0,s16X[ChOffset+1];\ 426 MUL s32Hi2,WIND_4_SUBBANDS_1_0,s16X[ChOffset+32+7];\ 427 MLA s32Hi,WIND_4_SUBBANDS_1_1,s16X[ChOffset+8+1],s32Hi;\ 428 MLA s32Hi2,WIND_4_SUBBANDS_1_1,s16X[ChOffset+24+7],s32Hi2;\ 429 MLA s32Hi,WIND_4_SUBBANDS_1_2,s16X[ChOffset+16+1],s32Hi;\ 430 MLA s32Hi2,WIND_4_SUBBANDS_1_2,s16X[ChOffset+16+7],s32Hi2;\ 431 MLA s32Hi,WIND_4_SUBBANDS_1_3,s16X[ChOffset+24+1],s32Hi;\ 432 MLA s32Hi2,WIND_4_SUBBANDS_1_3,s16X[ChOffset+8+7],s32Hi2;\ 433 MLA s32Hi,WIND_4_SUBBANDS_1_4,s16X[ChOffset+32+1],s32Hi;\ 434 MLA s32Hi2,WIND_4_SUBBANDS_1_4,s16X[ChOffset+7],s32Hi2;\ 435 MOV s32DCTY[1],s32Hi;\ 436 MOV s32DCTY[7],s32Hi2; \ 437 } \ 438 } 439 #define WINDOW_ACCU_4_2_6 \ 440 { \ 441 __asm {\ 442 MUL s32Hi,WIND_4_SUBBANDS_2_0,s16X[ChOffset+2];\ 443 MUL s32Hi2,WIND_4_SUBBANDS_2_0,s16X[ChOffset+32+6];\ 444 MLA s32Hi,WIND_4_SUBBANDS_2_1,s16X[ChOffset+8+2],s32Hi;\ 445 MLA s32Hi2,WIND_4_SUBBANDS_2_1,s16X[ChOffset+24+6],s32Hi2;\ 446 MLA s32Hi,WIND_4_SUBBANDS_2_2,s16X[ChOffset+16+2],s32Hi;\ 447 MLA s32Hi2,WIND_4_SUBBANDS_2_2,s16X[ChOffset+16+6],s32Hi2;\ 448 MLA s32Hi,WIND_4_SUBBANDS_2_3,s16X[ChOffset+24+2],s32Hi;\ 449 MLA s32Hi2,WIND_4_SUBBANDS_2_3,s16X[ChOffset+8+6],s32Hi2;\ 450 MLA s32Hi,WIND_4_SUBBANDS_2_4,s16X[ChOffset+32+2],s32Hi;\ 451 MLA s32Hi2,WIND_4_SUBBANDS_2_4,s16X[ChOffset+6],s32Hi2;\ 452 MOV s32DCTY[2],s32Hi;\ 453 MOV s32DCTY[6],s32Hi2; \ 454 } \ 455 } 456 #define WINDOW_ACCU_4_3_5 \ 457 { \ 458 __asm {\ 459 MUL s32Hi,WIND_4_SUBBANDS_3_0,s16X[ChOffset+3];\ 460 MUL s32Hi2,WIND_4_SUBBANDS_3_0,s16X[ChOffset+32+5];\ 461 MLA s32Hi,WIND_4_SUBBANDS_3_1,s16X[ChOffset+8+3],s32Hi;\ 462 MLA s32Hi2,WIND_4_SUBBANDS_3_1,s16X[ChOffset+24+5],s32Hi2;\ 463 MLA s32Hi,WIND_4_SUBBANDS_3_2,s16X[ChOffset+16+3],s32Hi;\ 464 MLA s32Hi2,WIND_4_SUBBANDS_3_2,s16X[ChOffset+16+5],s32Hi2;\ 465 MLA s32Hi,WIND_4_SUBBANDS_3_3,s16X[ChOffset+24+3],s32Hi;\ 466 MLA s32Hi2,WIND_4_SUBBANDS_3_3,s16X[ChOffset+8+5],s32Hi2;\ 467 MLA s32Hi,WIND_4_SUBBANDS_3_4,s16X[ChOffset+32+3],s32Hi;\ 468 MLA s32Hi2,WIND_4_SUBBANDS_3_4,s16X[ChOffset+5],s32Hi2;\ 469 MOV s32DCTY[3],s32Hi;\ 470 MOV s32DCTY[5],s32Hi2; \ 471 } \ 472 } 473 #define WINDOW_ACCU_4_4 \ 474 { \ 475 __asm {\ 476 MUL s32Hi,WIND_4_SUBBANDS_4_0,(s16X[ChOffset+4]+s16X[ChOffset+4+32]);\ 477 MLA s32Hi,WIND_4_SUBBANDS_4_1,(s16X[ChOffset+4+8]+s16X[ChOffset+4+24]),s32Hi;\ 478 MLA s32Hi,WIND_4_SUBBANDS_4_2,s16X[ChOffset+4+16],s32Hi;\ 479 MOV s32DCTY[4],s32Hi; \ 480 } \ 481 } 482 483 #define WINDOW_PARTIAL_4 \ 484 { \ 485 WINDOW_ACCU_4_0; \ 486 WINDOW_ACCU_4_1_7; \ 487 WINDOW_ACCU_4_2_6; \ 488 WINDOW_ACCU_4_3_5; \ 489 WINDOW_ACCU_4_4; \ 490 } 491 492 #define WINDOW_PARTIAL_8 \ 493 { \ 494 WINDOW_ACCU_8_0; \ 495 WINDOW_ACCU_8_1_15; \ 496 WINDOW_ACCU_8_2_14; \ 497 WINDOW_ACCU_8_3_13; \ 498 WINDOW_ACCU_8_4_12; \ 499 WINDOW_ACCU_8_5_11; \ 500 WINDOW_ACCU_8_6_10; \ 501 WINDOW_ACCU_8_7_9; \ 502 WINDOW_ACCU_8_8; \ 503 } 504 505 #else 506 #if (SBC_IPAQ_OPT == TRUE) 507 508 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE) 509 #define WINDOW_ACCU_8_0 \ 510 { \ 511 s64Temp = (int64_t)WIND_8_SUBBANDS_0_1 * \ 512 (int64_t)(s16X[ChOffset + 16] - s16X[ChOffset + 64]); \ 513 s64Temp += (int64_t)WIND_8_SUBBANDS_0_2 * \ 514 (int64_t)(s16X[ChOffset + 32] - s16X[ChOffset + 48]); \ 515 s32DCTY[0] = (int32_t)(s64Temp >> 16); \ 516 } 517 #define WINDOW_ACCU_8_1_15 \ 518 { \ 519 s64Temp = (int64_t)WIND_8_SUBBANDS_1_0 * (int64_t)s16X[ChOffset + 1]; \ 520 s64Temp2 = \ 521 (int64_t)WIND_8_SUBBANDS_1_0 * (int64_t)s16X[ChOffset + 64 + 15]; \ 522 s64Temp += \ 523 (int64_t)WIND_8_SUBBANDS_1_1 * (int64_t)s16X[ChOffset + 16 + 1]; \ 524 s64Temp2 += \ 525 (int64_t)WIND_8_SUBBANDS_1_1 * (int64_t)s16X[ChOffset + 48 + 15]; \ 526 s64Temp += \ 527 (int64_t)WIND_8_SUBBANDS_1_2 * (int64_t)s16X[ChOffset + 32 + 1]; \ 528 s64Temp2 += \ 529 (int64_t)WIND_8_SUBBANDS_1_2 * (int64_t)s16X[ChOffset + 32 + 15]; \ 530 s64Temp += \ 531 (int64_t)WIND_8_SUBBANDS_1_3 * (int64_t)s16X[ChOffset + 48 + 1]; \ 532 s64Temp2 += \ 533 (int64_t)WIND_8_SUBBANDS_1_3 * (int64_t)s16X[ChOffset + 16 + 15]; \ 534 s64Temp += \ 535 (int64_t)WIND_8_SUBBANDS_1_4 * (int64_t)s16X[ChOffset + 64 + 1]; \ 536 s64Temp2 += (int64_t)WIND_8_SUBBANDS_1_4 * (int64_t)s16X[ChOffset + 15]; \ 537 s32DCTY[1] = (int32_t)(s64Temp >> 16); \ 538 s32DCTY[15] = (int32_t)(s64Temp2 >> 16); \ 539 } 540 #define WINDOW_ACCU_8_2_14 \ 541 { \ 542 s64Temp = (int64_t)WIND_8_SUBBANDS_2_0 * (int64_t)s16X[ChOffset + 2]; \ 543 s64Temp2 = \ 544 (int64_t)WIND_8_SUBBANDS_2_0 * (int64_t)s16X[ChOffset + 64 + 14]; \ 545 s64Temp += \ 546 (int64_t)WIND_8_SUBBANDS_2_1 * (int64_t)s16X[ChOffset + 16 + 2]; \ 547 s64Temp2 += \ 548 (int64_t)WIND_8_SUBBANDS_2_1 * (int64_t)s16X[ChOffset + 48 + 14]; \ 549 s64Temp += \ 550 (int64_t)WIND_8_SUBBANDS_2_2 * (int64_t)s16X[ChOffset + 32 + 2]; \ 551 s64Temp2 += \ 552 (int64_t)WIND_8_SUBBANDS_2_2 * (int64_t)s16X[ChOffset + 32 + 14]; \ 553 s64Temp += \ 554 (int64_t)WIND_8_SUBBANDS_2_3 * (int64_t)s16X[ChOffset + 48 + 2]; \ 555 s64Temp2 += \ 556 (int64_t)WIND_8_SUBBANDS_2_3 * (int64_t)s16X[ChOffset + 16 + 14]; \ 557 s64Temp += \ 558 (int64_t)WIND_8_SUBBANDS_2_4 * (int64_t)s16X[ChOffset + 64 + 2]; \ 559 s64Temp2 += (int64_t)WIND_8_SUBBANDS_2_4 * (int64_t)s16X[ChOffset + 14]; \ 560 s32DCTY[2] = (int32_t)(s64Temp >> 16); \ 561 s32DCTY[14] = (int32_t)(s64Temp2 >> 16); \ 562 } 563 #define WINDOW_ACCU_8_3_13 \ 564 { \ 565 s64Temp = (int64_t)WIND_8_SUBBANDS_3_0 * (int64_t)s16X[ChOffset + 3]; \ 566 s64Temp2 = \ 567 (int64_t)WIND_8_SUBBANDS_3_0 * (int64_t)s16X[ChOffset + 64 + 13]; \ 568 s64Temp += \ 569 (int64_t)WIND_8_SUBBANDS_3_1 * (int64_t)s16X[ChOffset + 16 + 3]; \ 570 s64Temp2 += \ 571 (int64_t)WIND_8_SUBBANDS_3_1 * (int64_t)s16X[ChOffset + 48 + 13]; \ 572 s64Temp += \ 573 (int64_t)WIND_8_SUBBANDS_3_2 * (int64_t)s16X[ChOffset + 32 + 3]; \ 574 s64Temp2 += \ 575 (int64_t)WIND_8_SUBBANDS_3_2 * (int64_t)s16X[ChOffset + 32 + 13]; \ 576 s64Temp += \ 577 (int64_t)WIND_8_SUBBANDS_3_3 * (int64_t)s16X[ChOffset + 48 + 3]; \ 578 s64Temp2 += \ 579 (int64_t)WIND_8_SUBBANDS_3_3 * (int64_t)s16X[ChOffset + 16 + 13]; \ 580 s64Temp += \ 581 (int64_t)WIND_8_SUBBANDS_3_4 * (int64_t)s16X[ChOffset + 64 + 3]; \ 582 s64Temp2 += (int64_t)WIND_8_SUBBANDS_3_4 * (int64_t)s16X[ChOffset + 13]; \ 583 s32DCTY[3] = (int32_t)(s64Temp >> 16); \ 584 s32DCTY[13] = (int32_t)(s64Temp2 >> 16); \ 585 } 586 #define WINDOW_ACCU_8_4_12 \ 587 { \ 588 s64Temp = (int64_t)WIND_8_SUBBANDS_4_0 * (int64_t)s16X[ChOffset + 4]; \ 589 s64Temp2 = \ 590 (int64_t)WIND_8_SUBBANDS_4_0 * (int64_t)s16X[ChOffset + 64 + 12]; \ 591 s64Temp += \ 592 (int64_t)WIND_8_SUBBANDS_4_1 * (int64_t)s16X[ChOffset + 16 + 4]; \ 593 s64Temp2 += \ 594 (int64_t)WIND_8_SUBBANDS_4_1 * (int64_t)s16X[ChOffset + 48 + 12]; \ 595 s64Temp += \ 596 (int64_t)WIND_8_SUBBANDS_4_2 * (int64_t)s16X[ChOffset + 32 + 4]; \ 597 s64Temp2 += \ 598 (int64_t)WIND_8_SUBBANDS_4_2 * (int64_t)s16X[ChOffset + 32 + 12]; \ 599 s64Temp += \ 600 (int64_t)WIND_8_SUBBANDS_4_3 * (int64_t)s16X[ChOffset + 48 + 4]; \ 601 s64Temp2 += \ 602 (int64_t)WIND_8_SUBBANDS_4_3 * (int64_t)s16X[ChOffset + 16 + 12]; \ 603 s64Temp += \ 604 (int64_t)WIND_8_SUBBANDS_4_4 * (int64_t)s16X[ChOffset + 64 + 4]; \ 605 s64Temp2 += (int64_t)WIND_8_SUBBANDS_4_4 * (int64_t)s16X[ChOffset + 12]; \ 606 s32DCTY[4] = (int32_t)(s64Temp >> 16); \ 607 s32DCTY[12] = (int32_t)(s64Temp2 >> 16); \ 608 } 609 #define WINDOW_ACCU_8_5_11 \ 610 { \ 611 s64Temp = (int64_t)WIND_8_SUBBANDS_5_0 * (int64_t)s16X[ChOffset + 5]; \ 612 s64Temp2 = \ 613 (int64_t)WIND_8_SUBBANDS_5_0 * (int64_t)s16X[ChOffset + 64 + 11]; \ 614 s64Temp += \ 615 (int64_t)WIND_8_SUBBANDS_5_1 * (int64_t)s16X[ChOffset + 16 + 5]; \ 616 s64Temp2 += \ 617 (int64_t)WIND_8_SUBBANDS_5_1 * (int64_t)s16X[ChOffset + 48 + 11]; \ 618 s64Temp += \ 619 (int64_t)WIND_8_SUBBANDS_5_2 * (int64_t)s16X[ChOffset + 32 + 5]; \ 620 s64Temp2 += \ 621 (int64_t)WIND_8_SUBBANDS_5_2 * (int64_t)s16X[ChOffset + 32 + 11]; \ 622 s64Temp += \ 623 (int64_t)WIND_8_SUBBANDS_5_3 * (int64_t)s16X[ChOffset + 48 + 5]; \ 624 s64Temp2 += \ 625 (int64_t)WIND_8_SUBBANDS_5_3 * (int64_t)s16X[ChOffset + 16 + 11]; \ 626 s64Temp += \ 627 (int64_t)WIND_8_SUBBANDS_5_4 * (int64_t)s16X[ChOffset + 64 + 5]; \ 628 s64Temp2 += (int64_t)WIND_8_SUBBANDS_5_4 * (int64_t)s16X[ChOffset + 11]; \ 629 s32DCTY[5] = (int32_t)(s64Temp >> 16); \ 630 s32DCTY[11] = (int32_t)(s64Temp2 >> 16); \ 631 } 632 #define WINDOW_ACCU_8_6_10 \ 633 { \ 634 s64Temp = (int64_t)WIND_8_SUBBANDS_6_0 * (int64_t)s16X[ChOffset + 6]; \ 635 s64Temp2 = \ 636 (int64_t)WIND_8_SUBBANDS_6_0 * (int64_t)s16X[ChOffset + 64 + 10]; \ 637 s64Temp += \ 638 (int64_t)WIND_8_SUBBANDS_6_1 * (int64_t)s16X[ChOffset + 16 + 6]; \ 639 s64Temp2 += \ 640 (int64_t)WIND_8_SUBBANDS_6_1 * (int64_t)s16X[ChOffset + 48 + 10]; \ 641 s64Temp += \ 642 (int64_t)WIND_8_SUBBANDS_6_2 * (int64_t)s16X[ChOffset + 32 + 6]; \ 643 s64Temp2 += \ 644 (int64_t)WIND_8_SUBBANDS_6_2 * (int64_t)s16X[ChOffset + 32 + 10]; \ 645 s64Temp += \ 646 (int64_t)WIND_8_SUBBANDS_6_3 * (int64_t)s16X[ChOffset + 48 + 6]; \ 647 s64Temp2 += \ 648 (int64_t)WIND_8_SUBBANDS_6_3 * (int64_t)s16X[ChOffset + 16 + 10]; \ 649 s64Temp += \ 650 (int64_t)WIND_8_SUBBANDS_6_4 * (int64_t)s16X[ChOffset + 64 + 6]; \ 651 s64Temp2 += (int64_t)WIND_8_SUBBANDS_6_4 * (int64_t)s16X[ChOffset + 10]; \ 652 s32DCTY[6] = (int32_t)(s64Temp >> 16); \ 653 s32DCTY[10] = (int32_t)(s64Temp2 >> 16); \ 654 } 655 #define WINDOW_ACCU_8_7_9 \ 656 { \ 657 s64Temp = (int64_t)WIND_8_SUBBANDS_7_0 * (int64_t)s16X[ChOffset + 7]; \ 658 s64Temp2 = \ 659 (int64_t)WIND_8_SUBBANDS_7_0 * (int64_t)s16X[ChOffset + 64 + 9]; \ 660 s64Temp += \ 661 (int64_t)WIND_8_SUBBANDS_7_1 * (int64_t)s16X[ChOffset + 16 + 7]; \ 662 s64Temp2 += \ 663 (int64_t)WIND_8_SUBBANDS_7_1 * (int64_t)s16X[ChOffset + 48 + 9]; \ 664 s64Temp += \ 665 (int64_t)WIND_8_SUBBANDS_7_2 * (int64_t)s16X[ChOffset + 32 + 7]; \ 666 s64Temp2 += \ 667 (int64_t)WIND_8_SUBBANDS_7_2 * (int64_t)s16X[ChOffset + 32 + 9]; \ 668 s64Temp += \ 669 (int64_t)WIND_8_SUBBANDS_7_3 * (int64_t)s16X[ChOffset + 48 + 7]; \ 670 s64Temp2 += \ 671 (int64_t)WIND_8_SUBBANDS_7_3 * (int64_t)s16X[ChOffset + 16 + 9]; \ 672 s64Temp += \ 673 (int64_t)WIND_8_SUBBANDS_7_4 * (int64_t)s16X[ChOffset + 64 + 7]; \ 674 s64Temp2 += (int64_t)WIND_8_SUBBANDS_7_4 * (int64_t)s16X[ChOffset + 9]; \ 675 s32DCTY[7] = (int32_t)(s64Temp >> 16); \ 676 s32DCTY[9] = (int32_t)(s64Temp2 >> 16); \ 677 } 678 #define WINDOW_ACCU_8_8 \ 679 { \ 680 s64Temp = (int64_t)WIND_8_SUBBANDS_8_0 * \ 681 (int64_t)(s16X[ChOffset + 8] + s16X[ChOffset + 64 + 8]); \ 682 s64Temp += (int64_t)WIND_8_SUBBANDS_8_1 * \ 683 (int64_t)(s16X[ChOffset + 16 + 8] + s16X[ChOffset + 48 + 8]); \ 684 s64Temp += \ 685 (int64_t)WIND_8_SUBBANDS_8_2 * (int64_t)s16X[ChOffset + 32 + 8]; \ 686 s32DCTY[8] = (int32_t)(s64Temp >> 16); \ 687 } 688 #define WINDOW_ACCU_4_0 \ 689 { \ 690 s64Temp = (int64_t)WIND_4_SUBBANDS_0_1 * \ 691 (int64_t)(s16X[ChOffset + 8] - s16X[ChOffset + 32]); \ 692 s64Temp += (int64_t)WIND_4_SUBBANDS_0_2 * \ 693 (int64_t)(s16X[ChOffset + 16] - s16X[ChOffset + 24]); \ 694 s32DCTY[0] = (int32_t)(s64Temp >> 16); \ 695 } 696 #define WINDOW_ACCU_4_1_7 \ 697 { \ 698 s64Temp = (int64_t)WIND_4_SUBBANDS_1_0 * (int64_t)s16X[ChOffset + 1]; \ 699 s64Temp2 = \ 700 (int64_t)WIND_4_SUBBANDS_1_0 * (int64_t)s16X[ChOffset + 32 + 7]; \ 701 s64Temp += (int64_t)WIND_4_SUBBANDS_1_1 * (int64_t)s16X[ChOffset + 8 + 1]; \ 702 s64Temp2 += \ 703 (int64_t)WIND_4_SUBBANDS_1_1 * (int64_t)s16X[ChOffset + 24 + 7]; \ 704 s64Temp += \ 705 (int64_t)WIND_4_SUBBANDS_1_2 * (int64_t)s16X[ChOffset + 16 + 1]; \ 706 s64Temp2 += \ 707 (int64_t)WIND_4_SUBBANDS_1_2 * (int64_t)s16X[ChOffset + 16 + 7]; \ 708 s64Temp += \ 709 (int64_t)WIND_4_SUBBANDS_1_3 * (int64_t)s16X[ChOffset + 24 + 1]; \ 710 s64Temp2 += \ 711 (int64_t)WIND_4_SUBBANDS_1_3 * (int64_t)s16X[ChOffset + 8 + 7]; \ 712 s64Temp += \ 713 (int64_t)WIND_4_SUBBANDS_1_4 * (int64_t)s16X[ChOffset + 32 + 1]; \ 714 s64Temp2 += (int64_t)WIND_4_SUBBANDS_1_4 * (int64_t)s16X[ChOffset + 7]; \ 715 s32DCTY[1] = (int32_t)(s64Temp >> 16); \ 716 s32DCTY[7] = (int32_t)(s64Temp2 >> 16); \ 717 } 718 #define WINDOW_ACCU_4_2_6 \ 719 { \ 720 s64Temp = (int64_t)WIND_4_SUBBANDS_2_0 * (int64_t)s16X[ChOffset + 2]; \ 721 s64Temp2 = \ 722 (int64_t)WIND_4_SUBBANDS_2_0 * (int64_t)s16X[ChOffset + 32 + 6]; \ 723 s64Temp += (int64_t)WIND_4_SUBBANDS_2_1 * (int64_t)s16X[ChOffset + 8 + 2]; \ 724 s64Temp2 += \ 725 (int64_t)WIND_4_SUBBANDS_2_1 * (int64_t)s16X[ChOffset + 24 + 6]; \ 726 s64Temp += \ 727 (int64_t)WIND_4_SUBBANDS_2_2 * (int64_t)s16X[ChOffset + 16 + 2]; \ 728 s64Temp2 += \ 729 (int64_t)WIND_4_SUBBANDS_2_2 * (int64_t)s16X[ChOffset + 16 + 6]; \ 730 s64Temp += \ 731 (int64_t)WIND_4_SUBBANDS_2_3 * (int64_t)s16X[ChOffset + 24 + 2]; \ 732 s64Temp2 += \ 733 (int64_t)WIND_4_SUBBANDS_2_3 * (int64_t)s16X[ChOffset + 8 + 6]; \ 734 s64Temp += \ 735 (int64_t)WIND_4_SUBBANDS_2_4 * (int64_t)s16X[ChOffset + 32 + 2]; \ 736 s64Temp2 += (int64_t)WIND_4_SUBBANDS_2_4 * (int64_t)s16X[ChOffset + 6]; \ 737 s32DCTY[2] = (int32_t)(s64Temp >> 16); \ 738 s32DCTY[6] = (int32_t)(s64Temp2 >> 16); \ 739 } 740 #define WINDOW_ACCU_4_3_5 \ 741 { \ 742 s64Temp = (int64_t)WIND_4_SUBBANDS_3_0 * (int64_t)s16X[ChOffset + 3]; \ 743 s64Temp2 = \ 744 (int64_t)WIND_4_SUBBANDS_3_0 * (int64_t)s16X[ChOffset + 32 + 5]; \ 745 s64Temp += (int64_t)WIND_4_SUBBANDS_3_1 * (int64_t)s16X[ChOffset + 8 + 3]; \ 746 s64Temp2 += \ 747 (int64_t)WIND_4_SUBBANDS_3_1 * (int64_t)s16X[ChOffset + 24 + 5]; \ 748 s64Temp += \ 749 (int64_t)WIND_4_SUBBANDS_3_2 * (int64_t)s16X[ChOffset + 16 + 3]; \ 750 s64Temp2 += \ 751 (int64_t)WIND_4_SUBBANDS_3_2 * (int64_t)s16X[ChOffset + 16 + 5]; \ 752 s64Temp += \ 753 (int64_t)WIND_4_SUBBANDS_3_3 * (int64_t)s16X[ChOffset + 24 + 3]; \ 754 s64Temp2 += \ 755 (int64_t)WIND_4_SUBBANDS_3_3 * (int64_t)s16X[ChOffset + 8 + 5]; \ 756 s64Temp += \ 757 (int64_t)WIND_4_SUBBANDS_3_4 * (int64_t)s16X[ChOffset + 32 + 3]; \ 758 s64Temp2 += (int64_t)WIND_4_SUBBANDS_3_4 * (int64_t)s16X[ChOffset + 5]; \ 759 s32DCTY[3] = (int32_t)(s64Temp >> 16); \ 760 s32DCTY[5] = (int32_t)(s64Temp2 >> 16); \ 761 } 762 763 #define WINDOW_ACCU_4_4 \ 764 { \ 765 s64Temp = (int64_t)WIND_4_SUBBANDS_4_0 * \ 766 (int64_t)(s16X[ChOffset + 4] + s16X[ChOffset + 4 + 32]); \ 767 s64Temp += (int64_t)WIND_4_SUBBANDS_4_1 * \ 768 (int64_t)(s16X[ChOffset + 4 + 8] + s16X[ChOffset + 4 + 24]); \ 769 s64Temp += \ 770 (int64_t)WIND_4_SUBBANDS_4_2 * (int64_t)s16X[ChOffset + 4 + 16]; \ 771 s32DCTY[4] = (int32_t)(s64Temp >> 16); \ 772 } 773 #else /* SBC_IS_64_MULT_IN_WINDOW_ACCU == FALSE */ 774 #define WINDOW_ACCU_8_0 \ 775 { \ 776 s32Temp = (int32_t)WIND_8_SUBBANDS_0_1 * \ 777 (int32_t)(s16X[ChOffset + 16] - s16X[ChOffset + 64]); \ 778 s32Temp += (int32_t)WIND_8_SUBBANDS_0_2 * \ 779 (int32_t)(s16X[ChOffset + 32] - s16X[ChOffset + 48]); \ 780 s32DCTY[0] = (int32_t)s32Temp; \ 781 } 782 #define WINDOW_ACCU_8_1_15 \ 783 { \ 784 s32Temp = (int32_t)WIND_8_SUBBANDS_1_0 * (int32_t)s16X[ChOffset + 1]; \ 785 s32Temp2 = \ 786 (int32_t)WIND_8_SUBBANDS_1_0 * (int32_t)s16X[ChOffset + 64 + 15]; \ 787 s32Temp += \ 788 (int32_t)WIND_8_SUBBANDS_1_1 * (int32_t)s16X[ChOffset + 16 + 1]; \ 789 s32Temp2 += \ 790 (int32_t)WIND_8_SUBBANDS_1_1 * (int32_t)s16X[ChOffset + 48 + 15]; \ 791 s32Temp += \ 792 (int32_t)WIND_8_SUBBANDS_1_2 * (int32_t)s16X[ChOffset + 32 + 1]; \ 793 s32Temp2 += \ 794 (int32_t)WIND_8_SUBBANDS_1_2 * (int32_t)s16X[ChOffset + 32 + 15]; \ 795 s32Temp += \ 796 (int32_t)WIND_8_SUBBANDS_1_3 * (int32_t)s16X[ChOffset + 48 + 1]; \ 797 s32Temp2 += \ 798 (int32_t)WIND_8_SUBBANDS_1_3 * (int32_t)s16X[ChOffset + 16 + 15]; \ 799 s32Temp += \ 800 (int32_t)WIND_8_SUBBANDS_1_4 * (int32_t)s16X[ChOffset + 64 + 1]; \ 801 s32Temp2 += (int32_t)WIND_8_SUBBANDS_1_4 * (int32_t)s16X[ChOffset + 15]; \ 802 s32DCTY[1] = (int32_t)s32Temp; \ 803 s32DCTY[15] = (int32_t)s32Temp2; \ 804 } 805 #define WINDOW_ACCU_8_2_14 \ 806 { \ 807 s32Temp = (int32_t)WIND_8_SUBBANDS_2_0 * (int32_t)s16X[ChOffset + 2]; \ 808 s32Temp2 = \ 809 (int32_t)WIND_8_SUBBANDS_2_0 * (int32_t)s16X[ChOffset + 64 + 14]; \ 810 s32Temp += \ 811 (int32_t)WIND_8_SUBBANDS_2_1 * (int32_t)s16X[ChOffset + 16 + 2]; \ 812 s32Temp2 += \ 813 (int32_t)WIND_8_SUBBANDS_2_1 * (int32_t)s16X[ChOffset + 48 + 14]; \ 814 s32Temp += \ 815 (int32_t)WIND_8_SUBBANDS_2_2 * (int32_t)s16X[ChOffset + 32 + 2]; \ 816 s32Temp2 += \ 817 (int32_t)WIND_8_SUBBANDS_2_2 * (int32_t)s16X[ChOffset + 32 + 14]; \ 818 s32Temp += \ 819 (int32_t)WIND_8_SUBBANDS_2_3 * (int32_t)s16X[ChOffset + 48 + 2]; \ 820 s32Temp2 += \ 821 (int32_t)WIND_8_SUBBANDS_2_3 * (int32_t)s16X[ChOffset + 16 + 14]; \ 822 s32Temp += \ 823 (int32_t)WIND_8_SUBBANDS_2_4 * (int32_t)s16X[ChOffset + 64 + 2]; \ 824 s32Temp2 += (int32_t)WIND_8_SUBBANDS_2_4 * (int32_t)s16X[ChOffset + 14]; \ 825 s32DCTY[2] = (int32_t)s32Temp; \ 826 s32DCTY[14] = (int32_t)s32Temp2; \ 827 } 828 #define WINDOW_ACCU_8_3_13 \ 829 { \ 830 s32Temp = (int32_t)WIND_8_SUBBANDS_3_0 * (int32_t)s16X[ChOffset + 3]; \ 831 s32Temp2 = \ 832 (int32_t)WIND_8_SUBBANDS_3_0 * (int32_t)s16X[ChOffset + 64 + 13]; \ 833 s32Temp += \ 834 (int32_t)WIND_8_SUBBANDS_3_1 * (int32_t)s16X[ChOffset + 16 + 3]; \ 835 s32Temp2 += \ 836 (int32_t)WIND_8_SUBBANDS_3_1 * (int32_t)s16X[ChOffset + 48 + 13]; \ 837 s32Temp += \ 838 (int32_t)WIND_8_SUBBANDS_3_2 * (int32_t)s16X[ChOffset + 32 + 3]; \ 839 s32Temp2 += \ 840 (int32_t)WIND_8_SUBBANDS_3_2 * (int32_t)s16X[ChOffset + 32 + 13]; \ 841 s32Temp += \ 842 (int32_t)WIND_8_SUBBANDS_3_3 * (int32_t)s16X[ChOffset + 48 + 3]; \ 843 s32Temp2 += \ 844 (int32_t)WIND_8_SUBBANDS_3_3 * (int32_t)s16X[ChOffset + 16 + 13]; \ 845 s32Temp += \ 846 (int32_t)WIND_8_SUBBANDS_3_4 * (int32_t)s16X[ChOffset + 64 + 3]; \ 847 s32Temp2 += (int32_t)WIND_8_SUBBANDS_3_4 * (int32_t)s16X[ChOffset + 13]; \ 848 s32DCTY[3] = (int32_t)s32Temp; \ 849 s32DCTY[13] = (int32_t)s32Temp2; \ 850 } 851 #define WINDOW_ACCU_8_4_12 \ 852 { \ 853 s32Temp = (int32_t)WIND_8_SUBBANDS_4_0 * (int32_t)s16X[ChOffset + 4]; \ 854 s32Temp2 = \ 855 (int32_t)WIND_8_SUBBANDS_4_0 * (int32_t)s16X[ChOffset + 64 + 12]; \ 856 s32Temp += \ 857 (int32_t)WIND_8_SUBBANDS_4_1 * (int32_t)s16X[ChOffset + 16 + 4]; \ 858 s32Temp2 += \ 859 (int32_t)WIND_8_SUBBANDS_4_1 * (int32_t)s16X[ChOffset + 48 + 12]; \ 860 s32Temp += \ 861 (int32_t)WIND_8_SUBBANDS_4_2 * (int32_t)s16X[ChOffset + 32 + 4]; \ 862 s32Temp2 += \ 863 (int32_t)WIND_8_SUBBANDS_4_2 * (int32_t)s16X[ChOffset + 32 + 12]; \ 864 s32Temp += \ 865 (int32_t)WIND_8_SUBBANDS_4_3 * (int32_t)s16X[ChOffset + 48 + 4]; \ 866 s32Temp2 += \ 867 (int32_t)WIND_8_SUBBANDS_4_3 * (int32_t)s16X[ChOffset + 16 + 12]; \ 868 s32Temp += \ 869 (int32_t)WIND_8_SUBBANDS_4_4 * (int32_t)s16X[ChOffset + 64 + 4]; \ 870 s32Temp2 += (int32_t)WIND_8_SUBBANDS_4_4 * (int32_t)s16X[ChOffset + 12]; \ 871 s32DCTY[4] = (int32_t)s32Temp; \ 872 s32DCTY[12] = (int32_t)s32Temp2; \ 873 } 874 #define WINDOW_ACCU_8_5_11 \ 875 { \ 876 s32Temp = (int32_t)WIND_8_SUBBANDS_5_0 * (int32_t)s16X[ChOffset + 5]; \ 877 s32Temp2 = \ 878 (int32_t)WIND_8_SUBBANDS_5_0 * (int32_t)s16X[ChOffset + 64 + 11]; \ 879 s32Temp += \ 880 (int32_t)WIND_8_SUBBANDS_5_1 * (int32_t)s16X[ChOffset + 16 + 5]; \ 881 s32Temp2 += \ 882 (int32_t)WIND_8_SUBBANDS_5_1 * (int32_t)s16X[ChOffset + 48 + 11]; \ 883 s32Temp += \ 884 (int32_t)WIND_8_SUBBANDS_5_2 * (int32_t)s16X[ChOffset + 32 + 5]; \ 885 s32Temp2 += \ 886 (int32_t)WIND_8_SUBBANDS_5_2 * (int32_t)s16X[ChOffset + 32 + 11]; \ 887 s32Temp += \ 888 (int32_t)WIND_8_SUBBANDS_5_3 * (int32_t)s16X[ChOffset + 48 + 5]; \ 889 s32Temp2 += \ 890 (int32_t)WIND_8_SUBBANDS_5_3 * (int32_t)s16X[ChOffset + 16 + 11]; \ 891 s32Temp += \ 892 (int32_t)WIND_8_SUBBANDS_5_4 * (int32_t)s16X[ChOffset + 64 + 5]; \ 893 s32Temp2 += (int32_t)WIND_8_SUBBANDS_5_4 * (int32_t)s16X[ChOffset + 11]; \ 894 s32DCTY[5] = (int32_t)s32Temp; \ 895 s32DCTY[11] = (int32_t)s32Temp2; \ 896 } 897 #define WINDOW_ACCU_8_6_10 \ 898 { \ 899 s32Temp = (int32_t)WIND_8_SUBBANDS_6_0 * (int32_t)s16X[ChOffset + 6]; \ 900 s32Temp2 = \ 901 (int32_t)WIND_8_SUBBANDS_6_0 * (int32_t)s16X[ChOffset + 64 + 10]; \ 902 s32Temp += \ 903 (int32_t)WIND_8_SUBBANDS_6_1 * (int32_t)s16X[ChOffset + 16 + 6]; \ 904 s32Temp2 += \ 905 (int32_t)WIND_8_SUBBANDS_6_1 * (int32_t)s16X[ChOffset + 48 + 10]; \ 906 s32Temp += \ 907 (int32_t)WIND_8_SUBBANDS_6_2 * (int32_t)s16X[ChOffset + 32 + 6]; \ 908 s32Temp2 += \ 909 (int32_t)WIND_8_SUBBANDS_6_2 * (int32_t)s16X[ChOffset + 32 + 10]; \ 910 s32Temp += \ 911 (int32_t)WIND_8_SUBBANDS_6_3 * (int32_t)s16X[ChOffset + 48 + 6]; \ 912 s32Temp2 += \ 913 (int32_t)WIND_8_SUBBANDS_6_3 * (int32_t)s16X[ChOffset + 16 + 10]; \ 914 s32Temp += \ 915 (int32_t)WIND_8_SUBBANDS_6_4 * (int32_t)s16X[ChOffset + 64 + 6]; \ 916 s32Temp2 += (int32_t)WIND_8_SUBBANDS_6_4 * (int32_t)s16X[ChOffset + 10]; \ 917 s32DCTY[6] = (int32_t)s32Temp; \ 918 s32DCTY[10] = (int32_t)s32Temp2; \ 919 } 920 #define WINDOW_ACCU_8_7_9 \ 921 { \ 922 s32Temp = (int32_t)WIND_8_SUBBANDS_7_0 * (int32_t)s16X[ChOffset + 7]; \ 923 s32Temp2 = \ 924 (int32_t)WIND_8_SUBBANDS_7_0 * (int32_t)s16X[ChOffset + 64 + 9]; \ 925 s32Temp += \ 926 (int32_t)WIND_8_SUBBANDS_7_1 * (int32_t)s16X[ChOffset + 16 + 7]; \ 927 s32Temp2 += \ 928 (int32_t)WIND_8_SUBBANDS_7_1 * (int32_t)s16X[ChOffset + 48 + 9]; \ 929 s32Temp += \ 930 (int32_t)WIND_8_SUBBANDS_7_2 * (int32_t)s16X[ChOffset + 32 + 7]; \ 931 s32Temp2 += \ 932 (int32_t)WIND_8_SUBBANDS_7_2 * (int32_t)s16X[ChOffset + 32 + 9]; \ 933 s32Temp += \ 934 (int32_t)WIND_8_SUBBANDS_7_3 * (int32_t)s16X[ChOffset + 48 + 7]; \ 935 s32Temp2 += \ 936 (int32_t)WIND_8_SUBBANDS_7_3 * (int32_t)s16X[ChOffset + 16 + 9]; \ 937 s32Temp += \ 938 (int32_t)WIND_8_SUBBANDS_7_4 * (int32_t)s16X[ChOffset + 64 + 7]; \ 939 s32Temp2 += (int32_t)WIND_8_SUBBANDS_7_4 * (int32_t)s16X[ChOffset + 9]; \ 940 s32DCTY[7] = (int32_t)s32Temp; \ 941 s32DCTY[9] = (int32_t)s32Temp2; \ 942 } 943 #define WINDOW_ACCU_8_8 \ 944 { \ 945 s32Temp = (int32_t)WIND_8_SUBBANDS_8_0 * \ 946 (int32_t)(s16X[ChOffset + 8] + s16X[ChOffset + 64 + 8]); \ 947 s32Temp += (int32_t)WIND_8_SUBBANDS_8_1 * \ 948 (int32_t)(s16X[ChOffset + 16 + 8] + s16X[ChOffset + 48 + 8]); \ 949 s32Temp += \ 950 (int32_t)WIND_8_SUBBANDS_8_2 * (int32_t)s16X[ChOffset + 32 + 8]; \ 951 s32DCTY[8] = (int32_t)s32Temp; \ 952 } 953 #define WINDOW_ACCU_4_0 \ 954 { \ 955 s32Temp = (int32_t)WIND_4_SUBBANDS_0_1 * \ 956 (int32_t)(s16X[ChOffset + 8] - s16X[ChOffset + 32]); \ 957 s32Temp += (int32_t)WIND_4_SUBBANDS_0_2 * \ 958 (int32_t)(s16X[ChOffset + 16] - s16X[ChOffset + 24]); \ 959 s32DCTY[0] = (int32_t)(s32Temp); \ 960 } 961 #define WINDOW_ACCU_4_1_7 \ 962 { \ 963 s32Temp = (int32_t)WIND_4_SUBBANDS_1_0 * (int32_t)s16X[ChOffset + 1]; \ 964 s32Temp2 = \ 965 (int32_t)WIND_4_SUBBANDS_1_0 * (int32_t)s16X[ChOffset + 32 + 7]; \ 966 s32Temp += (int32_t)WIND_4_SUBBANDS_1_1 * (int32_t)s16X[ChOffset + 8 + 1]; \ 967 s32Temp2 += \ 968 (int32_t)WIND_4_SUBBANDS_1_1 * (int32_t)s16X[ChOffset + 24 + 7]; \ 969 s32Temp += \ 970 (int32_t)WIND_4_SUBBANDS_1_2 * (int32_t)s16X[ChOffset + 16 + 1]; \ 971 s32Temp2 += \ 972 (int32_t)WIND_4_SUBBANDS_1_2 * (int32_t)s16X[ChOffset + 16 + 7]; \ 973 s32Temp += \ 974 (int32_t)WIND_4_SUBBANDS_1_3 * (int32_t)s16X[ChOffset + 24 + 1]; \ 975 s32Temp2 += \ 976 (int32_t)WIND_4_SUBBANDS_1_3 * (int32_t)s16X[ChOffset + 8 + 7]; \ 977 s32Temp += \ 978 (int32_t)WIND_4_SUBBANDS_1_4 * (int32_t)s16X[ChOffset + 32 + 1]; \ 979 s32Temp2 += (int32_t)WIND_4_SUBBANDS_1_4 * (int32_t)s16X[ChOffset + 7]; \ 980 s32DCTY[1] = (int32_t)(s32Temp); \ 981 s32DCTY[7] = (int32_t)(s32Temp2); \ 982 } 983 #define WINDOW_ACCU_4_2_6 \ 984 { \ 985 s32Temp = (int32_t)WIND_4_SUBBANDS_2_0 * (int32_t)s16X[ChOffset + 2]; \ 986 s32Temp2 = \ 987 (int32_t)WIND_4_SUBBANDS_2_0 * (int32_t)s16X[ChOffset + 32 + 6]; \ 988 s32Temp += (int32_t)WIND_4_SUBBANDS_2_1 * (int32_t)s16X[ChOffset + 8 + 2]; \ 989 s32Temp2 += \ 990 (int32_t)WIND_4_SUBBANDS_2_1 * (int32_t)s16X[ChOffset + 24 + 6]; \ 991 s32Temp += \ 992 (int32_t)WIND_4_SUBBANDS_2_2 * (int32_t)s16X[ChOffset + 16 + 2]; \ 993 s32Temp2 += \ 994 (int32_t)WIND_4_SUBBANDS_2_2 * (int32_t)s16X[ChOffset + 16 + 6]; \ 995 s32Temp += \ 996 (int32_t)WIND_4_SUBBANDS_2_3 * (int32_t)s16X[ChOffset + 24 + 2]; \ 997 s32Temp2 += \ 998 (int32_t)WIND_4_SUBBANDS_2_3 * (int32_t)s16X[ChOffset + 8 + 6]; \ 999 s32Temp += \ 1000 (int32_t)WIND_4_SUBBANDS_2_4 * (int32_t)s16X[ChOffset + 32 + 2]; \ 1001 s32Temp2 += (int32_t)WIND_4_SUBBANDS_2_4 * (int32_t)s16X[ChOffset + 6]; \ 1002 s32DCTY[2] = (int32_t)(s32Temp); \ 1003 s32DCTY[6] = (int32_t)(s32Temp2); \ 1004 } 1005 #define WINDOW_ACCU_4_3_5 \ 1006 { \ 1007 s32Temp = (int32_t)WIND_4_SUBBANDS_3_0 * (int32_t)s16X[ChOffset + 3]; \ 1008 s32Temp2 = \ 1009 (int32_t)WIND_4_SUBBANDS_3_0 * (int32_t)s16X[ChOffset + 32 + 5]; \ 1010 s32Temp += (int32_t)WIND_4_SUBBANDS_3_1 * (int32_t)s16X[ChOffset + 8 + 3]; \ 1011 s32Temp2 += \ 1012 (int32_t)WIND_4_SUBBANDS_3_1 * (int32_t)s16X[ChOffset + 24 + 5]; \ 1013 s32Temp += \ 1014 (int32_t)WIND_4_SUBBANDS_3_2 * (int32_t)s16X[ChOffset + 16 + 3]; \ 1015 s32Temp2 += \ 1016 (int32_t)WIND_4_SUBBANDS_3_2 * (int32_t)s16X[ChOffset + 16 + 5]; \ 1017 s32Temp += \ 1018 (int32_t)WIND_4_SUBBANDS_3_3 * (int32_t)s16X[ChOffset + 24 + 3]; \ 1019 s32Temp2 += \ 1020 (int32_t)WIND_4_SUBBANDS_3_3 * (int32_t)s16X[ChOffset + 8 + 5]; \ 1021 s32Temp += \ 1022 (int32_t)WIND_4_SUBBANDS_3_4 * (int32_t)s16X[ChOffset + 32 + 3]; \ 1023 s32Temp2 += (int32_t)WIND_4_SUBBANDS_3_4 * (int32_t)s16X[ChOffset + 5]; \ 1024 s32DCTY[3] = (int32_t)(s32Temp); \ 1025 s32DCTY[5] = (int32_t)(s32Temp2); \ 1026 } 1027 1028 #define WINDOW_ACCU_4_4 \ 1029 { \ 1030 s32Temp = (int32_t)WIND_4_SUBBANDS_4_0 * \ 1031 (int32_t)(s16X[ChOffset + 4] + s16X[ChOffset + 4 + 32]); \ 1032 s32Temp += (int32_t)WIND_4_SUBBANDS_4_1 * \ 1033 (int32_t)(s16X[ChOffset + 4 + 8] + s16X[ChOffset + 4 + 24]); \ 1034 s32Temp += \ 1035 (int32_t)WIND_4_SUBBANDS_4_2 * (int32_t)s16X[ChOffset + 4 + 16]; \ 1036 s32DCTY[4] = (int32_t)(s32Temp); \ 1037 } 1038 #endif 1039 #define WINDOW_PARTIAL_4 \ 1040 { \ 1041 WINDOW_ACCU_4_0; \ 1042 WINDOW_ACCU_4_1_7; \ 1043 WINDOW_ACCU_4_2_6; \ 1044 WINDOW_ACCU_4_3_5; \ 1045 WINDOW_ACCU_4_4; \ 1046 } 1047 1048 #define WINDOW_PARTIAL_8 \ 1049 { \ 1050 WINDOW_ACCU_8_0; \ 1051 WINDOW_ACCU_8_1_15; \ 1052 WINDOW_ACCU_8_2_14; \ 1053 WINDOW_ACCU_8_3_13; \ 1054 WINDOW_ACCU_8_4_12; \ 1055 WINDOW_ACCU_8_5_11; \ 1056 WINDOW_ACCU_8_6_10; \ 1057 WINDOW_ACCU_8_7_9; \ 1058 WINDOW_ACCU_8_8; \ 1059 } 1060 #else 1061 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE) 1062 #define WINDOW_ACCU_4(i) \ 1063 { \ 1064 s64Temp = ((int64_t)gas32CoeffFor4SBs[i] * (int64_t)s16X[ChOffset + i]); \ 1065 s64Temp += ((int64_t)gas32CoeffFor4SBs[(i + 8)] * \ 1066 (int64_t)s16X[ChOffset + i + 8]); \ 1067 s64Temp += ((int64_t)gas32CoeffFor4SBs[(i + 16)] * \ 1068 (int64_t)s16X[ChOffset + i + 16]); \ 1069 s64Temp += ((int64_t)gas32CoeffFor4SBs[(i + 24)] * \ 1070 (int64_t)s16X[ChOffset + i + 24]); \ 1071 s64Temp += ((int64_t)gas32CoeffFor4SBs[(i + 32)] * \ 1072 (int64_t)s16X[ChOffset + i + 32]); \ 1073 s32DCTY[i] = (int32_t)(s64Temp >> 16); \ 1074 /*printf("s32DCTY4: 0x%x \n", s32DCTY[i]);*/ \ 1075 } 1076 #else 1077 #define WINDOW_ACCU_4(i) \ 1078 { \ 1079 s32DCTY[i] = (gas32CoeffFor4SBs[i * 2] * s16X[ChOffset + i]) + \ 1080 (((int32_t)(uint16_t)(gas32CoeffFor4SBs[(i * 2) + 1]) * \ 1081 s16X[ChOffset + i]) >> \ 1082 16); \ 1083 s32DCTY[i] += \ 1084 (gas32CoeffFor4SBs[(i + 8) * 2] * s16X[ChOffset + i + 8]) + \ 1085 (((int32_t)(uint16_t)(gas32CoeffFor4SBs[((i + 8) * 2) + 1]) * \ 1086 s16X[ChOffset + i + 8]) >> \ 1087 16); \ 1088 s32DCTY[i] += \ 1089 (gas32CoeffFor4SBs[(i + 16) * 2] * s16X[ChOffset + i + 16]) + \ 1090 (((int32_t)(uint16_t)(gas32CoeffFor4SBs[((i + 16) * 2) + 1]) * \ 1091 s16X[ChOffset + i + 16]) >> \ 1092 16); \ 1093 s32DCTY[i] += \ 1094 (gas32CoeffFor4SBs[(i + 24) * 2] * s16X[ChOffset + i + 24]) + \ 1095 (((int32_t)(uint16_t)(gas32CoeffFor4SBs[((i + 24) * 2) + 1]) * \ 1096 s16X[ChOffset + i + 24]) >> \ 1097 16); \ 1098 s32DCTY[i] += \ 1099 (gas32CoeffFor4SBs[(i + 32) * 2] * s16X[ChOffset + i + 32]) + \ 1100 (((int32_t)(uint16_t)(gas32CoeffFor4SBs[((i + 32) * 2) + 1]) * \ 1101 s16X[ChOffset + i + 32]) >> \ 1102 16); \ 1103 } 1104 #endif 1105 #define WINDOW_PARTIAL_4 \ 1106 { \ 1107 WINDOW_ACCU_4(0); \ 1108 WINDOW_ACCU_4(1); \ 1109 WINDOW_ACCU_4(2); \ 1110 WINDOW_ACCU_4(3); \ 1111 WINDOW_ACCU_4(4); \ 1112 WINDOW_ACCU_4(5); \ 1113 WINDOW_ACCU_4(6); \ 1114 WINDOW_ACCU_4(7); \ 1115 } 1116 1117 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE) 1118 #define WINDOW_ACCU_8(i) \ 1119 { \ 1120 s64Temp = \ 1121 ((((int64_t)gas32CoeffFor8SBs[i] * (int64_t)s16X[ChOffset + i]))); \ 1122 s64Temp += ((((int64_t)gas32CoeffFor8SBs[(i + 16)] * \ 1123 (int64_t)s16X[ChOffset + i + 16]))); \ 1124 s64Temp += ((((int64_t)gas32CoeffFor8SBs[(i + 32)] * \ 1125 (int64_t)s16X[ChOffset + i + 32]))); \ 1126 s64Temp += ((((int64_t)gas32CoeffFor8SBs[(i + 48)] * \ 1127 (int64_t)s16X[ChOffset + i + 48]))); \ 1128 s64Temp += ((((int64_t)gas32CoeffFor8SBs[(i + 64)] * \ 1129 (int64_t)s16X[ChOffset + i + 64]))); \ 1130 /*printf("s32DCTY8: %d= 0x%x * %d\n", s32DCTY[i], gas32CoeffFor8SBs[i], \ 1131 * s16X[ChOffset+i]);*/ \ 1132 s32DCTY[i] = (int32_t)(s64Temp >> 16); \ 1133 } 1134 #else 1135 #define WINDOW_ACCU_8(i) \ 1136 { \ 1137 s32DCTY[i] = (gas32CoeffFor8SBs[i * 2] * s16X[ChOffset + i]) + \ 1138 (((int32_t)(uint16_t)(gas32CoeffFor8SBs[(i * 2) + 1]) * \ 1139 s16X[ChOffset + i]) >> \ 1140 16); \ 1141 s32DCTY[i] += \ 1142 (gas32CoeffFor8SBs[(i + 16) * 2] * s16X[ChOffset + i + 16]) + \ 1143 (((int32_t)(uint16_t)(gas32CoeffFor8SBs[((i + 16) * 2) + 1]) * \ 1144 s16X[ChOffset + i + 16]) >> \ 1145 16); \ 1146 s32DCTY[i] += \ 1147 (gas32CoeffFor8SBs[(i + 32) * 2] * s16X[ChOffset + i + 32]) + \ 1148 (((int32_t)(uint16_t)(gas32CoeffFor8SBs[((i + 32) * 2) + 1]) * \ 1149 s16X[ChOffset + i + 32]) >> \ 1150 16); \ 1151 s32DCTY[i] += \ 1152 (gas32CoeffFor8SBs[(i + 48) * 2] * s16X[ChOffset + i + 48]) + \ 1153 (((int32_t)(uint16_t)(gas32CoeffFor8SBs[((i + 48) * 2) + 1]) * \ 1154 s16X[ChOffset + i + 48]) >> \ 1155 16); \ 1156 s32DCTY[i] += \ 1157 (gas32CoeffFor8SBs[(i + 64) * 2] * s16X[ChOffset + i + 64]) + \ 1158 (((int32_t)(uint16_t)(gas32CoeffFor8SBs[((i + 64) * 2) + 1]) * \ 1159 s16X[ChOffset + i + 64]) >> \ 1160 16); \ 1161 /*printf("s32DCTY8: %d = 0x%4x%4x * %d\n", s32DCTY[i], gas32CoeffFor8SBs[i \ 1162 * * 2], (gas32CoeffFor8SBs[(i * 2) + 1]), s16X[ChOffset+i]);*/ \ 1163 /*s32DCTY[i]=(int32_t)(s64Temp>>16);*/ \ 1164 } 1165 #endif 1166 #define WINDOW_PARTIAL_8 \ 1167 { \ 1168 WINDOW_ACCU_8(0); \ 1169 WINDOW_ACCU_8(1); \ 1170 WINDOW_ACCU_8(2); \ 1171 WINDOW_ACCU_8(3); \ 1172 WINDOW_ACCU_8(4); \ 1173 WINDOW_ACCU_8(5); \ 1174 WINDOW_ACCU_8(6); \ 1175 WINDOW_ACCU_8(7); \ 1176 WINDOW_ACCU_8(8); \ 1177 WINDOW_ACCU_8(9); \ 1178 WINDOW_ACCU_8(10); \ 1179 WINDOW_ACCU_8(11); \ 1180 WINDOW_ACCU_8(12); \ 1181 WINDOW_ACCU_8(13); \ 1182 WINDOW_ACCU_8(14); \ 1183 WINDOW_ACCU_8(15); \ 1184 } 1185 #endif 1186 #endif 1187 1188 static int16_t ShiftCounter = 0; 1189 extern int16_t EncMaxShiftCounter; 1190 /**************************************************************************** 1191 * SbcAnalysisFilter - performs Analysis of the input audio stream 1192 * 1193 * RETURNS : N/A 1194 */ 1195 void SbcAnalysisFilter4(SBC_ENC_PARAMS* pstrEncParams, int16_t* input) { 1196 int16_t* ps16PcmBuf; 1197 int32_t* ps32SbBuf; 1198 int32_t s32Blk, s32Ch; 1199 int32_t s32NumOfChannels, s32NumOfBlocks; 1200 int32_t i, *ps32X, *ps32X2; 1201 int32_t Offset, Offset2, ChOffset; 1202 #if (SBC_ARM_ASM_OPT == TRUE) 1203 register int32_t s32Hi, s32Hi2; 1204 #else 1205 #if (SBC_IPAQ_OPT == TRUE) 1206 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE) 1207 register int64_t s64Temp, s64Temp2; 1208 #else 1209 register int32_t s32Temp, s32Temp2; 1210 #endif 1211 #else 1212 1213 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE) 1214 int64_t s64Temp; 1215 #endif 1216 1217 #endif 1218 #endif 1219 1220 s32NumOfChannels = pstrEncParams->s16NumOfChannels; 1221 s32NumOfBlocks = pstrEncParams->s16NumOfBlocks; 1222 1223 ps16PcmBuf = input; 1224 1225 ps32SbBuf = pstrEncParams->s32SbBuffer; 1226 Offset2 = (int32_t)(EncMaxShiftCounter + 40); 1227 for (s32Blk = 0; s32Blk < s32NumOfBlocks; s32Blk++) { 1228 Offset = (int32_t)(EncMaxShiftCounter - ShiftCounter); 1229 /* Store new samples */ 1230 if (s32NumOfChannels == 1) { 1231 s16X[3 + Offset] = *ps16PcmBuf; 1232 ps16PcmBuf++; 1233 s16X[2 + Offset] = *ps16PcmBuf; 1234 ps16PcmBuf++; 1235 s16X[1 + Offset] = *ps16PcmBuf; 1236 ps16PcmBuf++; 1237 s16X[0 + Offset] = *ps16PcmBuf; 1238 ps16PcmBuf++; 1239 } else { 1240 s16X[3 + Offset] = *ps16PcmBuf; 1241 ps16PcmBuf++; 1242 s16X[Offset2 + 3 + Offset] = *ps16PcmBuf; 1243 ps16PcmBuf++; 1244 s16X[2 + Offset] = *ps16PcmBuf; 1245 ps16PcmBuf++; 1246 s16X[Offset2 + 2 + Offset] = *ps16PcmBuf; 1247 ps16PcmBuf++; 1248 s16X[1 + Offset] = *ps16PcmBuf; 1249 ps16PcmBuf++; 1250 s16X[Offset2 + 1 + Offset] = *ps16PcmBuf; 1251 ps16PcmBuf++; 1252 s16X[0 + Offset] = *ps16PcmBuf; 1253 ps16PcmBuf++; 1254 s16X[Offset2 + 0 + Offset] = *ps16PcmBuf; 1255 ps16PcmBuf++; 1256 } 1257 for (s32Ch = 0; s32Ch < s32NumOfChannels; s32Ch++) { 1258 ChOffset = s32Ch * Offset2 + Offset; 1259 1260 WINDOW_PARTIAL_4 1261 1262 SBC_FastIDCT4(s32DCTY, ps32SbBuf); 1263 1264 ps32SbBuf += SUB_BANDS_4; 1265 } 1266 if (s32NumOfChannels == 1) { 1267 if (ShiftCounter >= EncMaxShiftCounter) { 1268 SHIFTUP_X4; 1269 ShiftCounter = 0; 1270 } else { 1271 ShiftCounter += SUB_BANDS_4; 1272 } 1273 } else { 1274 if (ShiftCounter >= EncMaxShiftCounter) { 1275 SHIFTUP_X4_2; 1276 ShiftCounter = 0; 1277 } else { 1278 ShiftCounter += SUB_BANDS_4; 1279 } 1280 } 1281 } 1282 } 1283 1284 /* ////////////////////////////////////////////////////////////////////////// */ 1285 void SbcAnalysisFilter8(SBC_ENC_PARAMS* pstrEncParams, int16_t* input) { 1286 int16_t* ps16PcmBuf; 1287 int32_t* ps32SbBuf; 1288 int32_t s32Blk, s32Ch; /* counter for block*/ 1289 int32_t Offset, Offset2; 1290 int32_t s32NumOfChannels, s32NumOfBlocks; 1291 int32_t i, *ps32X, *ps32X2; 1292 int32_t ChOffset; 1293 #if (SBC_ARM_ASM_OPT == TRUE) 1294 register int32_t s32Hi, s32Hi2; 1295 #else 1296 #if (SBC_IPAQ_OPT == TRUE) 1297 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE) 1298 register int64_t s64Temp, s64Temp2; 1299 #else 1300 register int32_t s32Temp, s32Temp2; 1301 #endif 1302 #else 1303 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE) 1304 int64_t s64Temp; 1305 #endif 1306 #endif 1307 #endif 1308 1309 s32NumOfChannels = pstrEncParams->s16NumOfChannels; 1310 s32NumOfBlocks = pstrEncParams->s16NumOfBlocks; 1311 1312 ps16PcmBuf = input; 1313 1314 ps32SbBuf = pstrEncParams->s32SbBuffer; 1315 Offset2 = (int32_t)(EncMaxShiftCounter + 80); 1316 for (s32Blk = 0; s32Blk < s32NumOfBlocks; s32Blk++) { 1317 Offset = (int32_t)(EncMaxShiftCounter - ShiftCounter); 1318 /* Store new samples */ 1319 if (s32NumOfChannels == 1) { 1320 s16X[7 + Offset] = *ps16PcmBuf; 1321 ps16PcmBuf++; 1322 s16X[6 + Offset] = *ps16PcmBuf; 1323 ps16PcmBuf++; 1324 s16X[5 + Offset] = *ps16PcmBuf; 1325 ps16PcmBuf++; 1326 s16X[4 + Offset] = *ps16PcmBuf; 1327 ps16PcmBuf++; 1328 s16X[3 + Offset] = *ps16PcmBuf; 1329 ps16PcmBuf++; 1330 s16X[2 + Offset] = *ps16PcmBuf; 1331 ps16PcmBuf++; 1332 s16X[1 + Offset] = *ps16PcmBuf; 1333 ps16PcmBuf++; 1334 s16X[0 + Offset] = *ps16PcmBuf; 1335 ps16PcmBuf++; 1336 } else { 1337 s16X[7 + Offset] = *ps16PcmBuf; 1338 ps16PcmBuf++; 1339 s16X[Offset2 + 7 + Offset] = *ps16PcmBuf; 1340 ps16PcmBuf++; 1341 s16X[6 + Offset] = *ps16PcmBuf; 1342 ps16PcmBuf++; 1343 s16X[Offset2 + 6 + Offset] = *ps16PcmBuf; 1344 ps16PcmBuf++; 1345 s16X[5 + Offset] = *ps16PcmBuf; 1346 ps16PcmBuf++; 1347 s16X[Offset2 + 5 + Offset] = *ps16PcmBuf; 1348 ps16PcmBuf++; 1349 s16X[4 + Offset] = *ps16PcmBuf; 1350 ps16PcmBuf++; 1351 s16X[Offset2 + 4 + Offset] = *ps16PcmBuf; 1352 ps16PcmBuf++; 1353 s16X[3 + Offset] = *ps16PcmBuf; 1354 ps16PcmBuf++; 1355 s16X[Offset2 + 3 + Offset] = *ps16PcmBuf; 1356 ps16PcmBuf++; 1357 s16X[2 + Offset] = *ps16PcmBuf; 1358 ps16PcmBuf++; 1359 s16X[Offset2 + 2 + Offset] = *ps16PcmBuf; 1360 ps16PcmBuf++; 1361 s16X[1 + Offset] = *ps16PcmBuf; 1362 ps16PcmBuf++; 1363 s16X[Offset2 + 1 + Offset] = *ps16PcmBuf; 1364 ps16PcmBuf++; 1365 s16X[0 + Offset] = *ps16PcmBuf; 1366 ps16PcmBuf++; 1367 s16X[Offset2 + 0 + Offset] = *ps16PcmBuf; 1368 ps16PcmBuf++; 1369 } 1370 for (s32Ch = 0; s32Ch < s32NumOfChannels; s32Ch++) { 1371 ChOffset = s32Ch * Offset2 + Offset; 1372 1373 WINDOW_PARTIAL_8 1374 1375 SBC_FastIDCT8(s32DCTY, ps32SbBuf); 1376 1377 ps32SbBuf += SUB_BANDS_8; 1378 } 1379 if (s32NumOfChannels == 1) { 1380 if (ShiftCounter >= EncMaxShiftCounter) { 1381 SHIFTUP_X8; 1382 ShiftCounter = 0; 1383 } else { 1384 ShiftCounter += SUB_BANDS_8; 1385 } 1386 } else { 1387 if (ShiftCounter >= EncMaxShiftCounter) { 1388 SHIFTUP_X8_2; 1389 ShiftCounter = 0; 1390 } else { 1391 ShiftCounter += SUB_BANDS_8; 1392 } 1393 } 1394 } 1395 } 1396 1397 void SbcAnalysisInit(void) { 1398 memset(s16X, 0, ENC_VX_BUFFER_SIZE * sizeof(int16_t)); 1399 ShiftCounter = 0; 1400 } 1401