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

Side by Side Diff: webrtc/common_audio/signal_processing/include/signal_processing_library.h

Issue 1230503003: Update a ton of audio code to use size_t more correctly and in general reduce (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Resync 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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 // If the underlying platform is known to be ARM-Neon (WEBRTC_HAS_NEON defined), 108 // If the underlying platform is known to be ARM-Neon (WEBRTC_HAS_NEON defined),
109 // the pointers will be assigned to code optimized for Neon; otherwise 109 // the pointers will be assigned to code optimized for Neon; otherwise
110 // if run-time Neon detection (WEBRTC_DETECT_NEON) is enabled, the pointers 110 // if run-time Neon detection (WEBRTC_DETECT_NEON) is enabled, the pointers
111 // will be assigned to either Neon code or generic C code; otherwise, generic C 111 // will be assigned to either Neon code or generic C code; otherwise, generic C
112 // code will be assigned. 112 // code will be assigned.
113 // Note that this function MUST be called in any application that uses SPL 113 // Note that this function MUST be called in any application that uses SPL
114 // functions. 114 // functions.
115 void WebRtcSpl_Init(); 115 void WebRtcSpl_Init();
116 116
117 int16_t WebRtcSpl_GetScalingSquare(int16_t* in_vector, 117 int16_t WebRtcSpl_GetScalingSquare(int16_t* in_vector,
118 int in_vector_length, 118 size_t in_vector_length,
119 int times); 119 size_t times);
120 120
121 // Copy and set operations. Implementation in copy_set_operations.c. 121 // Copy and set operations. Implementation in copy_set_operations.c.
122 // Descriptions at bottom of file. 122 // Descriptions at bottom of file.
123 void WebRtcSpl_MemSetW16(int16_t* vector, 123 void WebRtcSpl_MemSetW16(int16_t* vector,
124 int16_t set_value, 124 int16_t set_value,
125 int vector_length); 125 size_t vector_length);
126 void WebRtcSpl_MemSetW32(int32_t* vector, 126 void WebRtcSpl_MemSetW32(int32_t* vector,
127 int32_t set_value, 127 int32_t set_value,
128 int vector_length); 128 size_t vector_length);
129 void WebRtcSpl_MemCpyReversedOrder(int16_t* out_vector, 129 void WebRtcSpl_MemCpyReversedOrder(int16_t* out_vector,
130 int16_t* in_vector, 130 int16_t* in_vector,
131 int vector_length); 131 size_t vector_length);
132 void WebRtcSpl_CopyFromEndW16(const int16_t* in_vector, 132 void WebRtcSpl_CopyFromEndW16(const int16_t* in_vector,
133 int in_vector_length, 133 size_t in_vector_length,
134 int samples, 134 size_t samples,
135 int16_t* out_vector); 135 int16_t* out_vector);
136 void WebRtcSpl_ZerosArrayW16(int16_t* vector, 136 void WebRtcSpl_ZerosArrayW16(int16_t* vector,
137 int vector_length); 137 size_t vector_length);
138 void WebRtcSpl_ZerosArrayW32(int32_t* vector, 138 void WebRtcSpl_ZerosArrayW32(int32_t* vector,
139 int vector_length); 139 size_t vector_length);
140 // End: Copy and set operations. 140 // End: Copy and set operations.
141 141
142 142
143 // Minimum and maximum operation functions and their pointers. 143 // Minimum and maximum operation functions and their pointers.
144 // Implementation in min_max_operations.c. 144 // Implementation in min_max_operations.c.
145 145
146 // Returns the largest absolute value in a signed 16-bit vector. 146 // Returns the largest absolute value in a signed 16-bit vector.
147 // 147 //
148 // Input: 148 // Input:
149 // - vector : 16-bit input vector. 149 // - vector : 16-bit input vector.
150 // - length : Number of samples in vector. 150 // - length : Number of samples in vector.
151 // 151 //
152 // Return value : Maximum absolute value in vector; 152 // Return value : Maximum absolute value in vector;
153 // or -1, if (vector == NULL || length <= 0). 153 // or -1, if (vector == NULL || length == 0).
154 typedef int16_t (*MaxAbsValueW16)(const int16_t* vector, int length); 154 typedef int16_t (*MaxAbsValueW16)(const int16_t* vector, size_t length);
155 extern MaxAbsValueW16 WebRtcSpl_MaxAbsValueW16; 155 extern MaxAbsValueW16 WebRtcSpl_MaxAbsValueW16;
156 int16_t WebRtcSpl_MaxAbsValueW16C(const int16_t* vector, int length); 156 int16_t WebRtcSpl_MaxAbsValueW16C(const int16_t* vector, size_t length);
157 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON) 157 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
158 int16_t WebRtcSpl_MaxAbsValueW16Neon(const int16_t* vector, int length); 158 int16_t WebRtcSpl_MaxAbsValueW16Neon(const int16_t* vector, size_t length);
159 #endif 159 #endif
160 #if defined(MIPS32_LE) 160 #if defined(MIPS32_LE)
161 int16_t WebRtcSpl_MaxAbsValueW16_mips(const int16_t* vector, int length); 161 int16_t WebRtcSpl_MaxAbsValueW16_mips(const int16_t* vector, size_t length);
162 #endif 162 #endif
163 163
164 // Returns the largest absolute value in a signed 32-bit vector. 164 // Returns the largest absolute value in a signed 32-bit vector.
165 // 165 //
166 // Input: 166 // Input:
167 // - vector : 32-bit input vector. 167 // - vector : 32-bit input vector.
168 // - length : Number of samples in vector. 168 // - length : Number of samples in vector.
169 // 169 //
170 // Return value : Maximum absolute value in vector; 170 // Return value : Maximum absolute value in vector;
171 // or -1, if (vector == NULL || length <= 0). 171 // or -1, if (vector == NULL || length == 0).
172 typedef int32_t (*MaxAbsValueW32)(const int32_t* vector, int length); 172 typedef int32_t (*MaxAbsValueW32)(const int32_t* vector, size_t length);
173 extern MaxAbsValueW32 WebRtcSpl_MaxAbsValueW32; 173 extern MaxAbsValueW32 WebRtcSpl_MaxAbsValueW32;
174 int32_t WebRtcSpl_MaxAbsValueW32C(const int32_t* vector, int length); 174 int32_t WebRtcSpl_MaxAbsValueW32C(const int32_t* vector, size_t length);
175 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON) 175 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
176 int32_t WebRtcSpl_MaxAbsValueW32Neon(const int32_t* vector, int length); 176 int32_t WebRtcSpl_MaxAbsValueW32Neon(const int32_t* vector, size_t length);
177 #endif 177 #endif
178 #if defined(MIPS_DSP_R1_LE) 178 #if defined(MIPS_DSP_R1_LE)
179 int32_t WebRtcSpl_MaxAbsValueW32_mips(const int32_t* vector, int length); 179 int32_t WebRtcSpl_MaxAbsValueW32_mips(const int32_t* vector, size_t length);
180 #endif 180 #endif
181 181
182 // Returns the maximum value of a 16-bit vector. 182 // Returns the maximum value of a 16-bit vector.
183 // 183 //
184 // Input: 184 // Input:
185 // - vector : 16-bit input vector. 185 // - vector : 16-bit input vector.
186 // - length : Number of samples in vector. 186 // - length : Number of samples in vector.
187 // 187 //
188 // Return value : Maximum sample value in |vector|. 188 // Return value : Maximum sample value in |vector|.
189 // If (vector == NULL || length <= 0) WEBRTC_SPL_WORD16_MIN 189 // If (vector == NULL || length == 0) WEBRTC_SPL_WORD16_MIN
190 // is returned. Note that WEBRTC_SPL_WORD16_MIN is a feasible 190 // is returned. Note that WEBRTC_SPL_WORD16_MIN is a feasible
191 // value and we can't catch errors purely based on it. 191 // value and we can't catch errors purely based on it.
192 typedef int16_t (*MaxValueW16)(const int16_t* vector, int length); 192 typedef int16_t (*MaxValueW16)(const int16_t* vector, size_t length);
193 extern MaxValueW16 WebRtcSpl_MaxValueW16; 193 extern MaxValueW16 WebRtcSpl_MaxValueW16;
194 int16_t WebRtcSpl_MaxValueW16C(const int16_t* vector, int length); 194 int16_t WebRtcSpl_MaxValueW16C(const int16_t* vector, size_t length);
195 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON) 195 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
196 int16_t WebRtcSpl_MaxValueW16Neon(const int16_t* vector, int length); 196 int16_t WebRtcSpl_MaxValueW16Neon(const int16_t* vector, size_t length);
197 #endif 197 #endif
198 #if defined(MIPS32_LE) 198 #if defined(MIPS32_LE)
199 int16_t WebRtcSpl_MaxValueW16_mips(const int16_t* vector, int length); 199 int16_t WebRtcSpl_MaxValueW16_mips(const int16_t* vector, size_t length);
200 #endif 200 #endif
201 201
202 // Returns the maximum value of a 32-bit vector. 202 // Returns the maximum value of a 32-bit vector.
203 // 203 //
204 // Input: 204 // Input:
205 // - vector : 32-bit input vector. 205 // - vector : 32-bit input vector.
206 // - length : Number of samples in vector. 206 // - length : Number of samples in vector.
207 // 207 //
208 // Return value : Maximum sample value in |vector|. 208 // Return value : Maximum sample value in |vector|.
209 // If (vector == NULL || length <= 0) WEBRTC_SPL_WORD32_MIN 209 // If (vector == NULL || length == 0) WEBRTC_SPL_WORD32_MIN
210 // is returned. Note that WEBRTC_SPL_WORD32_MIN is a feasible 210 // is returned. Note that WEBRTC_SPL_WORD32_MIN is a feasible
211 // value and we can't catch errors purely based on it. 211 // value and we can't catch errors purely based on it.
212 typedef int32_t (*MaxValueW32)(const int32_t* vector, int length); 212 typedef int32_t (*MaxValueW32)(const int32_t* vector, size_t length);
213 extern MaxValueW32 WebRtcSpl_MaxValueW32; 213 extern MaxValueW32 WebRtcSpl_MaxValueW32;
214 int32_t WebRtcSpl_MaxValueW32C(const int32_t* vector, int length); 214 int32_t WebRtcSpl_MaxValueW32C(const int32_t* vector, size_t length);
215 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON) 215 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
216 int32_t WebRtcSpl_MaxValueW32Neon(const int32_t* vector, int length); 216 int32_t WebRtcSpl_MaxValueW32Neon(const int32_t* vector, size_t length);
217 #endif 217 #endif
218 #if defined(MIPS32_LE) 218 #if defined(MIPS32_LE)
219 int32_t WebRtcSpl_MaxValueW32_mips(const int32_t* vector, int length); 219 int32_t WebRtcSpl_MaxValueW32_mips(const int32_t* vector, size_t length);
220 #endif 220 #endif
221 221
222 // Returns the minimum value of a 16-bit vector. 222 // Returns the minimum value of a 16-bit vector.
223 // 223 //
224 // Input: 224 // Input:
225 // - vector : 16-bit input vector. 225 // - vector : 16-bit input vector.
226 // - length : Number of samples in vector. 226 // - length : Number of samples in vector.
227 // 227 //
228 // Return value : Minimum sample value in |vector|. 228 // Return value : Minimum sample value in |vector|.
229 // If (vector == NULL || length <= 0) WEBRTC_SPL_WORD16_MAX 229 // If (vector == NULL || length == 0) WEBRTC_SPL_WORD16_MAX
230 // is returned. Note that WEBRTC_SPL_WORD16_MAX is a feasible 230 // is returned. Note that WEBRTC_SPL_WORD16_MAX is a feasible
231 // value and we can't catch errors purely based on it. 231 // value and we can't catch errors purely based on it.
232 typedef int16_t (*MinValueW16)(const int16_t* vector, int length); 232 typedef int16_t (*MinValueW16)(const int16_t* vector, size_t length);
233 extern MinValueW16 WebRtcSpl_MinValueW16; 233 extern MinValueW16 WebRtcSpl_MinValueW16;
234 int16_t WebRtcSpl_MinValueW16C(const int16_t* vector, int length); 234 int16_t WebRtcSpl_MinValueW16C(const int16_t* vector, size_t length);
235 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON) 235 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
236 int16_t WebRtcSpl_MinValueW16Neon(const int16_t* vector, int length); 236 int16_t WebRtcSpl_MinValueW16Neon(const int16_t* vector, size_t length);
237 #endif 237 #endif
238 #if defined(MIPS32_LE) 238 #if defined(MIPS32_LE)
239 int16_t WebRtcSpl_MinValueW16_mips(const int16_t* vector, int length); 239 int16_t WebRtcSpl_MinValueW16_mips(const int16_t* vector, size_t length);
240 #endif 240 #endif
241 241
242 // Returns the minimum value of a 32-bit vector. 242 // Returns the minimum value of a 32-bit vector.
243 // 243 //
244 // Input: 244 // Input:
245 // - vector : 32-bit input vector. 245 // - vector : 32-bit input vector.
246 // - length : Number of samples in vector. 246 // - length : Number of samples in vector.
247 // 247 //
248 // Return value : Minimum sample value in |vector|. 248 // Return value : Minimum sample value in |vector|.
249 // If (vector == NULL || length <= 0) WEBRTC_SPL_WORD32_MAX 249 // If (vector == NULL || length == 0) WEBRTC_SPL_WORD32_MAX
250 // is returned. Note that WEBRTC_SPL_WORD32_MAX is a feasible 250 // is returned. Note that WEBRTC_SPL_WORD32_MAX is a feasible
251 // value and we can't catch errors purely based on it. 251 // value and we can't catch errors purely based on it.
252 typedef int32_t (*MinValueW32)(const int32_t* vector, int length); 252 typedef int32_t (*MinValueW32)(const int32_t* vector, size_t length);
253 extern MinValueW32 WebRtcSpl_MinValueW32; 253 extern MinValueW32 WebRtcSpl_MinValueW32;
254 int32_t WebRtcSpl_MinValueW32C(const int32_t* vector, int length); 254 int32_t WebRtcSpl_MinValueW32C(const int32_t* vector, size_t length);
255 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON) 255 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
256 int32_t WebRtcSpl_MinValueW32Neon(const int32_t* vector, int length); 256 int32_t WebRtcSpl_MinValueW32Neon(const int32_t* vector, size_t length);
257 #endif 257 #endif
258 #if defined(MIPS32_LE) 258 #if defined(MIPS32_LE)
259 int32_t WebRtcSpl_MinValueW32_mips(const int32_t* vector, int length); 259 int32_t WebRtcSpl_MinValueW32_mips(const int32_t* vector, size_t length);
260 #endif 260 #endif
261 261
262 // Returns the vector index to the largest absolute value of a 16-bit vector. 262 // Returns the vector index to the largest absolute value of a 16-bit vector.
263 // 263 //
264 // Input: 264 // Input:
265 // - vector : 16-bit input vector. 265 // - vector : 16-bit input vector.
266 // - length : Number of samples in vector. 266 // - length : Number of samples in vector.
267 // 267 //
268 // Return value : Index to the maximum absolute value in vector, or -1, 268 // Return value : Index to the maximum absolute value in vector, or -1,
269 // if (vector == NULL || length <= 0). 269 // if (vector == NULL || length == 0).
270 // If there are multiple equal maxima, return the index of the 270 // If there are multiple equal maxima, return the index of the
271 // first. -32768 will always have precedence over 32767 (despite 271 // first. -32768 will always have precedence over 32767 (despite
272 // -32768 presenting an int16 absolute value of 32767); 272 // -32768 presenting an int16 absolute value of 32767);
273 int WebRtcSpl_MaxAbsIndexW16(const int16_t* vector, int length); 273 int WebRtcSpl_MaxAbsIndexW16(const int16_t* vector, size_t length);
274 274
275 // Returns the vector index to the maximum sample value of a 16-bit vector. 275 // Returns the vector index to the maximum sample value of a 16-bit vector.
276 // 276 //
277 // Input: 277 // Input:
278 // - vector : 16-bit input vector. 278 // - vector : 16-bit input vector.
279 // - length : Number of samples in vector. 279 // - length : Number of samples in vector.
280 // 280 //
281 // Return value : Index to the maximum value in vector (if multiple 281 // Return value : Index to the maximum value in vector (if multiple
282 // indexes have the maximum, return the first); 282 // indexes have the maximum, return the first);
283 // or -1, if (vector == NULL || length <= 0). 283 // or -1, if (vector == NULL || length == 0).
284 int WebRtcSpl_MaxIndexW16(const int16_t* vector, int length); 284 int WebRtcSpl_MaxIndexW16(const int16_t* vector, size_t length);
285 285
286 // Returns the vector index to the maximum sample value of a 32-bit vector. 286 // Returns the vector index to the maximum sample value of a 32-bit vector.
287 // 287 //
288 // Input: 288 // Input:
289 // - vector : 32-bit input vector. 289 // - vector : 32-bit input vector.
290 // - length : Number of samples in vector. 290 // - length : Number of samples in vector.
291 // 291 //
292 // Return value : Index to the maximum value in vector (if multiple 292 // Return value : Index to the maximum value in vector (if multiple
293 // indexes have the maximum, return the first); 293 // indexes have the maximum, return the first);
294 // or -1, if (vector == NULL || length <= 0). 294 // or -1, if (vector == NULL || length == 0).
295 int WebRtcSpl_MaxIndexW32(const int32_t* vector, int length); 295 int WebRtcSpl_MaxIndexW32(const int32_t* vector, size_t length);
296 296
297 // Returns the vector index to the minimum sample value of a 16-bit vector. 297 // Returns the vector index to the minimum sample value of a 16-bit vector.
298 // 298 //
299 // Input: 299 // Input:
300 // - vector : 16-bit input vector. 300 // - vector : 16-bit input vector.
301 // - length : Number of samples in vector. 301 // - length : Number of samples in vector.
302 // 302 //
303 // Return value : Index to the mimimum value in vector (if multiple 303 // Return value : Index to the mimimum value in vector (if multiple
304 // indexes have the minimum, return the first); 304 // indexes have the minimum, return the first);
305 // or -1, if (vector == NULL || length <= 0). 305 // or -1, if (vector == NULL || length == 0).
306 int WebRtcSpl_MinIndexW16(const int16_t* vector, int length); 306 int WebRtcSpl_MinIndexW16(const int16_t* vector, size_t length);
307 307
308 // Returns the vector index to the minimum sample value of a 32-bit vector. 308 // Returns the vector index to the minimum sample value of a 32-bit vector.
309 // 309 //
310 // Input: 310 // Input:
311 // - vector : 32-bit input vector. 311 // - vector : 32-bit input vector.
312 // - length : Number of samples in vector. 312 // - length : Number of samples in vector.
313 // 313 //
314 // Return value : Index to the mimimum value in vector (if multiple 314 // Return value : Index to the mimimum value in vector (if multiple
315 // indexes have the minimum, return the first); 315 // indexes have the minimum, return the first);
316 // or -1, if (vector == NULL || length <= 0). 316 // or -1, if (vector == NULL || length == 0).
317 int WebRtcSpl_MinIndexW32(const int32_t* vector, int length); 317 int WebRtcSpl_MinIndexW32(const int32_t* vector, size_t length);
318 318
319 // End: Minimum and maximum operations. 319 // End: Minimum and maximum operations.
320 320
321 321
322 // Vector scaling operations. Implementation in vector_scaling_operations.c. 322 // Vector scaling operations. Implementation in vector_scaling_operations.c.
323 // Description at bottom of file. 323 // Description at bottom of file.
324 void WebRtcSpl_VectorBitShiftW16(int16_t* out_vector, 324 void WebRtcSpl_VectorBitShiftW16(int16_t* out_vector,
325 int16_t vector_length, 325 size_t vector_length,
326 const int16_t* in_vector, 326 const int16_t* in_vector,
327 int16_t right_shifts); 327 int16_t right_shifts);
328 void WebRtcSpl_VectorBitShiftW32(int32_t* out_vector, 328 void WebRtcSpl_VectorBitShiftW32(int32_t* out_vector,
329 int16_t vector_length, 329 size_t vector_length,
330 const int32_t* in_vector, 330 const int32_t* in_vector,
331 int16_t right_shifts); 331 int16_t right_shifts);
332 void WebRtcSpl_VectorBitShiftW32ToW16(int16_t* out_vector, 332 void WebRtcSpl_VectorBitShiftW32ToW16(int16_t* out_vector,
333 int vector_length, 333 size_t vector_length,
334 const int32_t* in_vector, 334 const int32_t* in_vector,
335 int right_shifts); 335 int right_shifts);
336 void WebRtcSpl_ScaleVector(const int16_t* in_vector, 336 void WebRtcSpl_ScaleVector(const int16_t* in_vector,
337 int16_t* out_vector, 337 int16_t* out_vector,
338 int16_t gain, 338 int16_t gain,
339 int16_t vector_length, 339 size_t vector_length,
340 int16_t right_shifts); 340 int16_t right_shifts);
341 void WebRtcSpl_ScaleVectorWithSat(const int16_t* in_vector, 341 void WebRtcSpl_ScaleVectorWithSat(const int16_t* in_vector,
342 int16_t* out_vector, 342 int16_t* out_vector,
343 int16_t gain, 343 int16_t gain,
344 int16_t vector_length, 344 size_t vector_length,
345 int16_t right_shifts); 345 int16_t right_shifts);
346 void WebRtcSpl_ScaleAndAddVectors(const int16_t* in_vector1, 346 void WebRtcSpl_ScaleAndAddVectors(const int16_t* in_vector1,
347 int16_t gain1, int right_shifts1, 347 int16_t gain1, int right_shifts1,
348 const int16_t* in_vector2, 348 const int16_t* in_vector2,
349 int16_t gain2, int right_shifts2, 349 int16_t gain2, int right_shifts2,
350 int16_t* out_vector, 350 int16_t* out_vector,
351 int vector_length); 351 size_t vector_length);
352 352
353 // The functions (with related pointer) perform the vector operation: 353 // The functions (with related pointer) perform the vector operation:
354 // out_vector[k] = ((scale1 * in_vector1[k]) + (scale2 * in_vector2[k]) 354 // out_vector[k] = ((scale1 * in_vector1[k]) + (scale2 * in_vector2[k])
355 // + round_value) >> right_shifts, 355 // + round_value) >> right_shifts,
356 // where round_value = (1 << right_shifts) >> 1. 356 // where round_value = (1 << right_shifts) >> 1.
357 // 357 //
358 // Input: 358 // Input:
359 // - in_vector1 : Input vector 1 359 // - in_vector1 : Input vector 1
360 // - in_vector1_scale : Gain to be used for vector 1 360 // - in_vector1_scale : Gain to be used for vector 1
361 // - in_vector2 : Input vector 2 361 // - in_vector2 : Input vector 2
362 // - in_vector2_scale : Gain to be used for vector 2 362 // - in_vector2_scale : Gain to be used for vector 2
363 // - right_shifts : Number of right bit shifts to be applied 363 // - right_shifts : Number of right bit shifts to be applied
364 // - length : Number of elements in the input vectors 364 // - length : Number of elements in the input vectors
365 // 365 //
366 // Output: 366 // Output:
367 // - out_vector : Output vector 367 // - out_vector : Output vector
368 // Return value : 0 if OK, -1 if (in_vector1 == NULL 368 // Return value : 0 if OK, -1 if (in_vector1 == NULL
369 // || in_vector2 == NULL || out_vector == NULL 369 // || in_vector2 == NULL || out_vector == NULL
370 // || length <= 0 || right_shift < 0). 370 // || length <= 0 || right_shift < 0).
371 typedef int (*ScaleAndAddVectorsWithRound)(const int16_t* in_vector1, 371 typedef int (*ScaleAndAddVectorsWithRound)(const int16_t* in_vector1,
372 int16_t in_vector1_scale, 372 int16_t in_vector1_scale,
373 const int16_t* in_vector2, 373 const int16_t* in_vector2,
374 int16_t in_vector2_scale, 374 int16_t in_vector2_scale,
375 int right_shifts, 375 int right_shifts,
376 int16_t* out_vector, 376 int16_t* out_vector,
377 int length); 377 size_t length);
378 extern ScaleAndAddVectorsWithRound WebRtcSpl_ScaleAndAddVectorsWithRound; 378 extern ScaleAndAddVectorsWithRound WebRtcSpl_ScaleAndAddVectorsWithRound;
379 int WebRtcSpl_ScaleAndAddVectorsWithRoundC(const int16_t* in_vector1, 379 int WebRtcSpl_ScaleAndAddVectorsWithRoundC(const int16_t* in_vector1,
380 int16_t in_vector1_scale, 380 int16_t in_vector1_scale,
381 const int16_t* in_vector2, 381 const int16_t* in_vector2,
382 int16_t in_vector2_scale, 382 int16_t in_vector2_scale,
383 int right_shifts, 383 int right_shifts,
384 int16_t* out_vector, 384 int16_t* out_vector,
385 int length); 385 size_t length);
386 #if defined(MIPS_DSP_R1_LE) 386 #if defined(MIPS_DSP_R1_LE)
387 int WebRtcSpl_ScaleAndAddVectorsWithRound_mips(const int16_t* in_vector1, 387 int WebRtcSpl_ScaleAndAddVectorsWithRound_mips(const int16_t* in_vector1,
388 int16_t in_vector1_scale, 388 int16_t in_vector1_scale,
389 const int16_t* in_vector2, 389 const int16_t* in_vector2,
390 int16_t in_vector2_scale, 390 int16_t in_vector2_scale,
391 int right_shifts, 391 int right_shifts,
392 int16_t* out_vector, 392 int16_t* out_vector,
393 int length); 393 size_t length);
394 #endif 394 #endif
395 // End: Vector scaling operations. 395 // End: Vector scaling operations.
396 396
397 // iLBC specific functions. Implementations in ilbc_specific_functions.c. 397 // iLBC specific functions. Implementations in ilbc_specific_functions.c.
398 // Description at bottom of file. 398 // Description at bottom of file.
399 void WebRtcSpl_ReverseOrderMultArrayElements(int16_t* out_vector, 399 void WebRtcSpl_ReverseOrderMultArrayElements(int16_t* out_vector,
400 const int16_t* in_vector, 400 const int16_t* in_vector,
401 const int16_t* window, 401 const int16_t* window,
402 int16_t vector_length, 402 size_t vector_length,
403 int16_t right_shifts); 403 int16_t right_shifts);
404 void WebRtcSpl_ElementwiseVectorMult(int16_t* out_vector, 404 void WebRtcSpl_ElementwiseVectorMult(int16_t* out_vector,
405 const int16_t* in_vector, 405 const int16_t* in_vector,
406 const int16_t* window, 406 const int16_t* window,
407 int16_t vector_length, 407 size_t vector_length,
408 int16_t right_shifts); 408 int16_t right_shifts);
409 void WebRtcSpl_AddVectorsAndShift(int16_t* out_vector, 409 void WebRtcSpl_AddVectorsAndShift(int16_t* out_vector,
410 const int16_t* in_vector1, 410 const int16_t* in_vector1,
411 const int16_t* in_vector2, 411 const int16_t* in_vector2,
412 int16_t vector_length, 412 size_t vector_length,
413 int16_t right_shifts); 413 int16_t right_shifts);
414 void WebRtcSpl_AddAffineVectorToVector(int16_t* out_vector, 414 void WebRtcSpl_AddAffineVectorToVector(int16_t* out_vector,
415 int16_t* in_vector, 415 int16_t* in_vector,
416 int16_t gain, 416 int16_t gain,
417 int32_t add_constant, 417 int32_t add_constant,
418 int16_t right_shifts, 418 int16_t right_shifts,
419 int vector_length); 419 size_t vector_length);
420 void WebRtcSpl_AffineTransformVector(int16_t* out_vector, 420 void WebRtcSpl_AffineTransformVector(int16_t* out_vector,
421 int16_t* in_vector, 421 int16_t* in_vector,
422 int16_t gain, 422 int16_t gain,
423 int32_t add_constant, 423 int32_t add_constant,
424 int16_t right_shifts, 424 int16_t right_shifts,
425 int vector_length); 425 size_t vector_length);
426 // End: iLBC specific functions. 426 // End: iLBC specific functions.
427 427
428 // Signal processing operations. 428 // Signal processing operations.
429 429
430 // A 32-bit fix-point implementation of auto-correlation computation 430 // A 32-bit fix-point implementation of auto-correlation computation
431 // 431 //
432 // Input: 432 // Input:
433 // - in_vector : Vector to calculate autocorrelation upon 433 // - in_vector : Vector to calculate autocorrelation upon
434 // - in_vector_length : Length (in samples) of |vector| 434 // - in_vector_length : Length (in samples) of |vector|
435 // - order : The order up to which the autocorrelation should be 435 // - order : The order up to which the autocorrelation should be
436 // calculated 436 // calculated
437 // 437 //
438 // Output: 438 // Output:
439 // - result : auto-correlation values (values should be seen 439 // - result : auto-correlation values (values should be seen
440 // relative to each other since the absolute values 440 // relative to each other since the absolute values
441 // might have been down shifted to avoid overflow) 441 // might have been down shifted to avoid overflow)
442 // 442 //
443 // - scale : The number of left shifts required to obtain the 443 // - scale : The number of left shifts required to obtain the
444 // auto-correlation in Q0 444 // auto-correlation in Q0
445 // 445 //
446 // Return value : 446 // Return value :
447 // - -1, if |order| > |in_vector_length|; 447 // - -1, if |order| > |in_vector_length|;
448 // - Number of samples in |result|, i.e. (order+1), otherwise. 448 // - Number of samples in |result|, i.e. (order+1), otherwise.
449 int WebRtcSpl_AutoCorrelation(const int16_t* in_vector, 449 int WebRtcSpl_AutoCorrelation(const int16_t* in_vector,
450 int in_vector_length, 450 size_t in_vector_length,
451 int order, 451 size_t order,
452 int32_t* result, 452 int32_t* result,
453 int* scale); 453 int* scale);
454 454
455 // A 32-bit fix-point implementation of the Levinson-Durbin algorithm that 455 // A 32-bit fix-point implementation of the Levinson-Durbin algorithm that
456 // does NOT use the 64 bit class 456 // does NOT use the 64 bit class
457 // 457 //
458 // Input: 458 // Input:
459 // - auto_corr : Vector with autocorrelation values of length >= |order|+1 459 // - auto_corr : Vector with autocorrelation values of length >= |order|+1
460 // - order : The LPC filter order (support up to order 20) 460 // - order : The LPC filter order (support up to order 20)
461 // 461 //
462 // Output: 462 // Output:
463 // - lpc_coef : lpc_coef[0..order] LPC coefficients in Q12 463 // - lpc_coef : lpc_coef[0..order] LPC coefficients in Q12
464 // - refl_coef : refl_coef[0...order-1]| Reflection coefficients in Q15 464 // - refl_coef : refl_coef[0...order-1]| Reflection coefficients in Q15
465 // 465 //
466 // Return value : 1 for stable 0 for unstable 466 // Return value : 1 for stable 0 for unstable
467 int16_t WebRtcSpl_LevinsonDurbin(const int32_t* auto_corr, 467 int16_t WebRtcSpl_LevinsonDurbin(const int32_t* auto_corr,
468 int16_t* lpc_coef, 468 int16_t* lpc_coef,
469 int16_t* refl_coef, 469 int16_t* refl_coef,
470 int16_t order); 470 size_t order);
471 471
472 // Converts reflection coefficients |refl_coef| to LPC coefficients |lpc_coef|. 472 // Converts reflection coefficients |refl_coef| to LPC coefficients |lpc_coef|.
473 // This version is a 16 bit operation. 473 // This version is a 16 bit operation.
474 // 474 //
475 // NOTE: The 16 bit refl_coef -> lpc_coef conversion might result in a 475 // NOTE: The 16 bit refl_coef -> lpc_coef conversion might result in a
476 // "slightly unstable" filter (i.e., a pole just outside the unit circle) in 476 // "slightly unstable" filter (i.e., a pole just outside the unit circle) in
477 // "rare" cases even if the reflection coefficients are stable. 477 // "rare" cases even if the reflection coefficients are stable.
478 // 478 //
479 // Input: 479 // Input:
480 // - refl_coef : Reflection coefficients in Q15 that should be converted 480 // - refl_coef : Reflection coefficients in Q15 that should be converted
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 // become the output Q-domain. 533 // become the output Q-domain.
534 // - step_seq2 : How many (positive or negative) steps the 534 // - step_seq2 : How many (positive or negative) steps the
535 // |vector2| pointer should be updated for each new 535 // |vector2| pointer should be updated for each new
536 // cross-correlation value. 536 // cross-correlation value.
537 // 537 //
538 // Output: 538 // Output:
539 // - cross_correlation : The cross-correlation in Q(-right_shifts) 539 // - cross_correlation : The cross-correlation in Q(-right_shifts)
540 typedef void (*CrossCorrelation)(int32_t* cross_correlation, 540 typedef void (*CrossCorrelation)(int32_t* cross_correlation,
541 const int16_t* seq1, 541 const int16_t* seq1,
542 const int16_t* seq2, 542 const int16_t* seq2,
543 int16_t dim_seq, 543 size_t dim_seq,
544 int16_t dim_cross_correlation, 544 size_t dim_cross_correlation,
545 int right_shifts, 545 int right_shifts,
546 int step_seq2); 546 int step_seq2);
547 extern CrossCorrelation WebRtcSpl_CrossCorrelation; 547 extern CrossCorrelation WebRtcSpl_CrossCorrelation;
548 void WebRtcSpl_CrossCorrelationC(int32_t* cross_correlation, 548 void WebRtcSpl_CrossCorrelationC(int32_t* cross_correlation,
549 const int16_t* seq1, 549 const int16_t* seq1,
550 const int16_t* seq2, 550 const int16_t* seq2,
551 int16_t dim_seq, 551 size_t dim_seq,
552 int16_t dim_cross_correlation, 552 size_t dim_cross_correlation,
553 int right_shifts, 553 int right_shifts,
554 int step_seq2); 554 int step_seq2);
555 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON) 555 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
556 void WebRtcSpl_CrossCorrelationNeon(int32_t* cross_correlation, 556 void WebRtcSpl_CrossCorrelationNeon(int32_t* cross_correlation,
557 const int16_t* seq1, 557 const int16_t* seq1,
558 const int16_t* seq2, 558 const int16_t* seq2,
559 int16_t dim_seq, 559 size_t dim_seq,
560 int16_t dim_cross_correlation, 560 size_t dim_cross_correlation,
561 int right_shifts, 561 int right_shifts,
562 int step_seq2); 562 int step_seq2);
563 #endif 563 #endif
564 #if defined(MIPS32_LE) 564 #if defined(MIPS32_LE)
565 void WebRtcSpl_CrossCorrelation_mips(int32_t* cross_correlation, 565 void WebRtcSpl_CrossCorrelation_mips(int32_t* cross_correlation,
566 const int16_t* seq1, 566 const int16_t* seq1,
567 const int16_t* seq2, 567 const int16_t* seq2,
568 int16_t dim_seq, 568 size_t dim_seq,
569 int16_t dim_cross_correlation, 569 size_t dim_cross_correlation,
570 int right_shifts, 570 int right_shifts,
571 int step_seq2); 571 int step_seq2);
572 #endif 572 #endif
573 573
574 // Creates (the first half of) a Hanning window. Size must be at least 1 and 574 // Creates (the first half of) a Hanning window. Size must be at least 1 and
575 // at most 512. 575 // at most 512.
576 // 576 //
577 // Input: 577 // Input:
578 // - size : Length of the requested Hanning window (1 to 512) 578 // - size : Length of the requested Hanning window (1 to 512)
579 // 579 //
580 // Output: 580 // Output:
581 // - window : Hanning vector in Q14. 581 // - window : Hanning vector in Q14.
582 void WebRtcSpl_GetHanningWindow(int16_t* window, int16_t size); 582 void WebRtcSpl_GetHanningWindow(int16_t* window, size_t size);
583 583
584 // Calculates y[k] = sqrt(1 - x[k]^2) for each element of the input vector 584 // Calculates y[k] = sqrt(1 - x[k]^2) for each element of the input vector
585 // |in_vector|. Input and output values are in Q15. 585 // |in_vector|. Input and output values are in Q15.
586 // 586 //
587 // Inputs: 587 // Inputs:
588 // - in_vector : Values to calculate sqrt(1 - x^2) of 588 // - in_vector : Values to calculate sqrt(1 - x^2) of
589 // - vector_length : Length of vector |in_vector| 589 // - vector_length : Length of vector |in_vector|
590 // 590 //
591 // Output: 591 // Output:
592 // - out_vector : Output values in Q15 592 // - out_vector : Output values in Q15
593 void WebRtcSpl_SqrtOfOneMinusXSquared(int16_t* in_vector, 593 void WebRtcSpl_SqrtOfOneMinusXSquared(int16_t* in_vector,
594 int vector_length, 594 size_t vector_length,
595 int16_t* out_vector); 595 int16_t* out_vector);
596 // End: Signal processing operations. 596 // End: Signal processing operations.
597 597
598 // Randomization functions. Implementations collected in 598 // Randomization functions. Implementations collected in
599 // randomization_functions.c and descriptions at bottom of this file. 599 // randomization_functions.c and descriptions at bottom of this file.
600 int16_t WebRtcSpl_RandU(uint32_t* seed); 600 int16_t WebRtcSpl_RandU(uint32_t* seed);
601 int16_t WebRtcSpl_RandN(uint32_t* seed); 601 int16_t WebRtcSpl_RandN(uint32_t* seed);
602 int16_t WebRtcSpl_RandUArray(int16_t* vector, 602 int16_t WebRtcSpl_RandUArray(int16_t* vector,
603 int16_t vector_length, 603 int16_t vector_length,
604 uint32_t* seed); 604 uint32_t* seed);
605 // End: Randomization functions. 605 // End: Randomization functions.
606 606
607 // Math functions 607 // Math functions
608 int32_t WebRtcSpl_Sqrt(int32_t value); 608 int32_t WebRtcSpl_Sqrt(int32_t value);
609 int32_t WebRtcSpl_SqrtFloor(int32_t value); 609 int32_t WebRtcSpl_SqrtFloor(int32_t value);
610 610
611 // Divisions. Implementations collected in division_operations.c and 611 // Divisions. Implementations collected in division_operations.c and
612 // descriptions at bottom of this file. 612 // descriptions at bottom of this file.
613 uint32_t WebRtcSpl_DivU32U16(uint32_t num, uint16_t den); 613 uint32_t WebRtcSpl_DivU32U16(uint32_t num, uint16_t den);
614 int32_t WebRtcSpl_DivW32W16(int32_t num, int16_t den); 614 int32_t WebRtcSpl_DivW32W16(int32_t num, int16_t den);
615 int16_t WebRtcSpl_DivW32W16ResW16(int32_t num, int16_t den); 615 int16_t WebRtcSpl_DivW32W16ResW16(int32_t num, int16_t den);
616 int32_t WebRtcSpl_DivResultInQ31(int32_t num, int32_t den); 616 int32_t WebRtcSpl_DivResultInQ31(int32_t num, int32_t den);
617 int32_t WebRtcSpl_DivW32HiLow(int32_t num, int16_t den_hi, int16_t den_low); 617 int32_t WebRtcSpl_DivW32HiLow(int32_t num, int16_t den_hi, int16_t den_low);
618 // End: Divisions. 618 // End: Divisions.
619 619
620 int32_t WebRtcSpl_Energy(int16_t* vector, int vector_length, int* scale_factor); 620 int32_t WebRtcSpl_Energy(int16_t* vector,
621 size_t vector_length,
622 int* scale_factor);
621 623
622 // Calculates the dot product between two (int16_t) vectors. 624 // Calculates the dot product between two (int16_t) vectors.
623 // 625 //
624 // Input: 626 // Input:
625 // - vector1 : Vector 1 627 // - vector1 : Vector 1
626 // - vector2 : Vector 2 628 // - vector2 : Vector 2
627 // - vector_length : Number of samples used in the dot product 629 // - vector_length : Number of samples used in the dot product
628 // - scaling : The number of right bit shifts to apply on each term 630 // - scaling : The number of right bit shifts to apply on each term
629 // during calculation to avoid overflow, i.e., the 631 // during calculation to avoid overflow, i.e., the
630 // output will be in Q(-|scaling|) 632 // output will be in Q(-|scaling|)
631 // 633 //
632 // Return value : The dot product in Q(-scaling) 634 // Return value : The dot product in Q(-scaling)
633 int32_t WebRtcSpl_DotProductWithScale(const int16_t* vector1, 635 int32_t WebRtcSpl_DotProductWithScale(const int16_t* vector1,
634 const int16_t* vector2, 636 const int16_t* vector2,
635 int length, 637 size_t length,
636 int scaling); 638 int scaling);
637 639
638 // Filter operations. 640 // Filter operations.
639 int WebRtcSpl_FilterAR(const int16_t* ar_coef, 641 size_t WebRtcSpl_FilterAR(const int16_t* ar_coef,
640 int ar_coef_length, 642 size_t ar_coef_length,
641 const int16_t* in_vector, 643 const int16_t* in_vector,
642 int in_vector_length, 644 size_t in_vector_length,
643 int16_t* filter_state, 645 int16_t* filter_state,
644 int filter_state_length, 646 size_t filter_state_length,
645 int16_t* filter_state_low, 647 int16_t* filter_state_low,
646 int filter_state_low_length, 648 size_t filter_state_low_length,
647 int16_t* out_vector, 649 int16_t* out_vector,
648 int16_t* out_vector_low, 650 int16_t* out_vector_low,
649 int out_vector_low_length); 651 size_t out_vector_low_length);
650 652
651 // WebRtcSpl_FilterMAFastQ12(...) 653 // WebRtcSpl_FilterMAFastQ12(...)
652 // 654 //
653 // Performs a MA filtering on a vector in Q12 655 // Performs a MA filtering on a vector in Q12
654 // 656 //
655 // Input: 657 // Input:
656 // - in_vector : Input samples (state in positions 658 // - in_vector : Input samples (state in positions
657 // in_vector[-order] .. in_vector[-1]) 659 // in_vector[-order] .. in_vector[-1])
658 // - ma_coef : Filter coefficients (in Q12) 660 // - ma_coef : Filter coefficients (in Q12)
659 // - ma_coef_length : Number of B coefficients (order+1) 661 // - ma_coef_length : Number of B coefficients (order+1)
660 // - vector_length : Number of samples to be filtered 662 // - vector_length : Number of samples to be filtered
661 // 663 //
662 // Output: 664 // Output:
663 // - out_vector : Filtered samples 665 // - out_vector : Filtered samples
664 // 666 //
665 void WebRtcSpl_FilterMAFastQ12(const int16_t* in_vector, 667 void WebRtcSpl_FilterMAFastQ12(const int16_t* in_vector,
666 int16_t* out_vector, 668 int16_t* out_vector,
667 const int16_t* ma_coef, 669 const int16_t* ma_coef,
668 int16_t ma_coef_length, 670 size_t ma_coef_length,
669 int16_t vector_length); 671 size_t vector_length);
670 672
671 // Performs a AR filtering on a vector in Q12 673 // Performs a AR filtering on a vector in Q12
672 // Input: 674 // Input:
673 // - data_in : Input samples 675 // - data_in : Input samples
674 // - data_out : State information in positions 676 // - data_out : State information in positions
675 // data_out[-order] .. data_out[-1] 677 // data_out[-order] .. data_out[-1]
676 // - coefficients : Filter coefficients (in Q12) 678 // - coefficients : Filter coefficients (in Q12)
677 // - coefficients_length: Number of coefficients (order+1) 679 // - coefficients_length: Number of coefficients (order+1)
678 // - data_length : Number of samples to be filtered 680 // - data_length : Number of samples to be filtered
679 // Output: 681 // Output:
680 // - data_out : Filtered samples 682 // - data_out : Filtered samples
681 void WebRtcSpl_FilterARFastQ12(const int16_t* data_in, 683 void WebRtcSpl_FilterARFastQ12(const int16_t* data_in,
682 int16_t* data_out, 684 int16_t* data_out,
683 const int16_t* __restrict coefficients, 685 const int16_t* __restrict coefficients,
684 int coefficients_length, 686 size_t coefficients_length,
685 int data_length); 687 size_t data_length);
686 688
687 // The functions (with related pointer) perform a MA down sampling filter 689 // The functions (with related pointer) perform a MA down sampling filter
688 // on a vector. 690 // on a vector.
689 // Input: 691 // Input:
690 // - data_in : Input samples (state in positions 692 // - data_in : Input samples (state in positions
691 // data_in[-order] .. data_in[-1]) 693 // data_in[-order] .. data_in[-1])
692 // - data_in_length : Number of samples in |data_in| to be filtered. 694 // - data_in_length : Number of samples in |data_in| to be filtered.
693 // This must be at least 695 // This must be at least
694 // |delay| + |factor|*(|out_vector_length|-1) + 1) 696 // |delay| + |factor|*(|out_vector_length|-1) + 1)
695 // - data_out_length : Number of down sampled samples desired 697 // - data_out_length : Number of down sampled samples desired
696 // - coefficients : Filter coefficients (in Q12) 698 // - coefficients : Filter coefficients (in Q12)
697 // - coefficients_length: Number of coefficients (order+1) 699 // - coefficients_length: Number of coefficients (order+1)
698 // - factor : Decimation factor 700 // - factor : Decimation factor
699 // - delay : Delay of filter (compensated for in out_vector) 701 // - delay : Delay of filter (compensated for in out_vector)
700 // Output: 702 // Output:
701 // - data_out : Filtered samples 703 // - data_out : Filtered samples
702 // Return value : 0 if OK, -1 if |in_vector| is too short 704 // Return value : 0 if OK, -1 if |in_vector| is too short
703 typedef int (*DownsampleFast)(const int16_t* data_in, 705 typedef int (*DownsampleFast)(const int16_t* data_in,
704 int data_in_length, 706 size_t data_in_length,
705 int16_t* data_out, 707 int16_t* data_out,
706 int data_out_length, 708 size_t data_out_length,
707 const int16_t* __restrict coefficients, 709 const int16_t* __restrict coefficients,
708 int coefficients_length, 710 size_t coefficients_length,
709 int factor, 711 int factor,
710 int delay); 712 size_t delay);
711 extern DownsampleFast WebRtcSpl_DownsampleFast; 713 extern DownsampleFast WebRtcSpl_DownsampleFast;
712 int WebRtcSpl_DownsampleFastC(const int16_t* data_in, 714 int WebRtcSpl_DownsampleFastC(const int16_t* data_in,
713 int data_in_length, 715 size_t data_in_length,
714 int16_t* data_out, 716 int16_t* data_out,
715 int data_out_length, 717 size_t data_out_length,
716 const int16_t* __restrict coefficients, 718 const int16_t* __restrict coefficients,
717 int coefficients_length, 719 size_t coefficients_length,
718 int factor, 720 int factor,
719 int delay); 721 size_t delay);
720 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON) 722 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
721 int WebRtcSpl_DownsampleFastNeon(const int16_t* data_in, 723 int WebRtcSpl_DownsampleFastNeon(const int16_t* data_in,
722 int data_in_length, 724 size_t data_in_length,
723 int16_t* data_out, 725 int16_t* data_out,
724 int data_out_length, 726 size_t data_out_length,
725 const int16_t* __restrict coefficients, 727 const int16_t* __restrict coefficients,
726 int coefficients_length, 728 size_t coefficients_length,
727 int factor, 729 int factor,
728 int delay); 730 size_t delay);
729 #endif 731 #endif
730 #if defined(MIPS32_LE) 732 #if defined(MIPS32_LE)
731 int WebRtcSpl_DownsampleFast_mips(const int16_t* data_in, 733 int WebRtcSpl_DownsampleFast_mips(const int16_t* data_in,
732 int data_in_length, 734 size_t data_in_length,
733 int16_t* data_out, 735 int16_t* data_out,
734 int data_out_length, 736 size_t data_out_length,
735 const int16_t* __restrict coefficients, 737 const int16_t* __restrict coefficients,
736 int coefficients_length, 738 size_t coefficients_length,
737 int factor, 739 int factor,
738 int delay); 740 size_t delay);
739 #endif 741 #endif
740 742
741 // End: Filter operations. 743 // End: Filter operations.
742 744
743 // FFT operations 745 // FFT operations
744 746
745 int WebRtcSpl_ComplexFFT(int16_t vector[], int stages, int mode); 747 int WebRtcSpl_ComplexFFT(int16_t vector[], int stages, int mode);
746 int WebRtcSpl_ComplexIFFT(int16_t vector[], int stages, int mode); 748 int WebRtcSpl_ComplexIFFT(int16_t vector[], int stages, int mode);
747 749
748 // Treat a 16-bit complex data buffer |complex_data| as an array of 32-bit 750 // Treat a 16-bit complex data buffer |complex_data| as an array of 32-bit
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 * resample_fractional.c 839 * resample_fractional.c
838 * Functions for internal use in the other resample functions 840 * Functions for internal use in the other resample functions
839 * 841 *
840 * Includes the following resampling combinations 842 * Includes the following resampling combinations
841 * 48 kHz -> 32 kHz 843 * 48 kHz -> 32 kHz
842 * 32 kHz -> 24 kHz 844 * 32 kHz -> 24 kHz
843 * 44 kHz -> 32 kHz 845 * 44 kHz -> 32 kHz
844 * 846 *
845 ******************************************************************/ 847 ******************************************************************/
846 848
847 void WebRtcSpl_Resample48khzTo32khz(const int32_t* In, int32_t* Out, int32_t K); 849 void WebRtcSpl_Resample48khzTo32khz(const int32_t* In, int32_t* Out, size_t K);
848 850
849 void WebRtcSpl_Resample32khzTo24khz(const int32_t* In, int32_t* Out, int32_t K); 851 void WebRtcSpl_Resample32khzTo24khz(const int32_t* In, int32_t* Out, size_t K);
850 852
851 void WebRtcSpl_Resample44khzTo32khz(const int32_t* In, int32_t* Out, int32_t K); 853 void WebRtcSpl_Resample44khzTo32khz(const int32_t* In, int32_t* Out, size_t K);
852 854
853 /******************************************************************* 855 /*******************************************************************
854 * resample_48khz.c 856 * resample_48khz.c
855 * 857 *
856 * Includes the following resampling combinations 858 * Includes the following resampling combinations
857 * 48 kHz -> 16 kHz 859 * 48 kHz -> 16 kHz
858 * 16 kHz -> 48 kHz 860 * 16 kHz -> 48 kHz
859 * 48 kHz -> 8 kHz 861 * 48 kHz -> 8 kHz
860 * 8 kHz -> 48 kHz 862 * 8 kHz -> 48 kHz
861 * 863 *
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 913
912 void WebRtcSpl_ResetResample8khzTo48khz(WebRtcSpl_State8khzTo48khz* state); 914 void WebRtcSpl_ResetResample8khzTo48khz(WebRtcSpl_State8khzTo48khz* state);
913 915
914 /******************************************************************* 916 /*******************************************************************
915 * resample_by_2.c 917 * resample_by_2.c
916 * 918 *
917 * Includes down and up sampling by a factor of two. 919 * Includes down and up sampling by a factor of two.
918 * 920 *
919 ******************************************************************/ 921 ******************************************************************/
920 922
921 void WebRtcSpl_DownsampleBy2(const int16_t* in, int len, 923 void WebRtcSpl_DownsampleBy2(const int16_t* in, size_t len,
922 int16_t* out, int32_t* filtState); 924 int16_t* out, int32_t* filtState);
923 925
924 void WebRtcSpl_UpsampleBy2(const int16_t* in, int len, 926 void WebRtcSpl_UpsampleBy2(const int16_t* in, size_t len,
925 int16_t* out, int32_t* filtState); 927 int16_t* out, int32_t* filtState);
926 928
927 /************************************************************ 929 /************************************************************
928 * END OF RESAMPLING FUNCTIONS 930 * END OF RESAMPLING FUNCTIONS
929 ************************************************************/ 931 ************************************************************/
930 void WebRtcSpl_AnalysisQMF(const int16_t* in_data, 932 void WebRtcSpl_AnalysisQMF(const int16_t* in_data,
931 int in_data_length, 933 size_t in_data_length,
932 int16_t* low_band, 934 int16_t* low_band,
933 int16_t* high_band, 935 int16_t* high_band,
934 int32_t* filter_state1, 936 int32_t* filter_state1,
935 int32_t* filter_state2); 937 int32_t* filter_state2);
936 void WebRtcSpl_SynthesisQMF(const int16_t* low_band, 938 void WebRtcSpl_SynthesisQMF(const int16_t* low_band,
937 const int16_t* high_band, 939 const int16_t* high_band,
938 int band_length, 940 size_t band_length,
939 int16_t* out_data, 941 int16_t* out_data,
940 int32_t* filter_state1, 942 int32_t* filter_state1,
941 int32_t* filter_state2); 943 int32_t* filter_state2);
942 944
943 #ifdef __cplusplus 945 #ifdef __cplusplus
944 } 946 }
945 #endif // __cplusplus 947 #endif // __cplusplus
946 #endif // WEBRTC_SPL_SIGNAL_PROCESSING_LIBRARY_H_ 948 #endif // WEBRTC_SPL_SIGNAL_PROCESSING_LIBRARY_H_
947 949
948 // 950 //
(...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after
1655 // This function multiply a 16-bit word by a 16-bit word, and accumulate this 1657 // This function multiply a 16-bit word by a 16-bit word, and accumulate this
1656 // value to a 32-bit integer. 1658 // value to a 32-bit integer.
1657 // 1659 //
1658 // Input: 1660 // Input:
1659 // - a : The value of the first 16-bit word. 1661 // - a : The value of the first 16-bit word.
1660 // - b : The value of the second 16-bit word. 1662 // - b : The value of the second 16-bit word.
1661 // - c : The value of an 32-bit integer. 1663 // - c : The value of an 32-bit integer.
1662 // 1664 //
1663 // Return Value: The value of a * b + c. 1665 // Return Value: The value of a * b + c.
1664 // 1666 //
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698