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

mpeg/mp3

开发平台:

C/C++

  1. /**********************************************************************
  2.  * ISO MPEG Audio Subgroup Software Simulation Group (1996)
  3.  * ISO 13818-3 MPEG-2 Audio Multichannel Encoder
  4.  *
  5.  * $Id: encoder.h 1.9 1996/02/12 07:13:35 rowlands Exp $
  6.  *
  7.  * $Log: encoder.h $
  8.  * Revision 1.9  1996/02/12 07:13:35  rowlands
  9.  * Release following Munich meeting
  10.  *
  11.  * Revision 1.8  1996/02/12 05:51:17  rowlands
  12.  * Added verbosity switch to control text output.
  13.  * Removed reference to unused file "fp100".
  14.  *
  15.  * Revision 1.6.2.1  1995/11/06  04:19:12  rowlands
  16.  * Received from Uwe Felderhoff (IRT)
  17.  *
  18.  * Revision 1.7  1995/08/14  08:02:08  tenkate
  19.  * ML-LSF added Warner ten Kate 7/8/95 (Philips)
  20.  *
  21.  * Revision 1.4.3.1  1995/06/16  08:25:11  rowlands
  22.  * Input from Sang Wook Kim (Samsung AIT)
  23.  *
  24.  * Revision 1.4.2.1  1995/06/16  03:46:42  rowlands
  25.  * Input from Susanne Ritscher (IRT)
  26.  *
  27.  * Revision 1.4.1.2  1995/06/16  02:50:56  rowlands
  28.  * Added dematrix procedure 2 procedure prototypes
  29.  *
  30.  **********************************************************************/
  31. /**********************************************************************
  32.  *   date   programmers         comment                               *
  33.  * 2/25/91  Doulas Wong,        start of version 1.0 records          *
  34.  *          Davis Pan                                                 *
  35.  * 5/10/91  W. Joseph Carter    Reorganized & renamed all ".h" files  *
  36.  *                              into "common.h" and "encoder.h".      *
  37.  *                              Ported to Macintosh and Unix.         *
  38.  *                              Added function prototypes for more    *
  39.  *                              rigorous type checking.               *
  40.  * 27jun91  dpwe (Aware)        moved "alloc_*" types, pros to common *
  41.  *                              Use ifdef PROTO_ARGS for prototypes   *
  42.  *                              prototypes reflect frame_params struct*
  43.  * 7/10/91  Earle Jennings      Conversion of all floats to FLOAT     *
  44.  * 10/3/91  Don H. Lee          implemented CRC-16 error protection   *
  45.  *                              Additions and revisions are marked    *
  46.  *                              with "dhl" for clarity                *
  47.  * 2/11/92  W. Joseph Carter    Ported new code to Macintosh.  Most   *
  48.  *                              important fixes involved changing     *
  49.  *                              16-bit ints to long or unsigned in    *
  50.  *                              bit alloc routines for quant of 65535 *
  51.  *                              and passing proper function args.     *
  52.  *                              Removed "Other Joint Stereo" option   *
  53.  *                              and made bitrate be total channel     *
  54.  *                              bitrate, irrespective of the mode.    *
  55.  *                              Fixed many small bugs & reorganized.  *
  56.  *                              Modified some function prototypes.    *
  57.  * 13jul92  Susanne Ritscher    MS-DOS, MSC 6.0 port fix.             *
  58.  * 92-11-06 Soren H. Nielsen   Changed POWERNORM to 96 dB in order *
  59.  *          to get FFT levels conforming to ISO.  *
  60.  *  dec 92 Susanne Ritscher     Changed to multi channel with several *
  61.  *  options                               *
  62.  **********************************************************************
  63.  *                                                                    *
  64.  *                                                                    *
  65.  *  MPEG/audio Phase 2 coding/decoding multichannel                   *
  66.  *                                                                    *
  67.  *  7/27/93        Susanne Ritscher,  IRT Munich                      *
  68.  *  8/27/93        Susanne Ritscher, IRT Munich                       *
  69.  *                 Channel-Switching is working                       *
  70.  *  9/1/93         Susanne Ritscher,  IRT Munich                      *
  71.  *                 all channels normalized                            *
  72.  *                                                                    *
  73.  *  9/20/93        channel-switching is only performed at a           *
  74.  *                 certain limit of TC_ALLOC dB, which is included    *
  75.  *                 in encoder.h                                       *
  76.  *                                                                    *
  77.  *  Version 1.0                                                       *
  78.  *                                                                    *
  79.  *  07/12/94       Susanne Ritscher,  IRT Munich                      *
  80.  *                 Tel: +49 89 32399 458                              *
  81.  *                 Fax: +49 89 32399 415                              *
  82.  *                                                                    *
  83.  *  Version 1.1                                                       *
  84.  *                                                                    *
  85.  *  02/23/95    Susanne Ritscher,  IRT Munich                      *
  86.  *                 corrected some bugs                                *
  87.  *                 extension bitstream is working                     *
  88.  *                                                                    *
  89.  *  Version 2.0                                                       *
  90.  *                                                                    *
  91.  *  01/28/97       Frans de Bont, Philips Sound & Vision, Eindhoven   *
  92.  *     - dynamic crosstalk working for all configurations*
  93.  *     - prediction working for all configurations       *
  94.  *     - extension bitstream fixed       *
  95.  *     - fully compliant to DIS 13818-3.2                *
  96.  *                                                                    *       *     
  97.  **********************************************************************/
  98. /**********************************************************************
  99.  *                                                                    *
  100.  *  06/06/95       Yeon Bae Thomas Kim, Samsung AIT                   *
  101.  *                 ancillary data is working                          *
  102.  *                                                                    *
  103.  *  06/06/95       Sang Wook Kim, Samsung AIT                         *
  104.  *                 corrected some bugs                                *
  105.  *                                                                    *
  106.  **********************************************************************/
  107. /***********************************************************************
  108. *
  109. *  Encoder Include Files
  110. *
  111. ***********************************************************************/
  112. /***********************************************************************
  113. *
  114. *  Encoder Definitions
  115. *
  116. ***********************************************************************/
  117. /* General Definitions */
  118. /* Default Input Arguments (for command line control) */
  119. #define DFLT_LAY 2 /* default encoding layer is II */
  120. #define DFLT_MOD 'r' /* default mode is stereo front channels */
  121. #define DFLT_PSY 1 /* default psych model is 1 */
  122. #define DFLT_SFQ        48      /* default input sampling rate is 44.1 kHz, now 48kHz 28.6.93 SR */
  123. #define DFLT_BRT        384     /* default total output bitrate is 384 kbps */
  124. #define DFLT_EMP        'n'     /* default de-emphasis is none */
  125. #define DFLT_EXT        ".mpg"  /* default output file extension */
  126. #define DFLT_EXT_EXT    ".ext"  /* default output file extension of extension bit stream*/
  127. #define DFLT_ML_EXT     ".ml"   /* default extension for MultiLingual file */
  128. #define DFLT_VERB 1 /* default level of verbosity */
  129. #define DFLT_NADB 2 /* default number of ancillary data bytes (for DVD !!!) */
  130. #define FILETYPE_ENCODE 'TEXT'
  131. #define CREATOR_ENCODE  'MpgD'
  132. #define TC_ALLOC        0.0
  133. /* This is the smallest MNR a subband can have before it is counted
  134.    as 'noisy' by the logic which chooses the number of JS subbands */
  135. /* Now optionally in fr_ps */
  136. /*#define NOISY_MIN_MNR   0.0*/
  137. /* Psychacoustic Model 1 Definitions */
  138. #define CB_FRACTION     0.33
  139. #define MAX_SNR         1000
  140. #define NOISE           10
  141. #define TONE            20
  142. #define DBMIN           -200.0
  143. #define LAST            -1
  144. #define STOP            -100
  145. #define POWERNORM       90.3090
  146. /*96.0*/
  147. /* Full amplitude, 32767, should correspond to
  148.    96 dB, 1992-11-06 Soren H. Nielsen */
  149. /* 90.3090  = 20 * log10(32768) to normalize */
  150.                                 /* max output power to 96 dB per spec */
  151. /* Psychoacoustic Model 2 Definitions */
  152. #define LOGBLKSIZE      10
  153. #define BLKSIZE         1024
  154. #define HBLKSIZE        513
  155. #define CBANDS          63
  156. #define LXMIN           32.0
  157. /***********************************************************************
  158. *
  159. *  Encoder Type Definitions
  160. *
  161. ***********************************************************************/
  162. /* Psychoacoustic Model 1 Type Definitions */
  163. typedef int        IFFT2[FFT_SIZE/2];
  164. typedef int        IFFT[FFT_SIZE];
  165. typedef double     D9[9];
  166. typedef double     D10[10];
  167. typedef double     D640[640];
  168. typedef double     D1408[1408];
  169. typedef double     DFFT2[FFT_SIZE/2];
  170. typedef double     DFFT[FFT_SIZE];
  171. typedef double     DSBL[SBLIMIT];
  172. typedef double     D2SBL[2][SBLIMIT];
  173. typedef double     D5SBL[5][SBLIMIT];
  174. typedef double     D7SBL[7][SBLIMIT];  /*added because of 7 channels, 8/10/93, SR*/
  175. typedef double     D12SBL[12][SBLIMIT];  /*added because of 12 channels, 8/10/93, SR*/
  176. typedef struct {
  177.         int        line;
  178.         double     bark, hear, x;
  179. } g_thres, *g_ptr;
  180. typedef struct {
  181.         double     x;
  182.         int        type, next, map;
  183. } mask, *mask_ptr;
  184. /* Psychoacoustic Model 2 Type Definitions */
  185. typedef int        ICB[CBANDS];
  186. typedef int        IHBLK[HBLKSIZE];
  187. typedef FLOAT      F32[32];
  188. typedef FLOAT      F2_32[2][32];
  189. typedef FLOAT      FCB[CBANDS];
  190. typedef FLOAT      FCBCB[CBANDS][CBANDS];
  191. typedef FLOAT      FBLK[BLKSIZE];
  192. typedef FLOAT      FHBLK[HBLKSIZE];
  193. typedef FLOAT      F2HBLK[2][HBLKSIZE];
  194. typedef FLOAT      F22HBLK[2][2][HBLKSIZE];
  195. typedef double     DCB[CBANDS];
  196. /***********************************************************************
  197. *
  198. *  Encoder Variable External Declarations
  199. *
  200. ***********************************************************************/
  201. #ifdef MS_DOS
  202. /* extern unsigned _stklen = 16384; */ /* removed, 92-07-13 sr */
  203. #endif
  204. /***********************************************************************
  205. *
  206. *  Encoder Function Prototype Declarations
  207. *
  208. ***********************************************************************/
  209. /* The following functions are in the file "musicin.c" */
  210. extern
  211. void
  212. obtain_parameters(
  213. frame_params *fr_ps,
  214. int *psy,
  215. long unsigned int *num_samples,
  216. long unsigned int *num_samples_ml,
  217. char *original_file_name,
  218. char *encoded_file_name,
  219. IFF_AIFF *pcm_aiff_data,
  220. IFF_AIFF *pcm_aiff_data_ml,
  221. int *aiff,
  222. int *byte_per_sample,
  223. int  *mat_mode,
  224. int  *aug_mat_mode,
  225. int *cha_sw,
  226. int *aug_cha_sw,
  227. char *encoded_file_name_ext,
  228. int *bit_rate,
  229. char *encoded_file_name_mpg,
  230. int *dyn_cross,
  231. int *dyn_cross_LR,
  232. int *aug_dyn_cross,
  233. int                     *ancillaryUse,
  234. int *verbosity
  235. );
  236. extern
  237. void
  238. parse_args(
  239. int argc,
  240. char **argv,
  241. frame_params *fr_ps,
  242. int *psy,
  243. long unsigned int *num_samples,
  244. long unsigned int *num_samples_ml,
  245. char *original_file_name,
  246. char *encoded_file_name,
  247. IFF_AIFF *pcm_aiff_data,
  248. IFF_AIFF *pcm_aiff_data_ml,
  249. int *aiff,
  250. int *byte_per_sample,
  251. int  *mat_mode,
  252. int  *aug_mat_mode,
  253. int *cha_sw,
  254. int *aug_cha_sw,
  255. char *encoded_file_name_ext,
  256. int *bit_rate,
  257. char *encoded_file_name_mpg,
  258. int *dyn_cross,
  259. int *dyn_cross_LR,
  260. int *aug_dyn_cross,
  261. int                     *ancillaryUse,
  262. int *verbosity
  263. );
  264. extern void   print_config(frame_params *fr_ps, int *psy, long unsigned int *num_samples, char *inPath, char *outPath, int *aiff);
  265. static void   usage();
  266. extern void   aiff_check(char *file_name, IFF_AIFF *pcm_aiff_data);
  267. /* The following functions are in the file "encode.c" */
  268. extern unsigned long  read_samples (FILE *musicin,
  269.     long int *sample_buffer,
  270.     long unsigned int num_samples,
  271.     long unsigned int frame_size,
  272.     int *byte_per_sample,
  273.     int *aiff);
  274. extern
  275. unsigned long
  276. get_audio (
  277. FILE *musicin,
  278. double (*buffer)[1152],
  279. long unsigned int num_samples,
  280. int stereo,
  281. IFF_AIFF *aiff_ptr,
  282. int stereomc,
  283. int stereoaug,
  284. frame_params *fr_ps,
  285. int *aiff,
  286. int *byte_per_sample,
  287. double (*buffer_matr)[1152]
  288. );
  289. extern void     normalizing (double (*sb_sample)[3][12][SBLIMIT], frame_params *fr_ps);
  290. #ifdef Augmentation_7ch
  291. extern void     normalizing_aug (double (*sb_sample)[3][12][SBLIMIT], frame_params *fr_ps);
  292. #endif
  293. extern void     matricing (double (*sb_sample)[3][12][SBLIMIT], frame_params *fr_ps);
  294. #ifdef Augmentation_7ch
  295. extern void     matricing_aug (double (*sb_sample)[3][12][SBLIMIT], frame_params *fr_ps);
  296. #endif
  297. extern void        read_ana_window (double *ana_win);
  298. extern void        window_subband (double **buffer, double *z, int k);
  299. extern void        create_ana_filter (double (*filter)[64]);
  300. extern void        filter_subband (double *z, double *s);
  301. extern void        encode_info (frame_params *fr_ps, Bit_stream_struc *bs);
  302. extern void        encode_info_mc1 (frame_params *fr_ps, Bit_stream_struc *bs);
  303. extern void        encode_info_mc2 (frame_params *fr_ps, Bit_stream_struc *bs);
  304. #ifdef Augmentation_7ch
  305. extern void        encode_info_aug (frame_params *fr_ps, Bit_stream_struc *bs);
  306. #endif
  307. extern void        encode_info_ext1 (frame_params *fr_ps, Bit_stream_struc *bs_ext);
  308. extern void        encode_info_ext2 (frame_params *fr_ps, Bit_stream_struc *bs_ext, unsigned int crc);
  309. extern double      mod (double a);
  310. extern void        I_combine_LR (double (*sb_sample)[3][12][SBLIMIT], double (*joint_sample)[3][12][SBLIMIT]);
  311. extern void     II_combine_LR (double (*sb_sample)[3][12][SBLIMIT], double (*joint_sample)[3][12][SBLIMIT],
  312.     int sblimit);
  313. extern void        I_scale_factor_calc (double (*sb_sample)[3][12][SBLIMIT], unsigned int (*scalar)[3][SBLIMIT],
  314.     int stereo);
  315. extern void     II_scale_factor_calc (frame_params *fr_ps, double (*sb_sample)[3][12][SBLIMIT],
  316. unsigned int (*scalar)[3][SBLIMIT], int sblimit, int l, int m);
  317. extern void     II_scale_factor_calc1 (double (*sb_sample)[3][12][SBLIMIT], unsigned int (*scalar)[3][SBLIMIT],
  318. int sblimit, int dim);
  319. extern void        pick_scale (unsigned int (*scalar)[3][SBLIMIT], frame_params *fr_ps, double (*max_sc)[SBLIMIT],
  320. int cha_sw, int aug_cha_sw, int aiff);
  321. extern void        put_scale (unsigned int (*scalar)[3][SBLIMIT], frame_params *fr_ps, double (*max_sc)[SBLIMIT]);
  322. extern void        II_transmission_pattern (unsigned int (*scalar)[3][SBLIMIT], unsigned int (*scfsi)[SBLIMIT],
  323. frame_params *fr_ps);
  324. extern void II_encode_scale (unsigned int (*bit_alloc)[SBLIMIT],
  325.      unsigned int (*scfsi)[SBLIMIT],
  326.      unsigned int (*scalar)[3][SBLIMIT],
  327.      unsigned int lfe_alloc, 
  328.      unsigned int lfe_scalar, 
  329.      frame_params *fr_ps,
  330.      Bit_stream_struc *bs,
  331.      int *l,
  332.      int *z);
  333. extern void        I_encode_scale (unsigned int (*scalar)[3][SBLIMIT], unsigned int (*bit_alloc)[SBLIMIT],
  334.     frame_params *fr_ps, Bit_stream_struc *bs);
  335. extern int         II_bits_for_nonoise (double (*perm_smr)[SBLIMIT], unsigned int (*scfsi)[SBLIMIT],
  336.     frame_params *fr_ps, int a, int b, int *aiff);
  337. extern void    II_main_bit_allocation (double (*perm_smr)[SBLIMIT],
  338.    double (*ltmin)[SBLIMIT],
  339.    unsigned int (*scfsi)[SBLIMIT],
  340.    unsigned int (*bit_alloc)[SBLIMIT],
  341.    int *adb,
  342.    frame_params *fr_ps,
  343.    int *aiff,
  344.    double (*sb_sample)[3][12][SBLIMIT],
  345.    unsigned int (*scalar)[3][SBLIMIT],
  346.    double (*max_sc)[SBLIMIT],
  347.    double (*buffer)[1152],
  348.    double (*spiki)[SBLIMIT],
  349.    double (*joint_sample)[3][12][SBLIMIT],
  350.    unsigned int (*j_scale)[3][SBLIMIT], 
  351.    int dyn_cr, 
  352.    int aug_dyn_cr, 
  353.    unsigned int (*scfsi_dyn)[SBLIMIT], 
  354.    unsigned int (*scalar_dyn)[3][SBLIMIT]);
  355. extern int         II_a_bit_allocation (double (*perm_smr)[SBLIMIT],
  356. unsigned int (*scfsi)[SBLIMIT],
  357. unsigned int (*bit_alloc)[SBLIMIT],
  358. int *adb,
  359. frame_params *fr_ps,
  360. int *aiff);
  361. extern int         I_bits_for_nonoise (double (*perm_smr)[SBLIMIT], frame_params *fr_ps);
  362. extern void        I_main_bit_allocation (double (*perm_smr)[SBLIMIT], unsigned int (*bit_alloc)[SBLIMIT],
  363.   int *adb, frame_params *fr_ps);
  364. extern int         I_a_bit_allocation (double (*perm_smr)[SBLIMIT], unsigned int (*bit_alloc)[SBLIMIT],
  365.        int *adb, frame_params *fr_ps);
  366. extern void        I_subband_quantization (unsigned int (*scalar)[3][SBLIMIT],
  367.    double (*sb_samples)[3][12][SBLIMIT],
  368.    unsigned int (*j_scale)[3][SBLIMIT],
  369.    double (*j_samps)[3][12][SBLIMIT],
  370.    unsigned int (*bit_alloc)[SBLIMIT],
  371.    unsigned int (*sbband)[3][12][SBLIMIT],
  372.    frame_params *fr_ps);
  373. extern void        II_subband_quantization (unsigned int (*scalar)[3][SBLIMIT],
  374.     double (*sb_samples)[3][12][SBLIMIT],
  375.     unsigned int (*j_scale)[3][SBLIMIT],
  376.     double (*j_samps)[3][12][SBLIMIT],
  377.     unsigned int (*bit_alloc)[SBLIMIT],
  378.     unsigned int (*sbband)[3][12][SBLIMIT],
  379.     frame_params *fr_ps);
  380. extern void        II_subband_quantization_mc (unsigned int (*scalar)[3][SBLIMIT],
  381.        double (*sb_samples)[3][12][SBLIMIT],
  382.        unsigned int (*j_scale)[3][SBLIMIT],
  383.        double (*j_samps)[3][12][SBLIMIT],
  384.        unsigned int (*bit_alloc)[SBLIMIT],
  385.        unsigned int (*sbband)[3][12][SBLIMIT],
  386.        frame_params *fr_ps);
  387. #ifdef Augmentation_7ch
  388. extern void        II_subband_quantization_aug (unsigned int (*scalar)[3][SBLIMIT],
  389. double (*sb_samples)[3][12][SBLIMIT],
  390. unsigned int (*j_scale)[3][SBLIMIT],
  391. double (*j_samps)[3][12][SBLIMIT],
  392. unsigned int (*bit_alloc)[SBLIMIT],
  393. unsigned int (*sbband)[3][12][SBLIMIT],
  394. frame_params *fr_ps);
  395. #endif
  396. extern void        I_encode_bit_alloc (unsigned int (*bit_alloc)[SBLIMIT], frame_params *fr_ps, Bit_stream_struc *bs);
  397. extern void        II_encode_bit_alloc (unsigned int (*bit_alloc)[SBLIMIT], frame_params *fr_ps, Bit_stream_struc *bs);
  398. extern void        II_encode_bit_alloc_mc (unsigned int (*bit_alloc)[SBLIMIT], frame_params *fr_ps, Bit_stream_struc *bs);
  399. #ifdef Augmentation_7ch
  400. extern void        II_encode_bit_alloc_aug (unsigned int (*bit_alloc)[SBLIMIT], frame_params *fr_ps, Bit_stream_struc *bs);
  401. #endif
  402. extern void        I_sample_encoding (unsigned int (*sbband)[3][12][SBLIMIT],
  403.       unsigned int (*bit_alloc)[SBLIMIT],
  404.       frame_params *fr_ps,
  405.       Bit_stream_struc *bs);
  406. extern void        II_sample_encoding (unsigned int (*sbband)[3][12][SBLIMIT],
  407.        unsigned int (*bit_alloc)[SBLIMIT],
  408.        frame_params *fr_ps,
  409.        Bit_stream_struc *bs);
  410. extern void        II_sample_encoding_mc (unsigned int (*sbband)[3][12][SBLIMIT],
  411.   unsigned int lfe_sbband[12],
  412.   unsigned int (*bit_alloc)[SBLIMIT],
  413.   unsigned int lfe_alloc,
  414.   frame_params *fr_ps,
  415.   Bit_stream_struc *bs);
  416. #ifdef Augmentation_7ch
  417. extern void        II_sample_encoding_aug (unsigned int (*sbband)[3][12][SBLIMIT],
  418.    unsigned int (*bit_alloc)[SBLIMIT],
  419.    frame_params *fr_ps,
  420.    Bit_stream_struc *bs);
  421. #endif
  422. extern void        encode_CRC (unsigned int crc, Bit_stream_struc *bs);
  423. extern void    ancillary_encode (frame_params*,Bit_stream_struc*,int);
  424. extern void    matricing_fft (double (*buffer)[1152], double (*buffer_matr)[1152], frame_params *fr_ps);
  425. #ifdef Augmentation_7ch
  426. extern void    matricing_aug_fft (double (*buffer)[1152], double (*buffer_matr)[1152], frame_params *fr_ps);
  427. #endif
  428. extern void        tc_alloc (frame_params *fr_ps, double (*max_sc)[SBLIMIT]);
  429. extern int         II_bits_for_indi (double (*perm_smr)[SBLIMIT], unsigned int (*scfsi)[SBLIMIT], frame_params *fr_ps, int *a, int *b, int *aiff);
  430. extern int         required_bits ();
  431. extern int         max_alloc ();
  432.  
  433. /* The following functions are in the file "tonal.c" */
  434. extern void        read_cbound(int lay, int freq, int crit_band, int *cbound);
  435. extern void        read_freq_band(int *sub_size, g_ptr *ltg, int lay, int freq);
  436. extern void        make_map(int sub_size, mask *power, g_thres *ltg);
  437. extern double      add_db(double a, double b);
  438. extern void        II_f_f_t(double *sample, mask *power);
  439. extern void        II_hann_win(double *sample);
  440. extern void        II_pick_max(mask *power, double *spike);
  441. extern void        II_tonal_label(mask *power, int *tone);
  442. extern void        noise_label(int crit_band, int *cbound, mask *power, int *noise, g_thres *ltg);
  443. extern void        subsampling(mask *power, g_thres *ltg, int *tone, int *noise);
  444. extern void        threshold(int sub_size, mask *power, g_thres *ltg, int *tone, int *noise, int bit_rate);
  445. extern void        II_minimum_mask(int sub_size, g_thres *ltg, double *ltmin, int sblimit);
  446. extern void        II_smr(double *ltmin, double *smr, double *spike, double *scale, int sblimit, int l, int m);
  447. extern void        II_Psycho_One(double (*buffer)[1152], double (*scale)[SBLIMIT], double (*ltmin)[SBLIMIT], frame_params *fr_ps, double (*smr)[SBLIMIT], double (*spiki)[SBLIMIT], int aiff);
  448. extern void        I_f_f_t(double *sample, mask *power);
  449. extern void        I_hann_win(double *sample);
  450. extern void        I_pick_max(mask *power, double *spike);
  451. extern void        I_tonal_label(mask *power, int *tone);
  452. extern void        I_minimum_mask(int sub_size, g_thres *ltg, double *ltmin);
  453. extern void        I_smr(double *ltmin, double *spike, double *scale);
  454. extern void        I_Psycho_One(double (*buffer)[1152], double (*scale)[SBLIMIT], double (*ltmin)[SBLIMIT], frame_params *fr_ps);
  455. extern double      non_lin_add(double a, double b, double c);
  456. /* The following functions are in the file "psy.c" */
  457. extern void        psycho_anal(double *buffer, short int *savebuf, int chn, int lay, float *snrSBLIMIT, double sfreq);
  458. extern void        read_absthr(float *absthr, long int table);
  459. /* The following functions are in the file "subs.c" */
  460. extern void        fft(float *x_real, float *x_imag, float *energy, float *phi);
  461. /* The following functions are in the file "predisto.c" */
  462. void matri (
  463. double (*sbs_sample)[3][12][SBLIMIT],
  464. frame_params *fr_ps,
  465. double (*sb_sample)[3][12][SBLIMIT],
  466. unsigned int (*scalar)[3][SBLIMIT],
  467. int sblimit,
  468. unsigned int (*scfsi)[SBLIMIT],
  469. unsigned int (*scfsi_dyn)[SBLIMIT],
  470. unsigned int (*bit_alloc)[SBLIMIT],
  471. unsigned int (*subband)[3][12][SBLIMIT]
  472. );
  473. void trans_pattern (
  474. unsigned int (*scalar)[3][SBLIMIT],
  475. unsigned int (*scfsi)[SBLIMIT],
  476. frame_params *fr_ps,
  477. unsigned int (*scfsi_dyn)[SBLIMIT]
  478. );
  479. void pre_quant (
  480. double (*sbs_sample)[3][12][SBLIMIT],
  481. int l,
  482. int m,
  483. double (*sb_sample)[3][12][SBLIMIT],
  484. unsigned int (*scalar)[3][SBLIMIT],
  485. unsigned int (*bit_alloc)[SBLIMIT],
  486. unsigned int (*subband)[3][12][SBLIMIT],
  487. frame_params *fr_ps
  488. );
  489. void II_dequantize_sample (
  490. unsigned int (*sample)[3][SBLIMIT],
  491. unsigned int (*bit_alloc)[SBLIMIT],
  492. double (*fraction)[3][12][SBLIMIT],
  493. frame_params *fr_ps,
  494. int l,
  495. int m,
  496. int z
  497. );
  498. void II_denormalize_sample (
  499. double (*fraction)[3][12][SBLIMIT],
  500. unsigned int (*scale_index)[3][SBLIMIT],
  501. frame_params *fr_ps,
  502. int x,
  503. int l,
  504. int m,
  505. int z
  506. );
  507. void scale_factor_calc (
  508. unsigned int (*scalar)[3][SBLIMIT],
  509. int sblimit,
  510. int l,
  511. int m,
  512. int z,
  513. double (*sb_sample)[3][12][SBLIMIT]
  514. );
  515. void predistortion (
  516.     double (*sb_sample)[3][12][32], 
  517.     unsigned int (*scalar)[3][32], 
  518.     unsigned int (*bit_alloc)[32], 
  519.     unsigned int (*subband)[3][12][32], 
  520.     frame_params *fr_ps, 
  521.     double (*perm_smr)[32], 
  522.     unsigned int (*scfsi)[32], 
  523.     int *adb, 
  524.     unsigned int (*scfsi_dyn)[32]
  525.     );
  526. /* The following functions are in the file "dyn_cross.c" */
  527. void take_dyn_cross (
  528. int dyn_cr,
  529. frame_params *fr_ps,       
  530. double sb_sample_sum[5][3][SCALE_BLOCK][SBLIMIT],      
  531.      unsigned int scalar_sum[][3][SBLIMIT], 
  532. unsigned int scfsi_sum[][SBLIMIT],  
  533. unsigned int scfsi_dyn[][SBLIMIT],  
  534. double sb_sample[CHANMAX3][3][SCALE_BLOCK][SBLIMIT],
  535. unsigned int scalar[][3][SBLIMIT], 
  536. unsigned int scfsi[][SBLIMIT]
  537. );
  538. #ifdef Augmentation_7ch
  539. void take_dyn_cross_aug (
  540. int aug_dyn_cr,
  541. frame_params *fr_ps,       
  542. double sb_sample_sum[5][3][SCALE_BLOCK][SBLIMIT],      
  543.      unsigned int scalar_sum[][3][SBLIMIT], 
  544. unsigned int scfsi_sum[][SBLIMIT],  
  545. unsigned int scfsi_dyn[][SBLIMIT],  
  546. double sb_sample[CHANMAX3][3][SCALE_BLOCK][SBLIMIT],
  547. unsigned int scalar[][3][SBLIMIT], 
  548. unsigned int scfsi[][SBLIMIT]
  549. );
  550. #endif
  551. void trans_chan (frame_params *fr_ps);
  552. #ifdef Augmentation_7ch
  553. void trans_chan_aug (frame_params *fr_ps);
  554. #endif
  555.  
  556. void combine (frame_params *fr_ps, double sb_sample[CHANMAX3][3][SCALE_BLOCK][SBLIMIT],
  557.       double sb_sample_sum[5][3][SCALE_BLOCK][SBLIMIT]);
  558. #ifdef Augmentation_7ch
  559. void combine_aug (frame_params *fr_ps, double sb_sample[CHANMAX3][3][SCALE_BLOCK][SBLIMIT],
  560.   double sb_sample_sum[5][3][SCALE_BLOCK][SBLIMIT]);
  561. #endif
  562. void dyn_bal (
  563. unsigned int scfsi[CHANMAX3][SBLIMIT],  
  564. int sbgr,     
  565. frame_params *fr_ps,
  566. int min_ch,     
  567. int min_sb,    
  568. int *seli,     
  569. int *scale
  570. );
  571. #ifdef Augmentation_7ch
  572. void dyn_bal_aug (
  573. unsigned int scfsi[CHANMAX3][SBLIMIT],  
  574. int sbgr,     
  575. frame_params *fr_ps,
  576. int min_ch,     
  577. int min_sb,    
  578. int *seli,     
  579. int *scale
  580. );
  581. #endif
  582. void choose_dyn (
  583. frame_params *fr_ps, 
  584. int min_ch,
  585. int min_sb,
  586. int sbgr, 
  587. unsigned int bit_alloc[CHANMAX3][SBLIMIT]
  588. );
  589.     
  590. #ifdef Augmentation_7ch
  591. void choose_dyn_aug (
  592. frame_params *fr_ps, 
  593. int min_ch,
  594. int min_sb,
  595. int sbgr, 
  596. unsigned int bit_alloc[CHANMAX3][SBLIMIT]
  597. );
  598. #endif
  599.     
  600. void scfsi_calc_dyn (
  601. unsigned int scalar_dyn[][3][SBLIMIT],   
  602. int ch,      
  603. int sblimit,     
  604. unsigned int scfsi_dyn[][SBLIMIT]
  605. );
  606.       
  607. void scfsi_calc (
  608. unsigned int scalar[][3][SBLIMIT], 
  609. int ch, 
  610. int sblimit,
  611. unsigned int scfsi[][SBLIMIT]
  612. );
  613.  
  614. void scf_calc (
  615. double sample[][3][SCALE_BLOCK][SBLIMIT], 
  616. int sblimit,
  617. int ch,
  618. unsigned int scf[][3][SBLIMIT]
  619. );
  620. /* The following functions are in the file "lfe.c" */
  621. extern void        lfe_filter(double**,double[12]);
  622. extern void        lf_scalefactor(double[12],unsigned int*);
  623. extern void        II_encode_lfe_scale(unsigned int, Bit_stream_struc*);
  624. extern void        lfe_allocation(unsigned int*,int*);
  625. extern void        II_lfe_quantisation(unsigned int,double[12],
  626.                                        unsigned int, unsigned int[12],
  627.                                        frame_params*);
  628. extern void        II_encode_lfe_alloc(unsigned int, frame_params*, Bit_stream_struc*);
  629. extern void        II_lfe_sample_encoding(unsigned int[12],
  630.                                        unsigned int, frame_params*,
  631.                                        Bit_stream_struc*);