1 /** 2 * File: omxSP.h 3 * Brief: OpenMAX DL v1.0.2 - Signal Processing library 4 * 5 * Copyright 2005-2008 The Khronos Group Inc. All Rights Reserved. 6 * 7 * These materials are protected by copyright laws and contain material 8 * proprietary to the Khronos Group, Inc. You may use these materials 9 * for implementing Khronos specifications, without altering or removing 10 * any trademark, copyright or other notice from the specification. 11 * 12 * Khronos Group makes no, and expressly disclaims any, representations 13 * or warranties, express or implied, regarding these materials, including, 14 * without limitation, any implied warranties of merchantability or fitness 15 * for a particular purpose or non-infringement of any intellectual property. 16 * Khronos Group makes no, and expressly disclaims any, warranties, express 17 * or implied, regarding the correctness, accuracy, completeness, timeliness, 18 * and reliability of these materials. 19 * 20 * Under no circumstances will the Khronos Group, or any of its Promoters, 21 * Contributors or Members or their respective partners, officers, directors, 22 * employees, agents or representatives be liable for any damages, whether 23 * direct, indirect, special or consequential damages for lost revenues, 24 * lost profits, or otherwise, arising from or in connection with these 25 * materials. 26 * 27 * Khronos and OpenMAX are trademarks of the Khronos Group Inc. 28 * 29 */ 30 31 /* *****************************************************************************************/ 32 33 #ifndef _OMXSP_H_ 34 #define _OMXSP_H_ 35 36 #include "dl/api/omxtypes.h" 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 43 /* 2.1 Vendor-Specific FFT Data Structures */ 44 typedef void OMXFFTSpec_C_SC16; 45 typedef void OMXFFTSpec_C_SC32; 46 typedef void OMXFFTSpec_R_S16S32; 47 typedef void OMXFFTSpec_R_S16; 48 typedef void OMXFFTSpec_R_S32; 49 typedef void OMXFFTSpec_R_F32; 50 typedef void OMXFFTSpec_C_FC32; 51 52 /** 53 * Function: omxSP_Copy_S16 (2.2.1.1.1) 54 * 55 * Description: 56 * Copies the len elements of the vector pointed to by pSrcinto the len 57 * elements of the vector pointed to by pDst. That is: 58 * pDst[i] = pSrc[i], for (i=0, 1, ..., len-1) 59 * 60 * Input Arguments: 61 * 62 * pSrc - pointer to the source vector 63 * len - number of elements contained in the source and destination vectors 64 * 65 * Output Arguments: 66 * 67 * pDst - pointer to the destination vector 68 * 69 * Return Value: 70 * 71 * OMX_Sts_NoErr - no error 72 * OMX_Sts_BadArgErr - bad arguments detected; returned if one or more of 73 * the following is true: 74 * - pSrc or pDst is NULL 75 * - len < 0 76 * 77 */ 78 OMXResult omxSP_Copy_S16 ( 79 const OMX_S16 *pSrc, 80 OMX_S16 *pDst, 81 OMX_INT len 82 ); 83 84 85 86 /** 87 * Function: omxSP_DotProd_S16 (2.2.2.1.1) 88 * 89 * Description: 90 * Calculates the dot product of the two input vectors. This function does 91 * not perform scaling. The internal accumulator width must be at least 32 92 * bits. If any of the partially accumulated values exceeds the range of a 93 * signed 32-bit integer then the result is undefined. 94 * 95 * Input Arguments: 96 * 97 * pSrc1 - pointer to the first input vector; must be aligned on an 8-byte 98 * boundary. 99 * pSrc2 - pointer to the second input vector; must be aligned on an 8-byte 100 * boundary. 101 * len - length of the vectors in pSrc1 and pSrc2 102 * 103 * Output Arguments: 104 * 105 * Return Value: 106 * 107 * The dot product result Note: this function returns the actual result 108 * rather than the standard OMXError. 109 * 110 */ 111 OMX_S32 omxSP_DotProd_S16 ( 112 const OMX_S16 *pSrc1, 113 const OMX_S16 *pSrc2, 114 OMX_INT len 115 ); 116 117 118 119 /** 120 * Function: omxSP_DotProd_S16_Sfs (2.2.2.1.2) 121 * 122 * Description: 123 * Calculates the dot product of the two input signals with output scaling 124 * and saturation, i.e., the result is multiplied by two to the power of the 125 * negative (-)scalefactor (scaled) prior to return. The result is saturated 126 * with rounding if the scaling operation produces a value outside the range 127 * of a signed 32-bit integer. Rounding behavior is defined in section 1.6.7 128 * Integer Scaling and Rounding Conventions. The internal accumulator width 129 * must be at least 32 bits. The result is undefined if any of the partially 130 * accumulated values exceeds the range of a signed 32-bit integer. 131 * 132 * Input Arguments: 133 * 134 * pSrc1 - pointer to the first input vector; must be aligned on an 8-byte 135 * boundary. 136 * pSrc2 - pointer to the second input vector; must be aligned on an 8-byte 137 * boundary. 138 * len - length of the vectors in pSrc1 and pSrc2 139 * scaleFactor - integer scalefactor 140 * 141 * Output Arguments: 142 * 143 * Return Value: 144 * 145 * The dot product result Note: This function returns the actual result 146 * rather than the standard OMXError. 147 * 148 */ 149 OMX_S32 omxSP_DotProd_S16_Sfs ( 150 const OMX_S16 *pSrc1, 151 const OMX_S16 *pSrc2, 152 OMX_INT len, 153 OMX_INT scaleFactor 154 ); 155 156 157 158 /** 159 * Function: omxSP_BlockExp_S16 (2.2.2.2.2) 160 * 161 * Description: 162 * Block exponent calculation for 16-bit and 32-bit signals (count leading 163 * sign bits). These functions compute the number of extra sign bits of all 164 * values in the 16-bit and 32-bit input vector pSrc and return the minimum 165 * sign bit count. This is also the maximum shift value that could be used in 166 * scaling the block of data. The functions BlockExp_S16 and 167 * BlockExp_S32 return the values 15 and 31, respectively, for input vectors in 168 * which all entries are equal to zero. 169 * 170 * Note: These functions differ from other DL functions by not returning the 171 * standard OMXError but the actual result. 172 * 173 * Input Arguments: 174 * 175 * pSrc - pointer to the input vector 176 * len - number of elements contained in the input and output 177 * vectors (0 < len < 65536) 178 * 179 * Output Arguments: 180 * 181 * none 182 * 183 * Return Value: 184 * 185 * Maximum exponent that may be used in scaling 186 * 187 */ 188 OMX_INT omxSP_BlockExp_S16 ( 189 const OMX_S16 *pSrc, 190 OMX_INT len 191 ); 192 193 194 195 /** 196 * Function: omxSP_BlockExp_S32 (2.2.2.2.2) 197 * 198 * Description: 199 * Block exponent calculation for 16-bit and 32-bit signals (count leading 200 * sign bits). These functions compute the number of extra sign bits of all 201 * values in the 16-bit and 32-bit input vector pSrc and return the minimum 202 * sign bit count. This is also the maximum shift value that could be used in 203 * scaling the block of data. The functions BlockExp_S16 and 204 * BlockExp_S32 return the values 15 and 31, respectively, for input vectors in 205 * which all entries are equal to zero. 206 * 207 * Note: These functions differ from other DL functions by not returning the 208 * standard OMXError but the actual result. 209 * 210 * Input Arguments: 211 * 212 * pSrc - pointer to the input vector 213 * len - number of elements contained in the input and output 214 * vectors (0 < len < 65536) 215 * 216 * Output Arguments: 217 * 218 * none 219 * 220 * Return Value: 221 * 222 * Maximum exponent that may be used in scaling 223 * 224 */ 225 OMX_INT omxSP_BlockExp_S32 ( 226 const OMX_S32 *pSrc, 227 OMX_INT len 228 ); 229 230 231 232 /** 233 * Function: omxSP_FIR_Direct_S16 (2.2.3.1.1) 234 * 235 * Description: 236 * Block FIR filtering for 16-bit data type. This function applies the 237 * FIR filter defined by the coefficient vector pTapsQ15 to a vector of 238 * input data. The result is saturated with rounding if the operation 239 * produces a value outside the range of a signed 16-bit integer. 240 * Rounding behavior is defined in: 241 * section 1.6.7 "Integer Scaling and Rounding Conventions". 242 * The internal accumulator width must be at least 32 bits. The result 243 * is undefined if any of the partially accumulated values exceeds the 244 * range of a signed 32-bit integer. 245 * 246 * 247 * Input Arguments: 248 * 249 * pSrc - pointer to the vector of input samples to which the 250 * filter is applied 251 * sampLen - the number of samples contained in the input and output 252 * vectors 253 * pTapsQ15 - pointer to the vector that contains the filter coefficients, 254 * represented in Q0.15 format (defined in section 1.6.5). Given 255 * that: 256 * -32768 = pTapsQ15(k) < 32768, 257 * 0 = k <tapsLen, 258 * the range on the actual filter coefficients is -1 = bK <1, and 259 * therefore coefficient normalization may be required during the 260 * filter design process. 261 * tapsLen - the number of taps, or, equivalently, the filter order + 1 262 * pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 263 * (state). The user is responsible for allocation, initialization, 264 * and de-allocation. The filter memory elements are initialized to 265 * zero in most applications. 266 * pDelayLineIndex - pointer to the filter memory index that is maintained 267 * internally by the function. The user should initialize the value 268 * of this index to zero. 269 * 270 * Output Arguments: 271 * 272 * pDst - pointer to the vector of filtered output samples 273 * 274 * Return Value: 275 * 276 * OMX_Sts_NoErr - no error 277 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 278 * following is true: 279 * - One or more of the following pointers is NULL: 280 * - pSrc, 281 * - pDst, 282 * - pSrcDst, 283 * - pTapsQ15, 284 * - pDelayLine, or 285 * - pDelayLineIndex 286 * - samplen < 0 287 * - tapslen < 1 288 * - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen). 289 * 290 */ 291 OMXResult omxSP_FIR_Direct_S16 ( 292 const OMX_S16 *pSrc, 293 OMX_S16 *pDst, 294 OMX_INT sampLen, 295 const OMX_S16 *pTapsQ15, 296 OMX_INT tapsLen, 297 OMX_S16 *pDelayLine, 298 OMX_INT *pDelayLineIndex 299 ); 300 301 302 303 /** 304 * Function: omxSP_FIR_Direct_S16_I (2.2.3.1.1) 305 * 306 * Description: 307 * Block FIR filtering for 16-bit data type. This function applies the 308 * FIR filter defined by the coefficient vector pTapsQ15 to a vector of 309 * input data. The result is saturated with rounding if the operation 310 * produces a value outside the range of a signed 16-bit integer. 311 * Rounding behavior is defined in: 312 * section 1.6.7 "Integer Scaling and Rounding Conventions". 313 * The internal accumulator width must be at least 32 bits. The result 314 * is undefined if any of the partially accumulated values exceeds the 315 * range of a signed 32-bit integer. 316 * 317 * Input Arguments: 318 * 319 * pSrcDst - pointer to the vector of input samples to which the 320 * filter is applied 321 * sampLen - the number of samples contained in the input and output 322 * vectors 323 * pTapsQ15 - pointer to the vector that contains the filter coefficients, 324 * represented in Q0.15 format (defined in section 1.6.5). Given 325 * that: 326 * -32768 = pTapsQ15(k) < 32768, 327 * 0 = k <tapsLen, 328 * the range on the actual filter coefficients is -1 = bK <1, and 329 * therefore coefficient normalization may be required during the 330 * filter design process. 331 * tapsLen - the number of taps, or, equivalently, the filter order + 1 332 * pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 333 * (state). The user is responsible for allocation, initialization, 334 * and de-allocation. The filter memory elements are initialized to 335 * zero in most applications. 336 * pDelayLineIndex - pointer to the filter memory index that is maintained 337 * internally by the function. The user should initialize the value 338 * of this index to zero. 339 * 340 * Output Arguments: 341 * 342 * pSrcDst - pointer to the vector of filtered output samples 343 * 344 * Return Value: 345 * 346 * OMX_Sts_NoErr - no error 347 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 348 * following is true: 349 * - One or more of the following pointers is NULL: 350 * - pSrc, 351 * - pDst, 352 * - pSrcDst, 353 * - pTapsQ15, 354 * - pDelayLine, or 355 * - pDelayLineIndex 356 * - samplen < 0 357 * - tapslen < 1 358 * - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen). 359 * 360 */ 361 OMXResult omxSP_FIR_Direct_S16_I ( 362 OMX_S16 *pSrcDst, 363 OMX_INT sampLen, 364 const OMX_S16 *pTapsQ15, 365 OMX_INT tapsLen, 366 OMX_S16 *pDelayLine, 367 OMX_INT *pDelayLineIndex 368 ); 369 370 371 372 /** 373 * Function: omxSP_FIR_Direct_S16_Sfs (2.2.3.1.1) 374 * 375 * Description: 376 * Block FIR filtering for 16-bit data type. This function applies 377 * the FIR filter defined by the coefficient vector pTapsQ15 to a 378 * vector of input data. The output is multiplied by 2 to the negative 379 * power of scalefactor (i.e., 2^-scalefactor) before returning to the caller. 380 * Scaling and rounding conventions are defined in section 1.6.7. 381 * The internal accumulator width must be at least 32 bits. 382 * The result is undefined if any of the partially accumulated 383 * values exceeds the range of a signed 32-bit integer. 384 * 385 * Input Arguments: 386 * 387 * pSrc - pointer to the vector of input samples to which the 388 * filter is applied 389 * sampLen - the number of samples contained in the input and output 390 * vectors 391 * pTapsQ15 - pointer to the vector that contains the filter coefficients, 392 * represented in Q0.15 format (defined in section 1.6.5). Given 393 * that: 394 * -32768 = pTapsQ15(k) < 32768, 395 * 0 = k <tapsLen, 396 * the range on the actual filter coefficients is -1 = bK <1, and 397 * therefore coefficient normalization may be required during the 398 * filter design process. 399 * tapsLen - the number of taps, or, equivalently, the filter order + 1 400 * pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 401 * (state). The user is responsible for allocation, initialization, 402 * and de-allocation. The filter memory elements are initialized to 403 * zero in most applications. 404 * pDelayLineIndex - pointer to the filter memory index that is maintained 405 * internally by the function. The user should initialize the value 406 * of this index to zero. 407 * scaleFactor - saturation fixed scalefactor 408 * 409 * Output Arguments: 410 * 411 * pDst - pointer to the vector of filtered output samples 412 * 413 * Return Value: 414 * 415 * OMX_Sts_NoErr - no error 416 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 417 * following is true: 418 * - One or more of the following pointers is NULL: 419 * - pSrc, 420 * - pDst, 421 * - pSrcDst, 422 * - pTapsQ15, 423 * - pDelayLine, or 424 * - pDelayLineIndex 425 * - samplen < 0 426 * - tapslen < 1 427 * - scaleFactor < 0 428 * - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen). 429 * 430 */ 431 OMXResult omxSP_FIR_Direct_S16_Sfs ( 432 const OMX_S16 *pSrc, 433 OMX_S16 *pDst, 434 OMX_INT sampLen, 435 const OMX_S16 *pTapsQ15, 436 OMX_INT tapsLen, 437 OMX_S16 *pDelayLine, 438 OMX_INT *pDelayLineIndex, 439 OMX_INT scaleFactor 440 ); 441 442 443 444 /** 445 * Function: omxSP_FIR_Direct_S16_ISfs (2.2.3.1.1) 446 * 447 * Description: 448 * Block FIR filtering for 16-bit data type. This function applies 449 * the FIR filter defined by the coefficient vector pTapsQ15 to a 450 * vector of input data. The output is multiplied by 2 to the negative 451 * power of scalefactor (i.e., 2^-scalefactor) before returning to the caller. 452 * Scaling and rounding conventions are defined in section 1.6.7. 453 * The internal accumulator width must be at least 32 bits. 454 * The result is undefined if any of the partially accumulated 455 * values exceeds the range of a signed 32-bit integer. 456 * 457 * Input Arguments: 458 * 459 * pSrcDst - pointer to the vector of input samples to which the 460 * filter is applied 461 * sampLen - the number of samples contained in the input and output 462 * vectors 463 * pTapsQ15 - pointer to the vector that contains the filter coefficients, 464 * represented in Q0.15 format (defined in section 1.6.5). Given 465 * that: 466 * -32768 = pTapsQ15(k) < 32768, 467 * 0 = k <tapsLen, 468 * the range on the actual filter coefficients is -1 = bK <1, and 469 * therefore coefficient normalization may be required during the 470 * filter design process. 471 * tapsLen - the number of taps, or, equivalently, the filter order + 1 472 * pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 473 * (state). The user is responsible for allocation, initialization, 474 * and de-allocation. The filter memory elements are initialized to 475 * zero in most applications. 476 * pDelayLineIndex - pointer to the filter memory index that is maintained 477 * internally by the function. The user should initialize the value 478 * of this index to zero. 479 * scaleFactor - saturation fixed scalefactor 480 * 481 * Output Arguments: 482 * 483 * pSrcDst - pointer to the vector of filtered output samples 484 * 485 * Return Value: 486 * 487 * OMX_Sts_NoErr - no error 488 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 489 * following is true: 490 * - One or more of the following pointers is NULL: 491 * - pSrc, 492 * - pDst, 493 * - pSrcDst, 494 * - pTapsQ15, 495 * - pDelayLine, or 496 * - pDelayLineIndex 497 * - samplen < 0 498 * - tapslen < 1 499 * - scaleFactor < 0 500 * - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen). 501 * 502 */ 503 OMXResult omxSP_FIR_Direct_S16_ISfs ( 504 OMX_S16 *pSrcDst, 505 OMX_INT sampLen, 506 const OMX_S16 *pTapsQ15, 507 OMX_INT tapsLen, 508 OMX_S16 *pDelayLine, 509 OMX_INT *pDelayLineIndex, 510 OMX_INT scaleFactor 511 ); 512 513 514 515 /** 516 * Function: omxSP_FIROne_Direct_S16 (2.2.3.1.2) 517 * 518 * Description: 519 * Single-sample FIR filtering for 16-bit data type. These functions apply 520 * the FIR filter defined by the coefficient vector pTapsQ15 to a single 521 * sample of input data. The result is saturated with rounding if the 522 * operation produces a value outside the range of a signed 16-bit integer. 523 * Rounding behavior is defined in: 524 * section 1.6.7 "Integer Scaling and Rounding Conventions". 525 * The internal accumulator width must be at least 32 bits. The result is 526 * undefined if any of the partially accumulated values exceeds the range of a 527 * signed 32-bit integer. 528 * 529 * Input Arguments: 530 * 531 * val - the single input sample to which the filter is 532 * applied. 533 * pTapsQ15 - pointer to the vector that contains the filter coefficients, 534 * represented in Q0.15 format (as defined in section 1.6.5). Given 535 * that: 536 * -32768 = pTapsQ15(k) < 32768, 537 * 0 = k < tapsLen, 538 * the range on the actual filter coefficients is -1 = bK <1, and 539 * therefore coefficient normalization may be required during the 540 * filter design process. 541 * tapsLen - the number of taps, or, equivalently, the filter order + 1 542 * pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 543 * (state). The user is responsible for allocation, initialization, 544 * and de-allocation. The filter memory elements are initialized to 545 * zero in most applications. 546 * pDelayLineIndex - pointer to the filter memory index that is maintained 547 * internally by the function. The user should initialize the value 548 * of this index to zero. 549 * 550 * Output Arguments: 551 * 552 * pResult - pointer to the filtered output sample 553 * 554 * Return Value: 555 * 556 * OMX_Sts_NoErr - no error 557 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 558 * following is true: 559 * - One or more of the following pointers is NULL: 560 * - pResult, 561 * - pTapsQ15, 562 * - pDelayLine, or 563 * - pDelayLineIndex 564 * - tapslen < 1 565 * - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen) 566 * 567 */ 568 OMXResult omxSP_FIROne_Direct_S16 ( 569 OMX_S16 val, 570 OMX_S16 *pResult, 571 const OMX_S16 *pTapsQ15, 572 OMX_INT tapsLen, 573 OMX_S16 *pDelayLine, 574 OMX_INT *pDelayLineIndex 575 ); 576 577 578 579 /** 580 * Function: omxSP_FIROne_Direct_S16_I (2.2.3.1.2) 581 * 582 * Description: 583 * Single-sample FIR filtering for 16-bit data type. These functions apply 584 * the FIR filter defined by the coefficient vector pTapsQ15 to a single 585 * sample of input data. The result is saturated with rounding if the 586 * operation produces a value outside the range of a signed 16-bit integer. 587 * Rounding behavior is defined in: 588 * section 1.6.7 "Integer Scaling and Rounding Conventions". 589 * The internal accumulator width must be at least 32 bits. The result is 590 * undefined if any of the partially accumulated values exceeds the range of a 591 * signed 32-bit integer. 592 * 593 * Input Arguments: 594 * 595 * pValResult - pointer to the single input sample to which the filter is 596 * applied. 597 * pTapsQ15 - pointer to the vector that contains the filter coefficients, 598 * represented in Q0.15 format (as defined in section 1.6.5). Given 599 * that: 600 * -32768 = pTapsQ15(k) < 32768, 601 * 0 = k < tapsLen, 602 * the range on the actual filter coefficients is -1 = bK <1, and 603 * therefore coefficient normalization may be required during the 604 * filter design process. 605 * tapsLen - the number of taps, or, equivalently, the filter order + 1 606 * pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 607 * (state). The user is responsible for allocation, initialization, 608 * and de-allocation. The filter memory elements are initialized to 609 * zero in most applications. 610 * pDelayLineIndex - pointer to the filter memory index that is maintained 611 * internally by the function. The user should initialize the value 612 * of this index to zero. 613 * 614 * Output Arguments: 615 * 616 * pValResult - pointer to the filtered output sample 617 * 618 * Return Value: 619 * 620 * OMX_Sts_NoErr - no error 621 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 622 * following is true: 623 * - One or more of the following pointers is NULL: 624 * - pValResult, 625 * - pTapsQ15, 626 * - pDelayLine, or 627 * - pDelayLineIndex 628 * - tapslen < 1 629 * - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen) 630 * 631 */ 632 OMXResult omxSP_FIROne_Direct_S16_I ( 633 OMX_S16 *pValResult, 634 const OMX_S16 *pTapsQ15, 635 OMX_INT tapsLen, 636 OMX_S16 *pDelayLine, 637 OMX_INT *pDelayLineIndex 638 ); 639 640 641 642 /** 643 * Function: omxSP_FIROne_Direct_S16_Sfs (2.2.3.1.2) 644 * 645 * Description: 646 * Single-sample FIR filtering for 16-bit data type. These functions apply 647 * the FIR filter defined by the coefficient vector pTapsQ15 to a single 648 * sample of input data. The output is multiplied by 2 to the negative power 649 * of scalefactor (i.e., 2^-scalefactor) before returning to the user. 650 * Scaling and rounding conventions are defined in section 1.6.7. 651 * The internal accumulator width must be at least 32 bits. 652 * The result is undefined if any of the partially accumulated values exceeds 653 * the range of a signed 32-bit integer. 654 * 655 * Input Arguments: 656 * 657 * val - the single input sample to which the filter is 658 * applied. 659 * pTapsQ15 - pointer to the vector that contains the filter coefficients, 660 * represented in Q0.15 format (as defined in section 1.6.5). Given 661 * that: 662 * -32768 = pTapsQ15(k) < 32768, 663 * 0 = k < tapsLen, 664 * the range on the actual filter coefficients is -1 = bK <1, and 665 * therefore coefficient normalization may be required during the 666 * filter design process. 667 * tapsLen - the number of taps, or, equivalently, the filter order + 1 668 * pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 669 * (state). The user is responsible for allocation, initialization, 670 * and de-allocation. The filter memory elements are initialized to 671 * zero in most applications. 672 * pDelayLineIndex - pointer to the filter memory index that is maintained 673 * internally by the function. The user should initialize the value 674 * of this index to zero. 675 * scaleFactor - saturation fixed scaleFactor 676 * 677 * Output Arguments: 678 * 679 * pResult - pointer to the filtered output sample 680 * 681 * Return Value: 682 * 683 * OMX_Sts_NoErr - no error 684 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 685 * following is true: 686 * - One or more of the following pointers is NULL: 687 * - pResult, 688 * - pTapsQ15, 689 * - pDelayLine, or 690 * - pDelayLineIndex 691 * - tapslen < 1 692 * - scaleFactor < 0 693 * - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen) 694 * 695 */ 696 OMXResult omxSP_FIROne_Direct_S16_Sfs ( 697 OMX_S16 val, 698 OMX_S16 *pResult, 699 const OMX_S16 *pTapsQ15, 700 OMX_INT tapsLen, 701 OMX_S16 *pDelayLine, 702 OMX_INT *pDelayLineIndex, 703 OMX_INT scaleFactor 704 ); 705 706 707 708 /** 709 * Function: omxSP_FIROne_Direct_S16_ISfs (2.2.3.1.2) 710 * 711 * Description: 712 * Single-sample FIR filtering for 16-bit data type. These functions apply 713 * the FIR filter defined by the coefficient vector pTapsQ15 to a single 714 * sample of input data. The output is multiplied by 2 to the negative power 715 * of scalefactor (i.e., 2^-scalefactor) before returning to the user. 716 * Scaling and rounding conventions are defined in section 1.6.7. 717 * The internal accumulator width must be at least 32 bits. 718 * The result is undefined if any of the partially accumulated values exceeds 719 * the range of a signed 32-bit integer. 720 * 721 * Input Arguments: 722 * 723 * pValResult - the pointer to a single input sample to which the filter is 724 * applied. 725 * pTapsQ15 - pointer to the vector that contains the filter coefficients, 726 * represented in Q0.15 format (as defined in section 1.6.5). Given 727 * that: 728 * -32768 = pTapsQ15(k) < 32768, 729 * 0 = k < tapsLen, 730 * the range on the actual filter coefficients is -1 = bK <1, and 731 * therefore coefficient normalization may be required during the 732 * filter design process. 733 * tapsLen - the number of taps, or, equivalently, the filter order + 1 734 * pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 735 * (state). The user is responsible for allocation, initialization, 736 * and de-allocation. The filter memory elements are initialized to 737 * zero in most applications. 738 * pDelayLineIndex - pointer to the filter memory index that is maintained 739 * internally by the function. The user should initialize the value 740 * of this index to zero. 741 * scaleFactor - saturation fixed scaleFactor 742 * 743 * Output Arguments: 744 * 745 * pValResult - pointer to the filtered output sample 746 * 747 * Return Value: 748 * 749 * OMX_Sts_NoErr - no error 750 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 751 * following is true: 752 * - One or more of the following pointers is NULL: 753 * - pValResult, 754 * - pTapsQ15, 755 * - pDelayLine, or 756 * - pDelayLineIndex 757 * - tapslen < 1 758 * - scaleFactor < 0 759 * - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen) 760 * 761 */ 762 OMXResult omxSP_FIROne_Direct_S16_ISfs ( 763 OMX_S16 *pValResult, 764 const OMX_S16 *pTapsQ15, 765 OMX_INT tapsLen, 766 OMX_S16 *pDelayLine, 767 OMX_INT *pDelayLineIndex, 768 OMX_INT scaleFactor 769 ); 770 771 772 773 /** 774 * Function: omxSP_IIR_Direct_S16 (2.2.3.2.1) 775 * 776 * Description: 777 * Block IIR filtering for 16-bit data. This function applies the direct form 778 * II IIR filter defined by the coefficient vector pTaps to a vector of input 779 * data. The internal accumulator width must be at least 32 bits, and the 780 * result is saturated if the operation produces a value outside the range of 781 * a signed 16-bit integer, i.e., the output will saturate to 0x8000 (-32768) 782 * for a negative overflow or 0x7fff (32767) for a positive overflow. The 783 * result is undefined if any of the partially accumulated values exceeds the 784 * range of a signed 32-bit integer. 785 * 786 * Input Arguments: 787 * 788 * pSrc - pointer to the vector of input samples to which the 789 * filter is applied 790 * len - the number of samples contained in both the input and output 791 * vectors 792 * pTaps - pointer to the 2L+2-element vector that contains the combined 793 * numerator and denominator filter coefficients from the system 794 * transfer function, H(z). Coefficient scaling and coefficient 795 * vector organization should follow the conventions described 796 * above. The value of the coefficient scaleFactor exponent must be 797 * non-negative (sf=0). 798 * order - the maximum of the degrees of the numerator and denominator 799 * coefficient polynomials from the system transfer function, H(z). 800 * In the notation of section 2.2.3.2, the parameter 801 * order=max(K,M)=L gives the maximum delay, in samples, used to 802 * compute each output sample. 803 * pDelayLine - pointer to the L-element filter memory buffer (state). The 804 * user is responsible for allocation, initialization, and 805 * deallocation. The filter memory elements are initialized to zero 806 * in most applications. 807 * 808 * Output Arguments: 809 * 810 * pDst - pointer to the vector of filtered output samples 811 * 812 * Return Value: 813 * 814 * OMX_Sts_NoErr - no error 815 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 816 * following is true: 817 * - one or more of the following pointers is NULL: 818 * - pSrc, 819 * - pDst, 820 * - pTaps, or 821 * - pDelayLine. 822 * - len < 0 823 * - pTaps[order+1] < 0 (negative scaling) 824 * - order < 1 825 * 826 */ 827 OMXResult omxSP_IIR_Direct_S16 ( 828 const OMX_S16 *pSrc, 829 OMX_S16 *pDst, 830 OMX_INT len, 831 const OMX_S16 *pTaps, 832 OMX_INT order, 833 OMX_S32 *pDelayLine 834 ); 835 836 837 838 /** 839 * Function: omxSP_IIR_Direct_S16_I (2.2.3.2.1) 840 * 841 * Description: 842 * Block IIR filtering for 16-bit data. This function applies the direct form 843 * II IIR filter defined by the coefficient vector pTaps to a vector of input 844 * data. The internal accumulator width must be at least 32 bits, and the 845 * result is saturated if the operation produces a value outside the range of 846 * a signed 16-bit integer, i.e., the output will saturate to 0x8000 (-32768) 847 * for a negative overflow or 0x7fff (32767) for a positive overflow. The 848 * result is undefined if any of the partially accumulated values exceeds the 849 * range of a signed 32-bit integer. 850 * 851 * Input Arguments: 852 * 853 * pSrcDst - pointer to the vector of input samples to which the 854 * filter is applied 855 * len - the number of samples contained in both the input and output 856 * vectors 857 * pTaps - pointer to the 2L+2-element vector that contains the combined 858 * numerator and denominator filter coefficients from the system 859 * transfer function, H(z). Coefficient scaling and coefficient 860 * vector organization should follow the conventions described 861 * above. The value of the coefficient scaleFactor exponent must be 862 * non-negative (sf>=0). 863 * order - the maximum of the degrees of the numerator and denominator 864 * coefficient polynomials from the system transfer function, H(z). 865 * In the notation of section 2.2.3.2, the parameter 866 * order=max(K,M)=L gives the maximum delay, in samples, used to 867 * compute each output sample. 868 * pDelayLine - pointer to the L-element filter memory buffer (state). The 869 * user is responsible for allocation, initialization, and 870 * deallocation. The filter memory elements are initialized to zero 871 * in most applications. 872 * 873 * Output Arguments: 874 * 875 * pSrcDst - pointer to the vector of filtered output samples 876 * 877 * Return Value: 878 * 879 * OMX_Sts_NoErr - no error 880 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 881 * following is true: 882 * - one or more of the following pointers is NULL: 883 * - pSrcDst, 884 * - pTaps, or 885 * - pDelayLine. 886 * - len < 0 887 * - pTaps[order+1] < 0 (negative scaling) 888 * - order < 1 889 * 890 */ 891 OMXResult omxSP_IIR_Direct_S16_I ( 892 OMX_S16 *pSrcDst, 893 OMX_INT len, 894 const OMX_S16 *pTaps, 895 OMX_INT order, 896 OMX_S32 *pDelayLine 897 ); 898 899 900 901 /** 902 * Function: omxSP_IIROne_Direct_S16 (2.2.3.2.2) 903 * 904 * Description: 905 * Single sample IIR filtering for 16-bit data. This function applies the 906 * direct form II IIR filter defined by the coefficient vector pTaps to a 907 * single sample of input data. The internal accumulator width must be at 908 * least 32 bits, and the result is saturated if the operation produces a 909 * value outside the range of a signed 16-bit integer, i.e., the output will 910 * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a 911 * positive overflow. The result is undefined if any of the partially 912 * accumulated values exceeds the range of a signed 32-bit integer. 913 * 914 * Input Arguments: 915 * 916 * val - the single input sample to which the filter is 917 * applied. 918 * pTaps - pointer to the 2L+2 -element vector that contains the combined 919 * numerator and denominator filter coefficients from the system 920 * transfer function, H(z). Coefficient scaling and coefficient 921 * vector organization should follow the conventions described 922 * above. The value of the coefficient scaleFactor exponent must be 923 * non-negative (sf>=0). 924 * order - the maximum of the degrees of the numerator and denominator 925 * coefficient polynomials from the system transfer function, H(z). 926 * In the notation of section 2.2.3.2, the parameter 927 * order=max(K,M)=L gives the maximum delay, in samples, used to 928 * compute each output sample. 929 * pDelayLine - pointer to the L-element filter memory buffer (state). The 930 * user is responsible for allocation, initialization, and 931 * deallocation. The filter memory elements are initialized to zero 932 * in most applications. 933 * 934 * Output Arguments: 935 * 936 * pResult - pointer to the filtered output sample 937 * 938 * Return Value: 939 * 940 * OMX_Sts_NoErr - no error 941 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 942 * following is true: 943 * - one or more of the following pointers is NULL: pResult, 944 * pTaps, or pDelayLine. 945 * - order < 1 946 * - pTaps[order+1] < 0 (negative scaling) 947 * 948 */ 949 OMXResult omxSP_IIROne_Direct_S16 ( 950 OMX_S16 val, 951 OMX_S16 *pResult, 952 const OMX_S16 *pTaps, 953 OMX_INT order, 954 OMX_S32 *pDelayLine 955 ); 956 957 958 959 /** 960 * Function: omxSP_IIROne_Direct_S16_I (2.2.3.2.2) 961 * 962 * Description: 963 * Single sample IIR filtering for 16-bit data. This function applies the 964 * direct form II IIR filter defined by the coefficient vector pTaps to a 965 * single sample of input data. The internal accumulator width must be at 966 * least 32 bits, and the result is saturated if the operation produces a 967 * value outside the range of a signed 16-bit integer, i.e., the output will 968 * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a 969 * positive overflow. The result is undefined if any of the partially 970 * accumulated values exceeds the range of a signed 32-bit integer. 971 * 972 * Input Arguments: 973 * 974 * pValResult - pointer to the single input sample to which the filter is 975 * applied. 976 * pTaps - pointer to the 2L+2 -element vector that contains the combined 977 * numerator and denominator filter coefficients from the system 978 * transfer function, H(z). Coefficient scaling and coefficient 979 * vector organization should follow the conventions described 980 * above. The value of the coefficient scaleFactor exponent must be 981 * non-negative (sf>=0). 982 * order - the maximum of the degrees of the numerator and denominator 983 * coefficient polynomials from the system transfer function, H(z). 984 * In the notation of section 2.2.3.2, the parameter 985 * order=max(K,M)=L gives the maximum delay, in samples, used to 986 * compute each output sample. 987 * pDelayLine - pointer to the L-element filter memory buffer (state). The 988 * user is responsible for allocation, initialization, and 989 * deallocation. The filter memory elements are initialized to zero 990 * in most applications. 991 * 992 * Output Arguments: 993 * 994 * pValResult - pointer to the filtered output sample 995 * 996 * Return Value: 997 * 998 * OMX_Sts_NoErr - no error 999 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1000 * following is true: 1001 * - one or more of the following pointers is NULL: 1002 * pValResult, pTaps, or pDelayLine. 1003 * - order < 1 1004 * - pTaps[order+1] < 0 (negative scaling) 1005 * 1006 */ 1007 OMXResult omxSP_IIROne_Direct_S16_I ( 1008 OMX_S16 *pValResult, 1009 const OMX_S16 *pTaps, 1010 OMX_INT order, 1011 OMX_S32 *pDelayLine 1012 ); 1013 1014 1015 1016 /** 1017 * Function: omxSP_IIR_BiQuadDirect_S16 (2.2.3.3.1) 1018 * 1019 * Description: 1020 * Block biquad IIR filtering for 16-bit data type. This function applies the 1021 * direct form II biquad IIR cascade defined by the coefficient vector pTaps 1022 * to a vector of input data. The internal accumulator width must be at least 1023 * 32 bits, and the result is saturated if the operation produces a value 1024 * outside the range of a signed 16-bit integer, i.e., the output will 1025 * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a 1026 * positive overflow. The result is undefined if any of the partially 1027 * accumulated values exceeds the range of a signed 32-bit integer. 1028 * 1029 * Input Arguments: 1030 * 1031 * pSrc - pointer to the vector of input samples to which the 1032 * filter is applied 1033 * len - the number of samples contained in both the input and output 1034 * vectors 1035 * pTaps - pointer to the 6P -element vector that contains the combined 1036 * numerator and denominator filter coefficients from the biquad 1037 * cascade. Coefficient scaling and coefficient vector organization 1038 * should follow the conventions described above. The value of the 1039 * coefficient scaleFactor exponent must be non-negative. (sfp>=0). 1040 * numBiquad - the number of biquads contained in the IIR filter cascade: 1041 * (P) 1042 * pDelayLine - pointer to the 2P -element filter memory buffer (state). 1043 * The user is responsible for allocation, initialization, and 1044 * de-allocation. The filter memory elements are initialized to 1045 * zero in most applications. 1046 * 1047 * Output Arguments: 1048 * 1049 * pDst - pointer to the vector of filtered output samples 1050 * 1051 * Return Value: 1052 * 1053 * OMX_Sts_NoErr - no error 1054 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1055 * following is true: 1056 * - one or more of the following pointers is NULL: pSrc, pDst, 1057 * pTaps, or pDelayLine. 1058 * - len < 0 1059 * - numBiquad < 1 1060 * - pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling) 1061 * 1062 */ 1063 OMXResult omxSP_IIR_BiQuadDirect_S16 ( 1064 const OMX_S16 *pSrc, 1065 OMX_S16 *pDst, 1066 OMX_INT len, 1067 const OMX_S16 *pTaps, 1068 OMX_INT numBiquad, 1069 OMX_S32 *pDelayLine 1070 ); 1071 1072 1073 1074 /** 1075 * Function: omxSP_IIR_BiQuadDirect_S16_I (2.2.3.3.1) 1076 * 1077 * Description: 1078 * Block biquad IIR filtering for 16-bit data type. This function applies the 1079 * direct form II biquad IIR cascade defined by the coefficient vector pTaps 1080 * to a vector of input data. The internal accumulator width must be at least 1081 * 32 bits, and the result is saturated if the operation produces a value 1082 * outside the range of a signed 16-bit integer, i.e., the output will 1083 * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a 1084 * positive overflow. The result is undefined if any of the partially 1085 * accumulated values exceeds the range of a signed 32-bit integer. 1086 * 1087 * Input Arguments: 1088 * 1089 * pSrcDst - pointer to the vector of input samples to which the 1090 * filter is applied 1091 * len - the number of samples contained in both the input and output 1092 * vectors 1093 * pTaps - pointer to the 6P -element vector that contains the combined 1094 * numerator and denominator filter coefficients from the biquad 1095 * cascade. Coefficient scaling and coefficient vector organization 1096 * should follow the conventions described above. The value of the 1097 * coefficient scaleFactor exponent must be non-negative. (sfp>=0). 1098 * numBiquad - the number of biquads contained in the IIR filter cascade: 1099 * (P) 1100 * pDelayLine - pointer to the 2P -element filter memory buffer (state). 1101 * The user is responsible for allocation, initialization, and 1102 * de-allocation. The filter memory elements are initialized to 1103 * zero in most applications. 1104 * 1105 * Output Arguments: 1106 * 1107 * pSrcDst - pointer to the vector of filtered output samples 1108 * 1109 * Return Value: 1110 * 1111 * OMX_Sts_NoErr - no error 1112 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1113 * following is true: 1114 * - one or more of the following pointers is NULL: 1115 * pSrcDst, pTaps, or pDelayLine. 1116 * - len < 0 1117 * - numBiquad < 1 1118 * - pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling) 1119 * 1120 */ 1121 OMXResult omxSP_IIR_BiQuadDirect_S16_I ( 1122 OMX_S16 *pSrcDst, 1123 OMX_INT len, 1124 const OMX_S16 *pTaps, 1125 OMX_INT numBiquad, 1126 OMX_S32 *pDelayLine 1127 ); 1128 1129 1130 1131 /** 1132 * Function: omxSP_IIROne_BiQuadDirect_S16 (2.2.3.3.2) 1133 * 1134 * Description: 1135 * Single-sample biquad IIR filtering for 16-bit data type. This function 1136 * applies the direct form II biquad IIR cascade defined by the coefficient 1137 * vector pTaps to a single sample of input data. The internal accumulator 1138 * width must be at least 32 bits, and the result is saturated if the 1139 * operation produces a value outside the range of a signed 16-bit integer, 1140 * i.e., the output will saturate to 0x8000 (-32768) for a negative overflow 1141 * or 0x7fff (32767) for a positive overflow. The result is undefined if any 1142 * of the partially accumulated values exceeds the range of a signed 32-bit 1143 * integer. 1144 * 1145 * Input Arguments: 1146 * 1147 * val - the single input sample to which the filter is 1148 * applied. 1149 * pTaps - pointer to the 6P-element vector that contains the combined 1150 * numerator and denominator filter coefficients from the biquad 1151 * cascade. Coefficient scaling and coefficient vector organization 1152 * should follow the conventions described above. The value of the 1153 * coefficient scalefactor exponent must be non-negative: (sfp>=0). 1154 * numBiquad - the number of biquads contained in the IIR filter cascade: 1155 * (P) 1156 * pDelayLine - pointer to the 2p-element filter memory buffer (state). The 1157 * user is responsible for allocation, initialization, and 1158 * deallocation. The filter memory elements are initialized to zero 1159 * in most applications. 1160 * 1161 * Output Arguments: 1162 * 1163 * pResult - pointer to the filtered output sample 1164 * 1165 * Return Value: 1166 * 1167 * OMX_Sts_NoErr - no error 1168 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1169 * following is true: 1170 * - one or more of the following pointers is NULL: pResult, 1171 * pValResult, pTaps, or pDelayLine. 1172 * - numBiquad < 1 1173 * - pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling) 1174 * 1175 */ 1176 OMXResult omxSP_IIROne_BiQuadDirect_S16 ( 1177 OMX_S16 val, 1178 OMX_S16 *pResult, 1179 const OMX_S16 *pTaps, 1180 OMX_INT numBiquad, 1181 OMX_S32 *pDelayLine 1182 ); 1183 1184 1185 1186 /** 1187 * Function: omxSP_IIROne_BiQuadDirect_S16_I (2.2.3.3.2) 1188 * 1189 * Description: 1190 * Single-sample biquad IIR filtering for 16-bit data type. This function 1191 * applies the direct form II biquad IIR cascade defined by the coefficient 1192 * vector pTaps to a single sample of input data. The internal accumulator 1193 * width must be at least 32 bits, and the result is saturated if the 1194 * operation produces a value outside the range of a signed 16-bit integer, 1195 * i.e., the output will saturate to 0x8000 (-32768) for a negative overflow 1196 * or 0x7fff (32767) for a positive overflow. The result is undefined if any 1197 * of the partially accumulated values exceeds the range of a signed 32-bit 1198 * integer. 1199 * 1200 * Input Arguments: 1201 * 1202 * pValResult - pointer to the single input sample to which the filter is 1203 * applied. 1204 * pTaps - pointer to the 6P-element vector that contains the combined 1205 * numerator and denominator filter coefficients from the biquad 1206 * cascade. Coefficient scaling and coefficient vector organization 1207 * should follow the conventions described above. The value of the 1208 * coefficient scalefactor exponent must be non-negative: (sfp>=0). 1209 * numBiquad - the number of biquads contained in the IIR filter cascade: 1210 * (P) 1211 * pDelayLine - pointer to the 2p-element filter memory buffer (state). The 1212 * user is responsible for allocation, initialization, and 1213 * deallocation. The filter memory elements are initialized to zero 1214 * in most applications. 1215 * 1216 * Output Arguments: 1217 * 1218 * pValResult - pointer to the filtered output sample 1219 * 1220 * Return Value: 1221 * 1222 * OMX_Sts_NoErr - no error 1223 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1224 * following is true: 1225 * - one or more of the following pointers is NULL: 1226 * pValResult, pTaps, or pDelayLine. 1227 * - numBiquad < 1 1228 * - pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling) 1229 * 1230 */ 1231 OMXResult omxSP_IIROne_BiQuadDirect_S16_I ( 1232 OMX_S16 *pValResult, 1233 const OMX_S16 *pTaps, 1234 OMX_INT numBiquad, 1235 OMX_S32 *pDelayLine 1236 ); 1237 1238 1239 1240 /** 1241 * Function: omxSP_FilterMedian_S32 (2.2.3.4.1) 1242 * 1243 * Description: 1244 * This function computes the median over the region specified by the median 1245 * mask for the every element of the input array. The median outputs are 1246 * stored in the corresponding elements of the output vector. 1247 * 1248 * Input Arguments: 1249 * 1250 * pSrc - pointer to the input vector 1251 * len - number of elements contained in the input and output vectors (0 < 1252 * len < 65536) 1253 * maskSize - median mask size; if an even value is specified, the function 1254 * subtracts 1 and uses the odd value of the filter mask for median 1255 * filtering (0 < maskSize < 256) 1256 * 1257 * Output Arguments: 1258 * 1259 * pDst - pointer to the median-filtered output vector 1260 * 1261 * Return Value: 1262 * 1263 * OMX_Sts_NoErr - no error 1264 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1265 * following is true: 1266 * - one or more of the following pointers is NULL: pSrc, pDst. 1267 * - len < 0 1268 * - maskSize < 1 or maskSize> 255 1269 * OMX_StsSP_EvenMedianMaskSizeErr - even mask size replaced by odd mask 1270 * size 1271 * 1272 */ 1273 OMXResult omxSP_FilterMedian_S32 ( 1274 const OMX_S32 *pSrc, 1275 OMX_S32 *pDst, 1276 OMX_INT len, 1277 OMX_INT maskSize 1278 ); 1279 1280 1281 1282 /** 1283 * Function: omxSP_FilterMedian_S32_I (2.2.3.4.1) 1284 * 1285 * Description: 1286 * This function computes the median over the region specified by the median 1287 * mask for the every element of the input array. The median outputs are 1288 * stored in the corresponding elements of the output vector. 1289 * 1290 * Input Arguments: 1291 * 1292 * pSrcDst - pointer to the input vector 1293 * len - number of elements contained in the input and output vectors (0 < 1294 * len < 65536) 1295 * maskSize - median mask size; if an even value is specified, the function 1296 * subtracts 1 and uses the odd value of the filter mask for median 1297 * filtering (0 < maskSize < 256) 1298 * 1299 * Output Arguments: 1300 * 1301 * pSrcDst - pointer to the median-filtered output vector 1302 * 1303 * Return Value: 1304 * 1305 * OMX_Sts_NoErr - no error 1306 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1307 * following is true: 1308 * - pSrcDst is NULL. 1309 * - len < 0 1310 * - maskSize < 1 or maskSize> 255 1311 * OMX_StsSP_EvenMedianMaskSizeErr - even mask size replaced by odd mask 1312 * size 1313 * 1314 */ 1315 OMXResult omxSP_FilterMedian_S32_I ( 1316 OMX_S32 *pSrcDst, 1317 OMX_INT len, 1318 OMX_INT maskSize 1319 ); 1320 1321 1322 1323 /** 1324 * Function: omxSP_FFTInit_C_SC16 (2.2.4.1.2) 1325 * 1326 * Description: 1327 * These functions initialize the specification structures required for the 1328 * complex FFT and IFFT functions. Desired block length is specified as an 1329 * input. The function <FFTInit_C_SC16> is used to initialize the 1330 * specification structures for functions <FFTFwd_CToC_SC16_Sfs> and 1331 * <FFTInv_CToC_SC16_Sfs>. 1332 * 1333 * Memory for the specification structure *pFFTSpec 1334 * must be allocated prior to calling these functions and should be 4-byte 1335 * aligned for omxSP_FFTInit_C_SC16. 1336 * 1337 * The space required for *pFFTSpec, in bytes, can be 1338 * determined using <FFTGetBufSize_C_SC16>. 1339 * 1340 * Input Arguments: 1341 * 1342 * order - base-2 logarithm of the desired block length; 1343 * valid in the range [0,12] 1344 * 1345 * Output Arguments: 1346 * 1347 * pFFTSpec - pointer to initialized specification structure 1348 * 1349 * Return Value: 1350 * 1351 * OMX_Sts_NoErr -no error 1352 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1353 * following is true: 1354 * - pFFTSpec is either NULL or violates the 4-byte alignment 1355 * restrictions 1356 * - order < 0 or order > 12 1357 * 1358 */ 1359 OMXResult omxSP_FFTInit_C_SC16 ( 1360 OMXFFTSpec_C_SC16 *pFFTSpec, 1361 OMX_INT order 1362 ); 1363 1364 1365 1366 /** 1367 * Function: omxSP_FFTInit_C_SC32 (2.2.4.1.2) 1368 * 1369 * Description: 1370 * These functions initialize the specification structures required for the 1371 * complex FFT and IFFT functions. Desired block length is specified as an 1372 * input. The function <FFTInit_C_SC32> is used to initialize 1373 * the specification structures for the functions <FFTFwd_CToC_SC32_Sfs> and 1374 * <FFTInv_CToC_SC32_Sfs>. 1375 * 1376 * Memory for the specification structure *pFFTSpec must be allocated prior 1377 * to calling these functions and should be 8-byte aligned for 1378 * omxSP_FFTInit_C_SC32. 1379 * 1380 * The space required for *pFFTSpec, in bytes, can be 1381 * determined using <FFTGetBufSize_C_SC32>. 1382 * 1383 * Input Arguments: 1384 * 1385 * order - base-2 logarithm of the desired block length; valid in the range 1386 * [0,12] 1387 * 1388 * Output Arguments: 1389 * 1390 * pFFTSpec - pointer to initialized specification structure 1391 * 1392 * Return Value: 1393 * 1394 * OMX_Sts_NoErr -no error 1395 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1396 * following is true: 1397 * - pFFTSpec is either NULL or violates the 8-byte alignment 1398 * restrictions 1399 * - order < 0 or order > 12 1400 * 1401 */ 1402 OMXResult omxSP_FFTInit_C_SC32 ( 1403 OMXFFTSpec_C_SC32 *pFFTSpec, 1404 OMX_INT order 1405 ); 1406 1407 /** 1408 * Function: omxSP_FFTInit_C_FC32 (2.2.4.1.2) 1409 * 1410 * Description: 1411 * These functions initialize the specification structures required for the 1412 * complex FFT and IFFT functions. Desired block length is specified as an 1413 * input. The function <FFTInit_C_FC32> is used to initialize 1414 * the specification structures for the functions <FFTFwd_CToC_FC32_Sfs> and 1415 * <FFTInv_CToC_FC32_Sfs>. 1416 * 1417 * Memory for the specification structure *pFFTSpec must be allocated prior 1418 * to calling these functions and should be 8-byte aligned for 1419 * omxSP_FFTInit_C_FC32. 1420 * 1421 * The space required for *pFFTSpec, in bytes, can be 1422 * determined using <FFTGetBufSize_C_FC32>. 1423 * 1424 * Input Arguments: 1425 * 1426 * order - base-2 logarithm of the desired block length; valid in the range 1427 * [1,15] 1428 * 1429 * Output Arguments: 1430 * 1431 * pFFTSpec - pointer to initialized specification structure 1432 * 1433 * Return Value: 1434 * 1435 * OMX_Sts_NoErr -no error 1436 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1437 * following is true: 1438 * - pFFTSpec is either NULL or violates the 8-byte alignment 1439 * restrictions 1440 * - order < 1 or order > 15 1441 * 1442 */ 1443 OMXResult omxSP_FFTInit_C_FC32( 1444 OMXFFTSpec_C_FC32* pFFTSpec, 1445 OMX_INT order 1446 ); 1447 1448 1449 1450 /** 1451 * Function: omxSP_FFTInit_R_S16S32 (2.2.4.1.4) 1452 * 1453 * Description: 1454 * These functions initialize specification structures required for the real 1455 * FFT and IFFT functions. The function <FFTInit_R_S16S32> is used to 1456 * initialize the specification structures for functions 1457 * <FFTFwd_RToCCS_S16S32_Sfs> and <FFTInv_CCSToR_S32S16_Sfs>. 1458 * 1459 * Memory for 1460 * *pFFTFwdSpec must be allocated before calling these functions and should be 1461 * 8-byte aligned. The number of bytes required for *pFFTFwdSpec can be 1462 * determined using <FFTGetBufSize_R_S16S32>. 1463 * 1464 * Input Arguments: 1465 * 1466 * order - base-2 logarithm of the desired block length; valid in the range 1467 * [0,12] 1468 * 1469 * Output Arguments: 1470 * 1471 * pFFTFwdSpec - pointer to the initialized specification structure 1472 * 1473 * Return Value: 1474 * 1475 * OMX_Sts_NoErr - no error 1476 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1477 * following is true: 1478 * - pFFTFwdSpec is either NULL or violates the 8-byte alignment 1479 * restrictions 1480 * - order < 0 or order > 12 1481 * 1482 */ 1483 OMXResult omxSP_FFTInit_R_S16S32( 1484 OMXFFTSpec_R_S16S32* pFFTFwdSpec, 1485 OMX_INT order 1486 ); 1487 1488 1489 1490 /** 1491 * Function: omxSP_FFTInit_R_S16 1492 * 1493 * Description: 1494 * These functions initialize specification structures required for the real 1495 * FFT and IFFT functions. The function <FFTInit_R_S16> is used 1496 * to initialize the specification structures for functions 1497 * <FFTFwd_RToCCS_S16_Sfs> and <FFTInv_CCSToR_S16_Sfs>. 1498 * 1499 * Memory for *pFFTFwdSpec must be allocated before calling these functions 1500 * and should be 8-byte aligned. 1501 * 1502 * The number of bytes required for *pFFTFwdSpec can be 1503 * determined using <FFTGetBufSize_R_S16>. 1504 * 1505 * Input Arguments: 1506 * 1507 * order - base-2 logarithm of the desired block length; valid in the range 1508 * [1,12] 1509 * 1510 * Output Arguments: 1511 * 1512 * pFFTFwdSpec - pointer to the initialized specification structure 1513 * 1514 * Return Value: 1515 * 1516 * OMX_Sts_NoErr - no error 1517 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1518 * following is true: 1519 * - pFFTFwdSpec is either NULL or violates the 8-byte alignment 1520 * restrictions 1521 * - order < 1 or order > 12 1522 * 1523 */ 1524 OMXResult omxSP_FFTInit_R_S16 ( 1525 OMXFFTSpec_R_S32*pFFTFwdSpec, 1526 OMX_INT order 1527 ); 1528 1529 /** 1530 * Function: omxSP_FFTInit_R_S32 (2.2.4.1.4) 1531 * 1532 * Description: 1533 * These functions initialize specification structures required for the real 1534 * FFT and IFFT functions. The function <FFTInit_R_S32> is used to initialize 1535 * the specification structures for functions <FFTFwd_RToCCS_S32_Sfs> 1536 * and <FFTInv_CCSToR_S32_Sfs>. 1537 * 1538 * Memory for *pFFTFwdSpec must be allocated before calling these functions 1539 * and should be 8-byte aligned. 1540 * 1541 * The number of bytes required for *pFFTFwdSpec can be 1542 * determined using <FFTGetBufSize_R_S32>. 1543 * 1544 * Input Arguments: 1545 * 1546 * order - base-2 logarithm of the desired block length; valid in the range 1547 * [0,12] 1548 * 1549 * Output Arguments: 1550 * 1551 * pFFTFwdSpec - pointer to the initialized specification structure 1552 * 1553 * Return Value: 1554 * 1555 * OMX_Sts_NoErr - no error 1556 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1557 * following is true: 1558 * - pFFTFwdSpec is either NULL or violates the 8-byte alignment 1559 * restrictions 1560 * - order < 0 or order > 12 1561 * 1562 */ 1563 OMXResult omxSP_FFTInit_R_S32 ( 1564 OMXFFTSpec_R_S32*pFFTFwdSpec, 1565 OMX_INT order 1566 ); 1567 1568 /** 1569 * Function: omxSP_FFTInit_R_F32 1570 * 1571 * Description: 1572 * These functions initialize specification structures required for the real 1573 * FFT and IFFT functions. The function <FFTInit_R_F32> is used to initialize 1574 * the specification structures for functions <FFTFwd_RToCCS_F32_Sfs> 1575 * and <FFTInv_CCSToR_F32_Sfs>. 1576 * 1577 * Memory for *pFFTFwdSpec must be allocated before calling these functions 1578 * and should be 8-byte aligned. 1579 * 1580 * The number of bytes required for *pFFTFwdSpec can be 1581 * determined using <FFTGetBufSize_R_F32>. 1582 * 1583 * Input Arguments: 1584 * 1585 * order - base-2 logarithm of the desired block length; valid in the range 1586 * [1,15] 1587 * 1588 * Output Arguments: 1589 * 1590 * pFFTFwdSpec - pointer to the initialized specification structure 1591 * 1592 * Return Value: 1593 * 1594 * OMX_Sts_NoErr - no error 1595 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1596 * following is true: 1597 * - pFFTFwdSpec is either NULL or violates the 8-byte alignment 1598 * restrictions 1599 * - order < 1 or order > 15 1600 * 1601 */ 1602 OMXResult omxSP_FFTInit_R_F32( 1603 OMXFFTSpec_R_F32* pFFTFwdSpec, 1604 OMX_INT order 1605 ); 1606 1607 /** 1608 * Function: omxSP_FFTGetBufSize_C_SC16 (2.2.4.1.6) 1609 * 1610 * Description: 1611 * These functions compute the size of the specification structure 1612 * required for the length 2^order complex FFT and IFFT functions. The function 1613 * <FFTGetBufSize_C_SC16> is used in conjunction with the 16-bit functions 1614 * <FFTFwd_CToC_SC16_Sfs> and <FFTInv_CToC_SC16_Sfs>. 1615 * 1616 * Input Arguments: 1617 * 1618 * order - base-2 logarithm of the desired block length; valid in the range 1619 * [0,12] 1620 * 1621 * Output Arguments: 1622 * 1623 * pSize - pointer to the number of bytes required for the specification 1624 * structure 1625 * 1626 * Return Value: 1627 * 1628 * OMX_Sts_NoErr - no error 1629 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1630 * following is true: 1631 * - pSize is NULL 1632 * - order < 0 or order > 12 1633 * 1634 */ 1635 OMXResult omxSP_FFTGetBufSize_C_SC16 ( 1636 OMX_INT order, 1637 OMX_INT *pSize 1638 ); 1639 1640 1641 1642 /** 1643 * Function: omxSP_FFTGetBufSize_C_SC32 (2.2.4.1.6) 1644 * 1645 * Description: 1646 * These functions compute the size of the specification structure 1647 * required for the length 2^order complex FFT and IFFT functions. The function 1648 * <FFTGetBufSize_C_SC32> is used in conjunction with the 32-bit functions 1649 * <FFTFwd_CToC_SC32_Sfs> and <FFTInv_CToC_SC32_Sfs>. 1650 * 1651 * Input Arguments: 1652 * 1653 * order - base-2 logarithm of the desired block length; valid in the range 1654 * [0,12] 1655 * 1656 * Output Arguments: 1657 * 1658 * pSize - pointer to the number of bytes required for the specification 1659 * structure 1660 * 1661 * Return Value: 1662 * 1663 * OMX_Sts_NoErr - no error 1664 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1665 * following is true: 1666 * - pSize is NULL 1667 * - order < 0 or order > 12 1668 * 1669 */ 1670 OMXResult omxSP_FFTGetBufSize_C_SC32 ( 1671 OMX_INT order, 1672 OMX_INT *pSize 1673 ); 1674 1675 /** 1676 * Function: omxSP_FFTGetBufSize_C_FC32 1677 * 1678 * Description: 1679 * These functions compute the size of the specification structure 1680 * required for the length 2^order complex FFT and IFFT functions. The function 1681 * <FFTGetBufSize_C_FC32> is used in conjunction with the 32-bit functions 1682 * <FFTFwd_CToC_FC32_Sfs> and <FFTInv_CToC_FC32_Sfs>. 1683 * 1684 * Input Arguments: 1685 * 1686 * order - base-2 logarithm of the desired block length; valid in the range 1687 * [1,15] 1688 * 1689 * Output Arguments: 1690 * 1691 * pSize - pointer to the number of bytes required for the specification 1692 * structure 1693 * 1694 * Return Value: 1695 * 1696 * OMX_Sts_NoErr - no error 1697 * OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 1698 * following is true: 1699 * - pSize is NULL 1700 * - order < 1 or order > 15 1701 * 1702 */ 1703 OMXResult omxSP_FFTGetBufSize_C_FC32( 1704 OMX_INT order, 1705 OMX_INT* pSize 1706 ); 1707 1708 1709 /** 1710 * Function: omxSP_FFTGetBufSize_R_S16S32 (2.2.4.1.8) 1711 * 1712 * Description: 1713 * order These functions compute the size of the specification structure 1714 * required for the length 2^order real FFT and IFFT functions. The function 1715 * <FFTGetBufSize_R_S16S32> is used in conjunction with the 16-bit functions 1716 * <FFTFwd_RToCCS_S16S32_Sfs> and <FFTInv_CCSToR_S32S16_Sfs>. 1717 * 1718 * Input Arguments: 1719 * 1720 * order - base-2 logarithm of the length; valid in the range [0,12] 1721 * 1722 * Output Arguments: 1723 * 1724 * pSize - pointer to the number of bytes required for the specification 1725 * structure 1726 * 1727 * Return Value: 1728 * 1729 * OMX_Sts_NoErr - no error 1730 * OMX_Sts_BadArgErr - bad arguments The function returns 1731 * OMX_Sts_BadArgErr if one or more of the following is true: 1732 * pSize is NULL 1733 * order < 0 or order > 12 1734 * 1735 */ 1736 OMXResult omxSP_FFTGetBufSize_R_S16S32( 1737 OMX_INT order, 1738 OMX_INT* pSize 1739 ); 1740 1741 1742 /** 1743 * Function: omxSP_FFTGetBufSize_R_S16 1744 * 1745 * Description: 1746 * These functions compute the size of the specification structure 1747 * required for the length 2^order real FFT and IFFT functions. The function 1748 * <FFTGetBufSize_R_S16> is used in conjunction with the 16-bit 1749 * functions <FFTFwd_RToCCS_S16_Sfs> and <FFTInv_CCSToR_S16_Sfs>. 1750 * 1751 * Input Arguments: 1752 * 1753 * order - base-2 logarithm of the length; valid in the range 1754 * [1,12] 1755 * 1756 * Output Arguments: 1757 * 1758 * pSize - pointer to the number of bytes required for the specification 1759 * structure 1760 * 1761 * Return Value: 1762 * 1763 * OMX_Sts_NoErr - no error 1764 * OMX_Sts_BadArgErr - bad arguments The function returns 1765 * OMX_Sts_BadArgErr if one or more of the following is true: 1766 * pSize is NULL 1767 * order < 1 or order > 12 1768 * 1769 */ 1770 OMXResult omxSP_FFTGetBufSize_R_S16 ( 1771 OMX_INT order, 1772 OMX_INT *pSize 1773 ); 1774 1775 /** 1776 * Function: omxSP_FFTGetBufSize_R_S32 (2.2.4.1.8) 1777 * 1778 * Description: 1779 * These functions compute the size of the specification structure 1780 * required for the length 2^order real FFT and IFFT functions. The function 1781 * <FFTGetBufSize_R_S32> is used in conjunction with the 32-bit functions 1782 * <FFTFwd_RToCCS_S32_Sfs> and <FFTInv_CCSToR_S32_Sfs>. 1783 * 1784 * Input Arguments: 1785 * 1786 * order - base-2 logarithm of the length; valid in the range [0,12] 1787 * 1788 * Output Arguments: 1789 * 1790 * pSize - pointer to the number of bytes required for the specification 1791 * structure 1792 * 1793 * Return Value: 1794 * 1795 * OMX_Sts_NoErr - no error 1796 * OMX_Sts_BadArgErr - bad arguments The function returns 1797 * OMX_Sts_BadArgErr if one or more of the following is true: 1798 * pSize is NULL 1799 * order < 0 or order > 12 1800 * 1801 */ 1802 OMXResult omxSP_FFTGetBufSize_R_S32 ( 1803 OMX_INT order, 1804 OMX_INT *pSize 1805 ); 1806 1807 /** 1808 * Function: omxSP_FFTGetBufSize_R_F32 1809 * 1810 * Description: 1811 * These functions compute the size of the specification structure 1812 * required for the length 2^order real FFT and IFFT functions. The function 1813 * <FFTGetBufSize_R_F32> is used in conjunction with the 32-bit functions 1814 * <FFTFwd_RToCCS_F32_Sfs> and <FFTInv_CCSToR_F32_Sfs>. 1815 * 1816 * Input Arguments: 1817 * 1818 * order - base-2 logarithm of the length; valid in the range [1,15] 1819 * 1820 * Output Arguments: 1821 * 1822 * pSize - pointer to the number of bytes required for the specification 1823 * structure 1824 * 1825 * Return Value: 1826 * 1827 * OMX_Sts_NoErr - no error 1828 * OMX_Sts_BadArgErr - bad arguments The function returns 1829 * OMX_Sts_BadArgErr if one or more of the following is true: 1830 * pSize is NULL 1831 * order < 1 or order > 15 1832 * 1833 */ 1834 OMXResult omxSP_FFTGetBufSize_R_F32( 1835 OMX_INT order, 1836 OMX_INT* pSize 1837 ); 1838 1839 1840 1841 /** 1842 * Function: omxSP_FFTFwd_CToC_SC16_Sfs (2.2.4.2.2) 1843 * 1844 * Description: 1845 * Compute an FFT for a complex signal of length of 2^order, 1846 * where 0 <= order <= 12. 1847 * Transform length is determined by the specification structure, which 1848 * must be initialized prior to calling the FFT function using the appropriate 1849 * helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship 1850 * between the input and output sequences can be expressed in terms of the 1851 * DFT, i.e., 1852 * 1853 * X[k] = 2^(-scaleFactor) . SUM[n=0...N-1]x[n].e^(-jnk.2.pi/N) 1854 * k = 0,1,2,..., N-1 1855 * N = 2^order 1856 * 1857 * Input Arguments: 1858 * pSrc - pointer to the input signal, a complex-valued vector of length 2^order; 1859 * must be aligned on a 32 byte boundary. 1860 * pFFTSpec - pointer to the preallocated and initialized specification 1861 * structure 1862 * scaleFactor - output scale factor; the range for is [0,16] 1863 * 1864 * Output Arguments: 1865 * pDst - pointer to the complex-valued output vector, of length 2^order; 1866 * must be aligned on an 32-byte boundary. 1867 * 1868 * Return Value: 1869 * 1870 * OMX_Sts_NoErr - no error 1871 * OMX_Sts_BadArgErr - returned if one or more of the following conditions 1872 * is true: 1873 * - one or more of the following pointers is NULL: pSrc, pDst, or 1874 * pFFTSpec. 1875 * - pSrc or pDst is not 32-byte aligned 1876 * - scaleFactor<0 or scaleFactor>16 1877 * 1878 */ 1879 1880 OMXResult omxSP_FFTFwd_CToC_SC16_Sfs ( 1881 const OMX_SC16 *pSrc, 1882 OMX_SC16 *pDst, 1883 const OMXFFTSpec_C_SC16 *pFFTSpec, 1884 OMX_INT scaleFactor 1885 ); 1886 1887 OMXResult omxSP_FFTFwd_CToC_SC16_Sfs_neon ( 1888 const OMX_SC16 *pSrc, 1889 OMX_SC16 *pDst, 1890 const OMXFFTSpec_C_SC16 *pFFTSpec, 1891 OMX_INT scaleFactor 1892 ); 1893 1894 /** 1895 * Function: omxSP_FFTFwd_CToC_SC32_Sfs (2.2.4.2.2) 1896 * 1897 * Description: 1898 * Compute an FFT for a complex signal of length of 2^order, 1899 * where 0 <= order <= 12. 1900 * Transform length is determined by the specification structure, which 1901 * must be initialized prior to calling the FFT function using the appropriate 1902 * helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship 1903 * between the input and output sequences can be expressed in terms of the 1904 * DFT, i.e., 1905 * 1906 * X[k] = 2^(-scaleFactor) . SUM[n=0...N-1]x[n].e^(-jnk.2.pi/N) 1907 * k = 0,1,2,..., N-1 1908 * N = 2^order 1909 * 1910 * Input Arguments: 1911 * pSrc - pointer to the input signal, a complex-valued vector of length 2^order; 1912 * must be aligned on a 32 byte boundary. 1913 * pFFTSpec - pointer to the preallocated and initialized specification 1914 * structure 1915 * scaleFactor - output scale factor; the range is [0,32] 1916 * 1917 * Output Arguments: 1918 * pDst - pointer to the complex-valued output vector, of length 2^order; must be 1919 * aligned on an 32-byte boundary. 1920 * 1921 * Return Value: 1922 * 1923 * OMX_Sts_NoErr - no error 1924 * OMX_Sts_BadArgErr - returned if one or more of the following conditions 1925 * is true: 1926 * - one or more of the following pointers is NULL: pSrc, pDst, or 1927 * pFFTSpec. 1928 * - pSrc or pDst is not 32-byte aligned 1929 * - scaleFactor<0 or scaleFactor >32 1930 * 1931 */ 1932 OMXResult omxSP_FFTFwd_CToC_SC32_Sfs ( 1933 const OMX_SC32 *pSrc, 1934 OMX_SC32 *pDst, 1935 const OMXFFTSpec_C_SC32 *pFFTSpec, 1936 OMX_INT scaleFactor 1937 ); 1938 1939 1940 1941 /** 1942 * Function: omxSP_FFTInv_CToC_SC16_Sfs (2.2.4.2.4) 1943 * 1944 * Description: 1945 * These functions compute an inverse FFT for a complex signal of length 1946 * of 2^order, where 0 <= order <= 12. Transform length is determined by the 1947 * specification structure, which must be initialized prior to calling the FFT 1948 * function using the appropriate helper, i.e., <FFTInit_C_sc32> or 1949 * <FFTInit_C_SC16>. The relationship between the input and output sequences 1950 * can be expressed in terms of the IDFT, i.e.: 1951 * 1952 * x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N) 1953 * n=0,1,2,...N-1 1954 * N=2^order. 1955 * 1956 * Input Arguments: 1957 * pSrc - pointer to the complex-valued input signal, of length 2^order ; 1958 * must be aligned on a 32-byte boundary. 1959 * pFFTSpec - pointer to the preallocated and initialized specification 1960 * structure 1961 * scaleFactor - scale factor of the output. Valid range is [0,16]. 1962 * 1963 * Output Arguments: 1964 * order 1965 * pDst - pointer to the complex-valued output signal, of length 2^order; 1966 * must be aligned on a 32-byte boundary. 1967 * 1968 * Return Value: 1969 * 1970 * Positive value - the shift scale that was performed inside 1971 * OMX_Sts_NoErr - no error 1972 * OMX_Sts_BadArgErr - returned if one or more of the following conditions 1973 * is true: 1974 * - one or more of the following pointers is NULL: pSrc, pDst, or 1975 * pFFTSpec. 1976 * - pSrc or pDst is not 32-byte aligned 1977 * - scaleFactor<0 or scaleFactor>16 1978 * 1979 */ 1980 OMXResult omxSP_FFTInv_CToC_SC16_Sfs ( 1981 const OMX_SC16 *pSrc, 1982 OMX_SC16 *pDst, 1983 const OMXFFTSpec_C_SC16 *pFFTSpec, 1984 OMX_INT scaleFactor 1985 ); 1986 1987 OMXResult omxSP_FFTInv_CToC_SC16_Sfs_neon ( 1988 const OMX_SC16 *pSrc, 1989 OMX_SC16 *pDst, 1990 const OMXFFTSpec_C_SC16 *pFFTSpec, 1991 OMX_INT scaleFactor 1992 ); 1993 1994 1995 1996 1997 /** 1998 * Function: omxSP_FFTInv_CToC_SC32_Sfs (2.2.4.2.4) 1999 * 2000 * Description: 2001 * These functions compute an inverse FFT for a complex signal of length 2002 * of 2^order, where 0 <= order <= 12. Transform length is determined by the 2003 * specification structure, which must be initialized prior to calling the FFT 2004 * function using the appropriate helper, i.e., <FFTInit_C_sc32> or 2005 * <FFTInit_C_SC16>. The relationship between the input and output sequences 2006 * can be expressed in terms of the IDFT, i.e.: 2007 * 2008 * x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N) 2009 * n=0,1,2,...N-1 2010 * N=2^order. 2011 * 2012 * Input Arguments: 2013 * pSrc - pointer to the complex-valued input signal, of length 2^order ; 2014 * must be aligned on a 32-byte boundary. 2015 * pFFTSpec - pointer to the preallocated and initialized specification 2016 * structure 2017 * scaleFactor - scale factor of the output. Valid range is [0,32]. 2018 * 2019 * Output Arguments: 2020 * order 2021 * pDst - pointer to the complex-valued output signal, of length 2^order; 2022 * must be aligned on a 32-byte boundary. 2023 * 2024 * Return Value: 2025 * 2026 * OMX_Sts_NoErr - no error 2027 * OMX_Sts_BadArgErr - returned if one or more of the following conditions 2028 * is true: 2029 * - one or more of the following pointers is NULL: pSrc, pDst, or 2030 * pFFTSpec. 2031 * - pSrc or pDst is not 32-byte aligned 2032 * - scaleFactor<0 or scaleFactor>32 2033 * 2034 */ 2035 OMXResult omxSP_FFTInv_CToC_SC32_Sfs ( 2036 const OMX_SC32 *pSrc, 2037 OMX_SC32 *pDst, 2038 const OMXFFTSpec_C_SC32 *pFFTSpec, 2039 OMX_INT scaleFactor 2040 ); 2041 2042 2043 2044 /** 2045 * Function: omxSP_FFTFwd_RToCCS_S16S32_Sfs (2.2.4.4.2) 2046 * 2047 * Description: 2048 * These functions compute an FFT for a real-valued signal of length of 2^order, 2049 * where 0 <= order <= 12. Transform length is determined by the 2050 * specification structure, which must be initialized prior to calling the FFT 2051 * function using the appropriate helper, i.e., <FFTInit_R_S16S32>. 2052 * The relationship between the input and output sequences 2053 * can be expressed in terms of the DFT, i.e.: 2054 * 2055 * x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N) 2056 * n=0,1,2,...N-1 2057 * N=2^order. 2058 * 2059 * The conjugate-symmetric output sequence is represented using a CCS vector, 2060 * which is of length N+2, and is organized as follows: 2061 * 2062 * Index: 0 1 2 3 4 5 . . . N-2 N-1 N N+1 2063 * Component: R0 0 R1 I1 R2 I2 . . . R[N/2-1] I[N/2-1] R[N/2] 0 2064 * 2065 * where R[n] and I[n], respectively, denote the real and imaginary components 2066 * for FFT bin 'n'. Bins are numbered from 0 to N/2, where N is the FFT length. 2067 * Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to the 2068 * foldover frequency. 2069 * 2070 * Input Arguments: 2071 * pSrc - pointer to the real-valued input sequence, of length 2^order; 2072 * must be aligned on a 32-byte boundary. 2073 * pFFTSpec - pointer to the preallocated and initialized specification 2074 * structure 2075 * scaleFactor - output scale factor; valid range is [0, 32] 2076 * 2077 * Output Arguments: 2078 * pDst - pointer to output sequence, represented using CCS format, of 2079 * length (2^order)+2; must be aligned on a 32-byte boundary. 2080 * 2081 * Return Value: 2082 * 2083 * OMX_Sts_NoErr - no error 2084 * OMX_Sts_BadArgErr - bad arguments, if one or more of the following is true: 2085 * - one of the pointers pSrc, pDst, or pFFTSpec is NULL 2086 * - pSrc or pDst is not aligned on a 32-byte boundary 2087 * - scaleFactor<0 or scaleFactor >32 2088 * 2089 */ 2090 OMXResult omxSP_FFTFwd_RToCCS_S16S32_Sfs ( 2091 const OMX_S16 *pSrc, 2092 OMX_S32 *pDst, 2093 const OMXFFTSpec_R_S16S32 *pFFTSpec, 2094 OMX_INT scaleFactor 2095 ); 2096 2097 2098 /** 2099 * Function: omxSP_FFTFwd_RToCCS_S16_Sfs 2100 * 2101 * Description: 2102 * These functions compute an FFT for a real-valued signal of length of 2^order, 2103 * where 0 < order <= 12. Transform length is determined by the 2104 * specification structure, which must be initialized prior to calling the FFT 2105 * function using the appropriate helper, i.e., <FFTInit_R_S16>. 2106 * The relationship between the input and output sequences can 2107 * be expressed in terms of the DFT, i.e.: 2108 * 2109 * x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N) 2110 * n=0,1,2,...N-1 2111 * N=2^order. 2112 * 2113 * The conjugate-symmetric output sequence is represented using a CCS vector, 2114 * which is of length N+2, and is organized as follows: 2115 * 2116 * Index: 0 1 2 3 4 5 . . . N-2 N-1 N N+1 2117 * Component: R0 0 R1 I1 R2 I2 . . . R[N/2-1] I[N/2-1] R[N/2] 0 2118 * 2119 * where R[n] and I[n], respectively, denote the real and imaginary components 2120 * for FFT bin 'n'. Bins are numbered from 0 to N/2, where N is the FFT length. 2121 * Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to 2122 * the foldover frequency. 2123 * 2124 * Input Arguments: 2125 * pSrc - pointer to the real-valued input sequence, of length 2^order; 2126 * must be aligned on a 32-byte boundary. 2127 * pFFTSpec - pointer to the preallocated and initialized specification 2128 * structure 2129 * scaleFactor - output scale factor; valid range is [0, 16] 2130 * 2131 * Output Arguments: 2132 * pDst - pointer to output sequence, represented using CCS format, of 2133 * length (2^order)+2; must be aligned on a 32-byte boundary. 2134 * 2135 * Return Value: 2136 * 2137 * OMX_Sts_NoErr - no error 2138 * OMX_Sts_BadArgErr - bad arguments, if one or more of followings is true: 2139 * - one of the pointers pSrc, pDst, or pFFTSpec is NULL 2140 * - pSrc or pDst is not aligned on a 32-byte boundary 2141 * - scaleFactor<0 or scaleFactor >16 2142 * 2143 */ 2144 OMXResult omxSP_FFTFwd_RToCCS_S16_Sfs ( 2145 const OMX_S16* pSrc, 2146 OMX_S16* pDst, 2147 const OMXFFTSpec_R_S16* pFFTSpec, 2148 OMX_INT scaleFactor 2149 ); 2150 2151 2152 /** 2153 * Function: omxSP_FFTFwd_RToCCS_S32_Sfs (2.2.4.4.2) 2154 * 2155 * Description: 2156 * These functions compute an FFT for a real-valued signal of length of 2^order, 2157 * where 0 <= order <= 12. Transform length is determined by the 2158 * specification structure, which must be initialized prior to calling the FFT 2159 * function using the appropriate helper, i.e., <FFTInit_R_S32>. 2160 * The relationship between the input and output sequences 2161 * can be expressed in terms of the DFT, i.e.: 2162 * 2163 * x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N) 2164 * n=0,1,2,...N-1 2165 * N=2^order. 2166 * 2167 * The conjugate-symmetric output sequence is represented using a CCS vector, 2168 * which is of length N+2, and is organized as follows: 2169 * 2170 * Index: 0 1 2 3 4 5 . . . N-2 N-1 N N+1 2171 * Component: R0 0 R1 I1 R2 I2 . . . R[N/2-1] I[N/2-1] R[N/2] 0 2172 * 2173 * where R[n] and I[n], respectively, denote the real and imaginary components 2174 * for FFT bin 'n'. Bins are numbered from 0 to N/2, where N is the FFT length. 2175 * Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to the 2176 * foldover frequency. 2177 * 2178 * Input Arguments: 2179 * pSrc - pointer to the real-valued input sequence, of length 2^order; 2180 * must be aligned on a 32-byte boundary. 2181 * pFFTSpec - pointer to the preallocated and initialized specification 2182 * structure 2183 * scaleFactor - output scale factor; valid range is [0, 32] 2184 * 2185 * Output Arguments: 2186 * pDst - pointer to output sequence, represented using CCS format, of 2187 * length (2^order)+2; must be aligned on a 32-byte boundary. 2188 * 2189 * Return Value: 2190 * 2191 * OMX_Sts_NoErr - no error 2192 * OMX_Sts_BadArgErr - bad arguments, if one or more of the following is true: 2193 * - one of the pointers pSrc, pDst, or pFFTSpec is NULL 2194 * - pSrc or pDst is not aligned on a 32-byte boundary 2195 * - scaleFactor<0 or scaleFactor >32 2196 * 2197 */ 2198 OMXResult omxSP_FFTFwd_RToCCS_S32_Sfs ( 2199 const OMX_S32 *pSrc, 2200 OMX_S32 *pDst, 2201 const OMXFFTSpec_R_S32 *pFFTSpec, 2202 OMX_INT scaleFactor 2203 ); 2204 2205 /** 2206 * Function: omxSP_FFTFwd_CToC_FC32_Sfs (2.2.4.2.2) 2207 * 2208 * Description: 2209 * Compute an FFT for a complex signal of length of 2^order, 2210 * where 0 <= order <= 15. 2211 * Transform length is determined by the specification structure, which 2212 * must be initialized prior to calling the FFT function using the appropriate 2213 * helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship 2214 * between the input and output sequences can be expressed in terms of the 2215 * DFT, i.e., 2216 * 2217 * X[k] = SUM[n=0...N-1]x[n].e^(-jnk.2.pi/N) 2218 * k = 0,1,2,..., N-1 2219 * N = 2^order 2220 * 2221 * Input Arguments: 2222 * pSrc - pointer to the input signal, a complex-valued vector of length 2223 * 2^order; must be aligned on a 32 byte boundary. 2224 * pFFTSpec - pointer to the preallocated and initialized specification 2225 * structure 2226 * 2227 * Output Arguments: 2228 * pDst - pointer to the complex-valued output vector, of length 2^order; 2229 * must be aligned on an 32-byte boundary. 2230 * 2231 * Return Value: 2232 * 2233 * OMX_Sts_NoErr - no error 2234 * OMX_Sts_BadArgErr - returned if one or more of the following conditions 2235 * is true: 2236 * - one or more of the following pointers is NULL: pSrc, pDst, or 2237 * pFFTSpec. 2238 * - pSrc or pDst is not 32-byte aligned 2239 * - scaleFactor<0 or scaleFactor >32 2240 * 2241 */ 2242 OMXResult omxSP_FFTFwd_CToC_FC32_Sfs ( 2243 const OMX_FC32 *pSrc, 2244 OMX_FC32 *pDst, 2245 const OMXFFTSpec_C_FC32 *pFFTSpec 2246 ); 2247 #ifdef __arm__ 2248 /* 2249 * Non-NEON version 2250 */ 2251 OMXResult omxSP_FFTFwd_CToC_FC32_Sfs_vfp ( 2252 const OMX_FC32 *pSrc, 2253 OMX_FC32 *pDst, 2254 const OMXFFTSpec_C_FC32 *pFFTSpec 2255 ); 2256 #endif 2257 2258 /** 2259 * Function: omxSP_FFTFwd_RToCCS_F32_Sfs 2260 * 2261 * Description: 2262 * These functions compute an FFT for a real-valued signal of length 2263 * of 2^order, where 0 <= order <= 12. Transform length is determined 2264 * by the specification structure, which must be initialized prior to 2265 * calling the FFT function using the appropriate helper, i.e., 2266 * <FFTInit_R_F32>. The relationship between the input and output 2267 * sequences can be expressed in terms of the DFT, i.e.: 2268 * 2269 * x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N) 2270 * n=0,1,2,...N-1 2271 * N=2^order. 2272 * 2273 * The conjugate-symmetric output sequence is represented using a CCS vector, 2274 * which is of length N+2, and is organized as follows: 2275 * 2276 * Index: 0 1 2 3 4 5 . . . N-2 N-1 N N+1 2277 * Component: R0 0 R1 I1 R2 I2 . . . R[N/2-1] I[N/2-1] R[N/2] 0 2278 * 2279 * where R[n] and I[n], respectively, denote the real and imaginary 2280 * components for FFT bin 'n'. Bins are numbered from 0 to N/2, where 2281 * N is the FFT length. Bin index 0 corresponds to the DC component, 2282 * and bin index N/2 corresponds to the foldover frequency. 2283 * 2284 * Input Arguments: 2285 * pSrc - pointer to the real-valued input sequence, of length 2^order; 2286 * must be aligned on a 32-byte boundary. 2287 * pFFTSpec - pointer to the preallocated and initialized specification 2288 * structure 2289 * 2290 * Output Arguments: 2291 * pDst - pointer to output sequence, represented using CCS format, of 2292 * length (2^order)+2; must be aligned on a 32-byte boundary. 2293 * 2294 * Return Value: 2295 * 2296 * OMX_Sts_NoErr - no error 2297 2298 * OMX_Sts_BadArgErr - bad arguments, if one or more of the 2299 * following is true: - one of the pointers pSrc, pDst, or pFFTSpec 2300 * is NULL - pSrc or pDst is not aligned on a 32-byte boundary 2301 * 2302 */ 2303 OMXResult omxSP_FFTFwd_RToCCS_F32_Sfs( 2304 const OMX_F32* pSrc, 2305 OMX_F32* pDst, 2306 const OMXFFTSpec_R_F32* pFFTSpec 2307 ); 2308 2309 #ifdef __arm__ 2310 /* 2311 * Non-NEON version of omxSP_FFTFwd_RToCCS_F32_Sfs 2312 */ 2313 OMXResult omxSP_FFTFwd_RToCCS_F32_Sfs_vfp( 2314 const OMX_F32* pSrc, 2315 OMX_F32* pDst, 2316 const OMXFFTSpec_R_F32* pFFTSpec 2317 ); 2318 2319 /* 2320 * Just like omxSP_FFTFwd_RToCCS_F32_Sfs, but automatically detects 2321 * whether NEON is available or not and chooses the appropriate 2322 * routine. 2323 */ 2324 extern OMXResult (*omxSP_FFTFwd_RToCCS_F32)( 2325 const OMX_F32* pSrc, 2326 OMX_F32* pDst, 2327 const OMXFFTSpec_R_F32* pFFTSpec 2328 ); 2329 #else 2330 #define omxSP_FFTFwd_RToCCS_F32 omxSP_FFTFwd_RToCCS_F32_Sfs 2331 #endif 2332 2333 /** 2334 * Function: omxSP_FFTInv_CCSToR_S32S16_Sfs (2.2.4.4.4) 2335 * 2336 * Description: 2337 * These functions compute the inverse FFT for a conjugate-symmetric input 2338 * sequence. Transform length is determined by the specification structure, 2339 * which must be initialized prior to calling the FFT function using 2340 * <FFTInit_R_S16S32>. For a transform of length M, the input sequence is 2341 * represented using a packed CCS vector of length M+2, and is organized 2342 * as follows: 2343 * 2344 * Index: 0 1 2 3 4 5 . . . M-2 M-1 M M+1 2345 * Component R[0] 0 R[1] I[1] R[2] I[2] . . . R[M/2-1] I[M/2-1] R[M/2] 0 2346 * 2347 * where R[n] and I[n], respectively, denote the real and imaginary components for FFT bin n. 2348 * Bins are numbered from 0 to M/2, where M is the FFT length. Bin index 0 2349 * corresponds to the DC component, and bin index M/2 corresponds to the 2350 * foldover frequency. 2351 * 2352 * Input Arguments: 2353 * pSrc - pointer to the complex-valued input sequence represented using 2354 * CCS format, of length (2^order) + 2; must be aligned on a 32-byte 2355 * boundary. 2356 * pFFTSpec - pointer to the preallocated and initialized specification 2357 * structure 2358 * scaleFactor - output scalefactor; range is [0,16] 2359 * 2360 * Output Arguments: 2361 * pDst - pointer to the real-valued output sequence, of length 2^order ; must be 2362 * aligned on a 32-byte boundary. 2363 * 2364 * Return Value: 2365 * 2366 * OMX_Sts_NoErr - no error 2367 * OMX_Sts_BadArgErr - bad arguments if one or more of the following is true: 2368 * - pSrc, pDst, or pFFTSpec is NULL 2369 * - pSrc or pDst is not aligned on a 32-byte boundary 2370 * - scaleFactor<0 or scaleFactor >16 2371 * 2372 */ 2373 OMXResult omxSP_FFTInv_CCSToR_S32S16_Sfs ( 2374 const OMX_S32 *pSrc, 2375 OMX_S16 *pDst, 2376 const OMXFFTSpec_R_S16S32 *pFFTSpec, 2377 OMX_INT scaleFactor 2378 ); 2379 2380 2381 /** 2382 * Function: omxSP_FFTInv_CCSToR_S16_Sfs 2383 * 2384 * Description: 2385 * These functions compute the inverse FFT for a conjugate-symmetric input 2386 * sequence. Transform length is determined by the specification structure, 2387 * which must be initialized prior to calling the FFT function using 2388 * <FFTInit_R_S16>. For a transform of length M, the input 2389 * sequence is represented using a packed CCS vector of length 2390 * M+2, and is organized as follows: 2391 * 2392 * Index: 0 1 2 3 4 5 . . . M-2 M-1 M M+1 2393 * Component R[0] 0 R[1] I[1] R[2] I[2] . . . R[M/2-1] I[M/2-1] R[M/2] 0 2394 * 2395 * where R[n] and I[n], respectively, denote the real and imaginary components 2396 * for FFT bin n. 2397 * Bins are numbered from 0 to M/2, where M is the FFT length. Bin index 0 2398 * corresponds to the DC component, and bin index M/2 corresponds to the 2399 * foldover frequency. 2400 * 2401 * Input Arguments: 2402 * pSrc - pointer to the complex-valued input sequence represented using 2403 * CCS format, of length (2^order) + 2; must be aligned on a 32-byte 2404 * boundary. 2405 * pFFTSpec - pointer to the preallocated and initialized specification 2406 * structure 2407 * scaleFactor - output scalefactor; range is [0,16] 2408 * 2409 * Output Arguments: 2410 * pDst - pointer to the real-valued output sequence, of length 2^order ; must 2411 * be aligned on a 32-byte boundary. 2412 * 2413 * Return Value: 2414 * 2415 * OMX_Sts_NoErr - no error 2416 * OMX_Sts_BadArgErr - bad arguments if one or more of the following is true: 2417 * - pSrc, pDst, or pFFTSpec is NULL 2418 * - pSrc or pDst is not aligned on a 32-byte boundary 2419 * - scaleFactor<0 or scaleFactor >16 2420 * 2421 */ 2422 OMXResult omxSP_FFTInv_CCSToR_S16_Sfs ( 2423 const OMX_S16* pSrc, 2424 OMX_S16* pDst, 2425 const OMXFFTSpec_R_S16* pFFTSpec, 2426 OMX_INT scaleFactor 2427 ); 2428 2429 /** 2430 * Function: omxSP_FFTInv_CCSToR_S32_Sfs (2.2.4.4.4) 2431 * 2432 * Description: 2433 * These functions compute the inverse FFT for a conjugate-symmetric input 2434 * sequence. Transform length is determined by the specification structure, 2435 * which must be initialized prior to calling the FFT function using 2436 * <FFTInit_R_S32>. For a transform of length M, the input sequence is 2437 * represented using a packed CCS vector of length M+2, and is organized 2438 * as follows: 2439 * 2440 * Index: 0 1 2 3 4 5 . . . M-2 M-1 M M+1 2441 * Component R[0] 0 R[1] I[1] R[2] I[2] . . . R[M/2-1] I[M/2-1] R[M/2] 0 2442 * 2443 * where R[n] and I[n], respectively, denote the real and imaginary components for FFT bin n. 2444 * Bins are numbered from 0 to M/2, where M is the FFT length. Bin index 0 2445 * corresponds to the DC component, and bin index M/2 corresponds to the 2446 * foldover frequency. 2447 * 2448 * Input Arguments: 2449 * pSrc - pointer to the complex-valued input sequence represented using 2450 * CCS format, of length (2^order) + 2; must be aligned on a 32-byte 2451 * boundary. 2452 * pFFTSpec - pointer to the preallocated and initialized specification 2453 * structure 2454 * scaleFactor - output scalefactor; range is [0,32] 2455 * 2456 * Output Arguments: 2457 * pDst - pointer to the real-valued output sequence, of length 2^order ; must be 2458 * aligned on a 32-byte boundary. 2459 * 2460 * Return Value: 2461 * 2462 * OMX_Sts_NoErr - no error 2463 * OMX_Sts_BadArgErr - bad arguments if one or more of the following is true: 2464 * - pSrc, pDst, or pFFTSpec is NULL 2465 * - pSrc or pDst is not aligned on a 32-byte boundary 2466 * - scaleFactor<0 or scaleFactor >32 2467 * 2468 */ 2469 OMXResult omxSP_FFTInv_CCSToR_S32_Sfs ( 2470 const OMX_S32 *pSrc, 2471 OMX_S32 *pDst, 2472 const OMXFFTSpec_R_S32 *pFFTSpec, 2473 OMX_INT scaleFactor 2474 ); 2475 2476 /** 2477 * Function: omxSP_FFTInv_CToC_FC32_Sfs (2.2.4.2.4) 2478 * 2479 * Description: 2480 * These functions compute an inverse FFT for a complex signal of 2481 * length of 2^order, where 0 <= order <= 15. Transform length is 2482 * determined by the specification structure, which must be 2483 * initialized prior to calling the FFT function using the appropriate 2484 * helper, i.e., <FFTInit_C_FC32>. The relationship between the input 2485 * and output sequences can be expressed in terms of the IDFT, i.e.: 2486 * 2487 * x[n] = SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N) 2488 * n=0,1,2,...N-1 2489 * N=2^order. 2490 * 2491 * Input Arguments: 2492 * pSrc - pointer to the complex-valued input signal, of length 2^order ; 2493 * must be aligned on a 32-byte boundary. 2494 * pFFTSpec - pointer to the preallocated and initialized specification 2495 * structure 2496 * 2497 * Output Arguments: 2498 * order 2499 * pDst - pointer to the complex-valued output signal, of length 2^order; 2500 * must be aligned on a 32-byte boundary. 2501 * 2502 * Return Value: 2503 * 2504 * OMX_Sts_NoErr - no error 2505 * OMX_Sts_BadArgErr - returned if one or more of the following conditions 2506 * is true: 2507 * - one or more of the following pointers is NULL: pSrc, pDst, or 2508 * pFFTSpec. 2509 * - pSrc or pDst is not 32-byte aligned 2510 * - scaleFactor<0 or scaleFactor>32 2511 * 2512 */ 2513 OMXResult omxSP_FFTInv_CToC_FC32_Sfs ( 2514 const OMX_FC32 *pSrc, 2515 OMX_FC32 *pDst, 2516 const OMXFFTSpec_C_FC32 *pFFTSpec 2517 ); 2518 #ifdef __arm__ 2519 /* 2520 * Non-NEON version 2521 */ 2522 OMXResult omxSP_FFTInv_CToC_FC32_Sfs_vfp ( 2523 const OMX_FC32 *pSrc, 2524 OMX_FC32 *pDst, 2525 const OMXFFTSpec_C_FC32 *pFFTSpec 2526 ); 2527 #endif 2528 2529 /** 2530 * Function: omxSP_FFTInv_CCSToR_F32_Sfs 2531 * 2532 * Description: 2533 * These functions compute the inverse FFT for a conjugate-symmetric input 2534 * sequence. Transform length is determined by the specification structure, 2535 * which must be initialized prior to calling the FFT function using 2536 * <FFTInit_R_F32>. For a transform of length M, the input sequence is 2537 * represented using a packed CCS vector of length M+2, and is organized 2538 * as follows: 2539 * 2540 * Index: 0 1 2 3 4 5 . . . M-2 M-1 M M+1 2541 * Comp: R[0] 0 R[1] I[1] R[2] I[2] . . . R[M/2-1] I[M/2-1] R[M/2] 0 2542 * 2543 * where R[n] and I[n], respectively, denote the real and imaginary 2544 * components for FFT bin n. Bins are numbered from 0 to M/2, where M 2545 * is the FFT length. Bin index 0 corresponds to the DC component, 2546 * and bin index M/2 corresponds to the foldover frequency. 2547 * 2548 * Input Arguments: 2549 * pSrc - pointer to the complex-valued input sequence represented 2550 * using CCS format, of length (2^order) + 2; must be aligned on a 2551 * 32-byte boundary. 2552 * pFFTSpec - pointer to the preallocated and initialized 2553 * specification structure 2554 * 2555 * Output Arguments: 2556 * pDst - pointer to the real-valued output sequence, of length 2557 * 2^order ; must be aligned on a 32-byte boundary. 2558 * 2559 * Return Value: 2560 * 2561 * OMX_Sts_NoErr - no error 2562 2563 * OMX_Sts_BadArgErr - bad arguments if one or more of the 2564 * following is true: 2565 * - pSrc, pDst, or pFFTSpec is NULL 2566 * - pSrc or pDst is not aligned on a 32-byte boundary 2567 * - scaleFactor<0 or scaleFactor >32 2568 * 2569 */ 2570 OMXResult omxSP_FFTInv_CCSToR_F32_Sfs( 2571 const OMX_F32* pSrc, 2572 OMX_F32* pDst, 2573 const OMXFFTSpec_R_F32* pFFTSpec 2574 ); 2575 2576 #ifdef __arm__ 2577 /* 2578 * Non-NEON version of omxSP_FFTInv_CCSToR_F32_Sfs 2579 */ 2580 OMXResult omxSP_FFTInv_CCSToR_F32_Sfs_vfp( 2581 const OMX_F32* pSrc, 2582 OMX_F32* pDst, 2583 const OMXFFTSpec_R_F32* pFFTSpec 2584 ); 2585 2586 /* 2587 * Just like omxSP_FFTInv_CCSToR_F32_Sfs, but automatically detects 2588 * whether NEON is available or not and chooses the appropriate 2589 * routine. 2590 */ 2591 extern OMXResult (*omxSP_FFTInv_CCSToR_F32)( 2592 const OMX_F32* pSrc, 2593 OMX_F32* pDst, 2594 const OMXFFTSpec_R_F32* pFFTSpec); 2595 #else 2596 #define omxSP_FFTInv_CCSToR_F32 omxSP_FFTInv_CCSToR_F32_Sfs 2597 #endif 2598 2599 #ifdef __cplusplus 2600 } 2601 #endif 2602 2603 #endif /** end of #define _OMXSP_H_ */ 2604 2605 /** EOF */ 2606 2607