home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 13 / AACD13.ISO / AACD / Sound / LAME / src / util.h < prev    next >
C/C++ Source or Header  |  2000-08-06  |  12KB  |  418 lines

  1. #ifndef UTIL_DOT_H
  2. #define UTIL_DOT_H
  3. /***********************************************************************
  4. *
  5. *  Global Include Files
  6. *
  7. ***********************************************************************/
  8. #include "machine.h"
  9. #include "encoder.h"
  10. #include "lame.h"
  11. #include "gtkanal.h"
  12.  
  13. /***********************************************************************
  14. *
  15. *  Global Definitions
  16. *
  17. ***********************************************************************/
  18.  
  19. /* General Definitions */
  20. #ifndef FALSE
  21. #define         FALSE                   0
  22. #endif
  23.  
  24. #ifndef TRUE
  25. #define         TRUE                    1
  26. #endif
  27.  
  28. #define         MAX_U_32_NUM            0xFFFFFFFF
  29.  
  30. #ifndef PI
  31. # ifdef M_PI
  32. #  define       PI                      M_PI
  33. # else
  34. #  define       PI                      3.14159265358979323846
  35. # endif
  36. #endif
  37.  
  38.  
  39. #ifdef M_LN2
  40. # define        LOG2                    M_LN2
  41. #else
  42. # define        LOG2                    0.69314718055994530942
  43. #endif
  44.  
  45. #ifdef M_LN10
  46. # define        LOG10                   M_LN10
  47. #else
  48. # define        LOG10                   2.30258509299404568402
  49. #endif
  50.  
  51.  
  52. #ifdef M_SQRT2
  53. # define        SQRT2                   M_SQRT2
  54. #else
  55. # define        SQRT2                   1.41421356237309504880
  56. #endif
  57.  
  58.  
  59. #define         BITS_IN_A_BYTE          8
  60. #define         HAN_SIZE                512
  61. #define         CRC16_POLYNOMIAL        0x8005
  62.  
  63. /* MPEG Header Definitions - Mode Values */
  64.  
  65. #define         MPG_MD_STEREO           0
  66. #define         MPG_MD_JOINT_STEREO     1
  67. #define         MPG_MD_DUAL_CHANNEL     2
  68. #define         MPG_MD_MONO             3
  69.  
  70. /* Mode Extention */
  71.  
  72. #define         MPG_MD_LR_LR             0
  73. #define         MPG_MD_LR_I              1
  74. #define         MPG_MD_MS_LR             2
  75. #define         MPG_MD_MS_I              3
  76.  
  77.  
  78. /* "bit_stream.h" Definitions */
  79.  
  80. #define         MINIMUM         4    /* Minimum size of the buffer in bytes */
  81. #define         MAX_LENGTH      32   /* Maximum length of word written or
  82.                                         read from bit stream */
  83. #define         BUFFER_SIZE     LAME_MAXMP3BUFFER 
  84.  
  85. #define         Min(A, B)       ((A) < (B) ? (A) : (B))
  86. #define         Max(A, B)       ((A) > (B) ? (A) : (B))
  87.  
  88.  
  89.  
  90. /***********************************************************************
  91. *
  92. *  Global Variable External Declarations
  93. *
  94. ***********************************************************************/
  95.  
  96. extern int      bitrate_table[2][15];
  97.  
  98.  
  99.  
  100. /***********************************************************************
  101. *
  102. *  Global Type Definitions
  103. *
  104. ***********************************************************************/
  105.  
  106. /* Structure for Reading Layer II Allocation Tables from File */
  107.  
  108. typedef struct {
  109.     unsigned int    steps;
  110.     unsigned int    bits;
  111.     unsigned int    group;
  112.     unsigned int    quant;
  113. } sb_alloc, *alloc_ptr;
  114.  
  115. typedef sb_alloc        al_table[SBLIMIT][16]; 
  116.  
  117.  
  118.  
  119.  
  120. enum byte_order { order_unknown, order_bigEndian, order_littleEndian };
  121. extern enum byte_order NativeByteOrder;
  122.  
  123. /* "bit_stream.h" Type Definitions */
  124.  
  125. typedef struct  bit_stream_struc {
  126.     unsigned char *buf;         /* bit stream buffer */
  127.     int         buf_size;       /* size of buffer (in number of bytes) */
  128.     unsigned long        totbit;         /* bit counter of bit stream */
  129.     int         buf_byte_idx;   /* pointer to top byte in buffer */
  130.     int         buf_bit_idx;    /* pointer to top bit of top byte in buffer */
  131.     
  132.     /* format of file in rd mode (BINARY/ASCII) */
  133. } Bit_stream_struc;
  134.  
  135. #include "l3side.h"
  136.  
  137.  
  138. typedef struct  {
  139.   /********************************************************************/
  140.   /* internal variables NOT set by calling program, and should not be */
  141.   /* modified by the calling program                                  */
  142.   /********************************************************************/
  143.   int lame_init_params_init;      /* was lame_init_params called? */
  144.   int lame_encode_frame_init;     
  145.   int iteration_init_init;
  146.   int fill_buffer_downsample_init;
  147.   int fill_buffer_upsample_init;
  148.   int mdct_sub48_init;
  149.   int psymodel_init;
  150.  
  151.   int padding;                    /* padding for the current frame? */
  152.   int mode_gr;                    /* granules per frame */
  153.   int stereo;                     /* number of channels */
  154.   int VBR_min_bitrate;            /* min bitrate index */
  155.   int VBR_max_bitrate;            /* max bitrate index */
  156.   float resample_ratio;           /* input_samp_rate/output_samp_rate */
  157.   int bitrate_index;
  158.   int samplerate_index;
  159.   int mode_ext;
  160.  
  161.  
  162.   /* lowpass and highpass filter control */
  163.   float lowpass1,lowpass2;        /* normalized frequency bounds of passband */
  164.   float highpass1,highpass2;      /* normalized frequency bounds of passband */
  165.                                   
  166.   /* polyphase filter (filter_type=0)  */
  167.   int lowpass_band;          /* zero bands >= lowpass_band in the polyphase filterbank */
  168.   int highpass_band;         /* zero bands <= highpass_band */
  169.   int lowpass_start_band;    /* amplify bands between start */
  170.   int lowpass_end_band;      /* and end for lowpass */
  171.   int highpass_start_band;   /* amplify bands between start */
  172.   int highpass_end_band;     /* and end for highpass */
  173.  
  174.  
  175.   int filter_type;          /* 0=polyphase filter, 1= FIR filter 2=MDCT filter(bad)*/
  176.   int quantization;         /* 0 = ISO formual,  1=best amplitude */
  177.   int noise_shaping;        /* 0 = none 
  178.                                1 = ISO AAC model
  179.                                2 = allow scalefac_select=1  
  180.                              */
  181.  
  182.   int noise_shaping_stop;   /* 0 = stop at over=0, all scalefacs amplified or
  183.                                    a scalefac has reached max value
  184.                                1 = stop when all scalefacs amplified or        
  185.                                    a scalefac has reached max value
  186.                                2 = stop when all scalefacs amplified 
  187.                 */
  188.  
  189.   int psymodel;             /* 0 = none   1=gpsycho */
  190.   int use_best_huffman;     /* 0 = no.  1=outside loop  2=inside loop(slow) */
  191.  
  192.  
  193.  
  194.   /* data set by get_audio.c after reading input file: */
  195.   unsigned long num_samples_read;  
  196.   int count_samples_carefully;
  197.   int input_bitrate;
  198.   int pcmbitwidth;
  199.  
  200.  
  201.  
  202.   /* variables used by lame.c */
  203.   Bit_stream_struc   bs;
  204.   III_side_info_t l3_side;
  205. #define MFSIZE (3*1152+ENCDELAY-MDCTDELAY)
  206.   int mf_size;
  207.   int mf_samples_to_encode;
  208.   short int mfbuf[2][MFSIZE];
  209.   FLOAT8 frac_SpF;
  210.   FLOAT8 slot_lag;
  211.   FLOAT8 ms_ener_ratio[2];
  212.   FLOAT8 ms_ratio[2];
  213.   long remainder;
  214.   long difference;
  215.  
  216.  
  217.   /* variables used by quantize.c */
  218.   int OldValue[2];
  219.   int CurrentStep;
  220.   FLOAT8 ATH_l[SBMAX_l];
  221.   FLOAT8 ATH_s[SBMAX_s];
  222.   FLOAT8 masking_lower;
  223.   FLOAT8 ATH_vbrlower;
  224.  
  225.   char bv_scf[576-2];
  226.  
  227.   /* variables used by util.c */
  228. #define BLACKSIZE 30
  229. #define BPC 16
  230.   short int inbuf_old[2][BLACKSIZE];
  231.   FLOAT blackfilt[2*BPC+1][BLACKSIZE];
  232.   FLOAT8 itime[2];
  233. #define OLDBUFSIZE 5
  234.   FLOAT8 upsample_itime[2];
  235.   short int upsample_inbuf_old[2][OLDBUFSIZE];
  236.   unsigned int sideinfo_len;
  237.  
  238.   /* variables for newmdct.c */
  239.   FLOAT8 sb_sample[2][2][18][SBLIMIT];
  240.   FLOAT8 amp_lowpass[32];
  241.   FLOAT8 amp_highpass[32];
  242.  
  243.   /* variables for bitstream.c */
  244.   /* mpeg1: buffer=511 bytes  smallest frame: 96-38(sideinfo)=58
  245.    * max number of frames in reservoir:  8 
  246.    * mpeg2: buffer=255 bytes.  smallest frame: 24-23bytes=1
  247.    * with VBR, if you are encoding all silence, it is possible to
  248.    * have 8kbs/24khz frames with 1byte of data each, which means we need
  249.    * to buffer up to 255 headers! */
  250.   /* also, max_header_buf has to be a power of two */
  251. #define MAX_HEADER_BUF 256
  252. #define MAX_HEADER_LEN 40 /* max size of header is 38 */
  253.   struct {
  254.     unsigned long write_timing;
  255.     int ptr;
  256.     char buf[MAX_HEADER_LEN];
  257.   } header[MAX_HEADER_BUF];
  258.  
  259.   int h_ptr;
  260.   int w_ptr;
  261.   unsigned int ancillary_flag;
  262.   
  263.  
  264.   /* variables for reservoir.c */
  265.   int ResvSize; /* in bits */
  266.   int ResvMax;  /* in bits */
  267.  
  268.   
  269.   scalefac_struct scalefac_band;
  270.  
  271.  
  272.   /* DATA FROM PSYMODEL.C */
  273. /* The static variables "r", "phi_sav", "new", "old" and "oldest" have    */
  274. /* to be remembered for the unpredictability measure.  For "r" and        */
  275. /* "phi_sav", the first index from the left is the channel select and     */
  276. /* the second index is the "age" of the data.                             */
  277.   FLOAT8    minval[CBANDS];
  278.   FLOAT8    nb_1[4][CBANDS], nb_2[4][CBANDS];
  279.   FLOAT8 s3_s[CBANDS][CBANDS];
  280.   FLOAT8 s3_l[CBANDS][CBANDS];
  281.   FLOAT8 ATH_partitionbands[CBANDS];
  282.  
  283.   III_psy_xmin thm[4];
  284.   III_psy_xmin en[4];
  285.   
  286.   /* unpredictability calculation
  287.    */
  288.   int cw_upper_index;
  289.   int cw_lower_index;
  290.   FLOAT ax_sav[4][2][HBLKSIZE];
  291.   FLOAT bx_sav[4][2][HBLKSIZE];
  292.   FLOAT rx_sav[4][2][HBLKSIZE];
  293.   FLOAT cw[HBLKSIZE];
  294.  
  295.   /* fft and energy calculation    */
  296.   FLOAT wsamp_L[2][BLKSIZE];
  297.   FLOAT energy[HBLKSIZE];
  298.   FLOAT wsamp_S[2][3][BLKSIZE_s];
  299.   FLOAT energy_s[3][HBLKSIZE_s];
  300.  
  301.   
  302.   /* Scale Factor Bands    */
  303.   FLOAT8    w1_l[SBMAX_l], w2_l[SBMAX_l];
  304.   FLOAT8    w1_s[SBMAX_s], w2_s[SBMAX_s];
  305.   FLOAT8 mld_l[SBMAX_l],mld_s[SBMAX_s];
  306.   int    bu_l[SBMAX_l],bo_l[SBMAX_l] ;
  307.   int    bu_s[SBMAX_s],bo_s[SBMAX_s] ;
  308.   int    npart_l,npart_s;
  309.   int    npart_l_orig,npart_s_orig;
  310.   
  311.   int    s3ind[CBANDS][2];
  312.   int    s3ind_s[CBANDS][2];
  313.  
  314.   int    numlines_s[CBANDS];
  315.   int    numlines_l[CBANDS];
  316.   
  317.   /* frame analyzer    */
  318.   FLOAT energy_save[4][HBLKSIZE];
  319.   FLOAT8 pe_save[4];
  320.   FLOAT8 ers_save[4];
  321.  
  322.   /* ratios  */
  323.   FLOAT8 pe[4];
  324.   FLOAT8 ms_ratio_s_old,ms_ratio_l_old;
  325.   FLOAT8 ms_ener_ratio_old;
  326.  
  327.   /* block type */
  328.   int    blocktype_old[2];
  329.  
  330.   /* used by the frame analyzer */
  331.   plotting_data *pinfo;
  332.  
  333.  
  334. } lame_internal_flags;
  335.  
  336.  
  337. /***********************************************************************
  338. *
  339. *  Global Function Prototype Declarations
  340. *
  341. ***********************************************************************/
  342. extern int            fskip(FILE *sf,long num_bytes,int dummy);
  343. extern void           display_bitrates(FILE *out_fh);
  344. extern int            BitrateIndex(int, int,int);
  345. extern int            FindNearestBitrate(int,int,int);
  346. extern long           validSamplerate(long samplerate);
  347. extern int            SmpFrqIndex(long, int*);
  348. extern int            copy_buffer(char *buffer,int buffer_size,Bit_stream_struc *bs);
  349. extern void           init_bit_stream_w(lame_internal_flags *gfc);
  350. extern void           alloc_buffer(Bit_stream_struc*, unsigned int);
  351. extern void           freegfc(lame_internal_flags *gfc);
  352. extern FLOAT8         ATHformula(FLOAT8 f);
  353. extern FLOAT8         freq2bark(FLOAT8 freq);
  354. extern FLOAT8         freq2cbw(FLOAT8 freq);
  355. extern void ireorder(int scalefac_band[],int ix_orig[576]);
  356. extern void iun_reorder(int scalefac_band[],int ix_orig[576]);
  357. extern void freorder(int scalefac_band[],FLOAT8 ix_orig[576]);
  358. extern void fun_reorder(int scalefac_band[],FLOAT8 ix_orig[576]);
  359.  
  360. extern enum byte_order DetermineByteOrder(void);
  361. extern void SwapBytesInWords( short *loc, int words );
  362.  
  363. extern int fill_buffer_downsample(lame_global_flags *gfp,short int *outbuf,int desired_len,
  364.      short int *inbuf,int len,int *num_used,int ch);
  365.  
  366. extern int fill_buffer_upsample(lame_global_flags *gfp,short int *outbuf,int desired_len,
  367.      short int *inbuf,int len,int *num_used,int ch);
  368.  
  369. extern void 
  370. getframebits(lame_global_flags *gfp,int *bitsPerFrame, int *mean_bits);
  371.  
  372.  
  373.  
  374. /***********************************************************************
  375. *
  376. *  Macros about Message Printing and Exit
  377. *
  378. ***********************************************************************/
  379.  
  380. #define LAME_STD_PRINT
  381.  
  382. #ifdef LAME_STD_PRINT
  383. extern void lame_errorf(const char *, ...);
  384.  
  385. #define DEBUGF    printf
  386. #define ERRORF    lame_errorf
  387. #define MSGF    lame_errorf
  388.  
  389. #define FLUSH_DEBUG()    fflush(stdout)
  390. #define FLUSH_ERROR()    fflush(stderr)
  391. #define FLUSH_MSG()    fflush(stderr)
  392.  
  393. /* for displaying version, help strings, and bitrates */
  394. #define PRINTF1        printf
  395. #define PRINTF2        lame_errorf
  396. #define DISPLAY_BITRATES1()    display_bitrates(stdout)
  397. #define DISPLAY_BITRATES2()    display_bitrates(stderr)
  398.   /* need version.h */
  399. #define LAME_PRINT_VERSION1()    lame_print_version(stdout)
  400. #define LAME_PRINT_VERSION2()    lame_print_version(stderr)
  401. #endif
  402.  
  403.  
  404. #define LAME_EXIT(n)        exit(n)
  405. #define LAME_NORMAL_EXIT()    exit(0)
  406. #define LAME_ERROR_EXIT()    exit(1)
  407. #define LAME_FATAL_EXIT()    exit(2)
  408.  
  409.  
  410.  
  411.  
  412. #endif
  413.  
  414.  
  415.  
  416.  
  417.  
  418.