ENCODER.H
上传用户:njqiyou
上传日期:2007-01-08
资源大小:574k
文件大小:15k
源码类别:

mpeg/mp3

开发平台:

C/C++

  1. /**********************************************************************
  2.  * ISO MPEG Audio Subgroup Software Simulation Group (1996)
  3.  * ISO 13818-3 MPEG-2 Audio Encoder - Lower Sampling Frequency Extension
  4.  *
  5.  * $Id: encoder.h,v 1.1 1996/02/14 04:04:23 rowlands Exp $
  6.  *
  7.  * $Log: encoder.h,v $
  8.  * Revision 1.1  1996/02/14 04:04:23  rowlands
  9.  * Initial revision
  10.  *
  11.  * Received from Mike Coleman
  12.  **********************************************************************/
  13. /**********************************************************************
  14.  *   date   programmers         comment                               *
  15.  * 2/25/91  Doulas Wong,        start of version 1.0 records          *
  16.  *          Davis Pan                                                 *
  17.  * 5/10/91  W. Joseph Carter    Reorganized & renamed all ".h" files  *
  18.  *                              into "common.h" and "encoder.h".      *
  19.  *                              Ported to Macintosh and Unix.         *
  20.  *                              Added function prototypes for more    *
  21.  *                              rigorous type checking.               *
  22.  * 27jun91  dpwe (Aware)        moved "alloc_*" types, pros to common *
  23.  *                              Use ifdef PROTO_ARGS for prototypes   *
  24.  *                              prototypes reflect frame_params struct*
  25.  * 7/10/91  Earle Jennings      Conversion of all floats to FLOAT     *
  26.  * 10/3/91  Don H. Lee          implemented CRC-16 error protection   *
  27.  *                              Additions and revisions are marked    *
  28.  *                              with "dhl" for clarity                *
  29.  * 2/11/92  W. Joseph Carter    Ported new code to Macintosh.  Most   *
  30.  *                              important fixes involved changing     *
  31.  *                              16-bit ints to long or unsigned in    *
  32.  *                              bit alloc routines for quant of 65535 *
  33.  *                              and passing proper function args.     *
  34.  *                              Removed "Other Joint Stereo" option   *
  35.  *                              and made bitrate be total channel     *
  36.  *                              bitrate, irrespective of the mode.    *
  37.  *                              Fixed many small bugs & reorganized.  *
  38.  *                              Modified some function prototypes.    *
  39.  * 7/27/92  Masahiro Iwadare    FFT modifications for Layer 3         *
  40.  * 8/3/92   Mike Li             removed declaration _stklen for DOS.  *
  41.  * 9/22/92  jddevine@aware.com  Fix protos for _scale_factor_calc()   *
  42.  * 11/04/94 Jon Rowlands        Fix protos for usage()                *
  43.  * 07/11/95 Soeren H. Nielsen   Changed defs. and protos for LSF      *
  44.  **********************************************************************/
  45. #ifndef ENCODER_DOT_H
  46. #define ENCODER_DOT_H
  47. /***********************************************************************
  48. *
  49. *  Encoder Include Files
  50. *
  51. ***********************************************************************/
  52. /***********************************************************************
  53. *
  54. *  Encoder Definitions
  55. *
  56. ***********************************************************************/
  57. /* General Definitions */
  58. /* Default Input Arguments (for command line control) */
  59. #define DFLT_LAY        2      /* default encoding layer is II */
  60. #define DFLT_MOD        's'    /* default mode is stereo */
  61. #define DFLT_PSY        1      /* default psych model is 1 */
  62. #define DFLT_SFQ        44.1   /* default input sampling rate is 44.1 kHz */
  63. #define DFLT_EMP        'n'    /* default de-emphasis is none */
  64. #define DFLT_EXT        ".mpg" /* default output file extension */
  65. #define FILETYPE_ENCODE 'TEXT'
  66. #define CREATOR_ENCODE  'MpgD'
  67. /* This is the smallest MNR a subband can have before it is counted
  68.    as 'noisy' by the logic which chooses the number of JS subbands */
  69. #define NOISY_MIN_MNR   0.0
  70. /* Psychacoustic Model 1 Definitions */
  71. #define CB_FRACTION     0.33
  72. #define MAX_SNR         1000
  73. #define NOISE           10
  74. #define TONE            20
  75. #define DBMIN           -200.0
  76. #define LAST            -1
  77. #define STOP            -100
  78. #define POWERNORM       90.3090 /* = 20 * log10(32768) to normalize */
  79.                                 /* max output power to 96 dB per spec */
  80. /* Psychoacoustic Model 2 Definitions */
  81. #define LOGBLKSIZE      10
  82. #define BLKSIZE         1024
  83. #define HBLKSIZE        513
  84. #define CBANDS          63
  85. #define LXMIN           32.0
  86. /***********************************************************************
  87. *
  88. *  Encoder Type Definitions
  89. *
  90. ***********************************************************************/
  91. /* Psychoacoustic Model 1 Type Definitions */
  92. typedef int        IFFT2[FFT_SIZE/2];
  93. typedef int        IFFT[FFT_SIZE];
  94. typedef double     D9[9];
  95. typedef double     D10[10];
  96. typedef double     D640[640];
  97. typedef double     D1408[1408];
  98. typedef double     DFFT2[FFT_SIZE/2];
  99. typedef double     DFFT[FFT_SIZE];
  100. typedef double     DSBL[SBLIMIT];
  101. typedef double     D2SBL[2][SBLIMIT];
  102. typedef struct {
  103.         int        line;
  104.         double     bark, hear, x;
  105. } g_thres, *g_ptr;
  106. typedef struct {
  107.         double     x;
  108.         int        type, next, map;
  109. } mask, *mask_ptr;
  110. /* Psychoacoustic Model 2 Type Definitions */
  111. typedef int        ICB[CBANDS];
  112. typedef int        IHBLK[HBLKSIZE];
  113. typedef FLOAT      F32[32];
  114. typedef FLOAT      F2_32[2][32];
  115. typedef FLOAT      FCB[CBANDS];
  116. typedef FLOAT      FCBCB[CBANDS][CBANDS];
  117. typedef FLOAT      FBLK[BLKSIZE];
  118. typedef FLOAT      FHBLK[HBLKSIZE];
  119. typedef FLOAT      F2HBLK[2][HBLKSIZE];
  120. typedef FLOAT      F22HBLK[2][2][HBLKSIZE];
  121. typedef double     DCB[CBANDS];
  122. /***********************************************************************
  123. *
  124. *  Encoder Function Prototype Declarations
  125. *
  126. ***********************************************************************/
  127. /* The following functions are in the file "musicin.c" */
  128. #ifdef        PROTO_ARGS
  129. extern void   obtain_parameters(frame_params*, int*, unsigned long*,
  130.                            char[MAX_NAME_SIZE], char[MAX_NAME_SIZE]);
  131. extern void   parse_args(int, char**, frame_params*, int*, unsigned long*,
  132.                            char[MAX_NAME_SIZE], char[MAX_NAME_SIZE]);
  133. extern void   print_config(frame_params*, int*,
  134.                            char[MAX_NAME_SIZE], char[MAX_NAME_SIZE]);
  135. void   usage(void);
  136. extern void   aiff_check(char*, IFF_AIFF*, int*);
  137. #else
  138. extern void   obtain_parameters();
  139. extern void   parse_args();
  140. extern void   print_config();
  141. static void   usage();
  142. extern void   aiff_check();
  143. #endif
  144. /* The following functions are in the file "encode.c" */
  145. #ifdef        PROTO_ARGS
  146. extern unsigned long    read_samples(FILE*, short[2304], unsigned long,
  147.                            unsigned long);
  148. #if 0
  149. extern unsigned long    get_audio(FILE*, short[2][1152], unsigned long,
  150.                            int, int);
  151. #else
  152. extern unsigned long    get_audio(FILE*, short[2][1152], unsigned long,
  153.                            int, layer* info);
  154. #endif
  155. extern void   read_ana_window(double[HAN_SIZE]);
  156. extern void   window_subband(short**, double[HAN_SIZE], int);
  157. extern void   create_ana_filter(double[SBLIMIT][64]);
  158. extern void   filter_subband(double[HAN_SIZE], double[SBLIMIT]);
  159. extern void   encode_info(frame_params*, Bit_stream_struc*);
  160. extern double mod(double);
  161. extern void   I_combine_LR(double[2][3][SCALE_BLOCK][SBLIMIT],
  162.                            double[3][SCALE_BLOCK][SBLIMIT]);
  163. extern void   II_combine_LR(double[2][3][SCALE_BLOCK][SBLIMIT],
  164.                            double[3][SCALE_BLOCK][SBLIMIT], int);
  165. extern void   I_scale_factor_calc(double[][3][SCALE_BLOCK][SBLIMIT],
  166.                            unsigned int[][3][SBLIMIT], int);
  167. extern void   II_scale_factor_calc(double[][3][SCALE_BLOCK][SBLIMIT],
  168.                            unsigned int[][3][SBLIMIT], int, int);
  169. extern void   pick_scale(unsigned int[2][3][SBLIMIT], frame_params*,
  170.                            double[2][SBLIMIT]);
  171. extern void   put_scale(unsigned int[2][3][SBLIMIT], frame_params*,
  172.                            double[2][SBLIMIT]);
  173. extern void   II_transmission_pattern(unsigned int[2][3][SBLIMIT],
  174.                            unsigned int[2][SBLIMIT], frame_params*);
  175. extern void   II_encode_scale(unsigned int[2][SBLIMIT],
  176.                            unsigned int[2][SBLIMIT],
  177.                            unsigned int[2][3][SBLIMIT], frame_params*,
  178.                            Bit_stream_struc*);
  179. extern void   I_encode_scale(unsigned int[2][3][SBLIMIT],
  180.                            unsigned int[2][SBLIMIT], frame_params*,
  181.                            Bit_stream_struc*);
  182. extern int    II_bits_for_nonoise(double[2][SBLIMIT], unsigned int[2][SBLIMIT],
  183.                            frame_params*);
  184. extern void   II_main_bit_allocation(double[2][SBLIMIT],
  185.                            unsigned int[2][SBLIMIT], unsigned int[2][SBLIMIT],
  186.                            int*, frame_params*);
  187. extern int    II_a_bit_allocation(double[2][SBLIMIT], unsigned int[2][SBLIMIT],
  188.                            unsigned int[2][SBLIMIT], int*, frame_params*);
  189. extern int    I_bits_for_nonoise(double[2][SBLIMIT], frame_params*);
  190. extern void   I_main_bit_allocation(double[2][SBLIMIT],
  191.                            unsigned int[2][SBLIMIT], int*, frame_params*);
  192. extern int    I_a_bit_allocation(double[2][SBLIMIT], unsigned int[2][SBLIMIT],
  193.                            int*, frame_params*);
  194. extern void   I_subband_quantization(unsigned int[2][3][SBLIMIT],
  195.                            double[2][3][SCALE_BLOCK][SBLIMIT], unsigned int[3][SBLIMIT],
  196.                            double[3][SCALE_BLOCK][SBLIMIT], unsigned int[2][SBLIMIT],
  197.                            unsigned int[2][3][SCALE_BLOCK][SBLIMIT], frame_params*);
  198. extern void   II_subband_quantization(unsigned int[2][3][SBLIMIT],
  199.                            double[2][3][SCALE_BLOCK][SBLIMIT], unsigned int[3][SBLIMIT],
  200.                            double[3][SCALE_BLOCK][SBLIMIT], unsigned int[2][SBLIMIT],
  201.                            unsigned int[2][3][SCALE_BLOCK][SBLIMIT], frame_params*);
  202. extern void   II_encode_bit_alloc(unsigned int[2][SBLIMIT], frame_params*,
  203.                            Bit_stream_struc*);
  204. extern void   I_encode_bit_alloc(unsigned int[2][SBLIMIT], frame_params*,
  205.                            Bit_stream_struc*);
  206. extern void   I_sample_encoding(unsigned int[2][3][SCALE_BLOCK][SBLIMIT],
  207.                            unsigned int[2][SBLIMIT], frame_params*,
  208.                            Bit_stream_struc*);
  209. extern void   II_sample_encoding(unsigned int[2][3][SCALE_BLOCK][SBLIMIT],
  210.                            unsigned int[2][SBLIMIT], frame_params*,
  211.                            Bit_stream_struc*);
  212. extern void   encode_CRC(unsigned int, Bit_stream_struc*);
  213. #else
  214. extern unsigned long  read_samples();
  215. extern unsigned long  get_audio();
  216. extern void        read_ana_window();
  217. extern void        window_subband();
  218. extern void        create_ana_filter();
  219. extern void        filter_subband();
  220. extern void        encode_info();
  221. extern double      mod();
  222. extern void        I_combine_LR();
  223. extern void        II_combine_LR();
  224. extern void        I_scale_factor_calc();
  225. extern void        II_scale_factor_calc();
  226. extern void        pick_scale();
  227. extern void        put_scale();
  228. extern void        II_transmission_pattern();
  229. extern void        II_encode_scale();
  230. extern void        I_encode_scale();
  231. extern int         II_bits_for_nonoise();
  232. extern void        II_main_bit_allocation();
  233. extern int         II_a_bit_allocation();
  234. extern int         I_bits_for_nonoise();
  235. extern void        I_main_bit_allocation();
  236. extern int         I_a_bit_allocation();
  237. extern void        I_subband_quantization();
  238. extern void        II_subband_quantization();
  239. extern void        II_encode_bit_alloc();
  240. extern void        I_encode_bit_alloc();
  241. extern void        I_sample_encoding();
  242. extern void        II_sample_encoding();
  243. extern void        encode_CRC();
  244. #endif
  245. /* The following functions are in the file "tonal.c" */
  246. #ifdef     PROTO_ARGS
  247. extern void        read_cbound(int, int);
  248. extern void        read_freq_band(g_ptr*, int, int);
  249. extern void        make_map(mask[HAN_SIZE], g_thres*);
  250. extern double      add_db(double, double);
  251. extern void        II_f_f_t(double[FFT_SIZE], mask[HAN_SIZE]);
  252. extern void        II_hann_win(double[FFT_SIZE]);
  253. extern void        II_pick_max(mask[HAN_SIZE], double[SBLIMIT]);
  254. extern void        II_tonal_label(mask[HAN_SIZE], int*);
  255. extern void        noise_label(mask*, int*, g_thres*);
  256. extern void        subsampling(mask[HAN_SIZE], g_thres*, int*, int*);
  257. extern void        threshold(mask[HAN_SIZE], g_thres*, int*, int*, int);
  258. extern void        II_minimum_mask(g_thres*, double[SBLIMIT], int);
  259. extern void        II_smr(double[SBLIMIT], double[SBLIMIT], double[SBLIMIT],
  260.                            int);
  261. extern void        II_Psycho_One(short[2][1152], double[2][SBLIMIT],
  262.                            double[2][SBLIMIT], frame_params*);
  263. extern void        I_f_f_t(double[FFT_SIZE/2], mask[HAN_SIZE/2]);
  264. extern void        I_hann_win(double[FFT_SIZE/2]);
  265. extern void        I_pick_max(mask[HAN_SIZE/2], double[SBLIMIT]);
  266. extern void        I_tonal_label(mask[HAN_SIZE/2], int*);
  267. extern void        I_minimum_mask(g_thres*, double[SBLIMIT]);
  268. extern void        I_smr(double[SBLIMIT], double[SBLIMIT], double[SBLIMIT]);
  269. extern void        I_Psycho_One(short[2][1152], double[2][SBLIMIT],
  270.                            double[2][SBLIMIT], frame_params*);
  271. #else
  272. extern void        read_cbound();
  273. extern void        read_freq_band();
  274. extern void        make_map();
  275. extern double      add_db();
  276. extern void        II_f_f_t();
  277. extern void        II_hann_win();
  278. extern void        II_pick_max();
  279. extern void        II_tonal_label();
  280. extern void        noise_label();
  281. extern void        subsampling();
  282. extern void        threshold();
  283. extern void        II_minimum_mask();
  284. extern void        II_smr();
  285. extern void        II_Psycho_One();
  286. extern void        I_f_f_t();
  287. extern void        I_hann_win();
  288. extern void        I_pick_max();
  289. extern void        I_tonal_label();
  290. extern void        I_minimum_mask();
  291. extern void        I_smr();
  292. extern void        I_Psycho_One();
  293. #endif
  294. /* The following functions are in the file "psy.c" */
  295. #ifdef     PROTO_ARGS
  296. extern void        psycho_anal(short int*, short int[1056], int, int,
  297.                            FLOAT[32], double);
  298. #else
  299. extern void        psycho_anal();
  300. #endif
  301. /* The following functions are in the file "subs.c" */
  302. #ifdef     PROTO_ARGS
  303. extern void        fft(FLOAT[BLKSIZE], FLOAT[BLKSIZE], FLOAT[BLKSIZE],
  304.                            FLOAT[BLKSIZE], int );
  305. #else
  306. extern void        fft();
  307. #endif
  308. #endif