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

📄 decg729.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 页
字号:
        return APIG729_StsBadCodecType;    }    if(decoderObj->objPrm.objSize <= 0)        return APIG729_StsNotInitialized;    if(DEC_KEY != decoderObj->objPrm.key)        return APIG729_StsBadCodecType;    delayVal[0]=delayVal[1]=0;    pA = AzDec;    pParm = src;    if(frametype == -1) {        decoderObj->decPrm[1] = 0;        decoderObj->decPrm[0] = 1;    } else if(frametype == 0) {        decoderObj->decPrm[1] = 0;        decoderObj->decPrm[0] = 0;    } else if(frametype == 1) {        decoderObj->decPrm[1] = 1;        decoderObj->decPrm[0] = 0;        i=0;        decoderObj->decPrm[1+1] = ExtractBitsG729(&pParm,&i,1);        decoderObj->decPrm[1+2] = ExtractBitsG729(&pParm,&i,5);        decoderObj->decPrm[1+3] = ExtractBitsG729(&pParm,&i,4);        decoderObj->decPrm[1+4] = ExtractBitsG729(&pParm,&i,5);    } else if(frametype == 2) {        decoderObj->decPrm[0] = 0;        decoderObj->decPrm[1] = 2;        i=0;        decoderObj->decPrm[2] = ExtractBitsG729(&pParm,&i,1+FIR_STAGE_BITS);        decoderObj->decPrm[3] = ExtractBitsG729(&pParm,&i,SEC_STAGE_BITS*2);        decoderObj->decPrm[4] = ExtractBitsG729(&pParm,&i,8);        decoderObj->decPrm[5] = ExtractBitsG729(&pParm,&i,9);        decoderObj->decPrm[6] = ExtractBitsG729(&pParm,&i,2);        decoderObj->decPrm[7] = ExtractBitsG729(&pParm,&i,6);        decoderObj->decPrm[8] = ExtractBitsG729(&pParm,&i,4);        decoderObj->decPrm[9] = ExtractBitsG729(&pParm,&i,9);        decoderObj->decPrm[10] = ExtractBitsG729(&pParm,&i,2);        decoderObj->decPrm[11] = ExtractBitsG729(&pParm,&i,6);        decoderObj->codecType = G729D_CODEC;    } else if(frametype == 3) {        i=0;        decoderObj->decPrm[1] = 3;        decoderObj->decPrm[0] = 0;        decoderObj->decPrm[1+1] = ExtractBitsG729(&pParm,&i,1+FIR_STAGE_BITS);        decoderObj->decPrm[1+2] = ExtractBitsG729(&pParm,&i,SEC_STAGE_BITS*2);        decoderObj->decPrm[1+3] = ExtractBitsG729(&pParm,&i,8);        decoderObj->decPrm[1+4] = ExtractBitsG729(&pParm,&i,1);        decoderObj->decPrm[1+5] = ExtractBitsG729(&pParm,&i,13);        decoderObj->decPrm[1+6] = ExtractBitsG729(&pParm,&i,4);        decoderObj->decPrm[1+7] = ExtractBitsG729(&pParm,&i,7);        decoderObj->decPrm[1+8] = ExtractBitsG729(&pParm,&i,5);        decoderObj->decPrm[1+9] = ExtractBitsG729(&pParm,&i,13);        decoderObj->decPrm[1+10] = ExtractBitsG729(&pParm,&i,4);        decoderObj->decPrm[1+11] = ExtractBitsG729(&pParm,&i,7);        decoderObj->decPrm[1+4] =  (Ipp16s)((equality(decoderObj->decPrm[1+3])+decoderObj->decPrm[1+4]) & 0x00000001); /*  parity error (1) */        decoderObj->codecType = G729_CODEC;    } else if(frametype == 4) {        Ipp16s tmp;        i=0;        tmp = ExtractBitsG729(&pParm,&i,2);        decoderObj->decPrm[0] = 0;        decoderObj->decPrm[1] = 4;        if(tmp==0) {            decoderObj->decPrm[2] = 0;            decoderObj->decPrm[3] = ExtractBitsG729(&pParm,&i,1+FIR_STAGE_BITS);            decoderObj->decPrm[4] = ExtractBitsG729(&pParm,&i,SEC_STAGE_BITS*2);            decoderObj->decPrm[5] = ExtractBitsG729(&pParm,&i,8);            decoderObj->decPrm[6] = ExtractBitsG729(&pParm,&i,1);            decoderObj->decPrm[7] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[8] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[9] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[10] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[11] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[12] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[13] = ExtractBitsG729(&pParm,&i,5);            decoderObj->decPrm[14] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[15] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[16] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[17] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[18] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[19] = ExtractBitsG729(&pParm,&i,7);            i = decoderObj->decPrm[5]>>1;            i &= 1;            decoderObj->decPrm[6] = (Ipp16s)(decoderObj->decPrm[6] + i);            decoderObj->decPrm[6] = (Ipp16s)((equality(decoderObj->decPrm[5])+decoderObj->decPrm[6]) & 0x00000001);/* parm[6] = parity error (1) */        } else {            decoderObj->decPrm[2] = 1; /*LPmode*/            decoderObj->decPrm[3] = ExtractBitsG729(&pParm,&i,8);            decoderObj->decPrm[4] = ExtractBitsG729(&pParm,&i,1);            decoderObj->decPrm[5] = ExtractBitsG729(&pParm,&i,13);            decoderObj->decPrm[6] = ExtractBitsG729(&pParm,&i,10);            decoderObj->decPrm[7] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[8] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[9] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[10] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[11] = ExtractBitsG729(&pParm,&i,5);            decoderObj->decPrm[12] = ExtractBitsG729(&pParm,&i,13);            decoderObj->decPrm[13] = ExtractBitsG729(&pParm,&i,10);            decoderObj->decPrm[14] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[15] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[16] = ExtractBitsG729(&pParm,&i,7);            decoderObj->decPrm[17] = ExtractBitsG729(&pParm,&i,7);            i = decoderObj->decPrm[3]>>1;            i &= 1;            decoderObj->decPrm[4] = (Ipp16s)(decoderObj->decPrm[4] + i);            decoderObj->decPrm[4] = (Ipp16s)((equality(decoderObj->decPrm[3])+decoderObj->decPrm[4]) & 0x00000001);/* parm[4] = parity error (1) */        }        decoderObj->codecType = G729E_CODEC;    }    parm = decoderObj->decPrm;    badFrameIndicator = *parm++;    fType = *parm;    if(badFrameIndicator == 1) {        fType = decoderObj->CNGvar;        if(fType == 1) fType = 0;    } else {        decoderObj->valGainAttenuation = IPP_MAX_16S;        decoderObj->BFIcount = 0;    }    if( fType == 4) {        if(badFrameIndicator != 0) {            LPmode = decoderObj->prevLPmode;        } else {            LPmode = parm[1];        }        if(decoderObj->prevBFI != 0) {            voiceFlag = decoderObj->prevVoiceFlag;            decoderObj->voiceFlag = decoderObj->prevVoiceFlag;        }        ippsWinHybrid_G729E_16s32s(decoderObj->LTPostFilt, BWDacf,                                   (IppsWinHybridState_G729E_16s*)&decoderObj->hwState);        BWDLagWindow(BWDacf, BWDhighAcf);        if(ippsLevinsonDurbin_G729_32s16s(BWDhighAcf, BWLPCF_DIM, &BWDfiltLPC[BWLPCF1_DIM], BWDrc,&temp) == ippStsOverflow) {            ippsCopy_16s(decoderObj->pPrevBwdLPC,&BWDfiltLPC[BWLPCF1_DIM],BWLPCF1_DIM);            BWDrc[0] = decoderObj->pPrevBwdRC[0];            BWDrc[1] = decoderObj->pPrevBwdRC[1];        } else {            ippsCopy_16s(&BWDfiltLPC[BWLPCF1_DIM],decoderObj->pPrevBwdLPC,BWLPCF1_DIM);            decoderObj->pPrevBwdRC[0] = BWDrc[0];            decoderObj->pPrevBwdRC[1] = BWDrc[1];        }        satFilter = 0;        for(i=BWLPCF1_DIM; i<2*BWLPCF1_DIM; i++) {            if(BWDfiltLPC[i] >= IPP_MAX_16S) {                satFilter = 1;                break;            }        }        if(satFilter == 1) ippsCopy_16s(decoderObj->pBwdLPC2, &BWDfiltLPC[BWLPCF1_DIM], BWLPCF1_DIM);        else ippsCopy_16s(&BWDfiltLPC[BWLPCF1_DIM], decoderObj->pBwdLPC2, BWLPCF1_DIM);        ippsMulPowerC_NR_16s_Sfs(&BWDfiltLPC[BWLPCF1_DIM], N0_98, &BWDfiltLPC[BWLPCF1_DIM], BWLPCF1_DIM, 15);    }    ippsMove_16s(&decoderObj->LTPostFilt[LP_FRAME_DIM], &decoderObj->LTPostFilt[0], SYNTH_BWD_DIM);    if(LPmode == 1) {        Ipp16s tmp;        if((decoderObj->interpCoeff2 != 0)) {            tmp = (Ipp16s)((1<<12) - decoderObj->interpCoeff2);            ippsInterpolateC_G729_16s_Sfs(BWDfiltLPC + BWLPCF1_DIM, tmp,                                          decoderObj->pBwdLPC, decoderObj->interpCoeff2, BWDfiltLPC + BWLPCF1_DIM, BWLPCF1_DIM, 12);        }    }    if((badFrameIndicator != 0)&&(decoderObj->prevBFI == 0) && (decoderObj->CNGvar >3))        ippsCopy_16s(&BWDfiltLPC[BWLPCF1_DIM],decoderObj->pBwdLPC,BWLPCF1_DIM);    if(fType < 2) {        if(fType == 1) {            LOCAL_ALIGN_ARRAY(32, Ipp16s, lsfq,LPF_DIM,decoderObj);            sidGain = SIDgain[(Ipp32s)parm[4]];            ippsLSFDecode_G729B_16s(&parm[1],(Ipp16s*)(decoderObj->prevLSPfreq),lsfq);            ippsLSFToLSP_G729_16s(lsfq,lspSID);            LOCAL_ALIGN_ARRAY_FREE(32, Ipp16s, lsfq,LPF_DIM,decoderObj);        } else {            if(decoderObj->CNGvar > 1) {                QuantSIDGain_G729B_16s(&decoderObj->SIDflag0, &decoderObj->SIDflag1, 0, &temp, &index2);                sidGain = SIDgain[(Ipp32s)index2];            }        }        if(decoderObj->CNGvar > 1) {            gainNow = sidGain;        } else {            gainNow = (Ipp16s)((gainNow * GAIN0 + BWF_HARMONIC)>>15);            gainNow = Add_16s(gainNow, (Ipp16s)((sidGain * GAIN1 + BWF_HARMONIC)>>15));        }        if(gainNow == 0) {            ippsZero_16s(excitation,LP_FRAME_DIM);            gpVal = 0;            for(subfrIdx = 0;  subfrIdx < LP_FRAME_DIM; subfrIdx += LP_SUBFRAME_DIM) {                ippsPhaseDispersionUpdate_G729D_16s((Ipp16s)gpVal, gainNow,                                                    (IppsPhaseDispersion_State_G729D*)decoderObj->PhDispMem);            }        } else {            for(i = 0;  i < LP_FRAME_DIM; i += LP_SUBFRAME_DIM) {                Ipp32s invSq;                Ipp16s pG2, tmp, tmp2;                const Ipp16s *excCached;                LOCAL_ARRAY(Ipp16s, IdxVec, 4, decoderObj);                LOCAL_ARRAY(Ipp16s, pulseSignVec, 4, decoderObj);                LOCAL_ALIGN_ARRAY(32, Ipp16s, excg, LP_SUBFRAME_DIM, decoderObj);                LOCAL_ARRAY(Ipp16s,tempArray,LP_SUBFRAME_DIM, decoderObj);                RandomCodebookParm_G729B_16s(&decoderObj->seed,IdxVec,pulseSignVec,&pG2,delayVal);                ippsDecodeAdaptiveVector_G729_16s_I(delayVal,&prevExcitat[i]);                if(decoderObj->CNGidx > CNG_STACK_SIZE-1) { /* not cached */                    ippsRandomNoiseExcitation_G729B_16s(&decoderObj->seed,excg,LP_SUBFRAME_DIM);                    ippsDotProd_16s32s_Sfs(excg,excg,LP_SUBFRAME_DIM,&invSq,0);                    ippsInvSqrt_32s_I(&invSq,1);                    excCached=excg;                } else {                    decoderObj->seed = cngSeedOut[decoderObj->CNGidx];                    invSq = cngInvSqrt[decoderObj->CNGidx];                    excCached=&cngCache[decoderObj->CNGidx][0];                    decoderObj->CNGidx++;                }                NoiseExcitationFactorization_G729B_16s(excCached,invSq,gainNow,excg,LP_SUBFRAME_DIM);                tmp2 = (Ipp16s)ComfortNoiseExcitation_G729B_16s_I(excg,IdxVec,pulseSignVec,gainNow,pG2,&excitation[i],&tmp,tempArray);                if(tmp2 < 0) gpVal = 0;                if(tmp >= 0)                    ippsPhaseDispersionUpdate_G729D_16s((Ipp16s)gpVal,tmp,                                                        (IppsPhaseDispersion_State_G729D*)decoderObj->PhDispMem);                else                    ippsPhaseDispersionUpdate_G729D_16s((Ipp16s)gpVal,(Ipp16s)-tmp,                                                        (IppsPhaseDispersion_State_G729D*)decoderObj->PhDispMem);                LOCAL_ARRAY_FREE(Ipp16s,tempArray,LP_SUBFRAME_DIM, decoderObj);                LOCAL_ALIGN_ARRAY_FREE(32, Ipp16s, excg, LP_SUBFRAME_DIM, decoderObj);                LOCAL_ARRAY_FREE(Ipp16s, pulseSignVec, 4, decoderObj);                LOCAL_ARRAY_FREE(Ipp16s, IdxVec, 4, decoderObj);            }        }        ippsInterpolate_G729_16s(prevSubfrLSP,lspSID,prevSubfrLSP, LPF_DIM );        ippsLSPToLPC_G729_16s(prevSubfrLSP,&FWDfiltLPC[0]);        ippsLSPToLPC_G729_16s(lspSID,&FWDfiltLPC[LPF_DIM+1]);        ippsCopy_16s(lspSID, prevSubfrLSP, LPF_DIM );        decoderObj->sidGain = sidGain;        decoderObj->gainNow = gainNow;        ppAz = FWDfiltLPC;        for(subfrIdx = 0; subfrIdx < LP_FRAME_DIM; subfrIdx += LP_SUBFRAME_DIM) {            if(SynthesisFilter_G729_16s(ppAz,&excitation[subfrIdx],&synth[subfrIdx],LP_SUBFRAME_DIM,synFltw,20)==               ippStsOverflow) {                /* scale down excitation and redo in case of overflow */                ippsRShiftC_16s_I(2,prevExcitat,L_prevExcitat+LP_FRAME_DIM);                SynthesisFilterOvf_G729_16s(ppAz,&excitation[subfrIdx],&synth[subfrIdx],LP_SUBFRAME_DIM,synFltw,20);            }            ppAz += LPF_DIM+1;        }        decoderObj->betaPreFilter = PITCH_SHARP_MIN;        prevFrameDelay1 = decoderObj->prevFrameDelay;        decoderObj->interpCoeff2_2 = 4506;        decoderObj->BWDFrameCounter = 0;        decoderObj->stat_pitch = 0;        ippsCopy_16s(&FWDfiltLPC[LPF_DIM+1], decoderObj->pPrevFilt, LPF_DIM+1);        ippsZero_16s(&decoderObj->pPrevFilt[LPF_DIM+1], (BWLPCF1_DIM-LPF_DIM-1));    } else {        decoderObj->seed = SEED_INIT;        decoderObj->CNGidx = 0;        parm++;        if(decoderObj->codecType == G729E_CODEC) parm++;        if( LPmode==0 ) {            LOCAL_ARRAY(Ipp16s, qIndex,4,decoderObj);

⌨️ 快捷键说明

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