blob: 2c0306b4e9bffea9cb80440a3995cd18db4aae88 [file] [log] [blame]
/**
* File: omxSP.h
* Brief: OpenMAX DL v1.0.2 - Signal Processing library
*
* Copyright 2005-2008 The Khronos Group Inc. All Rights Reserved.
*
* These materials are protected by copyright laws and contain material
* proprietary to the Khronos Group, Inc. You may use these materials
* for implementing Khronos specifications, without altering or removing
* any trademark, copyright or other notice from the specification.
*
* Khronos Group makes no, and expressly disclaims any, representations
* or warranties, express or implied, regarding these materials, including,
* without limitation, any implied warranties of merchantability or fitness
* for a particular purpose or non-infringement of any intellectual property.
* Khronos Group makes no, and expressly disclaims any, warranties, express
* or implied, regarding the correctness, accuracy, completeness, timeliness,
* and reliability of these materials.
*
* Under no circumstances will the Khronos Group, or any of its Promoters,
* Contributors or Members or their respective partners, officers, directors,
* employees, agents or representatives be liable for any damages, whether
* direct, indirect, special or consequential damages for lost revenues,
* lost profits, or otherwise, arising from or in connection with these
* materials.
*
* Khronos and OpenMAX are trademarks of the Khronos Group Inc.
*
*/
/* *****************************************************************************************/
#ifndef _OMXSP_H_
#define _OMXSP_H_
#include "dl/api/omxtypes.h"
#ifdef __cplusplus
extern "C" {
#endif
/* 2.1 Vendor-Specific FFT Data Structures */
typedef void OMXFFTSpec_C_SC16;
typedef void OMXFFTSpec_C_SC32;
typedef void OMXFFTSpec_R_S16S32;
typedef void OMXFFTSpec_R_S16;
typedef void OMXFFTSpec_R_S32;
typedef void OMXFFTSpec_R_F32;
typedef void OMXFFTSpec_C_FC32;
/**
* Function: omxSP_Copy_S16 (2.2.1.1.1)
*
* Description:
* Copies the len elements of the vector pointed to by pSrcinto the len
* elements of the vector pointed to by pDst. That is:
* pDst[i] = pSrc[i], for (i=0, 1, ..., len-1)
*
* Input Arguments:
*
* pSrc - pointer to the source vector
* len - number of elements contained in the source and destination vectors
*
* Output Arguments:
*
* pDst - pointer to the destination vector
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments detected; returned if one or more of
* the following is true:
* - pSrc or pDst is NULL
* - len < 0
*
*/
OMXResult omxSP_Copy_S16 (
const OMX_S16 *pSrc,
OMX_S16 *pDst,
OMX_INT len
);
/**
* Function: omxSP_DotProd_S16 (2.2.2.1.1)
*
* Description:
* Calculates the dot product of the two input vectors. This function does
* not perform scaling. The internal accumulator width must be at least 32
* bits. If any of the partially accumulated values exceeds the range of a
* signed 32-bit integer then the result is undefined.
*
* Input Arguments:
*
* pSrc1 - pointer to the first input vector; must be aligned on an 8-byte
* boundary.
* pSrc2 - pointer to the second input vector; must be aligned on an 8-byte
* boundary.
* len - length of the vectors in pSrc1 and pSrc2
*
* Output Arguments:
*
* Return Value:
*
* The dot product result Note: this function returns the actual result
* rather than the standard OMXError.
*
*/
OMX_S32 omxSP_DotProd_S16 (
const OMX_S16 *pSrc1,
const OMX_S16 *pSrc2,
OMX_INT len
);
/**
* Function: omxSP_DotProd_S16_Sfs (2.2.2.1.2)
*
* Description:
* Calculates the dot product of the two input signals with output scaling
* and saturation, i.e., the result is multiplied by two to the power of the
* negative (-)scalefactor (scaled) prior to return. The result is saturated
* with rounding if the scaling operation produces a value outside the range
* of a signed 32-bit integer. Rounding behavior is defined in section 1.6.7
* Integer Scaling and Rounding Conventions. The internal accumulator width
* must be at least 32 bits. The result is undefined if any of the partially
* accumulated values exceeds the range of a signed 32-bit integer.
*
* Input Arguments:
*
* pSrc1 - pointer to the first input vector; must be aligned on an 8-byte
* boundary.
* pSrc2 - pointer to the second input vector; must be aligned on an 8-byte
* boundary.
* len - length of the vectors in pSrc1 and pSrc2
* scaleFactor - integer scalefactor
*
* Output Arguments:
*
* Return Value:
*
* The dot product result Note: This function returns the actual result
* rather than the standard OMXError.
*
*/
OMX_S32 omxSP_DotProd_S16_Sfs (
const OMX_S16 *pSrc1,
const OMX_S16 *pSrc2,
OMX_INT len,
OMX_INT scaleFactor
);
/**
* Function: omxSP_BlockExp_S16 (2.2.2.2.2)
*
* Description:
* Block exponent calculation for 16-bit and 32-bit signals (count leading
* sign bits). These functions compute the number of extra sign bits of all
* values in the 16-bit and 32-bit input vector pSrc and return the minimum
* sign bit count. This is also the maximum shift value that could be used in
* scaling the block of data. The functions BlockExp_S16 and
* BlockExp_S32 return the values 15 and 31, respectively, for input vectors in
* which all entries are equal to zero.
*
* Note: These functions differ from other DL functions by not returning the
* standard OMXError but the actual result.
*
* Input Arguments:
*
* pSrc - pointer to the input vector
* len - number of elements contained in the input and output
* vectors (0 < len < 65536)
*
* Output Arguments:
*
* none
*
* Return Value:
*
* Maximum exponent that may be used in scaling
*
*/
OMX_INT omxSP_BlockExp_S16 (
const OMX_S16 *pSrc,
OMX_INT len
);
/**
* Function: omxSP_BlockExp_S32 (2.2.2.2.2)
*
* Description:
* Block exponent calculation for 16-bit and 32-bit signals (count leading
* sign bits). These functions compute the number of extra sign bits of all
* values in the 16-bit and 32-bit input vector pSrc and return the minimum
* sign bit count. This is also the maximum shift value that could be used in
* scaling the block of data. The functions BlockExp_S16 and
* BlockExp_S32 return the values 15 and 31, respectively, for input vectors in
* which all entries are equal to zero.
*
* Note: These functions differ from other DL functions by not returning the
* standard OMXError but the actual result.
*
* Input Arguments:
*
* pSrc - pointer to the input vector
* len - number of elements contained in the input and output
* vectors (0 < len < 65536)
*
* Output Arguments:
*
* none
*
* Return Value:
*
* Maximum exponent that may be used in scaling
*
*/
OMX_INT omxSP_BlockExp_S32 (
const OMX_S32 *pSrc,
OMX_INT len
);
/**
* Function: omxSP_FIR_Direct_S16 (2.2.3.1.1)
*
* Description:
* Block FIR filtering for 16-bit data type. This function applies the
* FIR filter defined by the coefficient vector pTapsQ15 to a vector of
* input data. The result is saturated with rounding if the operation
* produces a value outside the range of a signed 16-bit integer.
* Rounding behavior is defined in:
* section 1.6.7 "Integer Scaling and Rounding Conventions".
* The internal accumulator width must be at least 32 bits. The result
* is undefined if any of the partially accumulated values exceeds the
* range of a signed 32-bit integer.
*
*
* Input Arguments:
*
* pSrc - pointer to the vector of input samples to which the
* filter is applied
* sampLen - the number of samples contained in the input and output
* vectors
* pTapsQ15 - pointer to the vector that contains the filter coefficients,
* represented in Q0.15 format (defined in section 1.6.5). Given
* that:
* -32768 = pTapsQ15(k) < 32768,
* 0 = k <tapsLen,
* the range on the actual filter coefficients is -1 = bK <1, and
* therefore coefficient normalization may be required during the
* filter design process.
* tapsLen - the number of taps, or, equivalently, the filter order + 1
* pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
* (state). The user is responsible for allocation, initialization,
* and de-allocation. The filter memory elements are initialized to
* zero in most applications.
* pDelayLineIndex - pointer to the filter memory index that is maintained
* internally by the function. The user should initialize the value
* of this index to zero.
*
* Output Arguments:
*
* pDst - pointer to the vector of filtered output samples
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - One or more of the following pointers is NULL:
* - pSrc,
* - pDst,
* - pSrcDst,
* - pTapsQ15,
* - pDelayLine, or
* - pDelayLineIndex
* - samplen < 0
* - tapslen < 1
* - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen).
*
*/
OMXResult omxSP_FIR_Direct_S16 (
const OMX_S16 *pSrc,
OMX_S16 *pDst,
OMX_INT sampLen,
const OMX_S16 *pTapsQ15,
OMX_INT tapsLen,
OMX_S16 *pDelayLine,
OMX_INT *pDelayLineIndex
);
/**
* Function: omxSP_FIR_Direct_S16_I (2.2.3.1.1)
*
* Description:
* Block FIR filtering for 16-bit data type. This function applies the
* FIR filter defined by the coefficient vector pTapsQ15 to a vector of
* input data. The result is saturated with rounding if the operation
* produces a value outside the range of a signed 16-bit integer.
* Rounding behavior is defined in:
* section 1.6.7 "Integer Scaling and Rounding Conventions".
* The internal accumulator width must be at least 32 bits. The result
* is undefined if any of the partially accumulated values exceeds the
* range of a signed 32-bit integer.
*
* Input Arguments:
*
* pSrcDst - pointer to the vector of input samples to which the
* filter is applied
* sampLen - the number of samples contained in the input and output
* vectors
* pTapsQ15 - pointer to the vector that contains the filter coefficients,
* represented in Q0.15 format (defined in section 1.6.5). Given
* that:
* -32768 = pTapsQ15(k) < 32768,
* 0 = k <tapsLen,
* the range on the actual filter coefficients is -1 = bK <1, and
* therefore coefficient normalization may be required during the
* filter design process.
* tapsLen - the number of taps, or, equivalently, the filter order + 1
* pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
* (state). The user is responsible for allocation, initialization,
* and de-allocation. The filter memory elements are initialized to
* zero in most applications.
* pDelayLineIndex - pointer to the filter memory index that is maintained
* internally by the function. The user should initialize the value
* of this index to zero.
*
* Output Arguments:
*
* pSrcDst - pointer to the vector of filtered output samples
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - One or more of the following pointers is NULL:
* - pSrc,
* - pDst,
* - pSrcDst,
* - pTapsQ15,
* - pDelayLine, or
* - pDelayLineIndex
* - samplen < 0
* - tapslen < 1
* - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen).
*
*/
OMXResult omxSP_FIR_Direct_S16_I (
OMX_S16 *pSrcDst,
OMX_INT sampLen,
const OMX_S16 *pTapsQ15,
OMX_INT tapsLen,
OMX_S16 *pDelayLine,
OMX_INT *pDelayLineIndex
);
/**
* Function: omxSP_FIR_Direct_S16_Sfs (2.2.3.1.1)
*
* Description:
* Block FIR filtering for 16-bit data type. This function applies
* the FIR filter defined by the coefficient vector pTapsQ15 to a
* vector of input data. The output is multiplied by 2 to the negative
* power of scalefactor (i.e., 2^-scalefactor) before returning to the caller.
* Scaling and rounding conventions are defined in section 1.6.7.
* The internal accumulator width must be at least 32 bits.
* The result is undefined if any of the partially accumulated
* values exceeds the range of a signed 32-bit integer.
*
* Input Arguments:
*
* pSrc - pointer to the vector of input samples to which the
* filter is applied
* sampLen - the number of samples contained in the input and output
* vectors
* pTapsQ15 - pointer to the vector that contains the filter coefficients,
* represented in Q0.15 format (defined in section 1.6.5). Given
* that:
* -32768 = pTapsQ15(k) < 32768,
* 0 = k <tapsLen,
* the range on the actual filter coefficients is -1 = bK <1, and
* therefore coefficient normalization may be required during the
* filter design process.
* tapsLen - the number of taps, or, equivalently, the filter order + 1
* pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
* (state). The user is responsible for allocation, initialization,
* and de-allocation. The filter memory elements are initialized to
* zero in most applications.
* pDelayLineIndex - pointer to the filter memory index that is maintained
* internally by the function. The user should initialize the value
* of this index to zero.
* scaleFactor - saturation fixed scalefactor
*
* Output Arguments:
*
* pDst - pointer to the vector of filtered output samples
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - One or more of the following pointers is NULL:
* - pSrc,
* - pDst,
* - pSrcDst,
* - pTapsQ15,
* - pDelayLine, or
* - pDelayLineIndex
* - samplen < 0
* - tapslen < 1
* - scaleFactor < 0
* - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen).
*
*/
OMXResult omxSP_FIR_Direct_S16_Sfs (
const OMX_S16 *pSrc,
OMX_S16 *pDst,
OMX_INT sampLen,
const OMX_S16 *pTapsQ15,
OMX_INT tapsLen,
OMX_S16 *pDelayLine,
OMX_INT *pDelayLineIndex,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FIR_Direct_S16_ISfs (2.2.3.1.1)
*
* Description:
* Block FIR filtering for 16-bit data type. This function applies
* the FIR filter defined by the coefficient vector pTapsQ15 to a
* vector of input data. The output is multiplied by 2 to the negative
* power of scalefactor (i.e., 2^-scalefactor) before returning to the caller.
* Scaling and rounding conventions are defined in section 1.6.7.
* The internal accumulator width must be at least 32 bits.
* The result is undefined if any of the partially accumulated
* values exceeds the range of a signed 32-bit integer.
*
* Input Arguments:
*
* pSrcDst - pointer to the vector of input samples to which the
* filter is applied
* sampLen - the number of samples contained in the input and output
* vectors
* pTapsQ15 - pointer to the vector that contains the filter coefficients,
* represented in Q0.15 format (defined in section 1.6.5). Given
* that:
* -32768 = pTapsQ15(k) < 32768,
* 0 = k <tapsLen,
* the range on the actual filter coefficients is -1 = bK <1, and
* therefore coefficient normalization may be required during the
* filter design process.
* tapsLen - the number of taps, or, equivalently, the filter order + 1
* pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
* (state). The user is responsible for allocation, initialization,
* and de-allocation. The filter memory elements are initialized to
* zero in most applications.
* pDelayLineIndex - pointer to the filter memory index that is maintained
* internally by the function. The user should initialize the value
* of this index to zero.
* scaleFactor - saturation fixed scalefactor
*
* Output Arguments:
*
* pSrcDst - pointer to the vector of filtered output samples
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - One or more of the following pointers is NULL:
* - pSrc,
* - pDst,
* - pSrcDst,
* - pTapsQ15,
* - pDelayLine, or
* - pDelayLineIndex
* - samplen < 0
* - tapslen < 1
* - scaleFactor < 0
* - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen).
*
*/
OMXResult omxSP_FIR_Direct_S16_ISfs (
OMX_S16 *pSrcDst,
OMX_INT sampLen,
const OMX_S16 *pTapsQ15,
OMX_INT tapsLen,
OMX_S16 *pDelayLine,
OMX_INT *pDelayLineIndex,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FIROne_Direct_S16 (2.2.3.1.2)
*
* Description:
* Single-sample FIR filtering for 16-bit data type. These functions apply
* the FIR filter defined by the coefficient vector pTapsQ15 to a single
* sample of input data. The result is saturated with rounding if the
* operation produces a value outside the range of a signed 16-bit integer.
* Rounding behavior is defined in:
* section 1.6.7 "Integer Scaling and Rounding Conventions".
* The internal accumulator width must be at least 32 bits. The result is
* undefined if any of the partially accumulated values exceeds the range of a
* signed 32-bit integer.
*
* Input Arguments:
*
* val - the single input sample to which the filter is
* applied.
* pTapsQ15 - pointer to the vector that contains the filter coefficients,
* represented in Q0.15 format (as defined in section 1.6.5). Given
* that:
* -32768 = pTapsQ15(k) < 32768,
* 0 = k < tapsLen,
* the range on the actual filter coefficients is -1 = bK <1, and
* therefore coefficient normalization may be required during the
* filter design process.
* tapsLen - the number of taps, or, equivalently, the filter order + 1
* pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
* (state). The user is responsible for allocation, initialization,
* and de-allocation. The filter memory elements are initialized to
* zero in most applications.
* pDelayLineIndex - pointer to the filter memory index that is maintained
* internally by the function. The user should initialize the value
* of this index to zero.
*
* Output Arguments:
*
* pResult - pointer to the filtered output sample
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - One or more of the following pointers is NULL:
* - pResult,
* - pTapsQ15,
* - pDelayLine, or
* - pDelayLineIndex
* - tapslen < 1
* - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen)
*
*/
OMXResult omxSP_FIROne_Direct_S16 (
OMX_S16 val,
OMX_S16 *pResult,
const OMX_S16 *pTapsQ15,
OMX_INT tapsLen,
OMX_S16 *pDelayLine,
OMX_INT *pDelayLineIndex
);
/**
* Function: omxSP_FIROne_Direct_S16_I (2.2.3.1.2)
*
* Description:
* Single-sample FIR filtering for 16-bit data type. These functions apply
* the FIR filter defined by the coefficient vector pTapsQ15 to a single
* sample of input data. The result is saturated with rounding if the
* operation produces a value outside the range of a signed 16-bit integer.
* Rounding behavior is defined in:
* section 1.6.7 "Integer Scaling and Rounding Conventions".
* The internal accumulator width must be at least 32 bits. The result is
* undefined if any of the partially accumulated values exceeds the range of a
* signed 32-bit integer.
*
* Input Arguments:
*
* pValResult - pointer to the single input sample to which the filter is
* applied.
* pTapsQ15 - pointer to the vector that contains the filter coefficients,
* represented in Q0.15 format (as defined in section 1.6.5). Given
* that:
* -32768 = pTapsQ15(k) < 32768,
* 0 = k < tapsLen,
* the range on the actual filter coefficients is -1 = bK <1, and
* therefore coefficient normalization may be required during the
* filter design process.
* tapsLen - the number of taps, or, equivalently, the filter order + 1
* pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
* (state). The user is responsible for allocation, initialization,
* and de-allocation. The filter memory elements are initialized to
* zero in most applications.
* pDelayLineIndex - pointer to the filter memory index that is maintained
* internally by the function. The user should initialize the value
* of this index to zero.
*
* Output Arguments:
*
* pValResult - pointer to the filtered output sample
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - One or more of the following pointers is NULL:
* - pValResult,
* - pTapsQ15,
* - pDelayLine, or
* - pDelayLineIndex
* - tapslen < 1
* - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen)
*
*/
OMXResult omxSP_FIROne_Direct_S16_I (
OMX_S16 *pValResult,
const OMX_S16 *pTapsQ15,
OMX_INT tapsLen,
OMX_S16 *pDelayLine,
OMX_INT *pDelayLineIndex
);
/**
* Function: omxSP_FIROne_Direct_S16_Sfs (2.2.3.1.2)
*
* Description:
* Single-sample FIR filtering for 16-bit data type. These functions apply
* the FIR filter defined by the coefficient vector pTapsQ15 to a single
* sample of input data. The output is multiplied by 2 to the negative power
* of scalefactor (i.e., 2^-scalefactor) before returning to the user.
* Scaling and rounding conventions are defined in section 1.6.7.
* The internal accumulator width must be at least 32 bits.
* The result is undefined if any of the partially accumulated values exceeds
* the range of a signed 32-bit integer.
*
* Input Arguments:
*
* val - the single input sample to which the filter is
* applied.
* pTapsQ15 - pointer to the vector that contains the filter coefficients,
* represented in Q0.15 format (as defined in section 1.6.5). Given
* that:
* -32768 = pTapsQ15(k) < 32768,
* 0 = k < tapsLen,
* the range on the actual filter coefficients is -1 = bK <1, and
* therefore coefficient normalization may be required during the
* filter design process.
* tapsLen - the number of taps, or, equivalently, the filter order + 1
* pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
* (state). The user is responsible for allocation, initialization,
* and de-allocation. The filter memory elements are initialized to
* zero in most applications.
* pDelayLineIndex - pointer to the filter memory index that is maintained
* internally by the function. The user should initialize the value
* of this index to zero.
* scaleFactor - saturation fixed scaleFactor
*
* Output Arguments:
*
* pResult - pointer to the filtered output sample
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - One or more of the following pointers is NULL:
* - pResult,
* - pTapsQ15,
* - pDelayLine, or
* - pDelayLineIndex
* - tapslen < 1
* - scaleFactor < 0
* - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen)
*
*/
OMXResult omxSP_FIROne_Direct_S16_Sfs (
OMX_S16 val,
OMX_S16 *pResult,
const OMX_S16 *pTapsQ15,
OMX_INT tapsLen,
OMX_S16 *pDelayLine,
OMX_INT *pDelayLineIndex,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FIROne_Direct_S16_ISfs (2.2.3.1.2)
*
* Description:
* Single-sample FIR filtering for 16-bit data type. These functions apply
* the FIR filter defined by the coefficient vector pTapsQ15 to a single
* sample of input data. The output is multiplied by 2 to the negative power
* of scalefactor (i.e., 2^-scalefactor) before returning to the user.
* Scaling and rounding conventions are defined in section 1.6.7.
* The internal accumulator width must be at least 32 bits.
* The result is undefined if any of the partially accumulated values exceeds
* the range of a signed 32-bit integer.
*
* Input Arguments:
*
* pValResult - the pointer to a single input sample to which the filter is
* applied.
* pTapsQ15 - pointer to the vector that contains the filter coefficients,
* represented in Q0.15 format (as defined in section 1.6.5). Given
* that:
* -32768 = pTapsQ15(k) < 32768,
* 0 = k < tapsLen,
* the range on the actual filter coefficients is -1 = bK <1, and
* therefore coefficient normalization may be required during the
* filter design process.
* tapsLen - the number of taps, or, equivalently, the filter order + 1
* pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
* (state). The user is responsible for allocation, initialization,
* and de-allocation. The filter memory elements are initialized to
* zero in most applications.
* pDelayLineIndex - pointer to the filter memory index that is maintained
* internally by the function. The user should initialize the value
* of this index to zero.
* scaleFactor - saturation fixed scaleFactor
*
* Output Arguments:
*
* pValResult - pointer to the filtered output sample
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - One or more of the following pointers is NULL:
* - pValResult,
* - pTapsQ15,
* - pDelayLine, or
* - pDelayLineIndex
* - tapslen < 1
* - scaleFactor < 0
* - *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen)
*
*/
OMXResult omxSP_FIROne_Direct_S16_ISfs (
OMX_S16 *pValResult,
const OMX_S16 *pTapsQ15,
OMX_INT tapsLen,
OMX_S16 *pDelayLine,
OMX_INT *pDelayLineIndex,
OMX_INT scaleFactor
);
/**
* Function: omxSP_IIR_Direct_S16 (2.2.3.2.1)
*
* Description:
* Block IIR filtering for 16-bit data. This function applies the direct form
* II IIR filter defined by the coefficient vector pTaps to a vector of input
* data. The internal accumulator width must be at least 32 bits, and the
* result is saturated if the operation produces a value outside the range of
* a signed 16-bit integer, i.e., the output will saturate to 0x8000 (-32768)
* for a negative overflow or 0x7fff (32767) for a positive overflow. The
* result is undefined if any of the partially accumulated values exceeds the
* range of a signed 32-bit integer.
*
* Input Arguments:
*
* pSrc - pointer to the vector of input samples to which the
* filter is applied
* len - the number of samples contained in both the input and output
* vectors
* pTaps - pointer to the 2L+2-element vector that contains the combined
* numerator and denominator filter coefficients from the system
* transfer function, H(z). Coefficient scaling and coefficient
* vector organization should follow the conventions described
* above. The value of the coefficient scaleFactor exponent must be
* non-negative (sf=0).
* order - the maximum of the degrees of the numerator and denominator
* coefficient polynomials from the system transfer function, H(z).
* In the notation of section 2.2.3.2, the parameter
* order=max(K,M)=L gives the maximum delay, in samples, used to
* compute each output sample.
* pDelayLine - pointer to the L-element filter memory buffer (state). The
* user is responsible for allocation, initialization, and
* deallocation. The filter memory elements are initialized to zero
* in most applications.
*
* Output Arguments:
*
* pDst - pointer to the vector of filtered output samples
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - one or more of the following pointers is NULL:
* - pSrc,
* - pDst,
* - pTaps, or
* - pDelayLine.
* - len < 0
* - pTaps[order+1] < 0 (negative scaling)
* - order < 1
*
*/
OMXResult omxSP_IIR_Direct_S16 (
const OMX_S16 *pSrc,
OMX_S16 *pDst,
OMX_INT len,
const OMX_S16 *pTaps,
OMX_INT order,
OMX_S32 *pDelayLine
);
/**
* Function: omxSP_IIR_Direct_S16_I (2.2.3.2.1)
*
* Description:
* Block IIR filtering for 16-bit data. This function applies the direct form
* II IIR filter defined by the coefficient vector pTaps to a vector of input
* data. The internal accumulator width must be at least 32 bits, and the
* result is saturated if the operation produces a value outside the range of
* a signed 16-bit integer, i.e., the output will saturate to 0x8000 (-32768)
* for a negative overflow or 0x7fff (32767) for a positive overflow. The
* result is undefined if any of the partially accumulated values exceeds the
* range of a signed 32-bit integer.
*
* Input Arguments:
*
* pSrcDst - pointer to the vector of input samples to which the
* filter is applied
* len - the number of samples contained in both the input and output
* vectors
* pTaps - pointer to the 2L+2-element vector that contains the combined
* numerator and denominator filter coefficients from the system
* transfer function, H(z). Coefficient scaling and coefficient
* vector organization should follow the conventions described
* above. The value of the coefficient scaleFactor exponent must be
* non-negative (sf>=0).
* order - the maximum of the degrees of the numerator and denominator
* coefficient polynomials from the system transfer function, H(z).
* In the notation of section 2.2.3.2, the parameter
* order=max(K,M)=L gives the maximum delay, in samples, used to
* compute each output sample.
* pDelayLine - pointer to the L-element filter memory buffer (state). The
* user is responsible for allocation, initialization, and
* deallocation. The filter memory elements are initialized to zero
* in most applications.
*
* Output Arguments:
*
* pSrcDst - pointer to the vector of filtered output samples
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - one or more of the following pointers is NULL:
* - pSrcDst,
* - pTaps, or
* - pDelayLine.
* - len < 0
* - pTaps[order+1] < 0 (negative scaling)
* - order < 1
*
*/
OMXResult omxSP_IIR_Direct_S16_I (
OMX_S16 *pSrcDst,
OMX_INT len,
const OMX_S16 *pTaps,
OMX_INT order,
OMX_S32 *pDelayLine
);
/**
* Function: omxSP_IIROne_Direct_S16 (2.2.3.2.2)
*
* Description:
* Single sample IIR filtering for 16-bit data. This function applies the
* direct form II IIR filter defined by the coefficient vector pTaps to a
* single sample of input data. The internal accumulator width must be at
* least 32 bits, and the result is saturated if the operation produces a
* value outside the range of a signed 16-bit integer, i.e., the output will
* saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a
* positive overflow. The result is undefined if any of the partially
* accumulated values exceeds the range of a signed 32-bit integer.
*
* Input Arguments:
*
* val - the single input sample to which the filter is
* applied.
* pTaps - pointer to the 2L+2 -element vector that contains the combined
* numerator and denominator filter coefficients from the system
* transfer function, H(z). Coefficient scaling and coefficient
* vector organization should follow the conventions described
* above. The value of the coefficient scaleFactor exponent must be
* non-negative (sf>=0).
* order - the maximum of the degrees of the numerator and denominator
* coefficient polynomials from the system transfer function, H(z).
* In the notation of section 2.2.3.2, the parameter
* order=max(K,M)=L gives the maximum delay, in samples, used to
* compute each output sample.
* pDelayLine - pointer to the L-element filter memory buffer (state). The
* user is responsible for allocation, initialization, and
* deallocation. The filter memory elements are initialized to zero
* in most applications.
*
* Output Arguments:
*
* pResult - pointer to the filtered output sample
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - one or more of the following pointers is NULL: pResult,
* pTaps, or pDelayLine.
* - order < 1
* - pTaps[order+1] < 0 (negative scaling)
*
*/
OMXResult omxSP_IIROne_Direct_S16 (
OMX_S16 val,
OMX_S16 *pResult,
const OMX_S16 *pTaps,
OMX_INT order,
OMX_S32 *pDelayLine
);
/**
* Function: omxSP_IIROne_Direct_S16_I (2.2.3.2.2)
*
* Description:
* Single sample IIR filtering for 16-bit data. This function applies the
* direct form II IIR filter defined by the coefficient vector pTaps to a
* single sample of input data. The internal accumulator width must be at
* least 32 bits, and the result is saturated if the operation produces a
* value outside the range of a signed 16-bit integer, i.e., the output will
* saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a
* positive overflow. The result is undefined if any of the partially
* accumulated values exceeds the range of a signed 32-bit integer.
*
* Input Arguments:
*
* pValResult - pointer to the single input sample to which the filter is
* applied.
* pTaps - pointer to the 2L+2 -element vector that contains the combined
* numerator and denominator filter coefficients from the system
* transfer function, H(z). Coefficient scaling and coefficient
* vector organization should follow the conventions described
* above. The value of the coefficient scaleFactor exponent must be
* non-negative (sf>=0).
* order - the maximum of the degrees of the numerator and denominator
* coefficient polynomials from the system transfer function, H(z).
* In the notation of section 2.2.3.2, the parameter
* order=max(K,M)=L gives the maximum delay, in samples, used to
* compute each output sample.
* pDelayLine - pointer to the L-element filter memory buffer (state). The
* user is responsible for allocation, initialization, and
* deallocation. The filter memory elements are initialized to zero
* in most applications.
*
* Output Arguments:
*
* pValResult - pointer to the filtered output sample
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - one or more of the following pointers is NULL:
* pValResult, pTaps, or pDelayLine.
* - order < 1
* - pTaps[order+1] < 0 (negative scaling)
*
*/
OMXResult omxSP_IIROne_Direct_S16_I (
OMX_S16 *pValResult,
const OMX_S16 *pTaps,
OMX_INT order,
OMX_S32 *pDelayLine
);
/**
* Function: omxSP_IIR_BiQuadDirect_S16 (2.2.3.3.1)
*
* Description:
* Block biquad IIR filtering for 16-bit data type. This function applies the
* direct form II biquad IIR cascade defined by the coefficient vector pTaps
* to a vector of input data. The internal accumulator width must be at least
* 32 bits, and the result is saturated if the operation produces a value
* outside the range of a signed 16-bit integer, i.e., the output will
* saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a
* positive overflow. The result is undefined if any of the partially
* accumulated values exceeds the range of a signed 32-bit integer.
*
* Input Arguments:
*
* pSrc - pointer to the vector of input samples to which the
* filter is applied
* len - the number of samples contained in both the input and output
* vectors
* pTaps - pointer to the 6P -element vector that contains the combined
* numerator and denominator filter coefficients from the biquad
* cascade. Coefficient scaling and coefficient vector organization
* should follow the conventions described above. The value of the
* coefficient scaleFactor exponent must be non-negative. (sfp>=0).
* numBiquad - the number of biquads contained in the IIR filter cascade:
* (P)
* pDelayLine - pointer to the 2P -element filter memory buffer (state).
* The user is responsible for allocation, initialization, and
* de-allocation. The filter memory elements are initialized to
* zero in most applications.
*
* Output Arguments:
*
* pDst - pointer to the vector of filtered output samples
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - one or more of the following pointers is NULL: pSrc, pDst,
* pTaps, or pDelayLine.
* - len < 0
* - numBiquad < 1
* - pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling)
*
*/
OMXResult omxSP_IIR_BiQuadDirect_S16 (
const OMX_S16 *pSrc,
OMX_S16 *pDst,
OMX_INT len,
const OMX_S16 *pTaps,
OMX_INT numBiquad,
OMX_S32 *pDelayLine
);
/**
* Function: omxSP_IIR_BiQuadDirect_S16_I (2.2.3.3.1)
*
* Description:
* Block biquad IIR filtering for 16-bit data type. This function applies the
* direct form II biquad IIR cascade defined by the coefficient vector pTaps
* to a vector of input data. The internal accumulator width must be at least
* 32 bits, and the result is saturated if the operation produces a value
* outside the range of a signed 16-bit integer, i.e., the output will
* saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a
* positive overflow. The result is undefined if any of the partially
* accumulated values exceeds the range of a signed 32-bit integer.
*
* Input Arguments:
*
* pSrcDst - pointer to the vector of input samples to which the
* filter is applied
* len - the number of samples contained in both the input and output
* vectors
* pTaps - pointer to the 6P -element vector that contains the combined
* numerator and denominator filter coefficients from the biquad
* cascade. Coefficient scaling and coefficient vector organization
* should follow the conventions described above. The value of the
* coefficient scaleFactor exponent must be non-negative. (sfp>=0).
* numBiquad - the number of biquads contained in the IIR filter cascade:
* (P)
* pDelayLine - pointer to the 2P -element filter memory buffer (state).
* The user is responsible for allocation, initialization, and
* de-allocation. The filter memory elements are initialized to
* zero in most applications.
*
* Output Arguments:
*
* pSrcDst - pointer to the vector of filtered output samples
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - one or more of the following pointers is NULL:
* pSrcDst, pTaps, or pDelayLine.
* - len < 0
* - numBiquad < 1
* - pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling)
*
*/
OMXResult omxSP_IIR_BiQuadDirect_S16_I (
OMX_S16 *pSrcDst,
OMX_INT len,
const OMX_S16 *pTaps,
OMX_INT numBiquad,
OMX_S32 *pDelayLine
);
/**
* Function: omxSP_IIROne_BiQuadDirect_S16 (2.2.3.3.2)
*
* Description:
* Single-sample biquad IIR filtering for 16-bit data type. This function
* applies the direct form II biquad IIR cascade defined by the coefficient
* vector pTaps to a single sample of input data. The internal accumulator
* width must be at least 32 bits, and the result is saturated if the
* operation produces a value outside the range of a signed 16-bit integer,
* i.e., the output will saturate to 0x8000 (-32768) for a negative overflow
* or 0x7fff (32767) for a positive overflow. The result is undefined if any
* of the partially accumulated values exceeds the range of a signed 32-bit
* integer.
*
* Input Arguments:
*
* val - the single input sample to which the filter is
* applied.
* pTaps - pointer to the 6P-element vector that contains the combined
* numerator and denominator filter coefficients from the biquad
* cascade. Coefficient scaling and coefficient vector organization
* should follow the conventions described above. The value of the
* coefficient scalefactor exponent must be non-negative: (sfp>=0).
* numBiquad - the number of biquads contained in the IIR filter cascade:
* (P)
* pDelayLine - pointer to the 2p-element filter memory buffer (state). The
* user is responsible for allocation, initialization, and
* deallocation. The filter memory elements are initialized to zero
* in most applications.
*
* Output Arguments:
*
* pResult - pointer to the filtered output sample
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - one or more of the following pointers is NULL: pResult,
* pValResult, pTaps, or pDelayLine.
* - numBiquad < 1
* - pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling)
*
*/
OMXResult omxSP_IIROne_BiQuadDirect_S16 (
OMX_S16 val,
OMX_S16 *pResult,
const OMX_S16 *pTaps,
OMX_INT numBiquad,
OMX_S32 *pDelayLine
);
/**
* Function: omxSP_IIROne_BiQuadDirect_S16_I (2.2.3.3.2)
*
* Description:
* Single-sample biquad IIR filtering for 16-bit data type. This function
* applies the direct form II biquad IIR cascade defined by the coefficient
* vector pTaps to a single sample of input data. The internal accumulator
* width must be at least 32 bits, and the result is saturated if the
* operation produces a value outside the range of a signed 16-bit integer,
* i.e., the output will saturate to 0x8000 (-32768) for a negative overflow
* or 0x7fff (32767) for a positive overflow. The result is undefined if any
* of the partially accumulated values exceeds the range of a signed 32-bit
* integer.
*
* Input Arguments:
*
* pValResult - pointer to the single input sample to which the filter is
* applied.
* pTaps - pointer to the 6P-element vector that contains the combined
* numerator and denominator filter coefficients from the biquad
* cascade. Coefficient scaling and coefficient vector organization
* should follow the conventions described above. The value of the
* coefficient scalefactor exponent must be non-negative: (sfp>=0).
* numBiquad - the number of biquads contained in the IIR filter cascade:
* (P)
* pDelayLine - pointer to the 2p-element filter memory buffer (state). The
* user is responsible for allocation, initialization, and
* deallocation. The filter memory elements are initialized to zero
* in most applications.
*
* Output Arguments:
*
* pValResult - pointer to the filtered output sample
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - one or more of the following pointers is NULL:
* pValResult, pTaps, or pDelayLine.
* - numBiquad < 1
* - pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling)
*
*/
OMXResult omxSP_IIROne_BiQuadDirect_S16_I (
OMX_S16 *pValResult,
const OMX_S16 *pTaps,
OMX_INT numBiquad,
OMX_S32 *pDelayLine
);
/**
* Function: omxSP_FilterMedian_S32 (2.2.3.4.1)
*
* Description:
* This function computes the median over the region specified by the median
* mask for the every element of the input array. The median outputs are
* stored in the corresponding elements of the output vector.
*
* Input Arguments:
*
* pSrc - pointer to the input vector
* len - number of elements contained in the input and output vectors (0 <
* len < 65536)
* maskSize - median mask size; if an even value is specified, the function
* subtracts 1 and uses the odd value of the filter mask for median
* filtering (0 < maskSize < 256)
*
* Output Arguments:
*
* pDst - pointer to the median-filtered output vector
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - one or more of the following pointers is NULL: pSrc, pDst.
* - len < 0
* - maskSize < 1 or maskSize> 255
* OMX_StsSP_EvenMedianMaskSizeErr - even mask size replaced by odd mask
* size
*
*/
OMXResult omxSP_FilterMedian_S32 (
const OMX_S32 *pSrc,
OMX_S32 *pDst,
OMX_INT len,
OMX_INT maskSize
);
/**
* Function: omxSP_FilterMedian_S32_I (2.2.3.4.1)
*
* Description:
* This function computes the median over the region specified by the median
* mask for the every element of the input array. The median outputs are
* stored in the corresponding elements of the output vector.
*
* Input Arguments:
*
* pSrcDst - pointer to the input vector
* len - number of elements contained in the input and output vectors (0 <
* len < 65536)
* maskSize - median mask size; if an even value is specified, the function
* subtracts 1 and uses the odd value of the filter mask for median
* filtering (0 < maskSize < 256)
*
* Output Arguments:
*
* pSrcDst - pointer to the median-filtered output vector
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pSrcDst is NULL.
* - len < 0
* - maskSize < 1 or maskSize> 255
* OMX_StsSP_EvenMedianMaskSizeErr - even mask size replaced by odd mask
* size
*
*/
OMXResult omxSP_FilterMedian_S32_I (
OMX_S32 *pSrcDst,
OMX_INT len,
OMX_INT maskSize
);
/**
* Function: omxSP_FFTInit_C_SC16 (2.2.4.1.2)
*
* Description:
* These functions initialize the specification structures required for the
* complex FFT and IFFT functions. Desired block length is specified as an
* input. The function <FFTInit_C_SC16> is used to initialize the
* specification structures for functions <FFTFwd_CToC_SC16_Sfs> and
* <FFTInv_CToC_SC16_Sfs>.
*
* Memory for the specification structure *pFFTSpec
* must be allocated prior to calling these functions and should be 4-byte
* aligned for omxSP_FFTInit_C_SC16.
*
* The space required for *pFFTSpec, in bytes, can be
* determined using <FFTGetBufSize_C_SC16>.
*
* Input Arguments:
*
* order - base-2 logarithm of the desired block length;
* valid in the range [0,12]
*
* Output Arguments:
*
* pFFTSpec - pointer to initialized specification structure
*
* Return Value:
*
* OMX_Sts_NoErr -no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pFFTSpec is either NULL or violates the 4-byte alignment
* restrictions
* - order < 0 or order > 12
*
*/
OMXResult omxSP_FFTInit_C_SC16 (
OMXFFTSpec_C_SC16 *pFFTSpec,
OMX_INT order
);
/**
* Function: omxSP_FFTInit_C_SC32 (2.2.4.1.2)
*
* Description:
* These functions initialize the specification structures required for the
* complex FFT and IFFT functions. Desired block length is specified as an
* input. The function <FFTInit_C_SC32> is used to initialize
* the specification structures for the functions <FFTFwd_CToC_SC32_Sfs> and
* <FFTInv_CToC_SC32_Sfs>.
*
* Memory for the specification structure *pFFTSpec must be allocated prior
* to calling these functions and should be 8-byte aligned for
* omxSP_FFTInit_C_SC32.
*
* The space required for *pFFTSpec, in bytes, can be
* determined using <FFTGetBufSize_C_SC32>.
*
* Input Arguments:
*
* order - base-2 logarithm of the desired block length; valid in the range
* [0,12]
*
* Output Arguments:
*
* pFFTSpec - pointer to initialized specification structure
*
* Return Value:
*
* OMX_Sts_NoErr -no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pFFTSpec is either NULL or violates the 8-byte alignment
* restrictions
* - order < 0 or order > 12
*
*/
OMXResult omxSP_FFTInit_C_SC32 (
OMXFFTSpec_C_SC32 *pFFTSpec,
OMX_INT order
);
/**
* Function: omxSP_FFTInit_C_FC32 (2.2.4.1.2)
*
* Description:
* These functions initialize the specification structures required for the
* complex FFT and IFFT functions. Desired block length is specified as an
* input. The function <FFTInit_C_FC32> is used to initialize
* the specification structures for the functions <FFTFwd_CToC_FC32_Sfs> and
* <FFTInv_CToC_FC32_Sfs>.
*
* Memory for the specification structure *pFFTSpec must be allocated prior
* to calling these functions and should be 8-byte aligned for
* omxSP_FFTInit_C_FC32.
*
* The space required for *pFFTSpec, in bytes, can be
* determined using <FFTGetBufSize_C_FC32>.
*
* Input Arguments:
*
* order - base-2 logarithm of the desired block length; valid in the range
* [1,15]
*
* Output Arguments:
*
* pFFTSpec - pointer to initialized specification structure
*
* Return Value:
*
* OMX_Sts_NoErr -no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pFFTSpec is either NULL or violates the 8-byte alignment
* restrictions
* - order < 1 or order > 15
*
*/
OMXResult omxSP_FFTInit_C_FC32(
OMXFFTSpec_C_FC32* pFFTSpec,
OMX_INT order
);
/**
* Function: omxSP_FFTInit_R_S16S32 (2.2.4.1.4)
*
* Description:
* These functions initialize specification structures required for the real
* FFT and IFFT functions. The function <FFTInit_R_S16S32> is used to
* initialize the specification structures for functions
* <FFTFwd_RToCCS_S16S32_Sfs> and <FFTInv_CCSToR_S32S16_Sfs>.
*
* Memory for
* *pFFTFwdSpec must be allocated before calling these functions and should be
* 8-byte aligned. The number of bytes required for *pFFTFwdSpec can be
* determined using <FFTGetBufSize_R_S16S32>.
*
* Input Arguments:
*
* order - base-2 logarithm of the desired block length; valid in the range
* [0,12]
*
* Output Arguments:
*
* pFFTFwdSpec - pointer to the initialized specification structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pFFTFwdSpec is either NULL or violates the 8-byte alignment
* restrictions
* - order < 0 or order > 12
*
*/
OMXResult omxSP_FFTInit_R_S16S32(
OMXFFTSpec_R_S16S32* pFFTFwdSpec,
OMX_INT order
);
/**
* Function: omxSP_FFTInit_R_S16
*
* Description:
* These functions initialize specification structures required for the real
* FFT and IFFT functions. The function <FFTInit_R_S16> is used
* to initialize the specification structures for functions
* <FFTFwd_RToCCS_S16_Sfs> and <FFTInv_CCSToR_S16_Sfs>.
*
* Memory for *pFFTFwdSpec must be allocated before calling these functions
* and should be 8-byte aligned.
*
* The number of bytes required for *pFFTFwdSpec can be
* determined using <FFTGetBufSize_R_S16>.
*
* Input Arguments:
*
* order - base-2 logarithm of the desired block length; valid in the range
* [1,12]
*
* Output Arguments:
*
* pFFTFwdSpec - pointer to the initialized specification structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pFFTFwdSpec is either NULL or violates the 8-byte alignment
* restrictions
* - order < 1 or order > 12
*
*/
OMXResult omxSP_FFTInit_R_S16 (
OMXFFTSpec_R_S32*pFFTFwdSpec,
OMX_INT order
);
/**
* Function: omxSP_FFTInit_R_S32 (2.2.4.1.4)
*
* Description:
* These functions initialize specification structures required for the real
* FFT and IFFT functions. The function <FFTInit_R_S32> is used to initialize
* the specification structures for functions <FFTFwd_RToCCS_S32_Sfs>
* and <FFTInv_CCSToR_S32_Sfs>.
*
* Memory for *pFFTFwdSpec must be allocated before calling these functions
* and should be 8-byte aligned.
*
* The number of bytes required for *pFFTFwdSpec can be
* determined using <FFTGetBufSize_R_S32>.
*
* Input Arguments:
*
* order - base-2 logarithm of the desired block length; valid in the range
* [0,12]
*
* Output Arguments:
*
* pFFTFwdSpec - pointer to the initialized specification structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pFFTFwdSpec is either NULL or violates the 8-byte alignment
* restrictions
* - order < 0 or order > 12
*
*/
OMXResult omxSP_FFTInit_R_S32 (
OMXFFTSpec_R_S32*pFFTFwdSpec,
OMX_INT order
);
/**
* Function: omxSP_FFTInit_R_F32
*
* Description:
* These functions initialize specification structures required for the real
* FFT and IFFT functions. The function <FFTInit_R_F32> is used to initialize
* the specification structures for functions <FFTFwd_RToCCS_F32_Sfs>
* and <FFTInv_CCSToR_F32_Sfs>.
*
* Memory for *pFFTFwdSpec must be allocated before calling these functions
* and should be 8-byte aligned.
*
* The number of bytes required for *pFFTFwdSpec can be
* determined using <FFTGetBufSize_R_F32>.
*
* Input Arguments:
*
* order - base-2 logarithm of the desired block length; valid in the range
* [1,15]
*
* Output Arguments:
*
* pFFTFwdSpec - pointer to the initialized specification structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pFFTFwdSpec is either NULL or violates the 8-byte alignment
* restrictions
* - order < 1 or order > 15
*
*/
OMXResult omxSP_FFTInit_R_F32(
OMXFFTSpec_R_F32* pFFTFwdSpec,
OMX_INT order
);
/**
* Function: omxSP_FFTGetBufSize_C_SC16 (2.2.4.1.6)
*
* Description:
* These functions compute the size of the specification structure
* required for the length 2^order complex FFT and IFFT functions. The function
* <FFTGetBufSize_C_SC16> is used in conjunction with the 16-bit functions
* <FFTFwd_CToC_SC16_Sfs> and <FFTInv_CToC_SC16_Sfs>.
*
* Input Arguments:
*
* order - base-2 logarithm of the desired block length; valid in the range
* [0,12]
*
* Output Arguments:
*
* pSize - pointer to the number of bytes required for the specification
* structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pSize is NULL
* - order < 0 or order > 12
*
*/
OMXResult omxSP_FFTGetBufSize_C_SC16 (
OMX_INT order,
OMX_INT *pSize
);
/**
* Function: omxSP_FFTGetBufSize_C_SC32 (2.2.4.1.6)
*
* Description:
* These functions compute the size of the specification structure
* required for the length 2^order complex FFT and IFFT functions. The function
* <FFTGetBufSize_C_SC32> is used in conjunction with the 32-bit functions
* <FFTFwd_CToC_SC32_Sfs> and <FFTInv_CToC_SC32_Sfs>.
*
* Input Arguments:
*
* order - base-2 logarithm of the desired block length; valid in the range
* [0,12]
*
* Output Arguments:
*
* pSize - pointer to the number of bytes required for the specification
* structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pSize is NULL
* - order < 0 or order > 12
*
*/
OMXResult omxSP_FFTGetBufSize_C_SC32 (
OMX_INT order,
OMX_INT *pSize
);
/**
* Function: omxSP_FFTGetBufSize_C_FC32
*
* Description:
* These functions compute the size of the specification structure
* required for the length 2^order complex FFT and IFFT functions. The function
* <FFTGetBufSize_C_FC32> is used in conjunction with the 32-bit functions
* <FFTFwd_CToC_FC32_Sfs> and <FFTInv_CToC_FC32_Sfs>.
*
* Input Arguments:
*
* order - base-2 logarithm of the desired block length; valid in the range
* [1,15]
*
* Output Arguments:
*
* pSize - pointer to the number of bytes required for the specification
* structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
* following is true:
* - pSize is NULL
* - order < 1 or order > 15
*
*/
OMXResult omxSP_FFTGetBufSize_C_FC32(
OMX_INT order,
OMX_INT* pSize
);
/**
* Function: omxSP_FFTGetBufSize_R_S16S32 (2.2.4.1.8)
*
* Description:
* order These functions compute the size of the specification structure
* required for the length 2^order real FFT and IFFT functions. The function
* <FFTGetBufSize_R_S16S32> is used in conjunction with the 16-bit functions
* <FFTFwd_RToCCS_S16S32_Sfs> and <FFTInv_CCSToR_S32S16_Sfs>.
*
* Input Arguments:
*
* order - base-2 logarithm of the length; valid in the range [0,12]
*
* Output Arguments:
*
* pSize - pointer to the number of bytes required for the specification
* structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments The function returns
* OMX_Sts_BadArgErr if one or more of the following is true:
* pSize is NULL
* order < 0 or order > 12
*
*/
OMXResult omxSP_FFTGetBufSize_R_S16S32(
OMX_INT order,
OMX_INT* pSize
);
/**
* Function: omxSP_FFTGetBufSize_R_S16
*
* Description:
* These functions compute the size of the specification structure
* required for the length 2^order real FFT and IFFT functions. The function
* <FFTGetBufSize_R_S16> is used in conjunction with the 16-bit
* functions <FFTFwd_RToCCS_S16_Sfs> and <FFTInv_CCSToR_S16_Sfs>.
*
* Input Arguments:
*
* order - base-2 logarithm of the length; valid in the range
* [1,12]
*
* Output Arguments:
*
* pSize - pointer to the number of bytes required for the specification
* structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments The function returns
* OMX_Sts_BadArgErr if one or more of the following is true:
* pSize is NULL
* order < 1 or order > 12
*
*/
OMXResult omxSP_FFTGetBufSize_R_S16 (
OMX_INT order,
OMX_INT *pSize
);
/**
* Function: omxSP_FFTGetBufSize_R_S32 (2.2.4.1.8)
*
* Description:
* These functions compute the size of the specification structure
* required for the length 2^order real FFT and IFFT functions. The function
* <FFTGetBufSize_R_S32> is used in conjunction with the 32-bit functions
* <FFTFwd_RToCCS_S32_Sfs> and <FFTInv_CCSToR_S32_Sfs>.
*
* Input Arguments:
*
* order - base-2 logarithm of the length; valid in the range [0,12]
*
* Output Arguments:
*
* pSize - pointer to the number of bytes required for the specification
* structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments The function returns
* OMX_Sts_BadArgErr if one or more of the following is true:
* pSize is NULL
* order < 0 or order > 12
*
*/
OMXResult omxSP_FFTGetBufSize_R_S32 (
OMX_INT order,
OMX_INT *pSize
);
/**
* Function: omxSP_FFTGetBufSize_R_F32
*
* Description:
* These functions compute the size of the specification structure
* required for the length 2^order real FFT and IFFT functions. The function
* <FFTGetBufSize_R_F32> is used in conjunction with the 32-bit functions
* <FFTFwd_RToCCS_F32_Sfs> and <FFTInv_CCSToR_F32_Sfs>.
*
* Input Arguments:
*
* order - base-2 logarithm of the length; valid in the range [1,15]
*
* Output Arguments:
*
* pSize - pointer to the number of bytes required for the specification
* structure
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments The function returns
* OMX_Sts_BadArgErr if one or more of the following is true:
* pSize is NULL
* order < 1 or order > 15
*
*/
OMXResult omxSP_FFTGetBufSize_R_F32(
OMX_INT order,
OMX_INT* pSize
);
/**
* Function: omxSP_FFTFwd_CToC_SC16_Sfs (2.2.4.2.2)
*
* Description:
* Compute an FFT for a complex signal of length of 2^order,
* where 0 <= order <= 12.
* Transform length is determined by the specification structure, which
* must be initialized prior to calling the FFT function using the appropriate
* helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship
* between the input and output sequences can be expressed in terms of the
* DFT, i.e.,
*
* X[k] = 2^(-scaleFactor) . SUM[n=0...N-1]x[n].e^(-jnk.2.pi/N)
* k = 0,1,2,..., N-1
* N = 2^order
*
* Input Arguments:
* pSrc - pointer to the input signal, a complex-valued vector of length 2^order;
* must be aligned on a 32 byte boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
* scaleFactor - output scale factor; the range for is [0,16]
*
* Output Arguments:
* pDst - pointer to the complex-valued output vector, of length 2^order;
* must be aligned on an 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - returned if one or more of the following conditions
* is true:
* - one or more of the following pointers is NULL: pSrc, pDst, or
* pFFTSpec.
* - pSrc or pDst is not 32-byte aligned
* - scaleFactor<0 or scaleFactor>16
*
*/
OMXResult omxSP_FFTFwd_CToC_SC16_Sfs (
const OMX_SC16 *pSrc,
OMX_SC16 *pDst,
const OMXFFTSpec_C_SC16 *pFFTSpec,
OMX_INT scaleFactor
);
OMXResult omxSP_FFTFwd_CToC_SC16_Sfs_neon (
const OMX_SC16 *pSrc,
OMX_SC16 *pDst,
const OMXFFTSpec_C_SC16 *pFFTSpec,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FFTFwd_CToC_SC32_Sfs (2.2.4.2.2)
*
* Description:
* Compute an FFT for a complex signal of length of 2^order,
* where 0 <= order <= 12.
* Transform length is determined by the specification structure, which
* must be initialized prior to calling the FFT function using the appropriate
* helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship
* between the input and output sequences can be expressed in terms of the
* DFT, i.e.,
*
* X[k] = 2^(-scaleFactor) . SUM[n=0...N-1]x[n].e^(-jnk.2.pi/N)
* k = 0,1,2,..., N-1
* N = 2^order
*
* Input Arguments:
* pSrc - pointer to the input signal, a complex-valued vector of length 2^order;
* must be aligned on a 32 byte boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
* scaleFactor - output scale factor; the range is [0,32]
*
* Output Arguments:
* pDst - pointer to the complex-valued output vector, of length 2^order; must be
* aligned on an 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - returned if one or more of the following conditions
* is true:
* - one or more of the following pointers is NULL: pSrc, pDst, or
* pFFTSpec.
* - pSrc or pDst is not 32-byte aligned
* - scaleFactor<0 or scaleFactor >32
*
*/
OMXResult omxSP_FFTFwd_CToC_SC32_Sfs (
const OMX_SC32 *pSrc,
OMX_SC32 *pDst,
const OMXFFTSpec_C_SC32 *pFFTSpec,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FFTInv_CToC_SC16_Sfs (2.2.4.2.4)
*
* Description:
* These functions compute an inverse FFT for a complex signal of length
* of 2^order, where 0 <= order <= 12. Transform length is determined by the
* specification structure, which must be initialized prior to calling the FFT
* function using the appropriate helper, i.e., <FFTInit_C_sc32> or
* <FFTInit_C_SC16>. The relationship between the input and output sequences
* can be expressed in terms of the IDFT, i.e.:
*
* x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
* n=0,1,2,...N-1
* N=2^order.
*
* Input Arguments:
* pSrc - pointer to the complex-valued input signal, of length 2^order ;
* must be aligned on a 32-byte boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
* scaleFactor - scale factor of the output. Valid range is [0,16].
*
* Output Arguments:
* order
* pDst - pointer to the complex-valued output signal, of length 2^order;
* must be aligned on a 32-byte boundary.
*
* Return Value:
*
* Positive value - the shift scale that was performed inside
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - returned if one or more of the following conditions
* is true:
* - one or more of the following pointers is NULL: pSrc, pDst, or
* pFFTSpec.
* - pSrc or pDst is not 32-byte aligned
* - scaleFactor<0 or scaleFactor>16
*
*/
OMXResult omxSP_FFTInv_CToC_SC16_Sfs (
const OMX_SC16 *pSrc,
OMX_SC16 *pDst,
const OMXFFTSpec_C_SC16 *pFFTSpec,
OMX_INT scaleFactor
);
OMXResult omxSP_FFTInv_CToC_SC16_Sfs_neon (
const OMX_SC16 *pSrc,
OMX_SC16 *pDst,
const OMXFFTSpec_C_SC16 *pFFTSpec,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FFTInv_CToC_SC32_Sfs (2.2.4.2.4)
*
* Description:
* These functions compute an inverse FFT for a complex signal of length
* of 2^order, where 0 <= order <= 12. Transform length is determined by the
* specification structure, which must be initialized prior to calling the FFT
* function using the appropriate helper, i.e., <FFTInit_C_sc32> or
* <FFTInit_C_SC16>. The relationship between the input and output sequences
* can be expressed in terms of the IDFT, i.e.:
*
* x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
* n=0,1,2,...N-1
* N=2^order.
*
* Input Arguments:
* pSrc - pointer to the complex-valued input signal, of length 2^order ;
* must be aligned on a 32-byte boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
* scaleFactor - scale factor of the output. Valid range is [0,32].
*
* Output Arguments:
* order
* pDst - pointer to the complex-valued output signal, of length 2^order;
* must be aligned on a 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - returned if one or more of the following conditions
* is true:
* - one or more of the following pointers is NULL: pSrc, pDst, or
* pFFTSpec.
* - pSrc or pDst is not 32-byte aligned
* - scaleFactor<0 or scaleFactor>32
*
*/
OMXResult omxSP_FFTInv_CToC_SC32_Sfs (
const OMX_SC32 *pSrc,
OMX_SC32 *pDst,
const OMXFFTSpec_C_SC32 *pFFTSpec,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FFTFwd_RToCCS_S16S32_Sfs (2.2.4.4.2)
*
* Description:
* These functions compute an FFT for a real-valued signal of length of 2^order,
* where 0 <= order <= 12. Transform length is determined by the
* specification structure, which must be initialized prior to calling the FFT
* function using the appropriate helper, i.e., <FFTInit_R_S16S32>.
* The relationship between the input and output sequences
* can be expressed in terms of the DFT, i.e.:
*
* x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
* n=0,1,2,...N-1
* N=2^order.
*
* The conjugate-symmetric output sequence is represented using a CCS vector,
* which is of length N+2, and is organized as follows:
*
* Index: 0 1 2 3 4 5 . . . N-2 N-1 N N+1
* Component: R0 0 R1 I1 R2 I2 . . . R[N/2-1] I[N/2-1] R[N/2] 0
*
* where R[n] and I[n], respectively, denote the real and imaginary components
* for FFT bin 'n'. Bins are numbered from 0 to N/2, where N is the FFT length.
* Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to the
* foldover frequency.
*
* Input Arguments:
* pSrc - pointer to the real-valued input sequence, of length 2^order;
* must be aligned on a 32-byte boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
* scaleFactor - output scale factor; valid range is [0, 32]
*
* Output Arguments:
* pDst - pointer to output sequence, represented using CCS format, of
* length (2^order)+2; must be aligned on a 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments, if one or more of the following is true:
* - one of the pointers pSrc, pDst, or pFFTSpec is NULL
* - pSrc or pDst is not aligned on a 32-byte boundary
* - scaleFactor<0 or scaleFactor >32
*
*/
OMXResult omxSP_FFTFwd_RToCCS_S16S32_Sfs (
const OMX_S16 *pSrc,
OMX_S32 *pDst,
const OMXFFTSpec_R_S16S32 *pFFTSpec,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FFTFwd_RToCCS_S16_Sfs
*
* Description:
* These functions compute an FFT for a real-valued signal of length of 2^order,
* where 0 < order <= 12. Transform length is determined by the
* specification structure, which must be initialized prior to calling the FFT
* function using the appropriate helper, i.e., <FFTInit_R_S16>.
* The relationship between the input and output sequences can
* be expressed in terms of the DFT, i.e.:
*
* x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
* n=0,1,2,...N-1
* N=2^order.
*
* The conjugate-symmetric output sequence is represented using a CCS vector,
* which is of length N+2, and is organized as follows:
*
* Index: 0 1 2 3 4 5 . . . N-2 N-1 N N+1
* Component: R0 0 R1 I1 R2 I2 . . . R[N/2-1] I[N/2-1] R[N/2] 0
*
* where R[n] and I[n], respectively, denote the real and imaginary components
* for FFT bin 'n'. Bins are numbered from 0 to N/2, where N is the FFT length.
* Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to
* the foldover frequency.
*
* Input Arguments:
* pSrc - pointer to the real-valued input sequence, of length 2^order;
* must be aligned on a 32-byte boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
* scaleFactor - output scale factor; valid range is [0, 16]
*
* Output Arguments:
* pDst - pointer to output sequence, represented using CCS format, of
* length (2^order)+2; must be aligned on a 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments, if one or more of followings is true:
* - one of the pointers pSrc, pDst, or pFFTSpec is NULL
* - pSrc or pDst is not aligned on a 32-byte boundary
* - scaleFactor<0 or scaleFactor >16
*
*/
OMXResult omxSP_FFTFwd_RToCCS_S16_Sfs (
const OMX_S16* pSrc,
OMX_S16* pDst,
const OMXFFTSpec_R_S16* pFFTSpec,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FFTFwd_RToCCS_S32_Sfs (2.2.4.4.2)
*
* Description:
* These functions compute an FFT for a real-valued signal of length of 2^order,
* where 0 <= order <= 12. Transform length is determined by the
* specification structure, which must be initialized prior to calling the FFT
* function using the appropriate helper, i.e., <FFTInit_R_S32>.
* The relationship between the input and output sequences
* can be expressed in terms of the DFT, i.e.:
*
* x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
* n=0,1,2,...N-1
* N=2^order.
*
* The conjugate-symmetric output sequence is represented using a CCS vector,
* which is of length N+2, and is organized as follows:
*
* Index: 0 1 2 3 4 5 . . . N-2 N-1 N N+1
* Component: R0 0 R1 I1 R2 I2 . . . R[N/2-1] I[N/2-1] R[N/2] 0
*
* where R[n] and I[n], respectively, denote the real and imaginary components
* for FFT bin 'n'. Bins are numbered from 0 to N/2, where N is the FFT length.
* Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to the
* foldover frequency.
*
* Input Arguments:
* pSrc - pointer to the real-valued input sequence, of length 2^order;
* must be aligned on a 32-byte boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
* scaleFactor - output scale factor; valid range is [0, 32]
*
* Output Arguments:
* pDst - pointer to output sequence, represented using CCS format, of
* length (2^order)+2; must be aligned on a 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments, if one or more of the following is true:
* - one of the pointers pSrc, pDst, or pFFTSpec is NULL
* - pSrc or pDst is not aligned on a 32-byte boundary
* - scaleFactor<0 or scaleFactor >32
*
*/
OMXResult omxSP_FFTFwd_RToCCS_S32_Sfs (
const OMX_S32 *pSrc,
OMX_S32 *pDst,
const OMXFFTSpec_R_S32 *pFFTSpec,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FFTFwd_CToC_FC32_Sfs (2.2.4.2.2)
*
* Description:
* Compute an FFT for a complex signal of length of 2^order,
* where 0 <= order <= 15.
* Transform length is determined by the specification structure, which
* must be initialized prior to calling the FFT function using the appropriate
* helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship
* between the input and output sequences can be expressed in terms of the
* DFT, i.e.,
*
* X[k] = SUM[n=0...N-1]x[n].e^(-jnk.2.pi/N)
* k = 0,1,2,..., N-1
* N = 2^order
*
* Input Arguments:
* pSrc - pointer to the input signal, a complex-valued vector of length
* 2^order; must be aligned on a 32 byte boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
*
* Output Arguments:
* pDst - pointer to the complex-valued output vector, of length 2^order;
* must be aligned on an 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - returned if one or more of the following conditions
* is true:
* - one or more of the following pointers is NULL: pSrc, pDst, or
* pFFTSpec.
* - pSrc or pDst is not 32-byte aligned
* - scaleFactor<0 or scaleFactor >32
*
*/
OMXResult omxSP_FFTFwd_CToC_FC32_Sfs (
const OMX_FC32 *pSrc,
OMX_FC32 *pDst,
const OMXFFTSpec_C_FC32 *pFFTSpec
);
/**
* Function: omxSP_FFTFwd_RToCCS_F32_Sfs
*
* Description:
* These functions compute an FFT for a real-valued signal of length
* of 2^order, where 0 <= order <= 12. Transform length is determined
* by the specification structure, which must be initialized prior to
* calling the FFT function using the appropriate helper, i.e.,
* <FFTInit_R_F32>. The relationship between the input and output
* sequences can be expressed in terms of the DFT, i.e.:
*
* x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
* n=0,1,2,...N-1
* N=2^order.
*
* The conjugate-symmetric output sequence is represented using a CCS vector,
* which is of length N+2, and is organized as follows:
*
* Index: 0 1 2 3 4 5 . . . N-2 N-1 N N+1
* Component: R0 0 R1 I1 R2 I2 . . . R[N/2-1] I[N/2-1] R[N/2] 0
*
* where R[n] and I[n], respectively, denote the real and imaginary
* components for FFT bin 'n'. Bins are numbered from 0 to N/2, where
* N is the FFT length. Bin index 0 corresponds to the DC component,
* and bin index N/2 corresponds to the foldover frequency.
*
* Input Arguments:
* pSrc - pointer to the real-valued input sequence, of length 2^order;
* must be aligned on a 32-byte boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
*
* Output Arguments:
* pDst - pointer to output sequence, represented using CCS format, of
* length (2^order)+2; must be aligned on a 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments, if one or more of the
* following is true: - one of the pointers pSrc, pDst, or pFFTSpec
* is NULL - pSrc or pDst is not aligned on a 32-byte boundary
*
*/
OMXResult omxSP_FFTFwd_RToCCS_F32_Sfs(
const OMX_F32* pSrc,
OMX_F32* pDst,
const OMXFFTSpec_R_F32* pFFTSpec
);
/**
* Function: omxSP_FFTInv_CCSToR_S32S16_Sfs (2.2.4.4.4)
*
* Description:
* These functions compute the inverse FFT for a conjugate-symmetric input
* sequence. Transform length is determined by the specification structure,
* which must be initialized prior to calling the FFT function using
* <FFTInit_R_S16S32>. For a transform of length M, the input sequence is
* represented using a packed CCS vector of length M+2, and is organized
* as follows:
*
* Index: 0 1 2 3 4 5 . . . M-2 M-1 M M+1
* Component R[0] 0 R[1] I[1] R[2] I[2] . . . R[M/2-1] I[M/2-1] R[M/2] 0
*
* where R[n] and I[n], respectively, denote the real and imaginary components for FFT bin n.
* Bins are numbered from 0 to M/2, where M is the FFT length. Bin index 0
* corresponds to the DC component, and bin index M/2 corresponds to the
* foldover frequency.
*
* Input Arguments:
* pSrc - pointer to the complex-valued input sequence represented using
* CCS format, of length (2^order) + 2; must be aligned on a 32-byte
* boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
* scaleFactor - output scalefactor; range is [0,16]
*
* Output Arguments:
* pDst - pointer to the real-valued output sequence, of length 2^order ; must be
* aligned on a 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments if one or more of the following is true:
* - pSrc, pDst, or pFFTSpec is NULL
* - pSrc or pDst is not aligned on a 32-byte boundary
* - scaleFactor<0 or scaleFactor >16
*
*/
OMXResult omxSP_FFTInv_CCSToR_S32S16_Sfs (
const OMX_S32 *pSrc,
OMX_S16 *pDst,
const OMXFFTSpec_R_S16S32 *pFFTSpec,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FFTInv_CCSToR_S16_Sfs
*
* Description:
* These functions compute the inverse FFT for a conjugate-symmetric input
* sequence. Transform length is determined by the specification structure,
* which must be initialized prior to calling the FFT function using
* <FFTInit_R_S16>. For a transform of length M, the input
* sequence is represented using a packed CCS vector of length
* M+2, and is organized as follows:
*
* Index: 0 1 2 3 4 5 . . . M-2 M-1 M M+1
* Component R[0] 0 R[1] I[1] R[2] I[2] . . . R[M/2-1] I[M/2-1] R[M/2] 0
*
* where R[n] and I[n], respectively, denote the real and imaginary components
* for FFT bin n.
* Bins are numbered from 0 to M/2, where M is the FFT length. Bin index 0
* corresponds to the DC component, and bin index M/2 corresponds to the
* foldover frequency.
*
* Input Arguments:
* pSrc - pointer to the complex-valued input sequence represented using
* CCS format, of length (2^order) + 2; must be aligned on a 32-byte
* boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
* scaleFactor - output scalefactor; range is [0,16]
*
* Output Arguments:
* pDst - pointer to the real-valued output sequence, of length 2^order ; must
* be aligned on a 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments if one or more of the following is true:
* - pSrc, pDst, or pFFTSpec is NULL
* - pSrc or pDst is not aligned on a 32-byte boundary
* - scaleFactor<0 or scaleFactor >16
*
*/
OMXResult omxSP_FFTInv_CCSToR_S16_Sfs (
const OMX_S16* pSrc,
OMX_S16* pDst,
const OMXFFTSpec_R_S16* pFFTSpec,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FFTInv_CCSToR_S32_Sfs (2.2.4.4.4)
*
* Description:
* These functions compute the inverse FFT for a conjugate-symmetric input
* sequence. Transform length is determined by the specification structure,
* which must be initialized prior to calling the FFT function using
* <FFTInit_R_S32>. For a transform of length M, the input sequence is
* represented using a packed CCS vector of length M+2, and is organized
* as follows:
*
* Index: 0 1 2 3 4 5 . . . M-2 M-1 M M+1
* Component R[0] 0 R[1] I[1] R[2] I[2] . . . R[M/2-1] I[M/2-1] R[M/2] 0
*
* where R[n] and I[n], respectively, denote the real and imaginary components for FFT bin n.
* Bins are numbered from 0 to M/2, where M is the FFT length. Bin index 0
* corresponds to the DC component, and bin index M/2 corresponds to the
* foldover frequency.
*
* Input Arguments:
* pSrc - pointer to the complex-valued input sequence represented using
* CCS format, of length (2^order) + 2; must be aligned on a 32-byte
* boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
* scaleFactor - output scalefactor; range is [0,32]
*
* Output Arguments:
* pDst - pointer to the real-valued output sequence, of length 2^order ; must be
* aligned on a 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - bad arguments if one or more of the following is true:
* - pSrc, pDst, or pFFTSpec is NULL
* - pSrc or pDst is not aligned on a 32-byte boundary
* - scaleFactor<0 or scaleFactor >32
*
*/
OMXResult omxSP_FFTInv_CCSToR_S32_Sfs (
const OMX_S32 *pSrc,
OMX_S32 *pDst,
const OMXFFTSpec_R_S32 *pFFTSpec,
OMX_INT scaleFactor
);
/**
* Function: omxSP_FFTInv_CToC_FC32_Sfs (2.2.4.2.4)
*
* Description:
* These functions compute an inverse FFT for a complex signal of
* length of 2^order, where 0 <= order <= 15. Transform length is
* determined by the specification structure, which must be
* initialized prior to calling the FFT function using the appropriate
* helper, i.e., <FFTInit_C_FC32>. The relationship between the input
* and output sequences can be expressed in terms of the IDFT, i.e.:
*
* x[n] = SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
* n=0,1,2,...N-1
* N=2^order.
*
* Input Arguments:
* pSrc - pointer to the complex-valued input signal, of length 2^order ;
* must be aligned on a 32-byte boundary.
* pFFTSpec - pointer to the preallocated and initialized specification
* structure
*
* Output Arguments:
* order
* pDst - pointer to the complex-valued output signal, of length 2^order;
* must be aligned on a 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
* OMX_Sts_BadArgErr - returned if one or more of the following conditions
* is true:
* - one or more of the following pointers is NULL: pSrc, pDst, or
* pFFTSpec.
* - pSrc or pDst is not 32-byte aligned
* - scaleFactor<0 or scaleFactor>32
*
*/
OMXResult omxSP_FFTInv_CToC_FC32_Sfs (
const OMX_FC32 *pSrc,
OMX_FC32 *pDst,
const OMXFFTSpec_C_FC32 *pFFTSpec
);
/**
* Function: omxSP_FFTInv_CCSToR_F32_Sfs
*
* Description:
* These functions compute the inverse FFT for a conjugate-symmetric input
* sequence. Transform length is determined by the specification structure,
* which must be initialized prior to calling the FFT function using
* <FFTInit_R_F32>. For a transform of length M, the input sequence is
* represented using a packed CCS vector of length M+2, and is organized
* as follows:
*
* Index: 0 1 2 3 4 5 . . . M-2 M-1 M M+1
* Comp: R[0] 0 R[1] I[1] R[2] I[2] . . . R[M/2-1] I[M/2-1] R[M/2] 0
*
* where R[n] and I[n], respectively, denote the real and imaginary
* components for FFT bin n. Bins are numbered from 0 to M/2, where M
* is the FFT length. Bin index 0 corresponds to the DC component,
* and bin index M/2 corresponds to the foldover frequency.
*
* Input Arguments:
* pSrc - pointer to the complex-valued input sequence represented
* using CCS format, of length (2^order) + 2; must be aligned on a
* 32-byte boundary.
* pFFTSpec - pointer to the preallocated and initialized
* specification structure
*
* Output Arguments:
* pDst - pointer to the real-valued output sequence, of length
* 2^order ; must be aligned on a 32-byte boundary.
*
* Return Value:
*
* OMX_Sts_NoErr - no error
*
* OMX_Sts_BadArgErr - bad arguments if one or more of the
* following is true:
* - pSrc, pDst, or pFFTSpec is NULL
* - pSrc or pDst is not aligned on a 32-byte boundary
* - scaleFactor<0 or scaleFactor >32
*
*/
OMXResult omxSP_FFTInv_CCSToR_F32_Sfs(
const OMX_F32* pSrc,
OMX_F32* pDst,
const OMXFFTSpec_R_F32* pFFTSpec
);
/*
* This block sets things up appropriately for run-time or build-time selection
* of NEON implementations.
*/
#if defined(__arm__) || defined(__aarch64__)
/*
* Generic versions. Just like their *_Sfs counterparts, but automatically
* detect whether NEON is available or not and choose the appropriate routine.
*/
#if defined(DL_ARM_NEON_OPTIONAL)
extern OMXResult (*omxSP_FFTFwd_RToCCS_F32)(
const OMX_F32* pSrc,
OMX_F32* pDst,
const OMXFFTSpec_R_F32* pFFTSpec
);
extern OMXResult (*omxSP_FFTInv_CCSToR_F32)(
const OMX_F32* pSrc,
OMX_F32* pDst,
const OMXFFTSpec_R_F32* pFFTSpec);
#elif defined(DL_ARM_NEON)
/* Build-time NEON selection. */
#define omxSP_FFTFwd_RToCCS_F32 omxSP_FFTFwd_RToCCS_F32_Sfs
#define omxSP_FFTInv_CCSToR_F32 omxSP_FFTInv_CCSToR_F32_Sfs
#else
/* Build-time non-NEON selection. */
#define omxSP_FFTFwd_RToCCS_F32 omxSP_FFTFwd_CCSToR_F32_vfp
#define omxSP_FFTInv_CCSToR_F32 omxSP_FFTInv_CCSToR_F32_vfp
#endif /* defined(DL_ARM_NEON_OPTIONAL) */
#if defined(DL_ARM_NEON_OPTIONAL) || !defined(DL_ARM_NEON)
/* Non-NEON versions. */
OMXResult omxSP_FFTFwd_RToCCS_F32_Sfs_vfp(
const OMX_F32* pSrc,
OMX_F32* pDst,
const OMXFFTSpec_R_F32* pFFTSpec
);
OMXResult omxSP_FFTInv_CCSToR_F32_Sfs_vfp(
const OMX_F32* pSrc,
OMX_F32* pDst,
const OMXFFTSpec_R_F32* pFFTSpec
);
OMXResult omxSP_FFTFwd_CToC_FC32_Sfs_vfp (
const OMX_FC32 *pSrc,
OMX_FC32 *pDst,
const OMXFFTSpec_C_FC32 *pFFTSpec
);
OMXResult omxSP_FFTInv_CToC_FC32_Sfs_vfp (
const OMX_FC32 *pSrc,
OMX_FC32 *pDst,
const OMXFFTSpec_C_FC32 *pFFTSpec
);
#endif /* defined(DL_ARM_NEON_OPTIONAL) || !defined(DL_ARM_NEON) */
#else
/* Build-time non-ARM selection. */
#define omxSP_FFTFwd_RToCCS_F32 omxSP_FFTFwd_RToCCS_F32_Sfs
#define omxSP_FFTInv_CCSToR_F32 omxSP_FFTInv_CCSToR_F32_Sfs
#endif /* defined(__arm__) || defined(__aarch64__) */
#ifdef __cplusplus
}
#endif
#endif /** end of #define _OMXSP_H_ */
/** EOF */