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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? decg723.c

?? G.711,G.723.1,G.726,G.729,GSM CODEC C/C++ code
?? C
字號:
/*/////////////////////////////////////////////////////////////////////////////
//
//                  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: G.723.1 speech codec: decode API functions.
//
*/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "owng723.h"

static int DecoderObjSize(void){
   return sizeof(G723Decoder_Obj);
}


G723_CODECFUN( APIG723_Status, apiG723Decoder_Alloc, (int *pCodecSize))
{
   *pCodecSize =  DecoderObjSize();
   return APIG723_StsNoErr;
}

G723_CODECFUN( APIG723_Status, apiG723Decoder_Init,
              (G723Decoder_Obj* decoderObj, unsigned int mode))
{
   ippsZero_16s((short*)decoderObj,sizeof(G723Decoder_Obj)>>1) ;   /* non-initialized data, bug in debug mode AK27.08.01 */
   decoderObj->objPrm.objSize = DecoderObjSize();
   decoderObj->objPrm.mode = mode;
   decoderObj->objPrm.key = G723_DEC_KEY;
   decoderObj->objPrm.rat = 0; /* default 6.3 KBit/s*/

   ippsCopy_16s(LPCDCTbl,decoderObj->PrevLPC,G723_LPC_ORDER);

   decoderObj->PstFltGain = (short) 0x1000 ;
   /* Initialize the CNG */
   decoderObj->PastFrameType = G723_ActiveFrm;
   decoderObj->sSidGain = 0;
   decoderObj->CNGSeed = 12345;
   decoderObj->CasheCounter = 0;
   ippsCopy_16s(LPCDCTbl,decoderObj->SIDLSP,G723_LPC_ORDER);

   return APIG723_StsNoErr;
}

G723_CODECFUN( APIG723_Status, apiG723Decoder_ControlMode,
              (G723Decoder_Obj* decoderObj, unsigned int mode))
{
   decoderObj->objPrm.mode = mode;
   return APIG723_StsNoErr;
}

G723_CODECFUN( APIG723_Status, apiG723Decoder_InitBuff,
         (G723Decoder_Obj* decoderObj, char *buff))
{
#if !defined (NO_SCRATCH_MEMORY_USED)

   if(NULL==decoderObj)
      return APIG723_StsBadArgErr;

   if(buff)   decoderObj->Mem.base = buff; // otherwise reinit
   else if (decoderObj->Mem.base == NULL) return APIG723_StsNotInitialized;
   decoderObj->Mem.CurPtr = decoderObj->Mem.base;
   decoderObj->Mem.VecPtr = (int *)(decoderObj->Mem.base+G723_ENCODER_SCRATCH_MEMORY_SIZE);

#endif

   return APIG723_StsNoErr;
}

void DecoderCNG_G723(G723Decoder_Obj* decoderObj, ParamStream_G723 *CurrentParams, short *pExcitation, short *pDstLPC)
{
    int i;

    if(CurrentParams->FrameType == G723_SIDFrm) { /* SID Frame */
        LOCAL_ARRAY(short, qIndex,3, decoderObj);

        DecodeSIDGain_G723_16s(CurrentParams->sAmpIndex[0],&decoderObj->sSidGain);

        /* LSP inverse quantization */
        qIndex[2] =  CurrentParams->lLSPIdx & 0xff;
        qIndex[1] =  (CurrentParams->lLSPIdx>>8) & 0xff;
        qIndex[0] =  (CurrentParams->lLSPIdx>>16) & 0xff;
        if(ippsLSFDecode_G723_16s(qIndex, decoderObj->PrevLPC,  0, decoderObj->SIDLSP) != ippStsNoErr)
           ippsCopy_16s(decoderObj->PrevLPC,decoderObj->SIDLSP,G723_LPC_ORDER);

        LOCAL_ARRAY_FREE(short, qIndex,3, decoderObj);
    } else { /* non SID Frame */
       if(decoderObj->PastFrameType == G723_ActiveFrm) {  /* Case of 1st SID frame erased */
            QuantSIDGain_G723_16s(&decoderObj->sSidGain, &decoderObj->CurrGain, 0, &i);
            DecodeSIDGain_G723_16s(i,&decoderObj->sSidGain);
        }
    }

    if(decoderObj->PastFrameType == G723_ActiveFrm) {
        decoderObj->CurrGain = decoderObj->sSidGain;
    } else { /* update gain */
        decoderObj->CurrGain = ( 7*decoderObj->CurrGain + decoderObj->sSidGain) >> 3 ;
    }
    {

       LOCAL_ARRAY(char, buff,ComfortNoiseExcitation_G723_16s_Buff_Size, decoderObj);

       ComfortNoiseExcitation_G723_16s(decoderObj->CurrGain, decoderObj->PrevExcitation, pExcitation,
                    &decoderObj->CNGSeed, CurrentParams->PitchLag,CurrentParams->AdCdbkLag,CurrentParams->AdCdbkGain, CurrentParams->currRate, buff, &decoderObj->CasheCounter);
       LOCAL_ARRAY_FREE(char, buff,ComfortNoiseExcitation_G723_16s_Buff_Size, decoderObj);
    }


    /* LSP interpolation */
    LSPInterpolation(decoderObj->SIDLSP, decoderObj->PrevLPC, pDstLPC) ;
    ippsCopy_16s(decoderObj->SIDLSP,decoderObj->PrevLPC,G723_LPC_ORDER);

    return;
}

G723_CODECFUN( APIG723_Status, apiG723Decode,
         (G723Decoder_Obj* decoderObj, const char* src, short badFrameIndicator, short* dst))
{
    int   i,j,k   ;
    short  *pData ;

    LOCAL_ALIGN_ARRAY(32, short, SubZeroLPC,G723_LPC_ORDER+1, decoderObj);
    LOCAL_ARRAY(short, CurrLPC,4*(G723_LPC_ORDER+1), decoderObj);
    LOCAL_ARRAY(short, AdaptiveVector,G723_SBFR_LEN, decoderObj);
    LOCAL_ARRAY(short, CurrLSF,G723_LPC_ORDER, decoderObj);
    LOCAL_ARRAY(short, TemporaryVector,G723_MAX_PITCH+G723_FRM_LEN, decoderObj);
    LOCAL_ARRAY(GainInfo_G723, GainInfo,4, decoderObj);
    ParamStream_G723 CurrentParams;

    if(NULL==decoderObj || NULL==src || NULL ==dst)
      return APIG723_StsBadArgErr;
    if(decoderObj->objPrm.objSize <= 0)
      return APIG723_StsNotInitialized;
    if(G723_DEC_KEY != decoderObj->objPrm.key)
      return APIG723_StsBadCodecType;

    CurrentParams.currRate = (G723_Rate)decoderObj->objPrm.rat;
    CurrentParams.isBadFrame = badFrameIndicator;

    if(badFrameIndicator == 0) {
        GetParamFromBitstream( src, &CurrentParams); /* Unpack the bitstream */
        if( CurrentParams.FrameType == G723_ActiveFrm) decoderObj->objPrm.rat = CurrentParams.currRate;
    }
    if ( CurrentParams.isBadFrame != 0 ) {
        if(decoderObj->PastFrameType == G723_ActiveFrm) CurrentParams.FrameType = G723_ActiveFrm;  /* active */
        else CurrentParams.FrameType = G723_UntransmittedFrm;  /* untransmitted */
    }

    if(CurrentParams.FrameType != G723_ActiveFrm) { /* non active frame */

        /* noise generation */
        DecoderCNG_G723(decoderObj, &CurrentParams, dst, CurrLPC);
    } else {
        /* Update erasure count. Section 3.10*/

        if ( 0 != CurrentParams.isBadFrame )
            decoderObj->ErasedFramesCounter++;
        else
            decoderObj->ErasedFramesCounter = 0 ;

        if ( decoderObj->ErasedFramesCounter > 3 )
            decoderObj->ErasedFramesCounter = 3 ;

        {
            LOCAL_ARRAY(short, qIndex,3, decoderObj);
            /* Decode the LSP vector for subframe 3.  Section 3.2 */
            qIndex[2] =  CurrentParams.lLSPIdx & 0xff;
            qIndex[1] =  (CurrentParams.lLSPIdx>>8) & 0xff;
            qIndex[0] =  (CurrentParams.lLSPIdx>>16) & 0xff;
            if(ippsLSFDecode_G723_16s(qIndex,  decoderObj->PrevLPC, CurrentParams.isBadFrame, CurrLSF) != ippStsNoErr)
               ippsCopy_16s(decoderObj->PrevLPC,CurrLSF,G723_LPC_ORDER);

            LOCAL_ARRAY_FREE(short, qIndex,3, decoderObj);
        }

        /* LSP interpolation.  Section 3.3  */
        LSPInterpolation(CurrLSF, decoderObj->PrevLPC, CurrLPC) ;
        ippsCopy_16s(CurrLSF,decoderObj->PrevLPC,G723_LPC_ORDER);

        /* Generate the excitation for the frame */
        ippsCopy_16s(decoderObj->PrevExcitation,TemporaryVector,G723_MAX_PITCH);

        pData = &TemporaryVector[G723_MAX_PITCH] ;

        if ( 0 == decoderObj->ErasedFramesCounter ) {
            /*update the interpolation gain memory.*/
            decoderObj->InterpolatedGain = -GainDBLvls[(CurrentParams.sAmpIndex[2]+CurrentParams.sAmpIndex[3])>>1];

            for ( i = 0 ; i < 4 ; i ++ ) {
               int lLag;
               short sGain;

                /* Fixed codebook excitation. Section 3.5 */
                FixedCodebookVector_G723_16s(CurrentParams.sPosition[i], CurrentParams.sAmplitude[i],
                   CurrentParams.sAmpIndex[i], CurrentParams.sGrid[i], CurrentParams.AdCdbkGain[i],
                   i, CurrentParams.currRate, pData, &lLag, &sGain ) ;
                if ( G723_Rate63 == CurrentParams.currRate ){
                   if(1 == CurrentParams.sTrainDirac[i] ){
                      short   Tmp[G723_SBFR_LEN] ;
                      ippsCopy_16s(pData,Tmp,G723_SBFR_LEN);
                      /*  Generation of a Dirac train. Section 2.15 */
                      for ( j = CurrentParams.PitchLag[i>>1]; j < G723_SBFR_LEN ; j += CurrentParams.PitchLag[i>>1] ) {
                         ippsAdd_16s_I(Tmp,&pData[j],G723_SBFR_LEN-j);
                      }
                   }
                }else{ /*rate53*/
                   lLag += CurrentParams.PitchLag[i>>1]-1+CurrentParams.AdCdbkLag[i];
                   if(lLag < G723_SBFR_LEN-2) {
                      ippsHarmonicFilter_16s_I(sGain,lLag,&pData[lLag],G723_SBFR_LEN-lLag);
                   }
                }

                /* Adaptive codebook excitation. Section 3.4 */

                ippsDecodeAdaptiveVector_G723_16s(CurrentParams.PitchLag[i>>1],CurrentParams.AdCdbkLag[i],CurrentParams.AdCdbkGain[i],
                                                  &TemporaryVector[G723_SBFR_LEN*i], AdaptiveVector, SA_Rate[CurrentParams.currRate]);

                /* Codebook contributions to excitation. */
                ippsLShiftC_16s_I(1,pData,G723_SBFR_LEN);
                ippsAdd_16s_I(AdaptiveVector,pData,G723_SBFR_LEN);
                pData += G723_SBFR_LEN ;
            }

            ippsCopy_16s(&TemporaryVector[G723_MAX_PITCH],dst,G723_FRM_LEN);

            /* Interpolation index calculation. Section 3.10 */
             InterpolationIndex_G723_16s( TemporaryVector, CurrentParams.PitchLag[1],
                                       &decoderObj->sSidGain, &decoderObj->CurrGain, &decoderObj->InterpolationIdx );

            /* Pitch post filter coefficients calculation.  Section 3.6 */
            if ( decoderObj->objPrm.mode&G723Decode_PF_Enabled )
                for ( i = 0 ; i < 4 ; i ++ )
                   ippsPitchPostFilter_G723_16s(CurrentParams.PitchLag[i>>1], &TemporaryVector[G723_MAX_PITCH], &GainInfo[i].sDelay,
                                    &GainInfo[i].sGain, &GainInfo[i].sScalingGain, (short)i, SA_Rate[CurrentParams.currRate]);


            ippsCopy_16s(decoderObj->PrevExcitation,TemporaryVector,G723_MAX_PITCH);
            ippsCopy_16s(dst,&TemporaryVector[G723_MAX_PITCH],G723_FRM_LEN);

            /* Pitch post filtering. Section 3.6 */
            if ( decoderObj->objPrm.mode&G723Decode_PF_Enabled )
                for ( i = 0 ; i < 4 ; i ++ ){
                   ippsInterpolateC_NR_G729_16s_Sfs(
                      &TemporaryVector[G723_MAX_PITCH+i*G723_SBFR_LEN], GainInfo[i].sScalingGain,
                      &TemporaryVector[G723_MAX_PITCH+i*G723_SBFR_LEN+GainInfo[i].sDelay], GainInfo[i].sGain,
                      &dst[i*G723_SBFR_LEN],G723_SBFR_LEN,15);
                }

            ippsCopy_16s(decoderObj->PrevLPC,decoderObj->SIDLSP,G723_LPC_ORDER);
        } else {
            /* Frame erasure. Section 3.10 */
            /*compute the interpolation gain.*/
            decoderObj->InterpolatedGain =  (3 * decoderObj->InterpolatedGain + 2 ) >> 2 ;
            if ( decoderObj->ErasedFramesCounter >= 3 ) {    /* Test for clearing */
               ippsZero_16s(dst,G723_FRM_LEN);
               ippsZero_16s(TemporaryVector,G723_FRM_LEN+G723_MAX_PITCH);
            }else{
               ResidualInterpolation_G723_16s_I(TemporaryVector,  dst, decoderObj->InterpolationIdx,
                                                    decoderObj->InterpolatedGain, &decoderObj->ResIntSeed ) ;
            }
        }

        ippsCopy_16s(&TemporaryVector[G723_FRM_LEN],decoderObj->PrevExcitation,G723_MAX_PITCH);
        decoderObj->CNGSeed = 12345;
        decoderObj->CasheCounter = 0;
    }

    decoderObj->PastFrameType = CurrentParams.FrameType;

    /* Speech synthesis. Section 3.7 */
    pData = dst ;
    for ( i = 0 ; i < 4 ; i ++ ) {

        SubZeroLPC[0] = CurrLPC[i*(G723_LPC_ORDER+1)];
        for(k=1; k<G723_LPC_ORDER+1; k++) SubZeroLPC[k] = -CurrLPC[i*(G723_LPC_ORDER+1)+k];
        ippsSynthesisFilter_NR_16s_ISfs(SubZeroLPC, pData, G723_SBFR_LEN, 13, decoderObj->SyntFltIIRMem);
        ippsCopy_16s(&pData[G723_SBFR_LEN-G723_LPC_ORDER], decoderObj->SyntFltIIRMem, G723_LPC_ORDER);

        if ( decoderObj->objPrm.mode&G723Decode_PF_Enabled ) {

           /* Formant post filter. Section 3.8 */
           PostFilter(decoderObj, pData, &CurrLPC[i*(G723_LPC_ORDER+1)+1] ) ;
        }else{
           ippsMulC_16s_I(2,pData,G723_SBFR_LEN);
        }
        pData += G723_SBFR_LEN ;
    }

    CLEAR_SCRATCH_MEMORY(decoderObj);

    return APIG723_StsNoErr;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩影院精彩在线| 亚洲欧洲精品天堂一级| 日韩av不卡在线观看| 91精品国产综合久久久久久久久久| 亚洲国产日韩一级| 91麻豆精品国产91久久久久久 | 欧洲亚洲精品在线| 亚洲尤物视频在线| 欧美一区二区三区视频在线| 国产专区欧美精品| 国产精品色在线| 欧美私人免费视频| 欧美aaaaaa午夜精品| 国产日产欧美精品一区二区三区| 波多野结衣中文一区| 亚洲一区二区三区中文字幕| 欧美一级淫片007| 成人听书哪个软件好| 亚洲男女毛片无遮挡| 正在播放一区二区| 国产二区国产一区在线观看 | 亚洲一区二区三区四区五区黄 | 久久激情综合网| 国产精品剧情在线亚洲| 欧美在线短视频| 国内不卡的二区三区中文字幕 | 亚洲欧美另类图片小说| 欧美精品高清视频| 成人免费av资源| 视频一区二区中文字幕| 日本一区二区三区视频视频| 欧美无人高清视频在线观看| 黄色日韩网站视频| 亚洲福利视频一区二区| 中文字幕欧美三区| 欧美高清你懂得| 波多野结衣中文字幕一区二区三区| 一区二区三区免费看视频| 久久久久久久久99精品| 日韩三级视频在线观看| 99麻豆久久久国产精品免费| 日韩av不卡一区二区| 综合精品久久久| 久久久影院官网| 欧美日韩一区高清| 91一区二区三区在线观看| 青青草精品视频| 亚洲综合精品久久| 欧美韩国日本一区| 日韩欧美中文字幕制服| 欧美性色黄大片手机版| av午夜一区麻豆| 国产精品亚洲视频| 欧美aaa在线| 五月天激情小说综合| 亚洲视频1区2区| 亚洲国产精品激情在线观看| 日韩三级视频中文字幕| 欧美另类videos死尸| 在线观看91视频| 色综合久久久久| 99国产精品久久久久久久久久| 国产精品自在欧美一区| 久久99久久99小草精品免视看| 婷婷丁香久久五月婷婷| 一区二区三区在线不卡| 中文字幕永久在线不卡| 国产亚洲污的网站| 久久久亚洲高清| 久久这里只有精品6| 精品国产三级a在线观看| 欧美一区二区三区啪啪| 在线不卡一区二区| 91精品国产综合久久久久久漫画 | 69久久夜色精品国产69蝌蚪网| 色综合av在线| 在线影视一区二区三区| 欧美午夜精品免费| 欧美日韩午夜影院| 欧美日韩精品福利| 欧美日韩国产另类一区| 欧美片在线播放| 欧美一区二区三区思思人| 欧美一卡二卡在线| 欧美不卡视频一区| 久久久777精品电影网影网 | 亚洲日本丝袜连裤袜办公室| 日韩一区日韩二区| 一区二区三区在线视频免费观看| 亚洲精品免费在线| 首页国产欧美日韩丝袜| 另类小说一区二区三区| 国产一二三精品| av一区二区三区在线| 在线观看不卡一区| 欧美一区二区三区电影| 久久久久久综合| 国产精品国产成人国产三级| 亚洲精品乱码久久久久久久久 | 日韩不卡在线观看日韩不卡视频| 免费视频一区二区| 国产美女视频91| 91麻豆国产在线观看| 欧美调教femdomvk| 精品免费国产一区二区三区四区| 久久久国产午夜精品| 午夜欧美大尺度福利影院在线看| 亚洲国产成人高清精品| 国产麻豆日韩欧美久久| 色哟哟精品一区| 91精品国产综合久久久久久久久久 | 久久综合成人精品亚洲另类欧美 | 亚洲激情第一区| 麻豆极品一区二区三区| 国产乱码精品1区2区3区| 91美女片黄在线观看| 5858s免费视频成人| 久久综合av免费| 亚洲国产成人精品视频| 国产高清一区日本| 欧美日韩一本到| 国产日韩欧美a| 日韩精品亚洲专区| 成人蜜臀av电影| 日韩美女在线视频| 亚洲美腿欧美偷拍| 国产乱码精品一区二区三| 欧美无人高清视频在线观看| 欧美国产一区二区| 日韩精品一区第一页| 97久久超碰国产精品电影| 日韩美一区二区三区| 亚洲香肠在线观看| 99久久精品免费看| 欧美岛国在线观看| 一二三区精品福利视频| 国产成人在线色| 日韩亚洲欧美中文三级| 亚洲精品成人悠悠色影视| 国产成人福利片| 欧美成人一区二区三区片免费| 亚洲毛片av在线| 成人高清在线视频| 精品成a人在线观看| 日韩国产欧美视频| 91成人国产精品| 亚洲天堂成人在线观看| 国产精品69毛片高清亚洲| 5566中文字幕一区二区电影 | 91精品国产一区二区| 一区二区三区欧美日韩| 成人动漫av在线| 国产视频在线观看一区二区三区| 青青草原综合久久大伊人精品优势 | 欧美男生操女生| 一区二区三区中文字幕| 91麻豆swag| 美女一区二区三区| 欧美日韩国产首页| 欧美电影在哪看比较好| 国产精品萝li| 国产福利视频一区二区三区| 精品国产一区二区三区久久影院| 视频在线观看91| 欧美日本在线一区| 无码av中文一区二区三区桃花岛| 欧美图片一区二区三区| 亚洲一二三级电影| 制服丝袜亚洲精品中文字幕| 天堂影院一区二区| 在线播放日韩导航| 精品国免费一区二区三区| 99视频在线精品| 久久精品欧美一区二区三区不卡 | 一区二区在线观看视频在线观看| 久久久一区二区三区| 国产精品理论在线观看| 中文字幕第一区第二区| 国产精品免费aⅴ片在线观看| 欧美精品一区二区久久久| 久久久久久免费| 亚洲丝袜另类动漫二区| 亚洲一区二区精品视频| 久久福利视频一区二区| 欧美男人的天堂一二区| 国产成人日日夜夜| 三级欧美韩日大片在线看| 中文字幕不卡一区| 在线成人免费观看| 99国产精品国产精品毛片| 奇米四色…亚洲| 亚洲精品中文在线观看| 久久色.com| 欧美日韩一卡二卡三卡| 成人aaaa免费全部观看| 午夜精品福利一区二区三区av| 国产欧美一区视频| 337p亚洲精品色噜噜| 色婷婷激情综合| 国产一区二区视频在线播放|