📄 g722.cpp
字号:
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 + -