coder.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * FAAC - Freeware Advanced Audio Coder
  3.  * Copyright (C) 2001 Menno Bakker
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  * You should have received a copy of the GNU Lesser General Public
  15.  * License along with this library; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  * $Id: coder.h,v 1.3 2001/06/04 23:02:24 wmay Exp $
  19.  */
  20. #ifndef CODER_H
  21. #define CODER_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif /* __cplusplus */
  25. #define MAX_CHANNELS 64
  26. #define FRAME_LEN 1024
  27. #define NSFB_LONG  51
  28. #define NSFB_SHORT 15
  29. #define MAX_SHORT_WINDOWS 8
  30. #define BLOCK_LEN_LONG 1024
  31. #define BLOCK_LEN_SHORT 128
  32. #define MAX_SCFAC_BANDS ((NSFB_SHORT+1)*MAX_SHORT_WINDOWS)
  33. enum WINDOW_TYPE {
  34. ONLY_LONG_WINDOW, 
  35. LONG_SHORT_WINDOW, 
  36. ONLY_SHORT_WINDOW,
  37. SHORT_LONG_WINDOW
  38. };
  39. #define TNS_MAX_ORDER 20
  40. #define DEF_TNS_GAIN_THRESH 1.4
  41. #define DEF_TNS_COEFF_THRESH 0.1
  42. #define DEF_TNS_COEFF_RES 4
  43. #define DEF_TNS_RES_OFFSET 3
  44. #define LEN_TNS_NFILTL 2
  45. #define LEN_TNS_NFILTS 1
  46. #define DELAY 2048
  47. #define LEN_LTP_DATA_PRESENT 1
  48. #define LEN_LTP_LAG 11
  49. #define LEN_LTP_COEF 3
  50. #define LEN_LTP_SHORT_USED 1
  51. #define LEN_LTP_SHORT_LAG_PRESENT 1
  52. #define LEN_LTP_SHORT_LAG 5
  53. #define LTP_LAG_OFFSET 16
  54. #define LEN_LTP_LONG_USED 1
  55. #define MAX_LT_PRED_LONG_SFB 40
  56. #define MAX_LT_PRED_SHORT_SFB 13
  57. #define SHORT_SQ_OFFSET (BLOCK_LEN_LONG-(BLOCK_LEN_SHORT*4+BLOCK_LEN_SHORT/2))
  58. #define CODESIZE 8
  59. #define NOK_LT_BLEN (3 * BLOCK_LEN_LONG)
  60. #define SBMAX_L 49
  61. #define LPC 2
  62. typedef struct {
  63. int order;                           /* Filter order */
  64. int direction;                  /* Filtering direction */
  65. int coefCompress;              /* Are coeffs compressed? */
  66. int length;                          /* Length, in bands */                     
  67. double aCoeffs[TNS_MAX_ORDER+1];     /* AR Coefficients */
  68. double kCoeffs[TNS_MAX_ORDER+1];     /* Reflection Coefficients */
  69. int index[TNS_MAX_ORDER+1];          /* Coefficient indices */
  70. } TnsFilterData;
  71. typedef struct {
  72. int numFilters;                 /* Number of filters */
  73. int coefResolution;             /* Coefficient resolution */
  74. TnsFilterData tnsFilter[1<<LEN_TNS_NFILTL]; /* TNS filters */
  75. } TnsWindowData;
  76. typedef struct {
  77. int tnsDataPresent;
  78. int tnsMinBandNumberLong;
  79. int tnsMinBandNumberShort;
  80. int tnsMaxBandsLong;
  81. int tnsMaxBandsShort;
  82. int tnsMaxOrderLong;
  83. int tnsMaxOrderShort;
  84. TnsWindowData windowData[MAX_SHORT_WINDOWS]; /* TNS data per window */
  85. } TnsInfo;
  86. typedef struct
  87. {
  88. int weight_idx;
  89. double weight;
  90. int sbk_prediction_used[MAX_SHORT_WINDOWS];
  91. int sfb_prediction_used[MAX_SCFAC_BANDS];
  92. int delay[MAX_SHORT_WINDOWS];
  93. int global_pred_flag;
  94. int side_info;
  95. double *buffer;
  96. double *mdct_predicted;
  97. double *time_buffer;
  98. double *ltp_overlap_buffer;
  99. } LtpInfo;
  100. typedef struct
  101. {
  102. int psy_init_mc;
  103. double dr_mc[LPC][BLOCK_LEN_LONG],e_mc[LPC+1+1][BLOCK_LEN_LONG];
  104. double K_mc[LPC+1][BLOCK_LEN_LONG], R_mc[LPC+1][BLOCK_LEN_LONG];
  105. double VAR_mc[LPC+1][BLOCK_LEN_LONG], KOR_mc[LPC+1][BLOCK_LEN_LONG];
  106. double sb_samples_pred_mc[BLOCK_LEN_LONG];
  107. int thisLineNeedsResetting_mc[BLOCK_LEN_LONG];
  108. int reset_count_mc;
  109. } BwpInfo;
  110. typedef struct {
  111. int window_shape;
  112. int prev_window_shape;
  113. int block_type;
  114. int desired_block_type;
  115. int global_gain;
  116. int old_value;
  117. int CurrentStep;
  118. int scale_factor[MAX_SCFAC_BANDS];
  119. int num_window_groups;
  120. int window_group_length[8];
  121. int max_sfb;
  122. int nr_of_sfb;
  123. int sfb_offset[250];
  124. int spectral_count;
  125. /* Huffman codebook selected for each sf band */
  126. int book_vector[MAX_SCFAC_BANDS];
  127. /* Data of spectral bitstream elements, for each spectral pair,
  128.    5 elements are required: 1*(esc)+2*(sign)+2*(esc value)=5 */
  129. int *data;
  130. /* Lengths of spectral bitstream elements */
  131. int *len;
  132. /* Holds the requantized spectrum */
  133. double *requantFreq;
  134. TnsInfo tnsInfo;
  135. LtpInfo ltpInfo;
  136. BwpInfo bwpInfo;
  137. int max_pred_sfb;
  138. int pred_global_flag;
  139. int pred_sfb_flag[MAX_SCFAC_BANDS];
  140. int reset_group_number;
  141. } CoderInfo;
  142. typedef struct { 
  143.   unsigned long sampling_rate;  /* the following entries are for this sampling rate */
  144.   int num_cb_long;
  145.   int num_cb_short;
  146.   int cb_width_long[NSFB_LONG];
  147.   int cb_width_short[NSFB_SHORT];
  148. } SR_INFO;
  149. #ifdef __cplusplus
  150. }
  151. #endif /* __cplusplus */
  152. #endif /* CODER_H */