omxsp_fir_direct_s16_sfs.c

来自「The OpenMAX DL (Development Layer) APIs 」· C语言 代码 · 共 130 行

C
130
字号
/** *  * File Name:  omxSP_FIR_Direct_S16_Sfs.c * OpenMAX DL: v1.0.2 * Revision:   10586 * Date:       Wednesday, March 5, 2008 *  * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. *  *  * Description: * */#include "omxtypes.h"#include "armOMX.h"#include "omxSP.h"#include "armCOMM.h"extern /** * 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 ) {    OMX_U32     Count;    OMXResult  Result = OMX_Sts_NoErr;    /* Input parameter check */ 	armRetArgErrIf((pSrc == NULL), OMX_Sts_BadArgErr)	armRetArgErrIf((pDst == NULL), OMX_Sts_BadArgErr)	armRetArgErrIf((sampLen <= 0), OMX_Sts_BadArgErr)	armRetArgErrIf((pTapsQ15 == NULL), OMX_Sts_BadArgErr)	armRetArgErrIf((tapsLen <= 0), OMX_Sts_BadArgErr)	armRetArgErrIf((pDelayLine == NULL), OMX_Sts_BadArgErr)	armRetArgErrIf((pDelayLineIndex == NULL), OMX_Sts_BadArgErr)	armRetArgErrIf((*pDelayLineIndex < 0), OMX_Sts_BadArgErr)	armRetArgErrIf((*pDelayLineIndex >= (2 * tapsLen)), OMX_Sts_BadArgErr)        for (Count = 0; Count < sampLen; Count++)     {        if ((Result = omxSP_FIROne_Direct_S16_Sfs (pSrc [Count],										&(pDst [Count]),										pTapsQ15,										tapsLen,										pDelayLine,										pDelayLineIndex,										scaleFactor)) != OMX_Sts_NoErr)        {            return Result;        }    }        return OMX_Sts_NoErr;}/***************************************************************************** *                              END OF FILE *****************************************************************************/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?