亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dtxamrwb.c

?? G.711,G.723.1,G.726,G.729,GSM CODEC C/C++ code
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*/////////////////////////////////////////////////////////////////////////////
//
//                  INTEL CORPORATION PROPRIETARY INFORMATION
//     This software is supplied under the terms of a license agreement or
//     nondisclosure agreement with Intel Corporation and may not be copied
//     or disclosed except in accordance with the terms of that agreement.
//          Copyright(c) 2005 Intel Corporation. All Rights Reserved.
//
//     Intel(R) Integrated Performance Primitives
//     USC - Unified Speech Codec interface library
//
// By downloading and installing USC codec, you hereby agree that the
// accompanying Materials are being provided to you under the terms and
// conditions of the End User License Agreement for the Intel(R) Integrated
// Performance Primitives product previously accepted by you. Please refer
// to the file ipplic.htm located in the root directory of your Intel(R) IPP
// product installation for more information.
//
// A speech coding standards promoted by ITU, ETSI, 3GPP and other
// organizations. Implementations of these standards, or the standard enabled
// platforms may require licenses from various entities, including
// Intel Corporation.
//
//
// Purpose: AMRWB speech codec DTX utilities.
//
*/

#include "ownamrwb.h"

static void ownAverageIsfHistory(short *pIsfOldvec, short *pIndices, int *pIsfAvrvec);
static void ownFindFrameIndices(short *pIsfOldvec, short *pIndices, SDtxEncoderState *st);
static short ownDitherCtrl(SDtxEncoderState *st);
static void ownCNDithering(short *pIsfvec, int *valLogIntEnergy, short *pDitherSeed);

short ownDTXEncReset(SDtxEncoderState *st, short *pIsfInit)
{
    int i;

    if (st == (SDtxEncoderState*)NULL) return -1;

    st->siHistPtr = 0;
    st->siLogEnerIndex = 0;

    for (i = 0; i < DTX_HIST_SIZE; i++)
    {
        ippsCopy_16s(pIsfInit, &st->asiIsfHistory[i * LP_ORDER], LP_ORDER);
    }
    st->siCngSeed = RND_INIT;

    ippsZero_16s(st->siLogEnerHist, DTX_HIST_SIZE);

    st->siHangoverCount = DTX_HANG_CONST;
    st->siAnaElapsedCount = 32767;

    ippsZero_16s((short*)st->aiDistMatrix, 28*2);
    ippsZero_16s((short*)st->aiSumDist, (DTX_HIST_SIZE - 1)*2);

    return 1;
}

short ownDTXEnc(SDtxEncoderState *st, short *pIsfvec, short *pExc2vec, unsigned short *pPrmsvec)
{
    short valLogEnergy, valGain, valLevelTmp, valExp, valExpTmp, tmp;
    short valLogIntPart, valLogFracPart;
    int i, valEner, valLevel;
    short pIsfOrdervec[3];
    short valCNDith;
    IPP_ALIGNED_ARRAY(16, int, pIsf32svec, LP_ORDER);

    /* VOX mode computation of SID parameters */
    ippsZero_16s((short*)pIsf32svec, LP_ORDER*2);
    /* average energy and isf */
    /* Division by DTX_HIST_SIZE = 8 has been done in dtx_buffer */
    ippsSum_16s_Sfs(st->siLogEnerHist, DTX_HIST_SIZE, &valLogEnergy, 0);
    ownFindFrameIndices(st->asiIsfHistory, pIsfOrdervec, st);
    ownAverageIsfHistory(st->asiIsfHistory, pIsfOrdervec, pIsf32svec);

    for (i = 0; i < LP_ORDER; i++)
    {
        pIsfvec[i] = (short)(pIsf32svec[i] >> 3);
    }

    /* quantize logarithmic energy to 6 bits (-6 : 66 dB) which corresponds to -2:22 in log2(E) */
    valLogEnergy >>= 2;
    valLogEnergy += 512;

    /* Multiply by 2.625 to get full 6 bit range */
    valLogEnergy = Mul_16s_Sfs(valLogEnergy, 21504, 15);

    /* Quantize Energy */
    st->siLogEnerIndex = valLogEnergy >> 6;
    if (st->siLogEnerIndex > 63) st->siLogEnerIndex = 63;
    if (st->siLogEnerIndex < 0) st->siLogEnerIndex = 0;

    /* Quantize ISFs */
    ippsISFQuantDTX_AMRWB_16s(pIsfvec, pIsfvec, (short*)pPrmsvec);
    pPrmsvec += 5;

    *(pPrmsvec)++ = st->siLogEnerIndex;

    valCNDith = ownDitherCtrl(st);
    *(pPrmsvec)++ = valCNDith;

    /* level = (float)( pow( 2.0f, (float)st->siLogEnerIndex / 2.625 - 2.0 ) );    */
    valLogEnergy = (st->siLogEnerIndex << 9);

    /* Divide by 2.625; siLogEnergy will be between 0:24  */
    valLogEnergy = Mul_16s_Sfs(valLogEnergy, 12483, 15);

    valLogIntPart = valLogEnergy >> 10;
    valLogFracPart = (short) (valLogEnergy & 0x3ff);
    valLogFracPart <<= 5;
    valLogIntPart += 15;

    valLevel = ownPow2_AMRWB(valLogIntPart, valLogFracPart);
    valExpTmp = 15 - Norm_32s_I(&valLevel);
    valLevelTmp = (short)(valLevel >> 16);

    /* generate white noise vector */
    for (i = 0; i < FRAME_SIZE; i++)
    {
        pExc2vec[i] = Random(&(st->siCngSeed)) >> 4;
    }

    /* energy of generated excitation */
    ippsDotProd_16s32s_Sfs( pExc2vec, pExc2vec,FRAME_SIZE, &valEner, -1);
    valEner = Add_32s(valEner, 1);

    valExp = (30 - Norm_32s_I(&valEner));
    ownInvSqrt_AMRWB_32s16s_I(&valEner, &valExp);

    valGain = (short)(valEner >> 16);
    valGain = Mul_16s_Sfs(valLevelTmp, valGain, 15);

    valExp += valExpTmp;

    /* Multiply by sqrt(FRAME_SIZE)=16, i.e. shift left by 4 */
    valExp += 4;

    for (i = 0; i < FRAME_SIZE; i++)
    {
        tmp = Mul_16s_Sfs(pExc2vec[i], valGain, 15);
        if (valExp > 0)
            pExc2vec[i] = Cnvrt_32s16s(tmp << valExp);
        else
            pExc2vec[i] = (tmp >> (-valExp));
    }

    return 0;
}

short ownDTXDecReset(SDtxDecoderState * st, short *pIsfInit)
{
    int i;

    if (st == (SDtxDecoderState*) NULL) return -1;

    st->siSidLast = 0;
    st->siLogEnergy = 3500;
    st->siLogEnergyOld = 3500;
    st->siSidPeriodInv = (1 << 13);

    /* low level noise for better performance in  DTX handover cases */

    st->siCngSeed = RND_INIT;
    st->siHistPtr = 0;

    ippsCopy_16s(pIsfInit, st->asiIsf, LP_ORDER);
    ippsCopy_16s(pIsfInit, st->asiIsfOld, LP_ORDER);
    ippsSet_16s(st->siLogEnergy, st->siLogEnerHist, DTX_HIST_SIZE);

    for (i = 0; i < DTX_HIST_SIZE; i++)
    {
        ippsCopy_16s(pIsfInit, &st->asiIsfHistory[i * LP_ORDER], LP_ORDER);
    }

    st->siAnaElapsedCount = 32767;
    st->siHangoverCount = DTX_HANG_CONST;
    st->siValidData = 0;
    st->siSidFrame = 0;
    st->siGlobalState = SPEECH;
    st->siHangoverAdded = 0;
    st->siDitherSeed = RND_INIT;
    st->siDataUpdated = 0;
    st->siComfortNoiseDith = 0;

    return 0;
}

short ownDTXDec(SDtxDecoderState *st, short *pExc2vec, short valDTXState, short *pIsfvec,
              const unsigned short *pPrmsvec)
{
    short valLogEnergyIndex;
    short valIntFac;
    short valGain;
    short valHistPtr;
    short valInterFac;
    short tmp, valExp, valExpTmp, valLogIntPart, valLogFracPart, valLevelTmp;
    int i, j, valLogIntEnergy, valLevel, valEner;
    IPP_ALIGNED_ARRAY(16, int, pIsf32svec, LP_ORDER);

    if ((st->siHangoverAdded != 0) && (st->siSidFrame != 0))
    {
        /* sid_first after dtx hangover period or sid_upd after dtxhangover */
        /* consider  twice the last frame */
        valHistPtr = st->siHistPtr + 1;
        if (valHistPtr == DTX_HIST_SIZE) valHistPtr = 0;

        ippsCopy_16s(&st->asiIsfHistory[st->siHistPtr * LP_ORDER], &st->asiIsfHistory[valHistPtr * LP_ORDER], LP_ORDER);
        st->siLogEnerHist[valHistPtr] = st->siLogEnerHist[st->siHistPtr];

        ippsZero_16s((short*)pIsf32svec, LP_ORDER*2);

        ippsSum_16s_Sfs(st->siLogEnerHist, DTX_HIST_SIZE, &st->siLogEnergy, 0);
        for (i = 0; i < DTX_HIST_SIZE; i++)
        {
            for (j = 0; j < LP_ORDER; j++)
            {
                pIsf32svec[j] += (int)(st->asiIsfHistory[i * LP_ORDER + j]);
            }
        }

        st->siLogEnergy >>= 1;
        st->siLogEnergy += 1024;

        if (st->siLogEnergy < 0) st->siLogEnergy = 0;

        for (j = 0; j < LP_ORDER; j++)
        {
            st->asiIsf[j] = (short)(pIsf32svec[j] >> 3);
        }
    }

    if (st->siSidFrame != 0)
    {
        ippsCopy_16s(st->asiIsf, st->asiIsfOld, LP_ORDER);
        st->siLogEnergyOld = st->siLogEnergy;

        if (st->siValidData != 0)           /* new data available (no CRC) */
        {
            valInterFac = st->siSidLast;
            if (valInterFac > 32) valInterFac = 32;
            if (valInterFac >= 2)
                st->siSidPeriodInv = (1 << 15) / valInterFac;
            else
                st->siSidPeriodInv = (1 << 14);

            ippsISFQuantDecodeDTX_AMRWB_16s((short*)pPrmsvec, st->asiIsf);
            pPrmsvec += 5;

            valLogEnergyIndex = *(pPrmsvec)++;

            /* read background noise stationarity information */
            st->siComfortNoiseDith = *(pPrmsvec)++;
            st->siLogEnergy = valLogEnergyIndex << 9;
            st->siLogEnergy = Mul_16s_Sfs(st->siLogEnergy, 12483, 15);

            if ((st->siDataUpdated == 0) || (st->siGlobalState == SPEECH))
            {
                ippsCopy_16s(st->asiIsf, st->asiIsfOld, LP_ORDER);
                st->siLogEnergyOld = st->siLogEnergy;
            }
        }
    }

    if ((st->siSidFrame != 0) && (st->siValidData != 0))
    {
        st->siSidLast = 0;
    }
    /* Interpolate SID info */
    valIntFac = st->siSidLast << 10;
    valIntFac = Mul_16s_Sfs(valIntFac, st->siSidPeriodInv, 15);

    if (valIntFac > 1024) valIntFac = 1024;
    valIntFac <<= 4;

    valLogIntEnergy = 2 * valIntFac * st->siLogEnergy;
    ownMulC_16s_Sfs(st->asiIsf, valIntFac, pIsfvec, LP_ORDER, 15);

    valIntFac = 16384 - valIntFac;

    valLogIntEnergy += 2 * valIntFac * st->siLogEnergyOld;

    for (i = 0; i < LP_ORDER; i++)
    {
        pIsfvec[i] += Mul_16s_Sfs(valIntFac, st->asiIsfOld[i], 15);
        pIsfvec[i] <<= 1;
    }

    /* If background noise is non-stationary, insert comfort noise dithering */
    if (st->siComfortNoiseDith != 0)
    {
        ownCNDithering(pIsfvec, &valLogIntEnergy, &st->siDitherSeed);
    }
    valLogIntEnergy >>= 9;
    valLogIntPart = (short)(valLogIntEnergy >> 16);
    valLogFracPart = (short)((valLogIntEnergy - (int)(valLogIntPart << 16)) >> 1);
    valLogIntPart += (16 - 1);

    valLevel = ownPow2_AMRWB(valLogIntPart, valLogFracPart);
    valExpTmp = 15 - Norm_32s_I(&valLevel);
    valLevelTmp = (short)(valLevel >> 16);

    /* generate white noise vector */
    for (i = 0; i < FRAME_SIZE; i++)
    {
        pExc2vec[i] = Random(&(st->siCngSeed)) >> 4;
    }

    /* energy of generated excitation */
    ippsDotProd_16s32s_Sfs( pExc2vec, pExc2vec,FRAME_SIZE, &valEner, -1);
    valEner = Add_32s(valEner, 1);

    valExp = (30 - Norm_32s_I(&valEner));
    ownInvSqrt_AMRWB_32s16s_I(&valEner, &valExp);

    valGain = (short)(valEner >> 16);
    valGain = Mul_16s_Sfs(valLevelTmp, valGain, 15);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久岛一牛影视| 国产精品日产欧美久久久久| 国产精品99久久久久久久vr| 夜夜嗨av一区二区三区网页| 久久精品欧美一区二区三区麻豆| 在线观看日韩精品| 国产.欧美.日韩| 奇米888四色在线精品| 中文字幕亚洲在| 精品国产不卡一区二区三区| 91成人在线精品| 不卡电影一区二区三区| 狠狠色丁香婷综合久久| 香蕉成人啪国产精品视频综合网 | 久久亚洲综合色一区二区三区 | 日本高清无吗v一区| 国产精品996| 精品一区二区三区av| 污片在线观看一区二区| 亚洲视频香蕉人妖| 国产清纯美女被跳蛋高潮一区二区久久w | 成人一区二区视频| 依依成人综合视频| 中文字幕欧美日韩一区| 欧美videofree性高清杂交| 91精彩视频在线| 成人成人成人在线视频| 国产综合色在线| 免费不卡在线观看| 午夜精品成人在线视频| 亚洲美女少妇撒尿| 国产精品人成在线观看免费| 国产欧美一区二区三区在线老狼 | 精品91自产拍在线观看一区| 91精品国产高清一区二区三区蜜臀 | 这里只有精品电影| 欧美肥胖老妇做爰| 欧美日韩一区三区四区| 欧美日韩一区中文字幕| 欧美三级资源在线| 欧美日韩在线精品一区二区三区激情| 色视频成人在线观看免| 色就色 综合激情| 精品少妇一区二区三区日产乱码| 欧美精品免费视频| 欧美老女人在线| 日韩一区二区三区四区| 欧美成人女星排行榜| 精品久久久久久久久久久久包黑料| 日韩欧美国产系列| 欧美精品一区二区三区高清aⅴ | www久久久久| 久久久国产精品不卡| 国产色产综合色产在线视频 | 国产精品人人做人人爽人人添| 久久精品一区二区三区不卡| 国产亚洲欧美日韩日本| 中国色在线观看另类| 亚洲日本成人在线观看| 亚洲一区二区三区中文字幕在线| 亚洲18女电影在线观看| 秋霞影院一区二区| 国产精品99久| 色偷偷成人一区二区三区91| 欧美日韩一二区| 欧美一区二区女人| 国产视频一区在线观看| 亚洲另类中文字| 欧美96一区二区免费视频| 国产一区二区剧情av在线| 99久精品国产| 欧美精品色综合| 国产丝袜在线精品| 亚洲欧美日韩系列| 蜜臀av性久久久久av蜜臀妖精| 麻豆成人91精品二区三区| 成人免费va视频| 欧美日韩一区二区三区免费看| 日韩午夜精品电影| 国产精品网曝门| 亚洲福利视频三区| 韩日精品视频一区| 91欧美一区二区| 精品国产一区二区三区不卡| 中文字幕日韩精品一区| 日韩在线卡一卡二| 成人成人成人在线视频| 欧美一区二区三区日韩| 国产精品不卡在线| 日本最新不卡在线| 粉嫩av一区二区三区在线播放| 在线免费观看一区| 2023国产精华国产精品| 亚洲午夜羞羞片| 成人黄色大片在线观看| 欧美成人三级电影在线| 亚洲成人免费视| av亚洲产国偷v产偷v自拍| 91精品欧美一区二区三区综合在 | 综合欧美亚洲日本| 精品亚洲成a人在线观看| 91免费观看在线| 精品日产卡一卡二卡麻豆| 亚洲精品乱码久久久久久日本蜜臀| 韩国毛片一区二区三区| 在线欧美一区二区| 中文字幕一区视频| 国产成人免费xxxxxxxx| 欧美一区二区视频在线观看2022| 国产精品国产三级国产有无不卡| 老司机午夜精品| 欧美体内she精视频| 尤物av一区二区| 波多野结衣在线aⅴ中文字幕不卡| 精品久久久久久无| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产女人18水真多18精品一级做| 日本成人在线电影网| 欧美日韩一区在线观看| 亚洲男人的天堂一区二区| 国产成人精品三级| 欧美精品一区二区在线播放| 免费在线观看精品| 欧美精品第1页| 亚洲福利视频导航| 欧美在线一二三四区| 亚洲天堂av老司机| 91在线观看视频| 亚洲欧洲国产专区| 成人性色生活片免费看爆迷你毛片| 欧美精品一区二区三区很污很色的 | 一区二区三区.www| 色国产综合视频| 亚洲柠檬福利资源导航| 色婷婷综合视频在线观看| 亚洲国产精品99久久久久久久久| 国产福利一区二区三区| 国产欧美一区二区精品性| 国产麻豆视频一区二区| 国产午夜亚洲精品不卡| 国产成人综合在线观看| 国产精品色噜噜| av男人天堂一区| 亚洲精品菠萝久久久久久久| 在线观看一区不卡| 无码av中文一区二区三区桃花岛| 在线不卡中文字幕| 九九**精品视频免费播放| 精品国产123| 国产·精品毛片| 亚洲美女在线一区| 欧美性猛交xxxxxx富婆| 麻豆精品精品国产自在97香蕉| 精品久久久久久久一区二区蜜臀| 国产成人精品在线看| 亚洲欧美视频一区| 欧美日韩dvd在线观看| 精品一区中文字幕| 亚洲国产成人在线| 欧美在线不卡视频| 青娱乐精品视频| 国产三级精品视频| 欧美性三三影院| 美美哒免费高清在线观看视频一区二区| 久久久久青草大香线综合精品| 不卡av免费在线观看| 婷婷六月综合网| 久久久久久久av麻豆果冻| 91一区二区三区在线观看| 偷拍一区二区三区四区| 精品国产电影一区二区| www.66久久| 日韩av成人高清| 中文字幕日韩av资源站| 日韩一区二区三区四区| 成人午夜电影久久影院| 婷婷国产在线综合| 国产视频一区在线观看| 欧美伦理视频网站| 国产盗摄一区二区| 亚洲第四色夜色| 国产欧美日本一区视频| 88在线观看91蜜桃国自产| 国产高清精品久久久久| 午夜一区二区三区在线观看| 国产日韩v精品一区二区| 欧美日韩一区二区三区在线| 粉嫩绯色av一区二区在线观看| 亚洲18色成人| 国产精品久久久久久久岛一牛影视| 91精品婷婷国产综合久久性色| aaa亚洲精品| 极品少妇xxxx精品少妇偷拍| 樱桃国产成人精品视频| 久久精品视频免费观看| 欧美日本一区二区三区四区| www.99精品| 国产成人午夜精品影院观看视频 | 久久99精品网久久| 亚洲激情av在线|