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

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

?? decoder.cpp

?? G711語音壓縮源碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
    Lsp_Int( QntLpc, DecCng.LspSid, DecStat.PrevLsp );

    /* Copy the LSP vector for the next frame */
    for ( i = 0 ; i < LpcOrder ; i ++ )
        DecStat.PrevLsp[i] = DecCng.LspSid[i];

    return;
}

/*
**
** Function:        Line_Unpk()
**
** Description:     unpacking of bitstream, gets coding parameters for a frame
**
** Links to text:   Section 4
**
** Arguments:
**
**  char   *Vinp        bitstream chars
**  short *Ftyp
**  short Crc
**
** Outputs:
**
**  short *Ftyp
**
** Return value:
**
**  LINEDEF             coded parameters
**     short   Crc
**     int   LspId
**     short   Olp[SubFrames/2]
**     SFSDEF   Sfs[SubFrames]
**
*/
LINEDEF  CLanAudioDecoder::Line_Unpk(char *Vinp, short *Ftyp, short Crc)
{
    int     i  ;
    short  BitStream[192] ;
    short  *Bsp = BitStream ;
    LINEDEF Line ;
    int  Temp ;
    short  Info ;
    short  Bound_AcGn ;

    Line.Crc = Crc;
    if (Crc != 0)
        return Line;

    /* Unpack the byte info to BitStream vector */
    for ( i = 0 ; i < 192 ; i ++ )
        BitStream[i] = (short) (( Vinp[i>>3] >> (i & (short)0x0007) ) & 1);

    /* Decode the first two bits */
    Info = (short)Ser2Par( &Bsp, 2 ) ;

    if (Info == 3) {
        *Ftyp = 0;
        Line.LspId = 0L;    /* Dummy : to avoid Borland C3.1 warning */
        return Line;
    }

    /* Decode the LspId */
    Line.LspId = Ser2Par( &Bsp, 24 ) ;

    if (Info == 2) {
        /* Decode the Noise Gain */
        Line.Sfs[0].Mamp = (short)Ser2Par( &Bsp, 6);
        *Ftyp = 2;
        return Line ;
    }

    /*
     * Decode the common information to both rates
     */

    *Ftyp = 1;

    /* Decode the bit-rate */
    WrkRate = (Info == 0) ? Rate63 : Rate53;

    /* Decode the adaptive codebook lags */
    Temp = Ser2Par( &Bsp, 7 ) ;
    /* Test if forbidden code */
    if (Temp <= 123) {
        Line.Olp[0] = (short) Temp + (short)PitchMin ;
    }
    else {
        /* transmission error */
        Line.Crc = 1;
        return Line;
    }

    Line.Sfs[1].AcLg = (short) Ser2Par( &Bsp, 2 ) ;

    Temp = Ser2Par( &Bsp, 7 ) ;
    /* Test if forbidden code */
    if (Temp <= 123) {
        Line.Olp[1] = (short) Temp + (short)PitchMin ;
    }
    else {
        /* transmission error */
        Line.Crc = 1;
        return Line ;
    }

    Line.Sfs[3].AcLg = (short) Ser2Par( &Bsp, 2 ) ;

    Line.Sfs[0].AcLg = 1 ;
    Line.Sfs[2].AcLg = 1 ;

    /* Decode the combined gains accordingly to the rate */
    for ( i = 0 ; i < SubFrames ; i ++ ) {

        Temp = Ser2Par( &Bsp, 12 ) ;

        Line.Sfs[i].Tran = 0 ;

        Bound_AcGn = NbFilt170 ;
        if ( (WrkRate == Rate63) && (Line.Olp[i>>1] < (SubFrLen-2) ) ) {
            Line.Sfs[i].Tran = (short)(Temp >> 11) ;
            Temp &= 0x000007ffL ;
            Bound_AcGn = NbFilt085 ;
        }
        Line.Sfs[i].AcGn = (short)(Temp / (short)NumOfGainLev) ;

        if (Line.Sfs[i].AcGn < Bound_AcGn ) {
            Line.Sfs[i].Mamp = (short)(Temp % (short)NumOfGainLev) ;
        }
        else {
            /* error detected */
            Line.Crc = 1;
            return Line ;
        }
    }

    /* Decode the grids */
    for ( i = 0 ; i < SubFrames ; i ++ )
        Line.Sfs[i].Grid = *Bsp ++ ;

    if (Info == 0) {

        /* Skip the reserved bit */
        Bsp ++ ;

        /* Decode 13 bit combined position index */
        Temp = Ser2Par( &Bsp, 13 ) ;
        Line.Sfs[0].Ppos = ( Temp/90 ) / 9 ;
        Line.Sfs[1].Ppos = ( Temp/90 ) % 9 ;
        Line.Sfs[2].Ppos = ( Temp%90 ) / 9 ;
        Line.Sfs[3].Ppos = ( Temp%90 ) % 9 ;

        /* Decode all the pulse positions */
        Line.Sfs[0].Ppos = ( Line.Sfs[0].Ppos << 16 ) + Ser2Par( &Bsp, 16 ) ;
        Line.Sfs[1].Ppos = ( Line.Sfs[1].Ppos << 14 ) + Ser2Par( &Bsp, 14 ) ;
        Line.Sfs[2].Ppos = ( Line.Sfs[2].Ppos << 16 ) + Ser2Par( &Bsp, 16 ) ;
        Line.Sfs[3].Ppos = ( Line.Sfs[3].Ppos << 14 ) + Ser2Par( &Bsp, 14 ) ;

        /* Decode pulse amplitudes */
        Line.Sfs[0].Pamp = (short)Ser2Par( &Bsp, 6 ) ;
        Line.Sfs[1].Pamp = (short)Ser2Par( &Bsp, 5 ) ;
        Line.Sfs[2].Pamp = (short)Ser2Par( &Bsp, 6 ) ;
        Line.Sfs[3].Pamp = (short)Ser2Par( &Bsp, 5 ) ;
    }
    else {

        /* Decode the positions */
        for ( i = 0 ; i < SubFrames ; i ++ )
            Line.Sfs[i].Ppos = Ser2Par( &Bsp, 12 ) ;

        /* Decode the amplitudes */
        for ( i = 0 ; i < SubFrames ; i ++ )
            Line.Sfs[i].Pamp = (short)Ser2Par( &Bsp, 4 ) ;
    }
    return Line;
}

/*
**
** Function:        Scale()
**
** Description:     Postfilter gain scaling
**
** Links to text:   Section 3.9
**
** Arguments:
**
**  float *Tv
**  float  Sen
**
**  Inputs:
**
**  float DecStat.Gain
**
** Outputs:
**
**  float *Tv
**
** Return value:    None
**
*/
void  CLanAudioDecoder::Scale(float *Tv, float Sen)
{
    int  i;

    float Acc1;
    float SfGain;

//    Acc1 = DotProd(Tv,Tv,SubFrLen);
    Acc1 = DotProd10(Tv,Tv,SubFrLen);

    if (Acc1 > (float) FLT_MIN)
        SfGain = (float) ::sqrt(Sen/Acc1) * (float)0.0625;
    else
        SfGain = (float)0.0625;

    /*
     * Update gain and scale the Postfiltered Signal
     */
    for (i=0; i < SubFrLen; i++)
    {
        DecStat.Gain = (float)0.9375*DecStat.Gain + SfGain;
        Tv[i] = (float)1.0625*Tv[i]*DecStat.Gain;
    }
}

/*
**
** Function:        Fcbk_Unpk()
**
** Description:     Decoding of the fixed codebook excitation for both rates.
**                  Gains, pulse positions, grid position (odd or even), signs
**                  are decoded and used to reconstruct the excitation.
**
** Links to text:   Section 2.17 & 3.5
**
** Arguments:
**
**  float  *Tv      Decoded excitation vector
**  SFSDEF Sfs      Encoded parameters of the excitation (for one subframe)
**  int    Olp      Closed loop adaptive pitch lag
**  int    Sfc      Subframe index
**
** Outputs:
**
**  float  *Tv      Decoded excitation vector
**
** Return value:    None
**
*/
void  CLanAudioDecoder::Fcbk_Unpk(float *Tv, SFSDEF Sfs, int Olp, int Sfc)
{
    int    i,j,Np;
    float  Tv_tmp[SubFrLen+4];
    float  acelp_gain,gain_T0;
    int    acelp_sign, acelp_shift, acelp_pos;
    int    offset, ipos, T0_acelp;
    int Acc0;

    switch(WrkRate)
    {
        case Rate63:
        {
            Np = Nb_puls[Sfc];

            for (i=0; i < SubFrLen; i++)
                Tv[i] = (float)0.0;

            if (Sfs.Ppos >= MaxPosTable[Sfc])
                return;

            /*  Decode the amplitudes and positions */

            j = MaxPulseNum - Np;
            Acc0 = Sfs.Ppos;

            for (i = 0; i < SubFrLen/Sgrid; i++)
            {
                Acc0 -= CombinatorialTable[j][i];

                if (Acc0 < (int) 0)
                {
                    Acc0 += CombinatorialTable[j][i];
                    j++;

                    if ((Sfs.Pamp & (1 << (MaxPulseNum-j))) != 0)
                        Tv[Sfs.Grid + Sgrid*i] = -FcbkGainTable[Sfs.Mamp];
                    else
                        Tv[Sfs.Grid + Sgrid*i] =  FcbkGainTable[Sfs.Mamp];

                    if (j == MaxPulseNum)
                        break;
                }
            }

            if (Sfs.Tran == 1)
                Gen_Trn(Tv, Tv, Olp);
            break;
        }

        case Rate53:
        {
            for (i = 0; i < SubFrLen+4; i++)
                Tv_tmp[i] = (float)0.0;

            acelp_gain = FcbkGainTable[Sfs.Mamp];
            acelp_shift = Sfs.Grid;
            acelp_sign = Sfs.Pamp;
            acelp_pos = (int)Sfs.Ppos;

            offset  = 0;
            for (i=0; i<4; i++)
            {
                ipos = (acelp_pos & 7);
                ipos = (ipos << 3) + acelp_shift + offset;

                if ((acelp_sign & 1)== 1)
                    Tv_tmp[ipos] = acelp_gain;
                else
                    Tv_tmp[ipos] = -acelp_gain;

                offset += 2;
                acelp_pos = acelp_pos >> 3;
                acelp_sign = acelp_sign >> 1;
            }
            for (i = 0; i < SubFrLen; i++)
                Tv[i] = Tv_tmp[i];

            T0_acelp = search_T0( (Olp-1+Sfs.AcLg), Sfs.AcGn, &gain_T0);
            if (T0_acelp < SubFrLen-2)
            {
                for (i = T0_acelp; i < SubFrLen; i++)
                    Tv[i] += Tv[i-T0_acelp]*gain_T0;
            }
            break;
        }
    }
    return;
}

/*
**
** Function:        Decod_Acbk()
**
** Description:     Computes the adaptive codebook contribution from the previous
**                  excitation vector.
**                  With the gain index, the closed loop pitch lag, the jitter
**                  which when added to this pitch lag gives the actual closed
**                  loop value, and after having selected the proper codebook,
**                  the pitch contribution is reconstructed using the previous
**                  excitation buffer.
**
** Links to text:   Sections 2.14, 2.18 & 3.4
**
** Arguments:
**
**  float  *Tv      Reconstructed excitation vector
**  float  *PrevExc Previous excitation vector
**  int    Olp      closed-loop pitch period
**  int    Lid      Jitter around pitch period
**  int    Gid      Gain vector index in 5- dimensional
**                      adaptive gain vector codebook
**
** Outputs:
**
**  float  *Tv      Reconstructed excitation vector
**
** Return value:    None
**
*/
void  CLanAudioDecoder::Decod_Acbk(float *Tv, float *PrevExc, int Olp, int Lid, int Gid)
{
    int      i;
    float    RezBuf[SubFrLen+ClPitchOrd-1];
    float   *sPnt;

    Get_Rez(RezBuf, PrevExc, (Olp + Lid) - Pstep);


    i = 0;
    if (WrkRate == Rate63)
    {
        if (Olp >= (SubFrLen-2))
            i++;
    }
    else
        i=1;

    sPnt = AcbkGainTablePtr[i] + Gid*20;

    /*  Compute output vector */

    for (i=0; i < SubFrLen; i++)
//DotProd5s        Tv[i] = DotProd(&RezBuf[i], sPnt, ClPitchOrd);
        Tv[i] = DotProd5s(&RezBuf[i], sPnt);
}

/*
**
** Function:           Calc_Exc_Rand()
**
** Description:        Computation of random excitation for inactive frames:
**                     Adaptive codebook entry selected randomly
**                     Higher rate innovation pattern selected randomly
**                     Computes innovation gain to match curGain
**
** Links to text:
**
** Arguments:
**
**  float   curGain    current average gain to match
**  float   *PrevExc   previous/current excitation (updated)
**  float   *DataExc   current frame excitation
**  short  *nRandom   random generator status (input/output)
**  LINEDEF *Line
**
** Outputs:
**
**  float   *PrevExc
**  float   *DataExc
**  short  *nRandom
**  LINEDEF *Line
**
** Return value:       None
**
*/
void CLanAudioDecoder::Calc_Exc_Rand(float curGain, float *PrevExc, float *DataExc,
                                      short *nRandom, LINEDEF *Line)
{
    int     i, i_subfr, iblk;
    short  temp16;
    short  j;
    short  TabPos[2*NbPulsBlk], *ptr_TabPos;
    float   TabSign[2*NbPulsBlk], *ptr_TabSign;
    short  *ptr1;
    float   *curExc;
    float   x1, x2, ener_ltp, inter_exc, delta, b0, c;
    short  tmp[SubFrLen/Sgrid];
    short  offset[SubFrames];

    /*
     * generate LTP codes
     */
    Line->Olp[0] = random_number(21, nRandom) + 123;
    Line->Olp[1] = random_number(21, nRandom) + 123;
    for (i_subfr=0; i_subfr<SubFrames; i_subfr++) {  /* in [1, NbFilt] */
        Line->Sfs[i_subfr].AcGn = random_number(NbFilt, nRandom) + (short)1;
    }
    Line->Sfs[0].AcLg = 1;
    Line->Sfs[1].AcLg = 0;
    Line->Sfs[2].AcLg = 1;
    Line->Sfs[3].AcLg = 3;


    /*
     * Random innovation :
     * Selection of the grids, signs and pulse positions
     */

    /* Signs and Grids */
    ptr_TabSign = TabSign;
    ptr1 = offset;
    for (iblk=0; iblk<SubFrames/2; iblk++) {
        temp16  = random_number((short) (1 << (NbPulsBlk+2)), nRandom);
        *ptr1++ = (short) (temp16 & 0x0001);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲va天堂va国产va久| 奇米在线7777在线精品| 欧美日韩在线不卡| 国产精品一区二区在线观看网站| 中文字幕在线观看一区| 欧美一区二区三区不卡| 亚洲一区二区三区精品在线| 日韩女优av电影| 在线免费精品视频| 国产成人精品三级| av一区二区三区黑人| 日韩av中文在线观看| 亚洲私人黄色宅男| 久久久精品国产免费观看同学| 欧美日本在线播放| 色域天天综合网| 成人免费av网站| 黄一区二区三区| 香蕉加勒比综合久久| 亚洲精品久久久蜜桃| 中文字幕在线视频一区| 精品国产亚洲一区二区三区在线观看| 欧美性大战久久久久久久| 91影视在线播放| 成人黄色小视频在线观看| 国产在线不卡一区| 久久精工是国产品牌吗| 日韩中文字幕91| 亚洲成人免费在线观看| 亚洲欧洲三级电影| 色中色一区二区| 成人免费视频一区二区| 国产在线播放一区三区四| 日本女优在线视频一区二区| 亚洲一区电影777| 亚洲美女精品一区| 亚洲免费观看视频| 亚洲欧美激情视频在线观看一区二区三区| 亚洲精品一线二线三线| 日韩欧美亚洲一区二区| 欧美一二三区在线观看| 日韩午夜在线影院| 欧美成人aa大片| 337p粉嫩大胆噜噜噜噜噜91av | 日韩在线观看一区二区| 亚洲二区视频在线| 视频一区中文字幕国产| 日本中文字幕不卡| 九九九精品视频| 欧美天天综合网| 99国产精品久久久久久久久久久 | 97se亚洲国产综合在线| 激情亚洲综合在线| 一区二区三区电影在线播| 国产日韩欧美电影| 国产日韩欧美精品一区| 欧美色爱综合网| 97精品国产97久久久久久久久久久久| 国产精品久久久久久久浪潮网站| 91一区一区三区| 丁香婷婷深情五月亚洲| 免费观看成人av| 首页国产欧美日韩丝袜| 亚洲综合久久av| 亚洲欧美激情一区二区| √…a在线天堂一区| 日本一区二区高清| 久久精品无码一区二区三区| 欧美精品一区二区久久婷婷| 91精品国产综合久久福利软件 | 亚洲综合免费观看高清在线观看| 最新欧美精品一区二区三区| 久久久精品免费网站| 久久毛片高清国产| 亚洲成人手机在线| 亚洲九九爱视频| 自拍偷拍国产精品| 国产精品久久久久影院老司| 欧美国产成人在线| 亚洲欧洲三级电影| 亚洲男人都懂的| 亚洲一区二区3| 图片区小说区区亚洲影院| 亚洲a一区二区| 奇米777欧美一区二区| 久久97超碰色| 国产成人鲁色资源国产91色综| 国产成人精品一区二区三区网站观看| 懂色av中文一区二区三区| aaa欧美色吧激情视频| 91麻豆福利精品推荐| 日本国产一区二区| 欧美日韩一区精品| 日韩女优制服丝袜电影| 国产亚洲一区二区三区在线观看| 国产日本欧洲亚洲| 亚洲精品高清在线观看| 日本成人在线一区| 丁香另类激情小说| 欧美自拍偷拍一区| 欧美一区二区私人影院日本| 欧美xxxx老人做受| 国产精品第一页第二页第三页| 亚洲一区自拍偷拍| 精品一区二区av| 91美女在线看| 日韩欧美一区二区久久婷婷| 久久久久久久电影| 亚洲美女一区二区三区| 老司机精品视频线观看86| 国产+成+人+亚洲欧洲自线| 91美女在线看| 精品国产一区二区三区四区四| 国产精品久久久久久久浪潮网站| 天天色天天爱天天射综合| 国产精品一区一区| 国产日产欧美一区| 亚洲国产aⅴ成人精品无吗| 黄一区二区三区| 欧美色精品天天在线观看视频| 久久精品人人做人人综合 | 国产精品一区二区在线观看网站| 色婷婷久久一区二区三区麻豆| 日韩精品自拍偷拍| 一区二区三区在线视频免费| 国产一二三精品| 欧美四级电影在线观看| 精品乱人伦小说| 伊人婷婷欧美激情| 国产麻豆视频一区二区| 91精品蜜臀在线一区尤物| 国产精品伦理在线| 精品一区二区日韩| 777亚洲妇女| 亚洲一区在线电影| 不卡一二三区首页| 久久综合av免费| 强制捆绑调教一区二区| 欧美性色黄大片| 国产精品美女久久久久久久久久久 | 免费一级欧美片在线观看| 99re这里都是精品| 久久精品一区二区三区四区| 麻豆精品视频在线| 欧美电影一区二区三区| 亚洲男人天堂av| 99久久er热在这里只有精品66| 亚洲精品一区二区在线观看| 奇米777欧美一区二区| 欧美高清你懂得| 亚洲国产视频一区| 久久香蕉国产线看观看99| 免费不卡在线观看| 在线成人av网站| 婷婷久久综合九色综合伊人色| 91在线无精精品入口| 中文字幕av一区二区三区| 国产一区二区h| 国产亚洲精品bt天堂精选| 国产麻豆精品久久一二三| 日韩欧美中文字幕制服| 免费亚洲电影在线| 日韩欧美国产午夜精品| 青青草国产精品亚洲专区无| 日韩视频免费观看高清完整版 | 国产精品另类一区| 国产高清在线精品| 国产欧美日本一区二区三区| 国产在线视频一区二区三区| 久久久影视传媒| 成人毛片在线观看| 日韩理论片一区二区| 欧洲一区在线观看| 亚洲成年人网站在线观看| 91精品国产91热久久久做人人| 青娱乐精品在线视频| 欧美一级久久久久久久大片| 肉色丝袜一区二区| 精品福利一区二区三区免费视频| 国产成人在线观看免费网站| 亚洲欧洲色图综合| 欧美色欧美亚洲另类二区| 蜜臀久久久久久久| 图片区小说区区亚洲影院| 日韩一区二区精品在线观看| 国产一区二区福利视频| 成人免费视频在线观看| 欧美色偷偷大香| 麻豆成人91精品二区三区| 亚洲国产成人午夜在线一区| 91丝袜美腿高跟国产极品老师| 性做久久久久久久免费看| 精品日韩在线一区| av在线综合网| 日韩国产欧美在线观看| 久久久久高清精品| 亚洲精品久久久久久国产精华液| 在线视频一区二区三| 美腿丝袜亚洲色图| 国产精品青草综合久久久久99|