home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / Sound / LAME / Source / common.h < prev    next >
C/C++ Source or Header  |  1999-06-02  |  9KB  |  296 lines

  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: common.h,v 1.1 1996/02/14 04:04:23 rowlands Exp $
  6.  *
  7.  * $Log: common.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. #ifndef COMMON_DOT_H
  15. #define COMMON_DOT_H
  16. /***********************************************************************
  17. *
  18. *  Global Conditional Compile Switches
  19. *
  20. ***********************************************************************/
  21.  
  22. #if 0
  23. #define      CONVEX          /* CONVEX conditional compile switch */
  24. #endif
  25.  
  26. /* 
  27.  * Don't define FAR to far unless you're willing to clean up the 
  28.  * prototypes
  29.  */
  30. #define FAR /*far*/
  31.  
  32. #ifdef CONVEX
  33. #define SEEK_SET        0
  34. #define SEEK_CUR        1
  35. #define SEEK_END        2
  36. #endif
  37.  
  38.  
  39. /***********************************************************************
  40. *
  41. *  Global Include Files
  42. *
  43. ***********************************************************************/
  44.  
  45. #include        <stdio.h>
  46. #include        <string.h>
  47. #include        <math.h>
  48. #include "portableio.h"
  49. #include "ieeefloat.h"
  50.  
  51. /*#include        <unistd.h>*/
  52. #include        <stdlib.h>
  53.  
  54. #ifndef EXIT_SUCCESS
  55. #define EXIT_SUCCESS 0
  56. #endif
  57.  
  58. #ifndef EXIT_FAILURE
  59. #define EXIT_FAILURE 1
  60. #endif
  61.  
  62. /***********************************************************************
  63. *
  64. *  Global Definitions
  65. *
  66. ***********************************************************************/
  67.  
  68. /* General Definitions */
  69.  
  70. #define         FLOAT                   float
  71.  
  72. #ifndef FALSE
  73. #define         FALSE                   0
  74. #endif
  75.  
  76. #ifndef TRUE
  77. #define         TRUE                    1
  78. #endif
  79.  
  80. #define         NULL_CHAR               '\0'
  81.  
  82. #define         MAX_U_32_NUM            0xFFFFFFFF
  83. #ifndef PI
  84. #define         PI                      3.14159265358979
  85. #endif
  86. #define         PI4                     PI/4
  87. #define         PI64                    PI/64
  88. #define         LN_TO_LOG10             0.2302585093
  89.  
  90. #define         VOL_REF_NUM             0
  91. #define         MPEG_AUDIO_ID           1
  92. #define        MPEG_PHASE2_LSF        0    /* 1995-07-11 SHN */
  93. #define         MAC_WINDOW_SIZE         24
  94.  
  95. #define         MONO                    1
  96. #define         STEREO                  2
  97. #define         BITS_IN_A_BYTE          8
  98. #define         MAX_NAME_SIZE           300
  99. #define         SBLIMIT                 32
  100. #define         SSLIMIT                 18
  101. #define         FFT_SIZE                1024
  102. #define         HAN_SIZE                512
  103. #define         SCALE_BLOCK             12
  104. #define         SCALE_RANGE             64
  105. #define         SCALE                   32768
  106. #define         CRC16_POLYNOMIAL        0x8005
  107.  
  108. /* MPEG Header Definitions - Mode Values */
  109.  
  110. #define         MPG_MD_STEREO           0
  111. #define         MPG_MD_JOINT_STEREO     1
  112. #define         MPG_MD_DUAL_CHANNEL     2
  113. #define         MPG_MD_MONO             3
  114.  
  115. /* Mode Extention */
  116.  
  117. #define         MPG_MD_LR_LR             0
  118. #define         MPG_MD_LR_I              1
  119. #define         MPG_MD_MS_LR             2
  120. #define         MPG_MD_MS_I              3
  121.  
  122.  
  123. /* "bit_stream.h" Definitions */
  124.  
  125. #define         MINIMUM         4    /* Minimum size of the buffer in bytes */
  126. #define         MAX_LENGTH      32   /* Maximum length of word written or
  127.                                         read from bit stream */
  128. #define         READ_MODE       0
  129. #define         WRITE_MODE      1
  130. #define         ALIGNING        8
  131. #define         BINARY          0
  132. #define         ASCII           1
  133.  
  134. #ifndef BS_FORMAT
  135. /* #define         BS_FORMAT       ASCII  */ /* BINARY or ASCII = 2x bytes */
  136. #define         BS_FORMAT       BINARY
  137. #endif
  138.  
  139. #define         BUFFER_SIZE     16384
  140.  
  141. #define         Min(A, B)       ((A) < (B) ? (A) : (B))
  142. #define         Max(A, B)       ((A) > (B) ? (A) : (B))
  143.  
  144. /***********************************************************************
  145. *
  146. *  Global Type Definitions
  147. *
  148. ***********************************************************************/
  149.  
  150. /* Structure for Reading Layer II Allocation Tables from File */
  151.  
  152. typedef struct {
  153.     unsigned int    steps;
  154.     unsigned int    bits;
  155.     unsigned int    group;
  156.     unsigned int    quant;
  157. } sb_alloc, *alloc_ptr;
  158.  
  159. typedef sb_alloc        al_table[SBLIMIT][16];
  160.  
  161. /* Header Information Structure */
  162.  
  163. typedef struct {
  164.     int version;
  165.     int lay;
  166.     int error_protection;
  167.     int bitrate_index;
  168.     int sampling_frequency;
  169.     int padding;
  170.     int extension;
  171.     int mode;
  172.     int mode_ext;
  173.     int copyright;
  174.     int original;
  175.     int emphasis;
  176. } layer, *the_layer;
  177.  
  178. /* Parent Structure Interpreting some Frame Parameters in Header */
  179.  
  180. typedef struct {
  181.     layer       *header;        /* raw header information */
  182.     int         actual_mode;    /* when writing IS, may forget if 0 chs */
  183.     al_table    *alloc;         /* bit allocation table read in */
  184.     int         tab_num;        /* number of table as loaded */
  185.     int         stereo;         /* 1 for mono, 2 for stereo */
  186.     int         jsbound;        /* first band of joint stereo coding */
  187.     int         sblimit;        /* total number of sub bands */
  188. } frame_params;
  189.  
  190.  
  191. /* AIFF Definitions */
  192.  
  193. #define IFF_ID_FORM 0x464f524d /* "FORM" */
  194. #define IFF_ID_AIFF 0x41494646 /* "AIFF" */
  195. #define IFF_ID_COMM 0x434f4d4d /* "COMM" */
  196. #define IFF_ID_SSND 0x53534e44 /* "SSND" */
  197. #define IFF_ID_MPEG 0x4d504547 /* "MPEG" */
  198.  
  199. #define AIFF_FORM_HEADER_SIZE 12
  200. #define AIFF_SSND_HEADER_SIZE 16
  201.  
  202.  
  203. typedef struct  blockAlign_struct {
  204.     unsigned long   offset;
  205.     unsigned long   blockSize;
  206. } blockAlign;
  207.  
  208. typedef struct  IFF_AIFF_struct {
  209.     short           numChannels;
  210.     unsigned long   numSampleFrames;
  211.     short           sampleSize;
  212.     double          sampleRate;
  213.     unsigned long   sampleType;
  214.     blockAlign      blkAlgn;
  215. } IFF_AIFF;
  216.  
  217. enum byte_order { order_unknown, order_bigEndian, order_littleEndian };
  218. extern enum byte_order NativeByteOrder;
  219.  
  220. /* "bit_stream.h" Type Definitions */
  221.  
  222. typedef struct  bit_stream_struc {
  223.     unsigned char*        pbtOutBuf;   /* for .DLL code */
  224.     int             nOutBufPos;  /* for .DLL code */
  225.     FILE        *pt;            /* pointer to bit stream device */
  226.     unsigned char *buf;         /* bit stream buffer */
  227.     int         buf_size;       /* size of buffer (in number of bytes) */
  228.     long        totbit;         /* bit counter of bit stream */
  229.     int         buf_byte_idx;   /* pointer to top byte in buffer */
  230.     int         buf_bit_idx;    /* pointer to top bit of top byte in buffer */
  231.     int         mode;           /* bit stream open in read or write mode */
  232.     int         eob;            /* end of buffer index */
  233.     int         eobs;           /* end of bit stream flag */
  234.     char        format;
  235.     
  236.     /* format of file in rd mode (BINARY/ASCII) */
  237. } Bit_stream_struc;
  238.  
  239. #include "l3side.h"
  240.  
  241. /***********************************************************************
  242. *
  243. *  Global Variable External Declarations
  244. *
  245. ***********************************************************************/
  246.  
  247. extern char     *mode_names[4];
  248. extern char     *layer_names[3];
  249. extern char    *version_names[2];
  250. extern double   s_freq[2][4];
  251. extern int      bitrate[2][3][15];
  252. extern double FAR multiple[64];
  253.  
  254. /***********************************************************************
  255. *
  256. *  Global Function Prototype Declarations
  257. *
  258. ***********************************************************************/
  259.  
  260. /* The following functions are in the file "common.c" */
  261.  
  262. extern int            js_bound(int, int);
  263. extern void           hdr_to_frps(frame_params*);
  264. extern int            BitrateIndex(int, int, int);
  265. extern int            SmpFrqIndex(long, int*);
  266. extern void           FAR *mem_alloc(unsigned long, char*);
  267. extern void           mem_free(void**);
  268. extern void           double_to_extended(double*, char[10]);
  269. extern void           extended_to_double(char[10], double*);
  270. extern int            aiff_read_headers(FILE*, IFF_AIFF*);
  271. extern int            aiff_seek_to_sound_data(FILE*);
  272. extern int            aiff_write_headers(FILE*, IFF_AIFF*);
  273. extern int            refill_buffer(Bit_stream_struc*);
  274. extern void           empty_buffer(Bit_stream_struc*, int);
  275. extern void           open_bit_stream_w(Bit_stream_struc*, char*, int);
  276. extern void           close_bit_stream_w(Bit_stream_struc*);
  277. extern void           alloc_buffer(Bit_stream_struc*, int);
  278. extern void           desalloc_buffer(Bit_stream_struc*);
  279. extern void           put1bit(Bit_stream_struc*, int);
  280. extern unsigned long  look_ahead(Bit_stream_struc*, int);
  281. extern void           putbits(Bit_stream_struc*, unsigned int, int);
  282. extern unsigned long  sstell(Bit_stream_struc*);
  283. extern int            end_bs(Bit_stream_struc*);
  284. extern void           read_absthr(FLOAT*, int);
  285.  
  286. extern enum byte_order DetermineByteOrder();
  287. extern void SwapBytesInWords( short *loc, int words );
  288.  
  289. extern int readframe();
  290. extern int makeframe();
  291. extern void 
  292. getframebits(layer *info, int stereo, int *bitsPerFrame, int *mean_bits);
  293.  
  294.  
  295. #endif
  296.