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

📄 g722.cpp

📁 G722语音压缩算法
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		test->detlow = 32;
		test->ihigh = 0;
		test->dhigh = 0;
		test->rhigh = 0;	
		test->shigh = 0;
		test->dethigh = 8;
	}*/
INT32 decoder_block4l(INT32 dl)		//低子带自适应预测
	{	static INT32 sl = 0 ;
		INT32 wd1, wd2, wd3;
		static INT32 spl = 0 ;
		static INT32 szl = 0 ;
		static INT32 rlt0=0, rlt1=0, rlt2=0;
		static INT32 al1=0, al2=0;
		static INT32 plt0=0, plt1=0, plt2=0;
		static INT32 dlt  [7] = { 0, 0, 0, 0, 0, 0, 0 } ;
		static INT32 bl   [7] = { 0, 0, 0, 0, 0, 0, 0 } ;
		static INT32 bpl  [7] = { 0, 0, 0, 0, 0, 0, 0 } ;
		static INT32 sg0=0, sg1=0, sg2=0;
		static INT32 sg   [7] = { 0, 0, 0, 0, 0, 0, 0 } ;
		INT32 *sgp, *dltp, *dltp_1, *blp, *bplp;
    dlt[0] = dl;
    /*************************************** BLOCK 4L, RECONS  ***********/ 
    rlt0 = sl + dl ;
    /*
      if (rlt0 > 32767) rlt0 = 32767;
      if (rlt0 < -32768) rlt0 = -32768;
    */
    /*************************************** BLOCK 4L, PARREC  ***********/
    plt0 = dl + szl ;
    /*
      if (plt0 > 32767) plt0 = 32767;
      if (plt0 < -32768) plt0 = -32768;
    */
    /*****************************BLOCK 4L,  UPPOL2*************************/
    sg0 = plt0 >> 15 ;
    sg1 = plt1 >> 15 ;
    sg2 = plt2 >> 15 ;
    wd1 = al1 << 2;
    if (wd1 > 32767)
		wd1 = 32767;
    else if (wd1 < -32768)
		wd1 = -32768;
    wd2= ( sg0 == sg1 )? - wd1 : wd1 ;
    /*
      if (wd2 > 32767) wd2 = 32767;
    */
    wd2 = wd2 >> 7 ;
    wd3= ( sg0 == sg2 )? 128 : - 128 ;
    wd2 = wd2 + wd3 ;
    wd3 = (al2 * 127) >> 7 ;
    al2 = wd2 + wd3 ;
    if ( al2 >  12288 )
		al2 =  12288 ;
    else if ( al2 < -12288 )
		al2 = -12288 ;
    /************************************* BLOCK 4L, UPPOL1  ***************/
    sg0 = plt0 >> 15 ;
    sg1 = plt1 >> 15 ;
    wd1= ( sg0 == sg1 )? 192 : - 192 ;
    wd2 = (al1 * 255) >> 8 ;
    al1 = wd1 + wd2 ;
    /*
      if (al1 > 32767) al1 = 32767;
      if (al1 < -32768) al1 = -32768;
    */ 
    wd3 = (15360 - al2) ;
    /*
      if (wd3 > 32767) wd3 = 32767;
      if (wd3 < -32768) wd3 = -32768;
    */
    if ( al1 >  wd3)
		al1 =  wd3 ;
    else if ( al1 < -wd3)
		al1 = -wd3 ;
    /*************************************** BLOCK 4L, UPZERO  ************/
    wd1= ( dl == 0 )?  0 : 128 ;
    sg0 = dl >> 15 ;
    sgp=sg, dltp=dlt, blp=bl, bplp=bpl;
	*++sgp = *++dltp >> 15 ;
	wd2= ( *sgp == sg0 )?  wd1 : - wd1 ;
	wd3 = (*++blp * 255) >> 8 ;
	*++bplp = wd2 + wd3 ;
	/*
  	if (*bplp > 32767) *bplp = 32767;
	else if (*bplp < -32768) *bplp = -32768;
	*/
	*++sgp = *++dltp >> 15 ;
	wd2= ( *sgp == sg0 )?  wd1 : - wd1 ;
	wd3 = (*++blp * 255) >> 8 ;
	*++bplp = wd2 + wd3 ;
	/*
  	if (*bplp > 32767) *bplp = 32767;
	else if (*bplp < -32768) *bplp = -32768;
	*/
	*++sgp = *++dltp >> 15 ;
	wd2= ( *sgp == sg0 )?  wd1 : - wd1 ;
	wd3 = (*++blp * 255) >> 8 ;
	*++bplp = wd2 + wd3 ;
	/*
  	if (*bplp > 32767) *bplp = 32767;
	else if (*bplp < -32768) *bplp = -32768;
	*/
	*++sgp = *++dltp >> 15 ;
	wd2= ( *sgp == sg0 )?  wd1 : - wd1 ;
	wd3 = (*++blp * 255) >> 8 ;
	*++bplp = wd2 + wd3 ;
	/*
  	if (*bplp > 32767) *bplp = 32767;
	else if (*bplp < -32768) *bplp = -32768;
	*/
	*++sgp = *++dltp >> 15 ;
	wd2= ( *sgp == sg0 )?  wd1 : - wd1 ;
	wd3 = (*++blp * 255) >> 8 ;
	*++bplp = wd2 + wd3 ;
	/*
  	if (*bplp > 32767) *bplp = 32767;
	else if (*bplp < -32768) *bplp = -32768;
	*/
	*++sgp = *++dltp >> 15 ;
	wd2= ( *sgp == sg0 )?  wd1 : - wd1 ;
	wd3 = (*++blp * 255) >> 8 ;
	*++bplp = wd2 + wd3 ;
	/*
  	if (*bplp > 32767) *bplp = 32767;
	else if (*bplp < -32768) *bplp = -32768;
	*/
    /********************************* BLOCK 4L, DELAYA  ******************/
    dltp=dlt+6, dltp_1=dltp-1, blp=bl, bplp=bpl;
	*dltp-- = *dltp_1--;
	*++blp  = *++bplp;
	*dltp-- = *dltp_1--;
	*++blp  = *++bplp;
	*dltp-- = *dltp_1--;
	*++blp  = *++bplp;
	*dltp-- = *dltp_1--;
	*++blp  = *++bplp;
	*dltp-- = *dltp_1--;
	*++blp  = *++bplp;
	*dltp-- = *dltp_1--;
	*++blp  = *++bplp;
	rlt2=rlt1;
    rlt1=rlt0;
    plt2=plt1;
    plt1=plt0;
    /********************************* BLOCK 4L, FILTEP  ******************/
    wd1 = ( al1 * rlt1 ) >> 14 ;
    wd2 = ( al2 * rlt2 ) >> 14 ;
    spl = wd1 + wd2 ;
    /*
      if (spl > 32767) spl = 32767;
      if (spl < -32768) spl = -32768;
    */ 
    /*************************************** BLOCK 4L, FILTEZ  ***********/
    dltp = dlt, blp=bl;
	szl = (*++blp * *++dltp)>>14;
	/*
	  if (szl > 32767) szl = 32767;
	  else if (szl < -32768) szl = -32768;
	*/
	szl += (*++blp * *++dltp)>>14;
	/*
	  if (szl > 32767) szl = 32767;
	  else if (szl < -32768) szl = -32768;
	*/
	szl += (*++blp * *++dltp)>>14;
	/*
	  if (szl > 32767) szl = 32767;
	  else if (szl < -32768) szl = -32768;
	*/
	szl += (*++blp * *++dltp)>>14;
	/*
	  if (szl > 32767) szl = 32767;
	  else if (szl < -32768) szl = -32768;
	*/
	szl += (*++blp * *++dltp)>>14;
	/*
	  if (szl > 32767) szl = 32767;
	  else if (szl < -32768) szl = -32768;
	*/
	szl += (*++blp * *++dltp)>>14;
	/*
	  if (szl > 32767) szl = 32767;
	  else if (szl < -32768) szl = -32768;
	*/
    
    /*********************************BLOCK 4L, PREDIC  *******************/
    
    
    sl = spl + szl ;
    /*
      if (sl > 32767) sl = 32767;
      if (sl < -32768) sl = -32768;
    */
    return (sl) ;
}
INT32 decoder_block4h(INT32 d)		//高子带自适应预测
{	static INT32 sh = 0 ;
    INT32 wd1, wd2, wd3;
    static INT32 sph = 0 ;
    static INT32 szh = 0 ;
    
    static INT32 rh0=0, rh1=0, rh2=0 ;
    static INT32 ah1=0, ah2=0 ;
    static INT32 ph0=0, ph1=0, ph2=0 ;
    static INT32 dh  [7] = { 0, 0, 0, 0, 0, 0, 0 } ;
    static INT32 bh   [7] = { 0, 0, 0, 0, 0, 0, 0 } ;
    static INT32 bph  [7] = { 0, 0, 0, 0, 0, 0, 0 } ;
    static INT32 sg0=0, sg1=0, sg2=0;
    static INT32 sg   [7] = { 0, 0, 0, 0, 0, 0, 0 } ;
    INT32 *dhp, *dhp_1, *bhp, *bphp, *sgp;
    dh[0] = d;
    /*************************************** BLOCK 4H, RECONS  ***********/ 
    rh0 = sh + d ;
    /*
      if (rh0 > 32767) rh0 = 32767;
      if (rh0 < -32768) rh0 = -32768;
    */
    /*************************************** BLOCK 4H, PARREC  ***********/
    ph0 = d + szh ;
    /*
      if (ph0 > 32767) ph0 = 32767;
      if (ph0 < -32768) ph0 = -32768;
    */
    /*****************************BLOCK 4H,  UPPOL2*************************/
    sg0 = ph0 >> 15 ;
    sg1 = ph1 >> 15 ;
    sg2 = ph2 >> 15 ;
    wd1 = ah1 << 2;
    if (wd1 > 32767)
		wd1 = 32767;
    else if (wd1 < -32768)
		wd1 = -32768;
    wd2= ( sg0 == sg1 )? - wd1 : wd1 ;
    if (wd2 > 32767) wd2 = 32767;
    wd2 = wd2 >> 7 ;
    wd3= ( sg0 == sg2 )? 128 : - 128 ;
    wd2 = wd2 + wd3 ;
    wd3 = (ah2 * 127) >> 7 ;
    ah2 = wd2 + wd3 ;
    if ( ah2 >  12288 )
		ah2 =  12288 ;
    else if ( ah2 < -12288 )
		ah2 = -12288 ;
    /************************************* BLOCK 4H, UPPOL1  ***************/
    sg0 = ph0 >> 15 ;
    sg1 = ph1 >> 15 ;
    wd1= ( sg0 == sg1 )? 192 : - 192 ;
    wd2 = (ah1 * 255) >> 8 ;
    ah1 = wd1 + wd2 ;
    /*
      if (ah2 > 32767) ah2 = 32767;
      if (ah2 < -32768) ah2 = -32768;
    */ 
    wd3 = (15360 - ah2) ;
    /*
      if (wd3 > 32767) wd3 = 32767;
      if (wd3 < -32768) wd3 = -32768;
    */
    if ( ah1 >  wd3)
		ah1 =  wd3 ;
    else if ( ah1 < -wd3)
		ah1 = -wd3 ;
    /*************************************** BLOCK 4H, UPZERO  ************/
    wd1= ( d == 0 )? 0 : 128 ;
    sg0 = d >> 15 ;
	sgp = sg, dhp = dh, bhp = bh, bphp = bph;
	*++sgp = *++dhp >> 15 ;
	wd2= ( *sgp == sg0 )? wd1 : - wd1 ;
	wd3 = (*++bhp * 255) >> 8 ;
	*++bphp = wd2 + wd3 ;
	*++sgp = *++dhp >> 15 ;
	wd2= ( *sgp == sg0 )? wd1 : - wd1 ;
	wd3 = (*++bhp * 255) >> 8 ;
	*++bphp = wd2 + wd3 ;
	*++sgp = *++dhp >> 15 ;
	wd2= ( *sgp == sg0 )? wd1 : - wd1 ;
	wd3 = (*++bhp * 255) >> 8 ;
	*++bphp = wd2 + wd3 ;
	*++sgp = *++dhp >> 15 ;
	wd2= ( *sgp == sg0 )? wd1 : - wd1 ;
	wd3 = (*++bhp * 255) >> 8 ;
	*++bphp = wd2 + wd3 ;
	*++sgp = *++dhp >> 15 ;
	wd2= ( *sgp == sg0 )? wd1 : - wd1 ;
	wd3 = (*++bhp * 255) >> 8 ;
	*++bphp = wd2 + wd3 ;
	*++sgp = *++dhp >> 15 ;
	wd2= ( *sgp == sg0 )? wd1 : - wd1 ;
	wd3 = (*++bhp * 255) >> 8 ;
	*++bphp = wd2 + wd3 ;
    /********************************* BLOCK 4H, DELAYA  ******************/
    dhp_1=dhp-1,bhp=bh, bphp=bph;
	*dhp--=*dhp_1--;
	*++bhp=*++bphp;
	*dhp--=*dhp_1--;
	*++bhp=*++bphp;
	*dhp--=*dhp_1--;
	*++bhp=*++bphp;
	*dhp--=*dhp_1--;
	*++bhp=*++bphp;
	*dhp--=*dhp_1--;
	*++bhp=*++bphp;
	*dhp--=*dhp_1--;
	*++bhp=*++bphp;
    rh2=rh1;
    rh1=rh0; 
    ph2=ph1;
    ph1=ph0; 
    /********************************* BLOCK 4H, FILTEP  ******************/
    wd1 = ( ah1 * rh1 ) >> 14 ;
    wd2 = ( ah2 * rh2 ) >> 14 ;
    sph = wd1 + wd2 ;
    /*
      if (sph > 32767) sph = 32767;
      if (sph < -32768) sph = -32768;
    */ 
    /*************************************** BLOCK 4H, FILTEZ  ***********/
    dhp = dh, bhp = bh;
	szh = ((*++bhp) * *++dhp )>>14;
	/*
	  if (szh > 32767) szh = 32767;
	  else if (szh < -32768) szh = -32768;
	*/
	szh += ((*++bhp) * *++dhp )>>14;
	/*
	  if (szh > 32767) szh = 32767;
	  else if (szh < -32768) szh = -32768;
	*/
	szh += ((*++bhp) * *++dhp )>>14;
	/*
	  if (szh > 32767) szh = 32767;
	  else if (szh < -32768) szh = -32768;
	*/
	szh += ((*++bhp) * *++dhp )>>14;
	/*
	  if (szh > 32767) szh = 32767;
	  else if (szh < -32768) szh = -32768;
	*/
	szh += ((*++bhp) * *++dhp )>>14;
	/*
	  if (szh > 32767) szh = 32767;
	  else if (szh < -32768) szh = -32768;
	*/
	szh += ((*++bhp) * *++dhp )>>14;
	/*
	  if (szh > 32767) szh = 32767;
	  else if (szh < -32768) szh = -32768;
	*/
    /*********************************BLOCK 4H, PREDIC  *******************/
    sh = sph + szh ;
    /*
      if (sh > 32767) sh = 32767;
      if (sh < -32768) sh = -32768;
    */ 
    return (sh) ;
}
INT32 g722_encoder(pG722_Handle test, short *datap, UINT16 *outdata, INT32 samplesRead)
{	INT32 i,j=0,k=1 ;
//        UINT3232 P=(&(*outdata));
	static INT32 nbl=0,nbh=0;
	INT32  el, eh, wd, wd1,wd2,wd3,il4,ih2,ril,mil,mih, hdu;
	INT32 *xp, *xp_2,*q6p;
	INT32 sumeven, sumodd; 
	while( j< samplesRead)

⌨️ 快捷键说明

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