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