private.h
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:8k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /*
  2.  * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
  3.  * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
  4.  * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
  5.  */
  6. /*$Header: /cvsroot/vocal.modules/contrib/libsndfile-0.0.22/src/GSM610/private.h,v 1.2 2001/02/27 19:23:15 deepalir Exp $*/
  7. #ifndef PRIVATE_H
  8. #define PRIVATE_H
  9. /* Added by Erik de Castro Lopo */
  10. #define NeedFunctionPrototypes 1
  11. #define SASR  
  12. #define USE_FLOAT_MUL
  13. #define FAST
  14. #define WAV49  
  15. /* Added by Erik de Castro Lopo */
  16. typedef short word; /* 16 bit signed int */
  17. typedef int longword; /* 32 bit signed int */
  18. typedef unsigned short uword; /* unsigned word */
  19. typedef unsigned int ulongword; /* unsigned longword */
  20. struct gsm_state {
  21. word dp0[ 280 ];
  22. word z1; /* preprocessing.c, Offset_com. */
  23. longword L_z2; /*                  Offset_com. */
  24. int mp; /*                  Preemphasis */
  25. word u[8]; /* short_term_aly_filter.c */
  26. word LARpp[2][8];  /*                              */
  27. word j; /*                              */
  28. word        ltp_cut;        /* long_term.c, LTP crosscorr.  */
  29. word nrp; /* 40 */ /* long_term.c, synthesis */
  30. word v[9]; /* short_term.c, synthesis */
  31. word msr; /* decoder.c, Postprocessing */
  32. char verbose; /* only used if !NDEBUG */
  33. char fast; /* only used if FAST */
  34. char wav_fmt; /* only used if WAV49 defined */
  35. unsigned char frame_index; /*            odd/even chaining */
  36. unsigned char frame_chain; /*   half-byte to carry forward */
  37. };
  38. #define MIN_WORD (-32767 - 1)
  39. #define MAX_WORD   32767
  40. #define MIN_LONGWORD (-2147483647 - 1)
  41. #define MAX_LONGWORD   2147483647
  42. #ifdef SASR /* flag: >> is a signed arithmetic shift right */
  43. #undef SASR
  44. #define SASR(x, by) ((x) >> (by))
  45. #else
  46. #define SASR(x, by) ((x) >= 0 ? (x) >> (by) : (~(-((x) + 1) >> (by))))
  47. #endif /* SASR */
  48. #include "proto.h"
  49. /*
  50.  * Prototypes from add.c
  51.  */
  52. extern word gsm_mult  (word a, word b);
  53. extern longword gsm_L_mult  (word a, word b);
  54. extern word gsm_mult_r (word a, word b);
  55. extern word gsm_div   (word num, word denum);
  56. extern word gsm_add  (word a, word b );
  57. extern longword gsm_L_add  (longword a, longword b );
  58. extern word gsm_sub  (word a, word b);
  59. extern longword gsm_L_sub  (longword a, longword b);
  60. extern word gsm_abs  (word a);
  61. extern word gsm_norm  (longword a );
  62. extern longword gsm_L_asl   (longword a, int n);
  63. extern word gsm_asl  (word a, int n);
  64. extern longword gsm_L_asr   (longword a, int n);
  65. extern word gsm_asr   (word a, int n);
  66. /*
  67.  *  Inlined functions from add.h 
  68.  */
  69. /* 
  70.  * #define GSM_MULT_R(a, b) (* word a, word b, !(a == b == MIN_WORD) *)
  71.  * (0x0FFFF & SASR(((longword)(a) * (longword)(b) + 16384), 15))
  72.  */
  73. #define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */
  74. (SASR( ((longword)(a) * (longword)(b) + 16384), 15 ))
  75. # define GSM_MULT(a,b)  /* word a, word b, !(a == b == MIN_WORD) */
  76. (SASR( ((longword)(a) * (longword)(b)), 15 ))
  77. # define GSM_L_MULT(a, b) /* word a, word b */
  78. (((longword)(a) * (longword)(b)) << 1)
  79. # define GSM_L_ADD(a, b)
  80. ( (a) <  0 ? ( (b) >= 0 ? (a) + (b)
  81.  : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) 
  82.    >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 )   
  83. : ((b) <= 0 ? (a) + (b)   
  84.           : (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD 
  85.     ? MAX_LONGWORD : utmp))
  86. /*
  87.  * # define GSM_ADD(a, b)
  88.  *  ((ltmp = (longword)(a) + (longword)(b)) >= MAX_WORD 
  89.  *  ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
  90.  */
  91. /* Nonportable, but faster: */
  92. #define GSM_ADD(a, b)
  93. ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > 
  94. MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp)
  95. # define GSM_SUB(a, b)
  96. ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD 
  97. ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
  98. # define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a))
  99. /* Use these if necessary:
  100. # define GSM_MULT_R(a, b) gsm_mult_r(a, b)
  101. # define GSM_MULT(a, b) gsm_mult(a, b)
  102. # define GSM_L_MULT(a, b) gsm_L_mult(a, b)
  103. # define GSM_L_ADD(a, b) gsm_L_add(a, b)
  104. # define GSM_ADD(a, b) gsm_add(a, b)
  105. # define GSM_SUB(a, b) gsm_sub(a, b)
  106. # define GSM_ABS(a) gsm_abs(a)
  107. */
  108. /*
  109.  *  More prototypes from implementations..
  110.  */
  111. extern void Gsm_Coder P((
  112. struct gsm_state * S,
  113. word * s, /* [0..159] samples IN */
  114. word * LARc, /* [0..7] LAR coefficients OUT */
  115. word * Nc, /* [0..3] LTP lag OUT  */
  116. word * bc, /* [0..3] coded LTP gain OUT  */
  117. word * Mc, /* [0..3] RPE grid selection OUT     */
  118. word * xmaxc,/* [0..3] Coded maximum amplitude OUT */
  119. word * xMc /* [13*4] normalized RPE samples OUT */));
  120. extern void Gsm_Long_Term_Predictor P(( /* 4x for 160 samples */
  121. struct gsm_state * S,
  122. word * d, /* [0..39]   residual signal IN */
  123. word * dp, /* [-120..-1] d' IN */
  124. word * e, /* [0..40]  OUT */
  125. word * dpp, /* [0..40]  OUT */
  126. word * Nc, /* correlation lag OUT */
  127. word * bc /* gain factor OUT */));
  128. extern void Gsm_LPC_Analysis P((
  129. struct gsm_state * S,
  130. word * s,  /* 0..159 signals IN/OUT */
  131.         word * LARc));   /* 0..7   LARc's OUT */
  132. extern void Gsm_Preprocess P((
  133. struct gsm_state * S,
  134. word * s, word * so));
  135. extern void Gsm_Encoding P((
  136. struct gsm_state * S,
  137. word * e,
  138. word * ep,
  139. word * xmaxc,
  140. word * Mc,
  141. word * xMc));
  142. extern void Gsm_Short_Term_Analysis_Filter P((
  143. struct gsm_state * S,
  144. word * LARc, /* coded log area ratio [0..7]  IN */
  145. word * d /* st res. signal [0..159] IN/OUT */));
  146. extern void Gsm_Decoder P((
  147. struct gsm_state * S,
  148. word * LARcr, /* [0..7] IN */
  149. word * Ncr, /* [0..3]  IN  */
  150. word * bcr, /* [0..3] IN */
  151. word * Mcr, /* [0..3]  IN  */
  152. word * xmaxcr, /* [0..3] IN  */
  153. word * xMcr, /* [0..13*4] IN */
  154. word * s)); /* [0..159] OUT  */
  155. extern void Gsm_Decoding P((
  156. struct gsm_state * S,
  157. word  xmaxcr,
  158. word Mcr,
  159. word * xMcr,   /* [0..12] IN */
  160. word * erp));  /* [0..39] OUT  */
  161. extern void Gsm_Long_Term_Synthesis_Filtering P((
  162. struct gsm_state* S,
  163. word Ncr,
  164. word bcr,
  165. word * erp, /* [0..39]   IN  */
  166. word * drp));  /* [-120..-1] IN, [0..40] OUT  */
  167. void Gsm_RPE_Decoding P((
  168. struct gsm_state *S,
  169. word xmaxcr,
  170. word Mcr,
  171. word * xMcr,  /* [0..12], 3 bits             IN      */
  172. word * erp)); /* [0..39]                     OUT     */
  173. void Gsm_RPE_Encoding P((
  174. struct gsm_state * S,
  175. word    * e,            /* -5..-1][0..39][40..44     IN/OUT  */
  176. word    * xmaxc,        /*                              OUT */
  177. word    * Mc,           /*                              OUT */
  178. word    * xMc));        /* [0..12]                      OUT */
  179. extern void Gsm_Short_Term_Synthesis_Filter P((
  180. struct gsm_state * S,
  181. word * LARcr,  /* log area ratios [0..7]  IN */
  182. word * drp, /* received d [0...39]    IN */
  183. word * s)); /* signal   s [0..159]   OUT */
  184. extern void Gsm_Update_of_reconstructed_short_time_residual_signal P((
  185. word * dpp, /* [0...39] IN */
  186. word * ep, /* [0...39] IN */
  187. word * dp)); /* [-120...-1]  IN/OUT  */
  188. /*
  189.  *  Tables from table.c
  190.  */
  191. #ifndef GSM_TABLE_C
  192. extern word gsm_A[8], gsm_B[8], gsm_MIC[8], gsm_MAC[8];
  193. extern word gsm_INVA[8];
  194. extern word gsm_DLB[4], gsm_QLB[4];
  195. extern word gsm_H[11];
  196. extern word gsm_NRFAC[8];
  197. extern word gsm_FAC[8];
  198. #endif /* GSM_TABLE_C */
  199. /*
  200.  *  Debugging
  201.  */
  202. #ifdef NDEBUG
  203. # define gsm_debug_words(a, b, c, d) /* nil */
  204. # define gsm_debug_longwords(a, b, c, d) /* nil */
  205. # define gsm_debug_word(a, b) /* nil */
  206. # define gsm_debug_longword(a, b) /* nil */
  207. #else /* !NDEBUG => DEBUG */
  208. extern void  gsm_debug_words     P((char * name, int, int, word *));
  209. extern void  gsm_debug_longwords P((char * name, int, int, longword *));
  210. extern void  gsm_debug_longword  P((char * name, longword));
  211. extern void  gsm_debug_word      P((char * name, word));
  212. #endif /* !NDEBUG */
  213. #include "unproto.h"
  214. #endif /* PRIVATE_H */