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

📄 omxacaac_deinterleavespectrum_s32.c

📁 The OpenMAX DL (Development Layer) APIs contain a comprehensive set of audio, video, signal processi
💻 C
字号:
/** *  * File Name:  omxACAAC_DeinterleaveSpectrum_S32.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 De-Interleaving input data for short blocks for an AAC decoder * */#include "omxtypes.h"#include "armOMX.h"#include "omxAC.h"#include "armACAAC.h"#include "armCOMM.h"#include "armACAAC_Tables.h"/** * Function:  omxACAAC_DeinterleaveSpectrum_S32   (3.2.3.5.1) * * Description: * Deinterleaves spectral coefficients for short block.  Sets coefficients  * above maxSfb equal to zero.  * * Reference: [ISO14496-3], sub-clause 4.5.2.3.5 and Figures 4.22-4.24.  * * Input Arguments: *    *   pSrc - pointer to source coefficients buffer. The coefficients are  *            interleaved by scalefactor window bands in each group. Buffer  *            length is 1024. pSrc must be 8-byte aligned.  *   numWinGrp - group number  *   pWinGrpLen - pointer to the number of windows in each group. Buffer  *            length is 8  *   maxSfb -Max scalefactor bands number for the current block  *   samplingRateIndex - sampling rate index. Valid in [0, 11]  *   winLen - the data number in one window  * * Output Arguments: *    *   pDst - pointer to the output of coefficients. Data sequence is ordered  *            in pDst[w*128+sfb*sfbWidth[sfb]+i]. Where w is window index, sfb  *            is scalefactor band index, sfbWidth is the scalefactor band  *            width table, i is the index within scalefactor band. Buffer  *            length is 1024.  The pDst pointer must be aligned on an 8-byte  *            boundary.  * * Return Value: *     *    OMX_Sts_NoErr - no error  *    OMX_Sts_BadArgErr - bad arguments  *    -    at least one of the following pointers is NULL:  *            - pSrc,  *            - pDst, *            - pWinGrpLen.  *    -    either pSrc or pDst are not 8-byte aligned  *    -    numWinGrp exceeds [1, 8]  *    -    maxSfb exceeds [0, 51]  *    -    samplingRateIndex exceeds [0, 11]  *    -    winLen is not 128  *    OMX_StsACAAC_MaxSfbErr - invalid maxSfb value in relation to numSwb  * */ OMXResult omxACAAC_DeinterleaveSpectrum_S32(     const OMX_S32 *pSrc,     OMX_S32 *pDst,     OMX_INT numWinGrp,     const OMX_INT *pWinGrpLen,     OMX_INT maxSfb,     OMX_INT samplingRateIndex,     OMX_INT winLen ){    const OMX_U16 *pOffsetTable;    OMX_U16 width,numSwb;    OMX_INT groupNum,sfbNum,winNum,coeffNum;    OMX_S32 *pDstTemp;    /* Argument Check */            armRetArgErrIf( pSrc       == NULL, OMX_Sts_BadArgErr);    armRetArgErrIf( pDst       == NULL, OMX_Sts_BadArgErr);    armRetArgErrIf( pWinGrpLen == NULL, OMX_Sts_BadArgErr);    armRetArgErrIf( (numWinGrp > 8) || (numWinGrp < 1), OMX_Sts_BadArgErr);    armRetArgErrIf( (maxSfb > 51)   || (maxSfb < 0)   , OMX_Sts_BadArgErr);    armRetArgErrIf( samplingRateIndex > 11     , OMX_Sts_BadArgErr);    armRetArgErrIf( samplingRateIndex < 0      , OMX_Sts_BadArgErr);    armRetArgErrIf( winLen != ARM_AAC_WIN_SHORT, OMX_Sts_BadArgErr);    armRetArgErrIf( armNot8ByteAligned(pSrc), OMX_Sts_BadArgErr);    armRetArgErrIf( armNot8ByteAligned(pDst), OMX_Sts_BadArgErr);    /* Processing */    pOffsetTable = armACAAC_swbOffsetShortWindow[samplingRateIndex];            numSwb       = armACAAC_numSwbShort[samplingRateIndex];    armRetArgErrIf( maxSfb > numSwb, OMX_StsACAAC_MaxSfbErr);    for( groupNum = 0; groupNum < numWinGrp; groupNum++ )    {        for( sfbNum = 0; sfbNum < maxSfb; sfbNum ++ )        {            width = pOffsetTable[sfbNum + 1] - pOffsetTable[sfbNum];            pDstTemp = pDst;            for( winNum = 0; winNum < pWinGrpLen[groupNum]; winNum++ )            {                for( coeffNum = 0; coeffNum < width; coeffNum++ )                {                    *(pDstTemp + coeffNum) = *pSrc++;                }                pDstTemp += winLen;            }            pDst += width;        }                /*For coefficients above maxSfb*/                for(sfbNum = maxSfb ; sfbNum < numSwb ; sfbNum ++)        {            width = pOffsetTable[sfbNum + 1] - pOffsetTable[sfbNum];            pDstTemp = pDst;            for( winNum = 0; winNum < pWinGrpLen[groupNum]; winNum++ )            {                for( coeffNum = 0; coeffNum < width; coeffNum++ )                {                    pDstTemp[coeffNum] = 0;                }                pDstTemp += winLen;            }            pDst += width;                }                pDst += winLen*(pWinGrpLen[groupNum] - 1);    }    return OMX_Sts_NoErr;}          

⌨️ 快捷键说明

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