xref: /btstack/3rd-party/bluedroid/encoder/srce/sbc_analysis.c (revision 31f591700985e8eadf5c536377d08779c3a6b04f)
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+EncMaxShiftCounter+38);                                 \
164     for (i=0;i<9;i++)                                                               \
165     {                                                                               \
166         *ps32X=*(ps32X-2-(ShiftCounter>>1));  ps32X--;                                 \
167         *ps32X=*(ps32X-2-(ShiftCounter>>1));  ps32X--;                                 \
168     }                                                                               \
169 }
170 #define SHIFTUP_X4_2                                                              \
171 {                                                                                   \
172     ps32X=(SINT32 *)(pstrEncParams->s16X+EncMaxShiftCounter+38);                                   \
173     ps32X2=(SINT32 *)(pstrEncParams->s16X+(EncMaxShiftCounter<<1)+78);                             \
174     for (i=0;i<9;i++)                                                               \
175     {                                                                               \
176         *ps32X=*(ps32X-2-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-2-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
177         *ps32X=*(ps32X-2-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-2-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
178     }                                                                               \
179 }
180 
181 /* This macro is for 8 subbands */
182 #define SHIFTUP_X8                                                               \
183 {                                                                                   \
184     ps32X=(SINT32 *)(pstrEncParams->s16X+EncMaxShiftCounter+78);                                 \
185     for (i=0;i<9;i++)                                                               \
186     {                                                                               \
187         *ps32X=*(ps32X-4-(ShiftCounter>>1));  ps32X--;                                 \
188         *ps32X=*(ps32X-4-(ShiftCounter>>1));  ps32X--;                                 \
189         *ps32X=*(ps32X-4-(ShiftCounter>>1));  ps32X--;                                 \
190         *ps32X=*(ps32X-4-(ShiftCounter>>1));  ps32X--;                                 \
191     }                                                                               \
192 }
193 #define SHIFTUP_X8_2                                                               \
194 {                                                                                   \
195     ps32X=(SINT32 *)(pstrEncParams->s16X+EncMaxShiftCounter+78);                                   \
196     ps32X2=(SINT32 *)(pstrEncParams->s16X+(EncMaxShiftCounter<<1)+158);                             \
197     for (i=0;i<9;i++)                                                               \
198     {                                                                               \
199         *ps32X=*(ps32X-4-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-4-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
200         *ps32X=*(ps32X-4-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-4-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
201         *ps32X=*(ps32X-4-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-4-(ShiftCounter>>1)); ps32X--;  ps32X2--;                     \
202         *ps32X=*(ps32X-4-(ShiftCounter>>1));  *(ps32X2)=*(ps32X2-4-(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 static SINT16 ShiftCounter=0;
891 extern SINT16 EncMaxShiftCounter;
892 /****************************************************************************
893 * SbcAnalysisFilter - performs Analysis of the input audio stream
894 *
895 * RETURNS : N/A
896 */
897 void SbcAnalysisFilter4(SBC_ENC_PARAMS *pstrEncParams)
898 {
899     SINT16 *ps16PcmBuf;
900     SINT32 *ps32SbBuf;
901     SINT32  s32Blk,s32Ch;
902     SINT32  s32NumOfChannels, s32NumOfBlocks;
903     SINT32 i,*ps32X,*ps32X2;
904     SINT32 Offset,Offset2,ChOffset;
905 #if (SBC_ARM_ASM_OPT==TRUE)
906     register SINT32 s32Hi,s32Hi2;
907 #else
908 #if (SBC_IPAQ_OPT==TRUE)
909 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
910     register SINT64 s64Temp,s64Temp2;
911 #else
912 	register SINT32 s32Temp,s32Temp2;
913 #endif
914 #else
915 
916 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
917     SINT64 s64Temp;
918 #endif
919 
920 #endif
921 #endif
922 
923     s32NumOfChannels = pstrEncParams->s16NumOfChannels;
924     s32NumOfBlocks   = pstrEncParams->s16NumOfBlocks;
925 
926     ps16PcmBuf = pstrEncParams->ps16NextPcmBuffer;
927 
928     ps32SbBuf  = pstrEncParams->s32SbBuffer;
929     Offset2=(SINT32)(EncMaxShiftCounter+40);
930 
931     for (s32Blk=0; s32Blk <s32NumOfBlocks; s32Blk++)
932     {
933         Offset=(SINT32)(EncMaxShiftCounter-ShiftCounter);
934         /* Store new samples */
935         if (s32NumOfChannels==1)
936         {
937             pstrEncParams->s16X[3+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
938             pstrEncParams->s16X[2+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
939             pstrEncParams->s16X[1+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
940             pstrEncParams->s16X[0+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
941 
942         }
943         else
944         {
945             pstrEncParams->s16X[3+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
946             pstrEncParams->s16X[Offset2+3+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
947             pstrEncParams->s16X[2+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
948             pstrEncParams->s16X[Offset2+2+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
949             pstrEncParams->s16X[1+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
950             pstrEncParams->s16X[Offset2+1+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
951             pstrEncParams->s16X[0+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
952             pstrEncParams->s16X[Offset2+0+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
953         }
954         for (s32Ch=0;s32Ch<s32NumOfChannels;s32Ch++)
955         {
956             ChOffset=(s32Ch*Offset2)+Offset;
957 
958             WINDOW_PARTIAL_4
959 
960             SBC_FastIDCT4(pstrEncParams->s32DCTY, ps32SbBuf);
961             ps32SbBuf +=SUB_BANDS_4;
962         }
963         if (s32NumOfChannels==1)
964         {
965             if (ShiftCounter>=EncMaxShiftCounter)
966             {
967                 SHIFTUP_X4;
968                 ShiftCounter=0;
969             }
970             else
971             {
972                 ShiftCounter+=SUB_BANDS_4;
973             }
974         }
975         else
976         {
977             if (ShiftCounter>=EncMaxShiftCounter)
978             {
979                 SHIFTUP_X4_2;
980                 ShiftCounter=0;
981             }
982             else
983             {
984                 ShiftCounter+=SUB_BANDS_4;
985             }
986         }
987     }
988 }
989 
990 /* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
991 void SbcAnalysisFilter8 (SBC_ENC_PARAMS *pstrEncParams)
992 {
993     SINT16 *ps16PcmBuf;
994     SINT32 *ps32SbBuf;
995     SINT32  s32Blk,s32Ch;                                     /* counter for block*/
996     SINT32 Offset,Offset2;
997     SINT32  s32NumOfChannels, s32NumOfBlocks;
998     SINT32 i,*ps32X,*ps32X2;
999     SINT32 ChOffset;
1000 #if (SBC_ARM_ASM_OPT==TRUE)
1001     register SINT32 s32Hi,s32Hi2;
1002 #else
1003 #if (SBC_IPAQ_OPT==TRUE)
1004 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
1005     register SINT64 s64Temp,s64Temp2;
1006 #else
1007 	register SINT32 s32Temp,s32Temp2;
1008 #endif
1009 #else
1010 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU == TRUE)
1011     SINT64 s64Temp;
1012 #endif
1013 #endif
1014 #endif
1015 
1016     s32NumOfChannels = pstrEncParams->s16NumOfChannels;
1017     s32NumOfBlocks   = pstrEncParams->s16NumOfBlocks;
1018 
1019     ps16PcmBuf = pstrEncParams->ps16NextPcmBuffer;
1020 
1021     ps32SbBuf  = pstrEncParams->s32SbBuffer;
1022     Offset2=(SINT32)(EncMaxShiftCounter+80);
1023     for (s32Blk=0; s32Blk <s32NumOfBlocks; s32Blk++)
1024     {
1025         Offset=(SINT32)(EncMaxShiftCounter-ShiftCounter);
1026         /* Store new samples */
1027         if (s32NumOfChannels==1)
1028         {
1029             pstrEncParams->s16X[7+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
1030             pstrEncParams->s16X[6+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
1031             pstrEncParams->s16X[5+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
1032             pstrEncParams->s16X[4+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
1033             pstrEncParams->s16X[3+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
1034             pstrEncParams->s16X[2+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
1035             pstrEncParams->s16X[1+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
1036             pstrEncParams->s16X[0+Offset] = *ps16PcmBuf;   ps16PcmBuf++;
1037         }
1038         else
1039         {
1040             pstrEncParams->s16X[7+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
1041             pstrEncParams->s16X[Offset2+7+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
1042             pstrEncParams->s16X[6+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
1043             pstrEncParams->s16X[Offset2+6+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
1044             pstrEncParams->s16X[5+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
1045             pstrEncParams->s16X[Offset2+5+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
1046             pstrEncParams->s16X[4+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
1047             pstrEncParams->s16X[Offset2+4+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
1048             pstrEncParams->s16X[3+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
1049             pstrEncParams->s16X[Offset2+3+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
1050             pstrEncParams->s16X[2+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
1051             pstrEncParams->s16X[Offset2+2+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
1052             pstrEncParams->s16X[1+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
1053             pstrEncParams->s16X[Offset2+1+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
1054             pstrEncParams->s16X[0+Offset] = *ps16PcmBuf;        ps16PcmBuf++;
1055             pstrEncParams->s16X[Offset2+0+Offset] = *ps16PcmBuf;     ps16PcmBuf++;
1056         }
1057         for (s32Ch=0;s32Ch<s32NumOfChannels;s32Ch++)
1058         {
1059             ChOffset=(s32Ch*Offset2)+Offset;
1060 
1061             WINDOW_PARTIAL_8
1062 
1063             SBC_FastIDCT8 (pstrEncParams->s32DCTY, ps32SbBuf);
1064 
1065             ps32SbBuf +=SUB_BANDS_8;
1066         }
1067         if (s32NumOfChannels==1)
1068         {
1069             if (ShiftCounter>=EncMaxShiftCounter)
1070             {
1071                 SHIFTUP_X8;
1072                 ShiftCounter=0;
1073             }
1074             else
1075             {
1076                 ShiftCounter+=SUB_BANDS_8;
1077             }
1078         }
1079         else
1080         {
1081             if (ShiftCounter>=EncMaxShiftCounter)
1082             {
1083                 SHIFTUP_X8_2;
1084                 ShiftCounter=0;
1085             }
1086             else
1087             {
1088                 ShiftCounter+=SUB_BANDS_8;
1089             }
1090         }
1091     }
1092 }
1093 
1094 void SbcAnalysisInit (SBC_ENC_PARAMS *pstrEncParams)
1095 {
1096     ShiftCounter=0;
1097 
1098     // s16X must be 32 bits aligned cf
1099     pstrEncParams->s16X = (SINT16*) (pstrEncParams->s32X);
1100     memset(pstrEncParams->s16X,0,ENC_VX_BUFFER_SIZE*sizeof(SINT16));
1101     memset(pstrEncParams->s32DCTY, 0, sizeof(pstrEncParams->s32DCTY));
1102 }
1103