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

📄 omxsp_iirone_biquaddirect_s16.c

📁 The OpenMAX DL (Development Layer) APIs contain a comprehensive set of audio, video, signal processi
💻 C
字号:
/** *  * File Name:  omxSP_IIROne_BiQuadDirect_S16.c * OpenMAX DL: v1.0.2 * Revision:   10586 * Date:       Wednesday, March 5, 2008 *  * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. *  *  * * Description: * This file contains module for single sample biuad IIR filtering * */#include "omxtypes.h"#include "armOMX.h"#include "omxSP.h"#include "armCOMM.h"#include "armSP.h"/** * 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 ){    OMX_S16 InOut;    OMX_S32 Temp1,Temp2;    OMX_S32 Mac;    /* Argument Check */    armRetArgErrIf( pResult    == NULL, OMX_Sts_BadArgErr);    armRetArgErrIf( pDelayLine == NULL, OMX_Sts_BadArgErr);    armRetArgErrIf( pTaps      == NULL, OMX_Sts_BadArgErr);    armRetArgErrIf( numBiquad  <= 0   , OMX_Sts_BadArgErr);        /* Processing */    InOut = val;    while(numBiquad != 0)    {        /* Argument Check */           armRetArgErrIf( pTaps[3] <  0     , OMX_Sts_BadArgErr);            Temp1 = pDelayLine[0];        Temp2 = pDelayLine[1];        /* Accumulate Am's */        Mac = armSatMac_S16S32_S32(0  , Temp1 , pTaps[4]);        Mac = armSatMac_S16S32_S32(Mac, Temp2 , pTaps[5]);        Mac = armSatSub_S32( armSatRoundLeftShift_S32(InOut, pTaps[3]) , Mac);        Mac = armSatRoundLeftShift_S32(Mac,-pTaps[3]);                /* Shift The DelayLine */        pDelayLine[0] = Mac;        pDelayLine[1] = Temp1;        /* Accumulate Bk's */                        Mac = armSatMac_S16S32_S32(0  , Mac,   pTaps[0] );        Mac = armSatMac_S16S32_S32(Mac, Temp1, pTaps[1] );        Mac = armSatMac_S16S32_S32(Mac, Temp2, pTaps[2] );        /* Output */        InOut = armSatRoundRightShift_S32_S16(Mac, pTaps[3]);        numBiquad--;        pTaps += 6;        pDelayLine += 2;        }/*end while(numBiquad != 0)*/                       *pResult = InOut;    return OMX_Sts_NoErr;} /* End of File */

⌨️ 快捷键说明

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