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

📄 encg729.c

📁 G.729 and G.723.1 codecs x86 (and x86_64) Linux and FreeBSD source code for Asterisk open source PBX
💻 C
📖 第 1 页 / 共 5 页
字号:
        }        ippsSub_16s(tmpvec,&val1[LP_SUBFRAME_DIM-m_a],resFilMem0,m_a);        ppAq += mAq+1;        ppAp += mAp+1;    }    ippsMove_16s(&speechHistory[LP_FRAME_DIM], &speechHistory[0], SPEECH_BUF_DIM-LP_FRAME_DIM);    ippsMove_16s(&prevWgtSpeech[LP_FRAME_DIM], &prevWgtSpeech[0], MAX_PITCH_LAG);    ippsMove_16s(&prevExcitat[LP_FRAME_DIM], &prevExcitat[0], L_prevExcitat);    encoderObj->prevLPmode = lpMode;    encoderObj->betaPreFilter = betaPreFilter;    if((encoderObj->codecType == G729_CODEC)&&(vadEnable != 1)) {        anau = encoderObj->encPrm;    } else if(encoderObj->codecType == G729E_CODEC) {        anau = encoderObj->encPrm+2;    } else {        anau = encoderObj->encPrm+1;    }    if(encoderObj->codecType == G729_CODEC) {        *frametype=3;        dst[0] = (Ipp8u)(anau[0] & 255);        dst[1] = (Ipp8u)((anau[1] & 0x3ff) >> 2);        dst[2] = (Ipp8u)(((anau[1] & 3) << 6) | ((anau[2]>>2)&0x3f));        dst[3] = (Ipp8u)(((anau[2] & 3) << 6) | ((anau[3] & 1) << 5) | ((anau[4] & 8191) >> 8));        dst[4] = (Ipp8u)(anau[4] & 255);        dst[5] = (Ipp8u)(((anau[5] & 15)<<4) | ((anau[6] & 127) >> 3));        dst[6] = (Ipp8u)(((anau[6] & 7)<< 5) | (anau[7] & 31));        dst[7] = (Ipp8u)((anau[8] & 8191) >> 5);        dst[8] = (Ipp8u)(((anau[8] & 31) << 3) | ((anau[9] & 15) >> 1));        dst[9] = (Ipp8u)(((anau[9] & 1) << 7) | (anau[10] & 127));    } else if(encoderObj->codecType == G729D_CODEC) {        *frametype=2;        dst[0] = (Ipp8u)(anau[0] & 255);        dst[1] = (Ipp8u)((anau[1] & 0x3ff) >> 2);        dst[2] = (Ipp8u)(((anau[1] & 3) << 6) | ((anau[2]>>2)&0x3f));        dst[3] = (Ipp8u)(((anau[2] & 3) << 6) | ((anau[3]>>3)&0x3f));        dst[4] = (Ipp8u)(((anau[3] & 7) << 5) | ((anau[4] & 3) << 3) | ((anau[5] >> 3)& 7));        dst[5] = (Ipp8u)(((anau[5] & 7) << 5) | ((anau[6] & 15) << 1)| ((anau[7] >> 8)& 1));        dst[6] = (Ipp8u)(anau[7] & 255);        dst[7] = (Ipp8u)((anau[8] & 3) << 6 | (anau[9] & 0x3f));    } else if(encoderObj->codecType == G729E_CODEC) {        *frametype=4;        if(lpMode == 0) { /* forward */            dst[0] = (Ipp8u)((anau[0] >> 2) & 0x3f);            dst[1] = (Ipp8u)(((anau[0] & 3) << 6) | ((anau[1]>>4)&0x3f));            dst[2] = (Ipp8u)(((anau[1] & 15) << 4) | ((anau[2]>>4)&15));            dst[3] = (Ipp8u)(((anau[2] & 15) << 4) | ((anau[3]&1)<<3) | ((anau[4]>>4)&7));            dst[4] = (Ipp8u)(((anau[4] & 15) << 4) | ((anau[5]>>3)&15));            dst[5] = (Ipp8u)(((anau[5] & 7) << 5) | ((anau[6]>>2)&31));            dst[6] = (Ipp8u)(((anau[6] & 3) << 6) | ((anau[7]>>1)&0x3f));            dst[7] = (Ipp8u)(((anau[7]& 1) << 7)  | (anau[8]&127));            dst[8] = (Ipp8u)(((anau[9]& 127) << 1) | ((anau[10]>>4)&1));            dst[9] = (Ipp8u)(((anau[10] & 15) << 4) | ((anau[11]>>3)&15));            dst[10] = (Ipp8u)(((anau[11] & 7) << 5) | ((anau[12]>>2)&31));            dst[11] = (Ipp8u)(((anau[12] & 3) << 6) | ((anau[13]>>1)&0x3f));            dst[12] = (Ipp8u)(((anau[13]& 1) << 7)  | (anau[14]&127));            dst[13] = (Ipp8u)(((anau[15]& 127) << 1) | ((anau[16]>>6)&1));            dst[14] = (Ipp8u)(((anau[16] & 0x3f) << 2));        } else { /* backward */            dst[0] = (Ipp8u)((3<<6) | ((anau[0] >> 2) & 0x3f));            dst[1] = (Ipp8u)(((anau[0] & 3) << 6) | ((anau[1]&1)<<5) | ((anau[2]>>8)&31));            dst[2] = (Ipp8u)(anau[2] & 255);            dst[3] = (Ipp8u)((anau[3] >> 2) & 255);            dst[4] = (Ipp8u)(((anau[3] & 3) << 6) | ((anau[4]>>1)&0x3f));            dst[5] = (Ipp8u)(((anau[4]& 1) << 7)  | (anau[5]&127));            dst[6] = (Ipp8u)(((anau[6]& 127) << 1) | ((anau[7]>>6)&1));            dst[7] = (Ipp8u)(((anau[7]&0x3f) << 2) | ((anau[8] >>3)&3));            dst[8] = (Ipp8u)(((anau[8] & 7) << 5) | ((anau[9]>>8)&31));            dst[9] = (Ipp8u)(anau[9] & 255);            dst[10] = (Ipp8u)((anau[10] >> 2) & 255);            dst[11] = (Ipp8u)(((anau[10] & 3) << 6) | ((anau[11]>>1)&0x3f));            dst[12] = (Ipp8u)(((anau[11]& 1) << 7)  | (anau[12]&127));            dst[13] = (Ipp8u)(((anau[13]& 127) << 1) | ((anau[14]>>6)&1));            dst[14] = (Ipp8u)(((anau[14] & 0x3f) << 2));        }    }    CLEAR_SCRATCH_MEMORY(encoderObj);    return APIG729_StsNoErr;}G729_CODECFUN(  APIG729_Status, apiG729EncodeVAD,                (G729Encoder_Obj* encoderObj,const Ipp16s *src, Ipp16s *dst, G729Codec_Type codecType, Ipp32s *frametype )) {    LOCAL_ALIGN_ARRAY(32, Ipp16s, pAp_t,(LPF_DIM+1)*2,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, pAq_t,(LPF_DIM+1)*2,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, rCoeff, LPF_DIM,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, newLSP, LPF_DIM,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, rhNBE, LPF_DIM+1,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp32s, autoR, VAD_LPC_DIM +2,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, tmpvec, BWLPCF_DIM,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, val1, LP_SUBFRAME_DIM,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, newLSF, LPF_DIM,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, interpLSF, LPF_DIM,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, pAp1, BWLPCF1_DIM,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, pAp2, BWLPCF1_DIM,encoderObj);    LOCAL_ALIGN_ARRAY(32, Ipp16s, yVal, LP_WINDOW_DIM,encoderObj);    LOCAL_ARRAY(Ipp16s,LAR,4,encoderObj);    LOCAL_ARRAY(Ipp16s,wfact1,2,encoderObj);    LOCAL_ARRAY(Ipp16s,wfact2,2,encoderObj);    Ipp16s s,norma,Vad=1,tmp,lpMode;    Ipp16s *speechHistory = encoderObj->speechHistory;    Ipp16s *prevSubfrLSP = encoderObj->prevSubfrLSP;    Ipp16s vadEnable = (Ipp16s)((encoderObj->objPrm.mode == G729Encode_VAD_Enabled));    Ipp16s *prevSubfrLSPquant = encoderObj->prevSubfrLSPquant;    Ipp16s *resFilMem0  = encoderObj->resFilMem0;    Ipp16s *prevWgtSpeech = encoderObj->prevWgtSpeech;    Ipp16s *wsp = prevWgtSpeech + MAX_PITCH_LAG;    Ipp16s *prevExcitat = encoderObj->prevExcitat;    Ipp16s *exc = prevExcitat + L_prevExcitat;    Ipp16s *pAna = encoderObj->encPrm,*anau;    Ipp8s *synFltw = encoderObj->synFltw;    Ipp8s *synFltw0 = encoderObj->synFltw0;    Ipp16s *resFilMem  = encoderObj->resFilMem;    Ipp16s *error  = resFilMem + BWLPCF_DIM;    Ipp32s   i;    VADmemory_Obj* vM =  (VADmemory_Obj*)encoderObj->vadMem;    if(NULL==encoderObj || NULL==src || NULL ==dst)        return APIG729_StsBadArgErr;    if(encoderObj->preProc == NULL)        return APIG729_StsNotInitialized;    if((codecType != G729_CODEC)&&(codecType != G729A_CODEC)       &&(codecType != G729D_CODEC)&&(codecType != G729E_CODEC))        return APIG729_StsBadCodecType;    if(encoderObj->objPrm.objSize <= 0)        return APIG729_StsNotInitialized;    if(ENC_KEY != encoderObj->objPrm.key)        return APIG729_StsBadCodecType;    if(encoderObj->objPrm.codecType != G729I_CODEC) encoderObj->codecType = encoderObj->objPrm.codecType;    else encoderObj->codecType = codecType;    if((encoderObj->codecType == G729_CODEC)||(encoderObj->codecType == G729A_CODEC)) *frametype = 3;    else if(encoderObj->codecType == G729D_CODEC) *frametype = 2;    else if(encoderObj->codecType == G729E_CODEC) *frametype = 4;    if(!vadEnable) return APIG729_StsNoErr;    ippsCopy_16s(src,encoderObj->speechHistory + SPEECH_BUF_DIM - LP_FRAME_DIM,LP_FRAME_DIM);    ippsHighPassFilter_G729_16s_ISfs(                                    encoderObj->speechHistory + SPEECH_BUF_DIM - LP_FRAME_DIM,LP_FRAME_DIM,12,encoderObj->preProc);    norma=1;    ippsMul_NR_16s_Sfs(LPC_WINDOW,hammingWin,yVal,LP_WINDOW_DIM,15);    while(ippsAutoCorr_NormE_16s32s(yVal,LP_WINDOW_DIM,autoR,VAD_LPC_DIM +1,&i)!=ippStsNoErr) {        ippsRShiftC_16s_I(2,yVal,LP_WINDOW_DIM);        norma+=4;    }    norma = (Ipp16s)(norma - i);    for(i=0; i<LPF_DIM+1; i++)        rhNBE[i] = (Ipp16s)(autoR[i] >> 16);    ippsLagWindow_G729_32s_I(autoR+1,VAD_LPC_DIM );    if(encoderObj->codecType == G729A_CODEC) {        if(ippStsOverflow == ippsLevinsonDurbin_G729B(autoR, pAp_t,rCoeff,&s)) {            ippsCopy_16s(encoderObj->prevSubfrLPC,pAp_t,LPF_DIM+1);            rCoeff[0] = encoderObj->prevRC[0];            rCoeff[1] = encoderObj->prevRC[1];        } else {            ippsCopy_16s(pAp_t,encoderObj->prevSubfrLPC,LPF_DIM+1);            encoderObj->prevRC[0] = rCoeff[0];            encoderObj->prevRC[1] = rCoeff[1];        }        ippsLPCToLSP_G729A_16s(pAp_t, prevSubfrLSP, newLSP);        ippsLSPToLSF_Norm_G729_16s(newLSP, tmpvec);        {            LOCAL_ALIGN_ARRAY(32, Ipp16s, tmpVecVAD_LPC_DIM2, VAD_LPC_DIM +1, encoderObj);            VoiceActivityDetect_G729(LPC_WINDOW,tmpvec,autoR,norma,rCoeff[1],&Vad,encoderObj->vadMem, tmpVecVAD_LPC_DIM2);            LOCAL_ALIGN_ARRAY_FREE(32, Ipp16s, tmpVecVAD_LPC_DIM2, VAD_LPC_DIM +1, encoderObj);        }        CNG_Update(rhNBE,norma,Vad,encoderObj);        if(Vad == 0) {            CNG_encoder(prevExcitat, prevSubfrLSPquant, pAq_t, pAna, encoderObj);            vad_update_A(pAq_t,pAp_t,exc,PRESENT_SPEECH,val1,wsp,resFilMem0,synFltw);            vM->VADPPrev = vM->VADPrev;            vM->VADPrev = Vad;            encoderObj->betaPreFilter = PITCH_SHARP_MIN;            ippsMove_16s(&speechHistory[LP_FRAME_DIM], &speechHistory[0], SPEECH_BUF_DIM-LP_FRAME_DIM);            ippsMove_16s(&prevWgtSpeech[LP_FRAME_DIM], &prevWgtSpeech[0], MAX_PITCH_LAG);            ippsMove_16s(&prevExcitat[LP_FRAME_DIM], &prevExcitat[0], L_prevExcitat);            anau = encoderObj->encPrm+1;            if(pAna[0] == 0) {                *frametype=0;            } else {                *frametype=1;                dst[0] = anau[0];                dst[1] = anau[1];                dst[2] = anau[2];                dst[3] = anau[3];            }            CLEAR_SCRATCH_MEMORY(encoderObj);            return APIG729_StsNoErr;        }        *pAna++ = 1;        encoderObj->seed = SEED_INIT;        encoderObj->CNGidx = 0;        vM->VADPPrev = vM->VADPrev;        vM->VADPrev = Vad;    } else {        if(ippsLevinsonDurbin_G729_32s16s(autoR, LPF_DIM, &pAp_t[LPF_DIM+1], rCoeff, &tmp ) == ippStsOverflow) {            ippsCopy_16s(encoderObj->prevSubfrLPC,&pAp_t[LPF_DIM+1],LPF_DIM+1);            rCoeff[0] = encoderObj->prevRC[0];            rCoeff[1] = encoderObj->prevRC[1];        } else {            ippsCopy_16s(&pAp_t[LPF_DIM+1],encoderObj->prevSubfrLPC,LPF_DIM+1);            encoderObj->prevRC[0] = rCoeff[0];            encoderObj->prevRC[1] = rCoeff[1];        }        ippsLPCToLSP_G729_16s(&pAp_t[LPF_DIM+1], prevSubfrLSP, newLSP);        ippsLSPToLSF_Norm_G729_16s(newLSP, newLSF);        {            LOCAL_ALIGN_ARRAY(32, Ipp16s, tmpVecVAD_LPC_DIM3, VAD_LPC_DIM +1, encoderObj);            VoiceActivityDetect_G729(LPC_WINDOW,newLSF,autoR,norma,rCoeff[1],&Vad,encoderObj->vadMem, tmpVecVAD_LPC_DIM3);            LOCAL_ALIGN_ARRAY_FREE(32, Ipp16s, tmpVecVAD_LPC_DIM3, VAD_LPC_DIM +1, encoderObj);        }        VADMusicDetection( encoderObj->codecType, autoR[0], norma,rCoeff ,encoderObj->pLag , encoderObj->pGain,                           encoderObj->prevLPmode, &Vad,encoderObj->vadMem);        CNG_Update(rhNBE,norma,Vad,encoderObj);        if(Vad==0) {            ippsMove_16s(&encoderObj->BWDsynth[LP_FRAME_DIM], &encoderObj->BWDsynth[0], SYNTH_BWD_DIM);            if( encoderObj->prevLPmode == 0) {                ippsInterpolate_G729_16s(newLSP,prevSubfrLSP,tmpvec,LPF_DIM);                ippsLSPToLPC_G729_16s(tmpvec,pAp_t);                ippsLSPToLSF_Norm_G729_16s(tmpvec, interpLSF);                ippsLSPToLSF_Norm_G729_16s(newLSP, newLSF);            } else {                ippsLSPToLPC_G729_16s(newLSP,pAp_t);                ippsLSPToLSF_Norm_G729_16s(newLSP, newLSF);                ippsCopy_16s(newLSF, interpLSF, LPF_DIM);            }            if(encoderObj->statGlobal > 10000) {                encoderObj->statGlobal -= 2621;                if( encoderObj->statGlobal < 10000)                    encoderObj->statGlobal = 10000 ;            }            lpMode = 0;            encoderObj->dominantBWDmode = 0;            encoderObj->interpCoeff2_2 = 4506;            ippsCopy_16s(newLSP, prevSubfrLSP, LPF_DIM);            _ippsRCToLAR_G729_16s(rCoeff,LAR+2,2);            ippsInterpolate_G729_16s(encoderObj->prevLAR,LAR+2,LAR,2);            encoderObj->prevLAR[0] = LAR[2];            encoderObj->prevLAR[1] = LAR[3];            {                LOCAL_ALIGN_ARRAY(32, Ipp16s, PWGammaFactorMem, LPF_DIM, encoderObj);                _ippsPWGammaFactor_G729_16s(LAR,interpLSF,&encoderObj->prevSubfrSmooth,wfact1,wfact2, PWGammaFactorMem);                _ippsPWGammaFactor_G729_16s(LAR+2,newLSF,&encoderObj->prevSubfrSmooth,wfact1+1,wfact2+1, PWGammaFactorMem);                LOCAL_ALIGN_ARRAY_FREE(32, Ipp16s, PWGammaFactorMem, LPF_DIM, encoderObj);            }            CNG_encoder(prevExcitat, prevSubfrLSPquant, pAq_t, pAna, encoderObj);            if(*pAna==2) *pAna=1;            vM->VADPPrev = vM->VADPrev;            vM->VADPrev = Vad;            vad_update_I(pAq_t, pAp_t, exc, PRESENT_SPEECH, val1,                         wsp,  resFilMem0,  synFltw,  synFltw0, wfact1, wfact2,                         pAp1, pAp2, resFilMem, error, encoderObj->pSynth, encoderObj->pGain);            ippsCopy_16s(&pAq_t[LPF_DIM+1], encoderObj->pPrevFilt, LPF_DIM+1);            for(i=LPF_DIM+1; i <BWLPCF1_DIM; i++) encoderObj->pPrevFilt[i] = 0;            encoderObj->prevLPmode = lpMode;            encoderObj->betaPreFilter = PITCH_SHARP_MIN;            ippsMove_16s(&speechHistory[LP_FRAME_DIM], &speechHistory[0], SPEECH_BUF_DIM-LP_FRAME_DIM);            ippsMove_16s(&prevWgtSpeech[LP_FRAME_DIM], &prevWgtSpeech[0], MAX_PITCH_LAG);            ippsMove_16s(&prevExcitat[LP_FRAME_DIM], &prevExcitat[0], MAX_PITCH_LAG+INTERPOLATION_FILTER_DIM);            anau = encoderObj->encPrm+1;            if(pAna[0] == 0) {                *frametype=0;            } else {                *frametype=1;                dst[0] = anau[0];                dst[1] = anau[1];                dst[2] = anau[2];  

⌨️ 快捷键说明

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