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

📄 g726.c

📁 G.726协议的C源码
💻 C
📖 第 1 页 / 共 5 页
字号:
        History:        ~~~~~~~~        31.Jan.91 v1.0f Release of 1st Fortran version to UGST.        		<tdsindi@venus.cpqd.ansp.br>        13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c)        		<tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void            G726_adda(dqln, y, dql)  short          *dqln, *y, *dql;{  *dql = (*dqln + (*y >> 2)) & 4095;}/* ....................... end of G726_adda() ....................... *//* ----------------------------------------------------------------------        void G726_antilog (short *dql, short *dqs, short *dq);        ~~~~~~~~~~~~~~~~~        Description:        ~~~~~~~~~~~~        Convert quantized difference signal from the  logarithmic to        the linear domain. 	Inputs:   dql, dqs 	Output:   dq        Return value:  none.        ~~~~~~~~~~~~~        Prototype:   in g726.h        ~~~~~~~~~~        History:        ~~~~~~~~        31.Jan.91 v1.0f Release of 1st Fortran version to UGST.        		<tdsindi@venus.cpqd.ansp.br>        13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c)        		<tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void            G726_antilog(dql, dqs, dq)  short          *dql, *dqs, *dq;{  long            dqmag;  long            ds, dmn, dex, dqt;  /* Extract 4-bit exponent */  ds = (*dql >> 11);  dex = (*dql >> 7) & 15;  /* Extract 7-bit mantissa */  dmn = *dql & 127;  dqt = dmn + 128;  /* Convert mantissa to linear using the approx. 2**x = 1+x */  dqmag = ds ? 0 : ((dqt << 7) >> (14 - dex));  /* Attach sign bit to signed mag. word */  *dq = (short) (*dqs << 15) + dqmag;}/* ..................... end of G726_antilog() ..................... *//* ----------------------------------------------------------------------        void G726_reconst (short rate, short *i, short *dqln, short *dqs);        ~~~~~~~~~~~~~~~~~        Description:        ~~~~~~~~~~~~        Reconstruction of quantized difference signal  in the        logarithmic domain. 	Inputs:   i, rate 	Outputs:  dqln, dqs        Return value:  none.        ~~~~~~~~~~~~~        Prototype:   in g726.h        ~~~~~~~~~~        History:        ~~~~~~~~        31.Jan.91 v1.0f Release of 1st Fortran version to UGST.        		<tdsindi@venus.cpqd.ansp.br>        13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c)        		<tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void            G726_reconst(rate, i, dqln, dqs)  short          *i, *dqln, *dqs;  short           rate;{  if (rate == 4)  {    /* Initialized data */    static short    tab[16] = {2048, 4, 135, 213, 273, 323, 373, 425,    425, 373, 323, 273, 213, 135, 4, 2048};    /* Extract sign */    *dqs = (*i >> 3);    /* Table look-up */    *dqln = tab[*i];  }				/* ............... end of 32 kbit part				 * ................. */  else if (rate == 3)  {    /* Initialized data */    static short    tab[8] = {2048, 135, 273, 373, 373, 273, 135, 2048};    *dqs = (*i >> 2);    /* Table look-up */    *dqln = tab[*i];  }				/* ............... end of 24 kbit part				 * ................. */  else if (rate == 2)  {    /* Initialized data */    static short    tab[4] = {116, 365, 365, 116};    *dqs = (*i >> 1);    /* Table look-up */    *dqln = tab[*i];  }				/* ............... end of 16 kbit part				 * ................. */  else  {    /* Initialized data */    static short    tab[32] = {2048, 4030, 28, 104, 169, 224, 274, 318, 358, 395, 429,      459, 488, 514, 539, 566, 566, 539, 514, 488, 459, 429, 395, 358, 318, 274, 224,    169, 104, 28, 4030, 2048};    *dqs = (*i >> 4);    /* Table look-up */    *dqln = tab[*i];  }				/* ................ end of 40 kbit part				 * ................... */}/* ....................... end of G726_reconst() ....................... *//* ----------------------------------------------------------------------        void G726_delaya (short *r, short *x, short *y);        ~~~~~~~~~~~~~~~~        Description:        ~~~~~~~~~~~~        Memory block. 	Inputs:    r, x 	Output:    y        Return value:  none.        ~~~~~~~~~~~~~        Prototype:   in g726.h        ~~~~~~~~~~        History:        ~~~~~~~~        31.Jan.91 v1.0f Release of 1st Fortran version to UGST.        		<tdsindi@venus.cpqd.ansp.br>        13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c)        		<tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void            G726_delaya(r, x, y)  short          *r, *x, *y;{  *y = (*r == 0) ? *x : 0;}/* ....................... end of G726_delaya() ....................... *//* ----------------------------------------------------------------------        void G726_delayb (short *r, short *x, short *y);        ~~~~~~~~~~~~~~~~        Description:        ~~~~~~~~~~~~        Memory block. 	Inputs:    r, x 	Output:    y        Return value:  none.        ~~~~~~~~~~~~~        Prototype:   in g726.h        ~~~~~~~~~~        History:        ~~~~~~~~        31.Jan.91 v1.0f Release of 1st Fortran version to UGST.        		<tdsindi@venus.cpqd.ansp.br>        13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c)        		<tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void            G726_delayb(r, x, y)  short          *r, *x, *y;{  *y = (*r == 0) ? *x : 544;}/* ....................... end of G726_delayb() ....................... *//* ----------------------------------------------------------------------        void G726_delayc (short *r, long *x, long *y);        ~~~~~~~~~~~~~~~~        Description:        ~~~~~~~~~~~~        Memory block. 	Inputs:    r, x 	Output:    y        Return value:  none.        ~~~~~~~~~~~~~        Prototype:   in g726.h        ~~~~~~~~~~        History:        ~~~~~~~~        31.Jan.91 v1.0f Release of 1st Fortran version to UGST.        		<tdsindi@venus.cpqd.ansp.br>        13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c)        		<tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void            G726_delayc(r, x, y)  short          *r;  long           *x, *y;{  *y = (*r == 0) ? *x : 34816;}/* ....................... end of G726_delayc() ....................... *//* ----------------------------------------------------------------------        void G726_delayd (short *r, short *x, short *y);        ~~~~~~~~~~~~~~~~        Description:        ~~~~~~~~~~~~        Memory block 	Inputs:   r, x 	Output:   y        Return value:          none.        ~~~~~~~~~~~~~        Prototype:   in g726.h        ~~~~~~~~~~        History:        ~~~~~~~~        31.Jan.91 v1.0f Release of 1st Fortran version to UGST.        		<tdsindi@venus.cpqd.ansp.br>        13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c)        		<tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void            G726_delayd(r, x, y)  short          *r, *x, *y;{  *y = (*r == 0) ? *x : 32;}/* ....................... end of G726_delayd() ....................... *//* ----------------------------------------------------------------------        void G726_filtd (short *wi, short *y, short *yut);        ~~~~~~~~~~~~~~~        Description:        ~~~~~~~~~~~~        Update of fast quantizer scale factor. 	Inputs: wi, y 	Output: yut        Return value:  none.        ~~~~~~~~~~~~~        Prototype:   in g726.h        ~~~~~~~~~~        History:        ~~~~~~~~        31.Jan.91 v1.0f Release of 1st Fortran version to UGST.        		<tdsindi@venus.cpqd.ansp.br>        13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c)        		<tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void            G726_filtd(wi, y, yut)  short          *wi, *y, *yut;{  long            difs, difsx;  long            y1;  long            wi1, dif;  /* Compute difference */  wi1 = *wi;  y1 = *y;  dif = ((wi1 << 5) + 131072 - y1) & 131071;  difs = (dif >> 16);  /* Time constant is 1/32; sign extension */  difsx = (difs == 0) ? (dif >> 5) : ((dif >> 5) + 4096);  *yut = (short) ((y1 + difsx) & 8191);}/* ....................... end of G726_filte() ....................... *//* ----------------------------------------------------------------------        void G726_filte (short *yup, long *yl, long *ylp);        ~~~~~~~~~~~~~~~        Description:        ~~~~~~~~~~~~        Update of slow quantizer scale factor. 	Inputs:  yup, yl 	Output:  ylp        Return value:  none.        ~~~~~~~~~~~~~        Prototype:   in g726.h        ~~~~~~~~~~        History:        ~~~~~~~~        31.Jan.91 v1.0f Release of 1st Fortran version to UGST.        		<tdsindi@venus.cpqd.ansp.br>        13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c)        		<tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void            G726_filte(yup, yl, ylp)  short          *yup;  long           *yl, *ylp;{  long            difs, difsx;  long            dif, dif1, yup1;  /* Compute difference */  yup1 = *yup;  dif1 = 1048576 - *yl;  dif = (yup1 + (dif1 >> 6)) & 16383;  difs = (dif >> 13);  /* Sign extension */  difsx = (difs == 0) ? dif : (dif + 507904);  *ylp = (*yl + difsx) & 524287;}/* ....................... end of G726_filte() ....................... *//* ----------------------------------------------------------------------        void G726_functw (short rate, short *i, short *wi);        ~~~~~~~~~~~~~~~~        Description:        ~~~~~~~~~~~~        Map quantizer output into logarithmic version  of scale factor        multiplier. 	Inputs: i, rate 	Output: wi        Return value:  none.        ~~~~~~~~~~~~~        Prototype:   in g726.h        ~~~~~~~~~~        History:        ~~~~~~~~        31.Jan.91 v1.0f Release of 1st Fortran version to UGST.        		<tdsindi@venus.cpqd.ansp.br>        13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c)        		<tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void            G726_functw(rate, i, wi)  short          *i, *wi;  short           rate;{  if (rate == 4)  {    /* Initialized data */    static short    tab[8] = {4084, 18, 41, 64, 112, 198, 355, 1122};    short           im, is;    is = (*i >> 3);    im = (is == 0) ? (*i & 7) : ((15 - *i) & 7);    /* Scale factor multiplier */    *wi = tab[im];  }				/* ................. end of 32 kbit part				 * .............. */  else if (rate == 3)  {    /* Initialized data */    static short    tab[4] = {4092, 30, 137, 582};    short           im, is;    is = (*i >> 2);    im = (is == 0) ? (*i & 3) : ((7 - *i) & 3);    *wi = tab[im];  }				/* ................. end of 24 kbit part				 * .............. */  else if (rate == 2)  {    /* Initialized data */    static short    tab[2] = {4074, 439};    short           im, is;    is = (*i >> 1);    im = (is == 0) ? (*i & 1) : ((3 - *i) & 1);    *wi = tab[im];  }				/* ................. end of 16 kbit part				 * .............. */  else

⌨️ 快捷键说明

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