g726.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /*
  2. ============================================================================
  3. File: G726.H 28-Feb-1991 (18:00:00)
  4. ============================================================================
  5. UGST/ITU-T G726 MODULE
  6. GLOBAL FUNCTION PROTOTYPES
  7. History:
  8. 28.Feb.92 v1.0 First version <simao@cpqd.br>
  9. 06.May.94 v2.0 Smart prototypes that work with many compilers <simao>
  10. ============================================================================
  11. */
  12. #ifndef G726_defined
  13. #define G726_defined 200
  14. /* Smart function prototypes: for [ag]cc, VaxC, and [tb]cc */
  15. #if !defined(ARGS)
  16. #if (defined(__STDC__) || defined(VMS) || defined(__DECC) || defined(MSDOS) || defined(__MSDOS__)) || defined (__CYGWIN__) || defined (_MSC_VER)
  17. #define ARGS(s) s
  18. #else
  19. #define ARGS(s) ()
  20. #endif
  21. #endif
  22. /* State for G726 encoder and decoder */
  23. typedef struct {
  24. short sr0, sr1; /* Reconstructed signal with delays 0 and 1 */
  25. short a1r, a2r; /* Triggered 2nd order predictor coeffs. */
  26. short b1r; /* Triggered 6nd order predictor coeffs */
  27. short b2r;
  28. short b3r;
  29. short b4r;
  30. short b5r;
  31. short b6r;
  32. short dq5; /* Quantized difference signal with delays 5 to 0 */
  33. short dq4;
  34. short dq3;
  35. short dq2;
  36. short dq1;
  37. short dq0;
  38. short dmsp; /* Short term average of the F(I) sequence */
  39. short dmlp; /* Long term average of the F(I) sequence */
  40. short apr; /* Triggered unlimited speed control parameter */
  41. short yup; /* Fast quantizer scale factor */
  42. short tdr; /* Triggered tone detector */
  43. short pk0, pk1; /* sign of dq+sez with delays 0 and 1 */
  44. long ylp; /* Slow quantizer scale factor */
  45. } G726_state;
  46. /* Function prototypes */
  47. void G726_encode ARGS ((short *inp_buf, short *out_buf, long smpno, char *law, short rate, short r, G726_state * state));
  48. void G726_decode ARGS ((short *inp_buf, short *out_buf, long smpno, char *law, short rate, short r, G726_state * state));
  49. void G726_expand ARGS ((short *s, char *law, short *sl));
  50. void G726_subta ARGS ((short *sl, short *se, short *d));
  51. void G726_log ARGS ((short *d, short *dl, short *ds));
  52. void G726_quan ARGS ((short rate, short *dln, short *ds, short *i));
  53. void G726_subtb ARGS ((short *dl, short *y, short *dln));
  54. void G726_adda ARGS ((short *dqln, short *y, short *dql));
  55. void G726_antilog ARGS ((short *dql, short *dqs, short *dq));
  56. void G726_reconst ARGS ((short rate, short *i, short *dqln, short *dqs));
  57. void G726_delaya ARGS ((short *r, short *x, short *y));
  58. void G726_delayb ARGS ((short *r, short *x, short *y));
  59. void G726_delayc ARGS ((short *r, long *x, long *y));
  60. void G726_delayd ARGS ((short *r, short *x, short *y));
  61. void G726_filtd ARGS ((short *wi, short *y, short *yut));
  62. void G726_filte ARGS ((short *yup, long *yl, long *ylp));
  63. void G726_functw ARGS ((short rate, short *i, short *wi));
  64. void G726_limb ARGS ((short *yut, short *yup));
  65. void G726_mix ARGS ((short *al, short *yu, long *yl, short *y));
  66. void G726_filta ARGS ((short *fi, short *dms, short *dmsp));
  67. void G726_filtb ARGS ((short *fi, short *dml, short *dmlp));
  68. void G726_filtc ARGS ((short *ax, short *ap, short *app));
  69. void G726_functf ARGS ((short rate, short *i, short *fi));
  70. void G726_lima ARGS ((short *ap, short *al));
  71. void G726_subtc ARGS ((short *dmsp, short *dmlp, short *tdp, short *y, short *ax));
  72. void G726_triga ARGS ((short *tr, short *app, short *apr));
  73. void G726_accum ARGS ((short *wa1, short *wa2, short *wb1, short *wb2, short *wb3, short *wb4, short *wb5, short *wb6, short *se, short *sez));
  74. void G726_addb ARGS ((short *dq, short *se, short *sr));
  75. void G726_addc ARGS ((short *dq, short *sez, short *pk0, short *sigpk));
  76. void G726_floata ARGS ((short *dq, short *dq0));
  77. void G726_floatb ARGS ((short *sr, short *sr0));
  78. void G726_fmult ARGS ((short *An, short *SRn, short *WAn));
  79. void G726_limc ARGS ((short *a2t, short *a2p));
  80. void G726_limd ARGS ((short *a1t, short *a2p, short *a1p));
  81. void G726_trigb ARGS ((short *tr, short *ap, short *ar));
  82. void G726_upa1 ARGS ((short *pk0, short *pk1, short *a1, short *sigpk, short *a1t));
  83. void G726_upa2 ARGS ((short *pk0, short *pk1, short *pk2, short *a2, short *a1, short *sigpk, short *a2t));
  84. void G726_upb ARGS ((short rate, short *u, short *b, short *dq, short *bp));
  85. void G726_xor ARGS ((short *dqn, short *dq, short *u));
  86. void G726_tone ARGS ((short *a2p, short *tdp));
  87. void G726_trans ARGS ((short *td, long *yl, short *dq, short *tr));
  88. void G726_compress ARGS ((short *sr, char *law, short *sp));
  89. void G726_sync ARGS ((short rate, short *i, short *sp, short *dlnx, short *dsx, char *law, short *sd));
  90. /* Definitions for better user interface (?!) */
  91. #ifndef IS_LOG
  92. #define IS_LOG 0
  93. #endif
  94. #ifndef IS_LIN
  95. #define IS_LIN 1
  96. #endif
  97. #ifndef IS_ADPCM
  98. #define IS_ADPCM 2
  99. #endif
  100. #endif
  101. /* .......................... End of G726.H ........................... */