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

📄 omxacmp3_requantizesfb_s32_i.c

📁 The OpenMAX DL (Development Layer) APIs contain a comprehensive set of audio, video, signal processi
💻 C
📖 第 1 页 / 共 3 页
字号:
                    if (sfmax < sfBound)                    {                        sfmax = sfBound;                    }                    /* Fill remaining sfb with intensity pos */                    for (sfb = sfBound; sfb < 12; sfb++)                    {                        sp = pSfbTableShort [Soff + sfb];                        width =                             pSfbTableShort [Soff + sfb + 1] - sp;                        i = 3 * sp + win * width;                        for (fr = 0; fr < width; fr++)                        {                            scalFactor = pRScaleFactor[sfb * 3 + win];                            if(scalFactor >= 0)                            {                                                    is_pos [i + fr] = scalFactor;                            }                            if(id == 1 && scalFactor == 7)                            {                                is_pos [i + fr] = -scalFactor; /* Saving negative value indicationg illegal is_pos */                            }                            /* if MPEG1, intensity position is > 7 return error */                                armRetArgErrIf(id == 1 && is_pos [i + fr] > 7, OMX_Sts_BadArgErr)                        }                    }                    frlimit = pSfbTableShort [Soff + 13] -                         pSfbTableShort [Soff + 12];                    i = 3 * pSfbTableShort [Soff + 12] + win * frlimit;                    width = pSfbTableShort [Soff + 12] -                         pSfbTableShort [Soff + 11];                    sp = 3 * pSfbTableShort [Soff + 11] + width * win;                    for (fr = 0; fr < frlimit; fr++)                    {                        is_pos [i + fr] =                             is_pos [sp];                    }                }                /* change sfbLimit on id*/                if (sfmax <= 3)                {                    if(id !=0)                    {                        sfbLimit = 8-1;                    }                    else                    {                        sfbLimit = 6-1;                    }                    for (sfb = sfbLimit,sfBound = 0; sfb >= 0; sfb--)                    {                        sp = pSfbTableLong [Loff + sfb];                        width =                             pSfbTableLong [Loff + sfb + 1] - sp;                        i = pSfbTableLong [Loff + sfb + 1];                        for (fr = 0; fr < width; fr++, i--)                        {                            if (pSrc [1][i] != 0.0)                            {                                /* Got Last Non Zero value */                                sfBound = sfb + 1;                                sfb = -1;                                fr = width;                            }                        }                    }                    if(id !=0)                    {                        sfbLimit = 8;                    }                    else                    {                        sfbLimit = 6;                    }                    /* Fill remaining sfb with intensity pos */                    for (sfb = sfBound; sfb < sfbLimit; sfb++)                    {                        i = pSfbTableLong [Loff + sfb];                        width =                             pSfbTableLong [Loff + sfb + 1] - i;                        for (fr = 0; fr < width; fr++)                        {                            scalFactor = pRScaleFactor[sfb];                            if(scalFactor >= 0)                            {                                                    is_pos [i + fr] = scalFactor;                            }                            if(id == 1 && scalFactor == 7)                            {                                is_pos [i + fr] = -scalFactor; /* Saving negative value indicationg illegal is_pos */                            }                            /* if MPEG1, intensity position is > 7 return error */                                armRetArgErrIf(id == 1 && is_pos [i + fr] > 7, OMX_Sts_Err)                        }                    }                }            }        }        else         {            /* Long Block */            Loff = (samplingFreq +                 3 * id) * ARM_MP3_LONG_SFB_TABLE_SZ;            i = OMX_MP3_GRANULE_LEN - 1;            while (pSrc [1][i] == 0.0)            {                i--;            }            sfb = ARM_MP3_LONG_SFB_TABLE_SZ - 1;            i++;            while (pSfbTableLong [Loff + sfb] >= i)            {                sfb--;            }            sfb = sfb + 1;            for (; sfb < (ARM_MP3_LONG_SFB_TABLE_SZ - 2); sfb++)            {                i = pSfbTableLong [Loff + sfb];                fr = pSfbTableLong [Loff + sfb + 1] - i;                for (--fr; fr >= 0; fr--)                {                    scalFactor = pRScaleFactor[sfb];                    if(scalFactor >= 0)                    {                                            is_pos [i + fr] = scalFactor;                    }                    if(id == 1 && scalFactor == 7)                    {                        is_pos [i + fr] = -scalFactor; /* Saving negative value indicationg illegal is_pos */                    }                    /* if MPEG1, intensity position is > 7 return error */                        armRetArgErrIf(id == 1 && is_pos [i + fr] > 7, OMX_Sts_Err)                }            }            sp = pSfbTableLong [Loff + ARM_MP3_LONG_SFB_TABLE_SZ - 3];            i = pSfbTableLong [Loff + ARM_MP3_LONG_SFB_TABLE_SZ - 2];            fr = OMX_MP3_GRANULE_LEN - i;            for (--fr; fr >= 0; fr--)            {                is_pos [i + fr] = is_pos [sp];            }        }    }    if (mode != 3) /* not mono */    {        /* MPEG 2 intensity stereo case */        if (id == 0 && IStereoFlag)        {            is_ratio = (sfCompress % 2) ? 0.707106781188 : 0.840896415256;        }        for (i = 0; i < OMX_MP3_GRANULE_LEN; i++)        {            if (is_pos [i] < 0)/* If negative do MS based on modeExt */            {                if (MSStereoFlag)                {                    /* M/S Stereo */                    pDst [0][i] = (pSrc [0][i] + pSrc [1][i]) / ARM_MP3_SQUARROOT;                    pDst [1][i] = (pSrc [0][i] - pSrc [1][i]) / ARM_MP3_SQUARROOT;                }                else                {                    /* Normal Stereo/Dual */                    pDst [0][i] = pSrc [0][i];                    pDst [1][i] = pSrc [1][i];                }            }            else            {                if (IStereoFlag)                {                    if (id == 1)                    {                        is_ratio = tan (is_pos [i] * PI / 12.0);                        pDst [0][i] = pSrc [0][i] * is_ratio / (1 + is_ratio);                        pDst [1][i] = pSrc [0][i] / (1 + is_ratio);                    }                    else                    {                        /* Check that id==0 */                        armAssert(id==0);                        /* MPEG 2 intensity stereo case */                        if (is_pos [i] == 0)                        {                            pDst [0][i] = pSrc [0][i];                            pDst [1][i] = pSrc [0][i];/* Corrected from pSrc [1][i]; */                        }                         else if((is_pos [i] % 2) == 1)                        {                            pDst [0][i] = pSrc [0][i] * pow (is_ratio, (OMX_F64) ((is_pos [i] + 1) / 2));                            pDst [1][i] = pSrc [0][i]; /* Corrected from pSrc [1][i]; */                        }                         else                        {                            pDst [0][i] = pSrc [0][i];                            pDst [1][i] = pSrc [0][i] * pow (is_ratio, (OMX_F64) (is_pos [i] / 2)); /* Corrected from pSrc [1][i]; */                        }                    }                }                else                {                    /* Error Conditon */                    return OMX_Sts_Err;                }            }        }    }    else    {        /* Mono */        for (i = 0; i < OMX_MP3_GRANULE_LEN; i++)        {            pDst [0][i] = pSrc [0][i];        }    }    return OMX_Sts_NoErr;    /* End of Stereo Module */    }/*** Function: armACMP3_Reorder**/static OMXResult armACMP3_Reorder (OMX_F64 *pSrc,                                        OMX_F64 *pDst,                                        OMX_INT winSwitch,                                        OMX_INT blockType,                                        OMX_INT mixedBlock,                                        OMX_INT samplingFreq,                                        OMX_INT id,                                        OMXMP3ScaleFactorBandTableLong pSfbTableLong,                                       OMXMP3ScaleFactorBandTableShort pSfbTableShort){    OMX_S32     Offset;    OMX_S32     frstart, frlimit;    OMX_S32     i;    OMX_S32     sfb = 0;    OMX_U32     win;    OMX_U32     dstart[3], d, prevd;    OMX_S32     sfbLimit;    if (winSwitch && blockType == 2)    {                /* Short Block */        if (mixedBlock)        {            if(id !=0)            {                sfbLimit = 8;            }            else            {                sfbLimit = 6;            }            /* Mixed Block */            Offset = (samplingFreq + 3 * id) * ARM_MP3_LONG_SFB_TABLE_SZ;            for (i = 0; i < pSfbTableLong [Offset + sfbLimit]; i++)            {                pDst [i] = pSrc [i];            }            sfb = 3;        }        Offset = (samplingFreq + 3 * id) * ARM_MP3_SHORT_SFB_TABLE_SZ;        for (win = 0; win < 3; win++)        {            dstart[win] = (pSfbTableShort [Offset + sfb] * 3) / 18;        }        d = (pSfbTableShort [Offset + sfb] * 3) % 18;        for (; sfb < 13; sfb++)        {            frstart = pSfbTableShort [Offset + sfb];            frlimit = pSfbTableShort [Offset + sfb + 1] - frstart;            prevd = d;            for (win = 0; win < 3; win++)            {                   d = prevd;                for (i = 0; i < frlimit; i++, d++)                {                    if (d == 6)                    {                        dstart[win] = dstart[win] + 1;                        d = 0;                    }                    pDst [18 * dstart[win] + (win * 6) + d] =                         pSrc [3 * frstart + (win * frlimit) + i];                }                            }        }    }    else    {        /* Long Block */        for (i = 0; i < OMX_MP3_GRANULE_LEN; i++)        {

⌨️ 快捷键说明

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