⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 omxsp_firone_direct_s16.c

📁 The OpenMAX DL (Development Layer) APIs contain a comprehensive set of audio, video, signal processi
💻 C
字号:
/** *  * File Name:  omxSP_FIROne_Direct_S16.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"/** * 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 ) {    OMX_U32 index;    OMX_S32 accum;    OMX_S16 *pDelayCurrent;    /* Input parameter check */     armRetArgErrIf((pResult == NULL), 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)    /* Update the delay state */    pDelayCurrent = &pDelayLine [*pDelayLineIndex];        /* Copy input to current delay line position */    pDelayCurrent [0] = pDelayCurrent [tapsLen] = val;    accum = 0;    for (index = 0; index < tapsLen; index++)    {        accum += (OMX_S32)pTapsQ15 [index] *                  (OMX_S32)pDelayCurrent [index];     }        if (--(*pDelayLineIndex) < 0)    {        *pDelayLineIndex = tapsLen - 1;         }        /* Store the result */    *pResult = armSatRoundLeftShift_S32(accum, -15);    return OMX_Sts_NoErr; }/***************************************************************************** *                              END OF FILE *****************************************************************************/

⌨️ 快捷键说明

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