📄 funcg722.c
字号:
*/#define AH s->ah#define BH s->bh#define DETH s->deth#define DH s->dh #define NBH s->nbh#define PH s->ph #define RH s->rh #define SH s->sh#define SPH s->sph #define SZH s->szhWord16 hsbdec (ih, rs, s)Word16 ih;Word16 rs;g722_state *s;{ Word16 nbph, yh; if (rs == 1) { DETH = 8; SH = SPH = SZH = NBH = 0; AH[1] = AH[2] = 0; BH[1] = BH[2] = BH[3] = BH[4] = BH[5] = BH[6] = 0; DH[0] = DH[1] = DH[2] = DH[3] = DH[4] = DH[5] = DH[6] = 0; PH[0] = PH[1] = PH[2] = 0; RH[0] = RH[1] = RH[2] = 0; return (0); } DH[0] = invqah (ih, DETH); nbph = logsch (ih, NBH); NBH = nbph; DETH = scaleh (nbph); PH[0] = parrec (DH[0], SZH); RH[0] = recons (SH, DH[0]); upzero (DH, BH); uppol2 (AH, PH); uppol1 (AH, PH); SZH = filtez (DH, BH); SPH = filtep (RH, AH); SH = predic (SPH, SZH); yh = limit (RH[0]); return (yh);}#undef AH#undef BH#undef DETH#undef DH#undef NBH#undef PH#undef RH#undef SH#undef SPH#undef SZH/* ........................ End of hsbdec() ........................ *//*___________________________________________________________________________ Function Name : quantl Purpose : . Inputs : Outputs : none Return Value : ___________________________________________________________________________*/Word16 quantl (el, detl)Word16 el;Word16 detl;{ /* table to read IL frorm SIL and MIL: misil(sil(0,1),mil(1,31)) */ static Word16 misil[2][32] = { {0x0000, 0x003F, 0x003E, 0x001F, 0x001E, 0x001D, 0x001C, 0x001B, 0x001A, 0x0019, 0x0018, 0x0017, 0x0016, 0x0015, 0x0014, 0x0013, 0x0012, 0x0011, 0x0010, 0x000F, 0x000E, 0x000D, 0x000C, 0x000B, 0x000A, 0x0009, 0x0008, 0x0007, 0x0006, 0x0005, 0x0004, 0x0000}, {0x0000, 0x003D, 0x003C, 0x003B, 0x003A, 0x0039, 0x0038, 0x0037, 0x0036, 0x0035, 0x0034, 0x0033, 0x0032, 0x0031, 0x0030, 0x002F, 0x002E, 0x002D, 0x002C, 0x002B, 0x002A, 0x0029, 0x0028, 0x0027, 0x0026, 0x0025, 0x0024, 0x0023, 0x0022, 0x0021, 0x0020, 0x0000} }; /* 6 levels quantizer level od decision */ static Word16 q6[31] = { 0, 35, 72, 110, 150, 190, 233, 276, 323, 370, 422, 473, 530, 587, 650, 714, 786, 858, 940, 1023, 1121, 1219, 1339, 1458, 1612, 1765, 1980, 2195, 2557, 2919, 3200 }; Word16 sil, mil, wd, val; sil = shr (el, 15); wd = (sil == 0) ? el : sub (MAX_16, (el & MAX_16)); mil = 0; val = mult (q6[mil] * 8, detl); while (val <= wd) { if (mil == 30) { break; } else { ++mil; val = mult (q6[mil] * 8, detl); } } return (misil[++sil][mil]);}/* ..................... End of quantl() ..................... *//*___________________________________________________________________________ Function Name quanth: Purpose : . Inputs : Outputs : none Return Value : ___________________________________________________________________________*/Word16 quanth (eh, deth)Word16 eh;Word16 deth;{ static Word16 misih[2][3] = { {0, 1, 0}, {0, 3, 2} }; static Word16 q2 = 564; Word16 sih, mih, wd; sih = shr (eh, 15); wd = (sih == 0) ? eh : sub (MAX_16, (eh & MAX_16)); if (wd >= mult (shl (q2, 3), deth)) { mih = 2; } else { mih = 1; } return (misih[++sih][mih]);}/* ..................... End of quanth() ..................... *//*___________________________________________________________________________ Function Name : filtep Purpose : . Inputs : Outputs : none Return Value : ___________________________________________________________________________*/Word16 filtep (rlt, al)Word16 rlt [];Word16 al [];{ Word16 wd1, wd2, spl; /* shift of rlt */ rlt[2] = rlt[1]; rlt[1] = rlt[0]; wd1 = add (rlt[1], rlt[1]); wd1 = mult (al[1], wd1); wd2 = add (rlt[2], rlt[2]); wd2 = mult (al[2], wd2); spl = add (wd1, wd2); return (spl);}/* ..................... End of filtep() ..................... *//*___________________________________________________________________________ Function Name : filtez Purpose : . Inputs : Outputs : none Return Value : ___________________________________________________________________________*/Word16 filtez (dlt, bl)Word16 dlt [];Word16 bl [];{ Word16 szl, wd[7]; Word16 i; for (i = 6, szl = 0; i > 0; i--) { wd[i] = add (dlt[i], dlt[i]); wd[i] = mult (wd[i], bl[i]); szl = add (szl, wd[i]); } return (szl);}/* ..................... End of filtez() ..................... *//*___________________________________________________________________________ Function Name : invqal Purpose : . Inputs : Outputs : none Return Value : ___________________________________________________________________________*/Word16 invqal (il, detl)Word16 il;Word16 detl;{ /* inverse quantizer 4 bits for encoder or decoder */ static Word16 ril4[16] = {0, 7, 6, 5, 4, 3, 2, 1, 7, 6, 5, 4, 3, 2, 1, 0}; static Word16 risil[16] = {0, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0}; static Word16 oq4[8] = {0, 150, 323, 530, 786, 1121, 1612, 2557}; /* Local variables */ Word16 ril, wd1, wd2; ril = shr (il, 2); wd1 = shl (oq4[ril4[ril]], 3); wd2 = (risil[ril] == 0) ? wd1 : negate (wd1); return (mult (detl, wd2));}/* ..................... End of invqal() ..................... *//*___________________________________________________________________________ Function Name : invqbl Purpose :
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -