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

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

?? util_lbc.c

?? ITU-T G.723.1語音編解碼算法源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
            *Bsp ++ = (Word16) 0 ;

            /* Write 13 bit combined position index */
            Temp = (*Line).Sfs[0].Ppos >> 16 ;
            Temp = Temp * 9 + ( (*Line).Sfs[1].Ppos >> 14) ;
            Temp *= 90 ;
            Temp += ((*Line).Sfs[2].Ppos >> 16) * 9 + ( (*Line).Sfs[3].Ppos >> 14 ) ;
            Bsp = Par2Ser( Temp, Bsp, 13 ) ;
			/*-->here 4 msb less than 9 in each pulse position,8181<2^13 */

            /* Write all the pulse positions */
            Temp = (*Line).Sfs[0].Ppos & 0x0000ffffL ;
            Bsp = Par2Ser( Temp, Bsp, 16 ) ;

            Temp = (*Line).Sfs[1].Ppos & 0x00003fffL ;
            Bsp = Par2Ser( Temp, Bsp, 14 ) ;

            Temp = (*Line).Sfs[2].Ppos & 0x0000ffffL ;
            Bsp = Par2Ser( Temp, Bsp, 16 ) ;

            Temp = (*Line).Sfs[3].Ppos & 0x00003fffL ;
            Bsp = Par2Ser( Temp, Bsp, 14 ) ;

            /* Write pulse amplitudes */
            Temp = (Word32) (*Line).Sfs[0].Pamp ;
            Bsp = Par2Ser( Temp, Bsp, 6 ) ;

            Temp = (Word32) (*Line).Sfs[1].Pamp ;
            Bsp = Par2Ser( Temp, Bsp, 5 ) ;

            Temp = (Word32) (*Line).Sfs[2].Pamp ;
            Bsp = Par2Ser( Temp, Bsp, 6 ) ;

            Temp = (Word32) (*Line).Sfs[3].Pamp ;
            Bsp = Par2Ser( Temp, Bsp, 5 ) ;
        }

        /* Low rate only part */
        else {

            /* Write 12 bits of positions */
            for ( i = 0 ; i < SubFrames ; i ++ ) {
                Temp = (*Line).Sfs[i].Ppos ;
                Bsp = Par2Ser( Temp, Bsp, 12 ) ;
            }

            /* Write 4 bit Pamps */
            for ( i = 0 ; i < SubFrames ; i ++ ) {
                Temp = (*Line).Sfs[i].Pamp ;
                Bsp = Par2Ser( Temp, Bsp, 4 ) ;
            }
        }

    }

    else if(Ftyp == 2) {   /* SID frame */

        /* 24 bit LspId */
        Temp = (*Line).LspId ;
        Bsp = Par2Ser( Temp, Bsp, 24 ) ;

        /* Do Sid frame gain */
        Temp = (Word32)(*Line).Sfs[0].Mamp ;
        Bsp = Par2Ser( Temp, Bsp, 6 ) ;
    }

    /* Write out active frames */
    if ( Ftyp == 1 ) {
        if ( WrkRate == Rate63 )
            BitCount = 192 ;
        else
            BitCount = 160 ;
    }
    /* Non active frames */
    else if ( Ftyp == 2 )
        BitCount = 32 ;
    else
        BitCount = 2;

    for ( i = 0 ; i < BitCount ; i ++ )
        Vout[i>>3] ^= BitStream[i] << (i & 0x0007) ;

    return;
}

Word16* Par2Ser( Word32 Inp, Word16 *Pnt, int BitNum )
{
    int i   ;
    Word16  Temp ;

    for ( i = 0 ; i < BitNum ; i ++ ) {
        Temp = (Word16) Inp & (Word16)0x0001 ;
        Inp >>= 1 ;
        *Pnt ++ = Temp ;
    }

    return Pnt ;
}

/*
**
** Function:        Line_Unpk()
**
** Description:     unpacking of bitstream, gets coding parameters for a frame
**
** Links to text:   Section 4
**
** Arguments:
**
**  char   *Vinp        bitstream chars
**  Word16 *VadType
**
** Outputs:
**
**  Word16 *VadType
**
** Return value:
**
**  LINEDEF             coded parameters
**     Word16   Crc
**     Word32   LspId
**     Word16   Olp[SubFrames/2]
**     SFSDEF   Sfs[SubFrames]
**
*/
LINEDEF  Line_Unpk( char *Vinp, Word16 *Ftyp, Word16 Crc )
{
    int   i  ;
    Word16  BitStream[192] ;
    Word16 *Bsp = BitStream ;
    LINEDEF Line ;
    Word32  Temp ;
    Word16  Info;
    Word16 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] = ( Vinp[i>>3] >> (i & (Word16)0x0007) ) & (Word16)1 ;

    /* Decode the frame type and rate info */
    Info = (Word16)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 = (Word16)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] = (Word16) Temp + (Word16)PitchMin ;
    }
    else {
        /* transmission error */
        Line.Crc = 1;
        return Line ;
    }

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

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

    Line.Sfs[3].AcLg = (Word16) 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 = (Word16)(Temp >> 11) ;
            Temp &= 0x000007ffL ;
            Bound_AcGn = NbFilt085 ;
        }
        Line.Sfs[i].AcGn = (Word16)(Temp / (Word16)NumOfGainLev) ;
        if(Line.Sfs[i].AcGn < Bound_AcGn ) {
            Line.Sfs[i].Mamp = (Word16)(Temp % (Word16)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 = (Word16)Ser2Par( &Bsp, 6 ) ;
        Line.Sfs[1].Pamp = (Word16)Ser2Par( &Bsp, 5 ) ;
        Line.Sfs[2].Pamp = (Word16)Ser2Par( &Bsp, 6 ) ;
        Line.Sfs[3].Pamp = (Word16)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 = (Word16)Ser2Par( &Bsp, 4 ) ;
    }
   return Line ;
}

Word32  Ser2Par( Word16 **Pnt, int Count )
{
    int     i ;
    Word32  Rez = 0L ;

    for ( i = 0 ; i < Count ; i ++ ) {
        Rez += (Word32) **Pnt << i ;
        (*Pnt) ++ ;
    }
    return Rez ;
}

/*
**
** Function:        Comp_En()
**
** Description:     Compute energy of a subframe vector
**
** Links to text:
**
** Arguments:
**
**  Word16 *Dpnt
**
** Outputs:         None
**
** Return value:
**
**      Word32 energy
**
*/
Word32   Comp_En( Word16 *Dpnt )
{
    int   i ;
    Word32   Rez ;
    Word16   Temp[SubFrLen] ;

    for ( i = 0 ; i < SubFrLen ; i ++ )
        Temp[i] = shr( Dpnt[i], (Word16) 2 ) ;

    Rez = (Word32) 0 ;
    for ( i = 0 ; i < SubFrLen ; i ++ )
        Rez = L_mac( Rez, Temp[i], Temp[i] ) ;

    return Rez ;
}

/*
**
** Function:        Sqrt_lbc()
**
** Description:     Square root computation
**
** Links to text:
**
** Arguments:
**
**  Word32 Num
**
** Outputs:     None
**
** Return value:
**
**  Word16 square root of num
**
*/
Word16   Sqrt_lbc( Word32 Num )
{
    int   i  ;

    Word16   Rez = (Word16) 0 ;
    Word16   Exp = (Word16) 0x4000 ;

    Word32   Acc ;

    for ( i = 0 ; i < 14 ; i ++ ) {

        Acc = L_mult( add(Rez, Exp), add(Rez, Exp) ) ;
        if ( Num >= Acc )
            Rez = add( Rez, Exp ) ;

        Exp = shr( Exp, (Word16) 1 ) ;
    }
    return Rez ;
}

/*
**
** Function:        Rand_lbc()
**
** Description:     Generator of random numbers
**
** Links to text:   Section 3.10.2
**
** Arguments:
**
**  Word16 *p
**
** Outputs:
**
**  Word16 *p
**
** Return value:
**
**  Word16 random number
**
*/
Word16   Rand_lbc( Word16 *p )
{
    Word32   Temp ;

    Temp = L_deposit_l( *p ) ;
    Temp &= (Word32) 0x0000ffff ;
    Temp = Temp*(Word32)521 + (Word32) 259 ;
    *p = extract_l( Temp ) ;
    return extract_l( Temp ) ;
}

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

    Word32   Acc0,Acc1   ;
    Word16   Exp,SfGain  ;


    Acc0 = Sen ;
    Acc1 = Comp_En( Tv ) ;

    /* Normalize both */
    if ( (Acc1 != (Word32) 0) && (Acc0 != (Word32) 0 ) ) {

        Exp = norm_l( Acc1 ) ;
        Acc1 = L_shl( Acc1, Exp ) ;

        SfGain = norm_l( Acc0 ) ;
        Acc0 = L_shl( Acc0, SfGain ) ;
        Acc0 = L_shr( Acc0, (Word16) 1 ) ;
        Exp = sub( Exp, SfGain ) ;
        Exp = add( Exp, (Word16) 1 ) ;
        Exp = sub( (Word16) 6, Exp ) ;
        if ( Exp < (Word16) 0 )
            Exp = (Word16) 0 ;

        SfGain = extract_h( Acc1 ) ;

        SfGain = div_l( Acc0, SfGain ) ;

        Acc0 = L_deposit_h( SfGain ) ;

        Acc0 = L_shr( Acc0, Exp ) ;

        SfGain = Sqrt_lbc( Acc0 ) ;
    }
    else
        SfGain = 0x1000 ;
		/*qfg added.如果分母為0,則置gs為1. 此處,1-->0x1000=4096=2^12.因為矢量規格化后尾數為12位.*/

    /* Filter the data */
    for ( i = 0 ; i < SubFrLen ; i ++ ) {

        /* Update gain */
        Acc0 = L_deposit_h( DecStat.Gain ) ;
        Acc0 = L_msu( Acc0, DecStat.Gain, (Word16) 0x0800 ) ;
        Acc0 = L_mac( Acc0, SfGain, (Word16) 0x0800 ) ;
        DecStat.Gain = round( Acc0 ) ;

        Exp = add( DecStat.Gain, shr( DecStat.Gain, (Word16) 4) ) ;

        Acc0 = L_mult( Tv[i], Exp ) ;
        Acc0 = L_shl( Acc0, (Word16) 4 ) ;
        Tv[i] = round( Acc0 ) ;
    }

    return;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久欧美中文字幕| 岛国av在线一区| 国产一区二区美女诱惑| 成人免费精品视频| 在线日韩av片| 精品国产乱码久久久久久1区2区| 久久女同性恋中文字幕| 亚洲柠檬福利资源导航| 免费在线看成人av| 成人午夜av电影| 欧美日韩免费一区二区三区| 久久影视一区二区| 一区二区三区电影在线播| 精品无人码麻豆乱码1区2区 | 欧美日韩亚洲不卡| 久久婷婷成人综合色| 亚洲人一二三区| 久久电影网站中文字幕| 色综合天天综合网天天看片| 欧美一二三区在线| 亚洲三级理论片| 久久精品99国产精品日本| 99精品在线观看视频| 日韩一区二区视频在线观看| 亚洲国产精品ⅴa在线观看| 亚洲不卡一区二区三区| 成人一区二区三区中文字幕| 欧美剧情电影在线观看完整版免费励志电影| www亚洲一区| 婷婷中文字幕一区三区| 成人美女在线观看| 91精品福利在线一区二区三区 | 国产成人综合视频| 欧美卡1卡2卡| 椎名由奈av一区二区三区| 精品影视av免费| 欧美日韩国产免费| 亚洲男帅同性gay1069| 国产一区二区三区黄视频| 欧美日韩国产综合视频在线观看| 国产精品久久久久婷婷| 久久99久久精品欧美| 91激情在线视频| 国产精品护士白丝一区av| 国模套图日韩精品一区二区 | 丝袜a∨在线一区二区三区不卡| 国产在线播放一区| 91精品国产免费久久综合| 国产最新精品精品你懂的| 欧美日韩高清在线播放| 亚洲色图制服诱惑| 国产成人精品免费看| 亚洲精品在线观| 日本在线不卡视频| 欧美日韩在线播| 亚洲激情成人在线| www..com久久爱| 欧美国产日韩精品免费观看| 国产专区综合网| 精品处破学生在线二十三| 亚洲成人免费看| 欧美综合一区二区| 一区二区三区中文在线观看| 99精品国产热久久91蜜凸| 欧美国产综合一区二区| 国产精品一区专区| 精品国产99国产精品| 九色综合狠狠综合久久| 日韩欧美自拍偷拍| 久久99国产乱子伦精品免费| 日韩欧美电影一区| 麻豆精品在线视频| 欧美tk丨vk视频| 久久99精品一区二区三区三区| 4438成人网| 日韩和欧美一区二区三区| 欧美日韩一区二区在线观看 | 欧美久久久一区| 午夜久久久影院| 3atv一区二区三区| 日本一不卡视频| 欧美成人在线直播| 国内精品写真在线观看| 国产日韩欧美不卡在线| 成人激情图片网| 亚洲日本丝袜连裤袜办公室| 一本大道久久a久久综合婷婷| 亚洲免费电影在线| 欧美三级资源在线| 免费观看日韩av| 久久你懂得1024| 成人在线一区二区三区| 综合久久国产九一剧情麻豆| 在线视频国内自拍亚洲视频| 香蕉乱码成人久久天堂爱免费| 欧美一区二区三区在线电影| 蜜臀a∨国产成人精品| 久久综合久久综合久久综合| 懂色中文一区二区在线播放| 亚洲你懂的在线视频| 欧美日韩高清一区二区不卡| 久久超碰97人人做人人爱| 国产日韩精品一区二区三区| www.亚洲国产| 日日骚欧美日韩| 久久久久国产精品麻豆ai换脸 | 国产精品久久久久久福利一牛影视| 成人黄色片在线观看| 悠悠色在线精品| 欧美精品粉嫩高潮一区二区| 国产一区二区精品久久| 亚洲色图在线播放| 欧美一区二区三区精品| 国产成人夜色高潮福利影视| 亚洲欧美日韩电影| 精品日韩在线一区| 97久久人人超碰| 日本欧美一区二区三区乱码| 国产欧美日韩激情| 欧美视频在线一区| 国内精品写真在线观看| 亚洲精选一二三| 日韩精品专区在线| 91一区二区三区在线观看| 日韩国产精品久久久久久亚洲| 国产午夜精品久久久久久免费视| 在线观看日韩电影| 国产成人精品影视| 视频一区视频二区中文| 国产精品久久毛片| 91精品在线观看入口| 成人综合日日夜夜| 男女激情视频一区| 亚洲免费观看高清完整版在线观看 | 欧美电影免费观看高清完整版| 成人免费黄色在线| 麻豆精品一区二区av白丝在线| 亚洲欧洲日韩av| 精品精品国产高清a毛片牛牛 | 天天免费综合色| 国产精品乱人伦| 精品少妇一区二区三区在线视频| 色综合色狠狠综合色| 国产在线精品一区二区不卡了 | 91精品国产综合久久小美女| 99vv1com这只有精品| 国产精一区二区三区| 午夜精彩视频在线观看不卡| ●精品国产综合乱码久久久久| 精品国产乱码久久久久久浪潮| 欧美日韩在线播放一区| 99vv1com这只有精品| 国产寡妇亲子伦一区二区| 日产欧产美韩系列久久99| 亚洲精品日韩专区silk| 国产女人aaa级久久久级| 日韩一区二区三区视频在线| 91久久一区二区| 97精品久久久午夜一区二区三区 | 久久久久9999亚洲精品| 51久久夜色精品国产麻豆| 色综合色综合色综合| 成人视屏免费看| 国产一区二区三区| 麻豆国产91在线播放| 日韩精彩视频在线观看| 亚洲伦在线观看| 中文字幕一区在线观看视频| 国产欧美一二三区| 欧美精品一区二区三区在线| 欧美一区二区三区爱爱| 这里只有精品免费| 7777精品伊人久久久大香线蕉超级流畅| 91亚洲精品乱码久久久久久蜜桃| 国产成人免费xxxxxxxx| 国产寡妇亲子伦一区二区| 国产一区在线观看麻豆| 精一区二区三区| 精久久久久久久久久久| 精品无码三级在线观看视频| 精品综合免费视频观看| 寂寞少妇一区二区三区| 日本亚洲最大的色成网站www| 三级在线观看一区二区| 日本欧美一区二区在线观看| 日韩av一区二区在线影视| 日本成人超碰在线观看| 日本不卡高清视频| 青青草国产精品亚洲专区无| 蜜臀av性久久久久蜜臀aⅴ四虎| 美女被吸乳得到大胸91| 久久97超碰国产精品超碰| 国产综合色精品一区二区三区| 国内欧美视频一区二区| 国精品**一区二区三区在线蜜桃| 国产激情偷乱视频一区二区三区| 风间由美一区二区三区在线观看 | 亚洲国产岛国毛片在线| 国产午夜精品福利| ...av二区三区久久精品|