Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_filter.c

Issue 1227163003: Update audio code to use size_t more correctly, (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Review comments Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 16 matching lines...) Expand all
27 {-367, 1090, -2706, 9945, 10596, -3318, 1626, -781, 287}, 27 {-367, 1090, -2706, 9945, 10596, -3318, 1626, -781, 287},
28 {-325, 953, -2292, 7301, 12963, -3320, 1570, -743, 271}, 28 {-325, 953, -2292, 7301, 12963, -3320, 1570, -743, 271},
29 {-240, 693, -1622, 4634, 14809, -2782, 1262, -587, 212}, 29 {-240, 693, -1622, 4634, 14809, -2782, 1262, -587, 212},
30 {-125, 358, -817, 2144, 15982, -1668, 721, -329, 118}, 30 {-125, 358, -817, 2144, 15982, -1668, 721, -329, 118},
31 { 0, 0, -1, 1, 16380, 1, -1, 0, 0}, 31 { 0, 0, -1, 1, 16380, 1, -1, 0, 0},
32 { 118, -329, 721, -1668, 15982, 2144, -817, 358, -125}, 32 { 118, -329, 721, -1668, 15982, 2144, -817, 358, -125},
33 { 212, -587, 1262, -2782, 14809, 4634, -1622, 693, -240}, 33 { 212, -587, 1262, -2782, 14809, 4634, -1622, 693, -240},
34 { 271, -743, 1570, -3320, 12963, 7301, -2292, 953, -325} 34 { 271, -743, 1570, -3320, 12963, 7301, -2292, 953, -325}
35 }; 35 };
36 36
37 static __inline int32_t CalcLrIntQ(int32_t fixVal, 37 static __inline size_t CalcLrIntQ(int16_t fixVal,
38 int16_t qDomain) { 38 int16_t qDomain) {
39 int32_t roundVal = 1 << (qDomain - 1); 39 int32_t roundVal = 1 << (qDomain - 1);
40 40
41 return (fixVal + roundVal) >> qDomain; 41 return (fixVal + roundVal) >> qDomain;
42 } 42 }
43 43
44 void WebRtcIsacfix_PitchFilter(int16_t* indatQQ, // Q10 if type is 1 or 4, 44 void WebRtcIsacfix_PitchFilter(int16_t* indatQQ, // Q10 if type is 1 or 4,
45 // Q0 if type is 2. 45 // Q0 if type is 2.
46 int16_t* outdatQQ, 46 int16_t* outdatQQ,
47 PitchFiltstr* pfp, 47 PitchFiltstr* pfp,
48 int16_t* lagsQ7, 48 int16_t* lagsQ7,
49 int16_t* gainsQ12, 49 int16_t* gainsQ12,
50 int16_t type) { 50 int16_t type) {
51 int k, ind, cnt; 51 int k, ind, cnt;
52 int16_t sign = 1; 52 int16_t sign = 1;
53 int16_t inystateQQ[PITCH_DAMPORDER]; 53 int16_t inystateQQ[PITCH_DAMPORDER];
54 int16_t ubufQQ[PITCH_INTBUFFSIZE + QLOOKAHEAD]; 54 int16_t ubufQQ[PITCH_INTBUFFSIZE + QLOOKAHEAD];
55 const int16_t Gain = 21299; // 1.3 in Q14 55 const int16_t Gain = 21299; // 1.3 in Q14
56 int16_t oldLagQ7; 56 int16_t oldLagQ7;
57 int16_t oldGainQ12, lagdeltaQ7, curLagQ7, gaindeltaQ12, curGainQ12; 57 int16_t oldGainQ12, lagdeltaQ7, curLagQ7, gaindeltaQ12, curGainQ12;
58 int indW32 = 0, frcQQ = 0; 58 size_t indW32 = 0, frcQQ = 0;
59 const int16_t* fracoeffQQ = NULL; 59 const int16_t* fracoeffQQ = NULL;
60 60
61 // Assumptions in ARM assembly for WebRtcIsacfix_PitchFilterCoreARM(). 61 // Assumptions in ARM assembly for WebRtcIsacfix_PitchFilterCoreARM().
62 COMPILE_ASSERT(PITCH_FRACORDER == 9); 62 COMPILE_ASSERT(PITCH_FRACORDER == 9);
63 COMPILE_ASSERT(PITCH_DAMPORDER == 5); 63 COMPILE_ASSERT(PITCH_DAMPORDER == 5);
64 64
65 // Set up buffer and states. 65 // Set up buffer and states.
66 memcpy(ubufQQ, pfp->ubufQQ, sizeof(pfp->ubufQQ)); 66 memcpy(ubufQQ, pfp->ubufQQ, sizeof(pfp->ubufQQ));
67 memcpy(inystateQQ, pfp->ystateQQ, sizeof(inystateQQ)); 67 memcpy(inystateQQ, pfp->ystateQQ, sizeof(inystateQQ));
68 68
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 WebRtcIsacfix_PitchFilterCore(QLOOKAHEAD, curGainQ12, indW32, 1, inystateQQ, 134 WebRtcIsacfix_PitchFilterCore(QLOOKAHEAD, curGainQ12, indW32, 1, inystateQQ,
135 ubufQQ, fracoeffQQ, indatQQ, outdatQQ, &ind); 135 ubufQQ, fracoeffQQ, indatQQ, outdatQQ, &ind);
136 } 136 }
137 } 137 }
138 138
139 139
140 void WebRtcIsacfix_PitchFilterGains(const int16_t* indatQ0, 140 void WebRtcIsacfix_PitchFilterGains(const int16_t* indatQ0,
141 PitchFiltstr* pfp, 141 PitchFiltstr* pfp,
142 int16_t* lagsQ7, 142 int16_t* lagsQ7,
143 int16_t* gainsQ12) { 143 int16_t* gainsQ12) {
144 int k, n, m, ind, pos, pos3QQ; 144 int k, n, m;
145 size_t ind, pos, pos3QQ;
145 146
146 int16_t ubufQQ[PITCH_INTBUFFSIZE]; 147 int16_t ubufQQ[PITCH_INTBUFFSIZE];
147 int16_t oldLagQ7, lagdeltaQ7, curLagQ7; 148 int16_t oldLagQ7, lagdeltaQ7, curLagQ7;
148 const int16_t* fracoeffQQ = NULL; 149 const int16_t* fracoeffQQ = NULL;
149 int16_t scale; 150 int16_t scale;
150 int16_t cnt = 0, frcQQ, indW16 = 0, tmpW16; 151 int16_t cnt = 0, tmpW16;
152 size_t frcQQ, indW16 = 0;
151 int32_t tmpW32, tmp2W32, csum1QQ, esumxQQ; 153 int32_t tmpW32, tmp2W32, csum1QQ, esumxQQ;
152 154
153 // Set up buffer and states. 155 // Set up buffer and states.
154 memcpy(ubufQQ, pfp->ubufQQ, sizeof(pfp->ubufQQ)); 156 memcpy(ubufQQ, pfp->ubufQQ, sizeof(pfp->ubufQQ));
155 oldLagQ7 = pfp->oldlagQ7; 157 oldLagQ7 = pfp->oldlagQ7;
156 158
157 // No interpolation if pitch lag step is big. 159 // No interpolation if pitch lag step is big.
158 if (((lagsQ7[0] * 3 >> 1) < oldLagQ7) || (lagsQ7[0] > (oldLagQ7 * 3 >> 1))) { 160 if (((lagsQ7[0] * 3 >> 1) < oldLagQ7) || (lagsQ7[0] > (oldLagQ7 * 3 >> 1))) {
159 oldLagQ7 = lagsQ7[0]; 161 oldLagQ7 = lagsQ7[0];
160 } 162 }
(...skipping 11 matching lines...) Expand all
172 oldLagQ7 = lagsQ7[k]; 174 oldLagQ7 = lagsQ7[k];
173 175
174 csum1QQ = 1; 176 csum1QQ = 1;
175 esumxQQ = 1; 177 esumxQQ = 1;
176 178
177 // Same as function WebRtcIsacfix_PitchFilter(), we break the pitch 179 // Same as function WebRtcIsacfix_PitchFilter(), we break the pitch
178 // filtering into two for-loops (5 x 12) below. 180 // filtering into two for-loops (5 x 12) below.
179 for (cnt = 0; cnt < kSegments; cnt++) { 181 for (cnt = 0; cnt < kSegments; cnt++) {
180 // Update parameters for each segment. 182 // Update parameters for each segment.
181 curLagQ7 += lagdeltaQ7; 183 curLagQ7 += lagdeltaQ7;
182 indW16 = (int16_t)CalcLrIntQ(curLagQ7, 7); 184 indW16 = CalcLrIntQ(curLagQ7, 7);
183 frcQQ = ((indW16 << 7) + 64 - curLagQ7) >> 4; 185 frcQQ = ((indW16 << 7) + 64 - curLagQ7) >> 4;
184 186
185 if (frcQQ == PITCH_FRACS) { 187 if (frcQQ == PITCH_FRACS) {
186 frcQQ = 0; 188 frcQQ = 0;
187 } 189 }
188 fracoeffQQ = kIntrpCoef[frcQQ]; 190 fracoeffQQ = kIntrpCoef[frcQQ];
189 191
190 pos3QQ = pos - (indW16 + 4); 192 pos3QQ = pos - (indW16 + 4);
191 193
192 for (n = 0; n < PITCH_SUBFRAME_LEN / kSegments; n++) { 194 for (n = 0; n < PITCH_SUBFRAME_LEN / kSegments; n++) {
193 // Filter to get fractional pitch. 195 // Filter to get fractional pitch.
194 196
195 tmpW32 = 0; 197 tmpW32 = 0;
196 for (m = 0; m < PITCH_FRACORDER; m++) { 198 for (m = 0; m < PITCH_FRACORDER; m++) {
197 tmpW32 += ubufQQ[pos3QQ + m] * fracoeffQQ[m]; 199 tmpW32 += ubufQQ[pos3QQ + m] * fracoeffQQ[m];
198 } 200 }
199 201
200 // Subtract from input and update buffer. 202 // Subtract from input and update buffer.
201 ubufQQ[pos] = indatQ0[ind]; 203 ubufQQ[pos] = indatQ0[ind];
202 204
203 tmp2W32 = WEBRTC_SPL_MUL_16_32_RSFT14(indatQ0[ind], tmpW32); 205 tmp2W32 = WEBRTC_SPL_MUL_16_32_RSFT14(indatQ0[ind], tmpW32);
204 tmpW32 += 8192; 206 tmpW32 += 8192;
205 tmpW16 = (int16_t)(tmpW32 >> 14); 207 tmpW16 = tmpW32 >> 14;
206 tmpW32 = tmpW16 * tmpW16; 208 tmpW32 = tmpW16 * tmpW16;
207 209
208 if ((tmp2W32 > 1073700000) || (csum1QQ > 1073700000) || 210 if ((tmp2W32 > 1073700000) || (csum1QQ > 1073700000) ||
209 (tmpW32 > 1073700000) || (esumxQQ > 1073700000)) { // 2^30 211 (tmpW32 > 1073700000) || (esumxQQ > 1073700000)) { // 2^30
210 scale++; 212 scale++;
211 csum1QQ >>= 1; 213 csum1QQ >>= 1;
212 esumxQQ >>= 1; 214 esumxQQ >>= 1;
213 } 215 }
214 csum1QQ += tmp2W32 >> scale; 216 csum1QQ += tmp2W32 >> scale;
215 esumxQQ += tmpW32 >> scale; 217 esumxQQ += tmpW32 >> scale;
(...skipping 14 matching lines...) Expand all
230 } 232 }
231 gainsQ12[k] = (int16_t)WEBRTC_SPL_SAT(PITCH_MAX_GAIN_Q12, tmpW32, 0); 233 gainsQ12[k] = (int16_t)WEBRTC_SPL_SAT(PITCH_MAX_GAIN_Q12, tmpW32, 0);
232 } 234 }
233 235
234 // Export buffer and states. 236 // Export buffer and states.
235 memcpy(pfp->ubufQQ, ubufQQ + PITCH_FRAME_LEN, sizeof(pfp->ubufQQ)); 237 memcpy(pfp->ubufQQ, ubufQQ + PITCH_FRAME_LEN, sizeof(pfp->ubufQQ));
236 pfp->oldlagQ7 = lagsQ7[PITCH_SUBFRAMES - 1]; 238 pfp->oldlagQ7 = lagsQ7[PITCH_SUBFRAMES - 1];
237 pfp->oldgainQ12 = gainsQ12[PITCH_SUBFRAMES - 1]; 239 pfp->oldgainQ12 = gainsQ12[PITCH_SUBFRAMES - 1];
238 240
239 } 241 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698