Home | History | Annotate | Download | only in api
      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