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

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: 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.  *   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 additional type definitions for *
  21.  *                              AIFF, double/SANE and "bitstream.c".  *
  22.  *                              Added function prototypes for more    *
  23.  *                              rigorous type checking.               *
  24.  * 27jun91  dpwe (Aware)        Added "alloc_*" defs & prototypes     *
  25.  *                              Defined new struct 'frame_params'.    *
  26.  *                              Changed info.stereo to info.mode_ext  *
  27.  *                              #define constants for mode types      *
  28.  *                              Prototype arguments if PROTO_ARGS     *
  29.  * 5/28/91  Earle Jennings      added MS_DOS definition               *
  30.  *                              MsDos function prototype declarations *
  31.  * 7/10/91  Earle Jennings      added FLOAT definition as double      *
  32.  *10/ 3/91  Don H. Lee          implemented CRC-16 error protection   *
  33.  * 2/11/92  W. Joseph Carter    Ported new code to Macintosh.  Most   *
  34.  *                              important fixes involved changing     *
  35.  *                              16-bit ints to long or unsigned in    *
  36.  *                              bit alloc routines for quant of 65535 *
  37.  *                              and passing proper function args.     *
  38.  *                              Removed "Other Joint Stereo" option   *
  39.  *                              and made bitrate be total channel     *
  40.  *                              bitrate, irrespective of the mode.    *
  41.  *                              Fixed many small bugs & reorganized.  *
  42.  *                              Modified some function prototypes.    *
  43.  *                              Changed BUFFER_SIZE back to 4096.     *
  44.  * 7/27/92  Michael Li          (re-)Ported to MS-DOS                 *
  45.  * 7/27/92  Masahiro Iwadare    Ported to Convex                      *
  46.  * 8/07/92  mc@tv.tek.com                                             *
  47.  * 8/10/92  Amit Gulati         Ported to the AIX Platform (RS6000)   *
  48.  *                              AIFF string constants redefined       *
  49.  * 8/27/93 Seymour Shlien,      Fixes in Unix and MSDOS ports,        *
  50.  *         Daniel Lauzon, and                                         *
  51.  *         Bill Truerniet                                             *
  52.  *--------------------------------------------------------------------*
  53.  * 4/23/92  J. Pineda           Added code for Layer III.             *
  54.  * 11/9/92  Amit Gulati         Added defines for layerIII stereo     *
  55.  *                              modes.                                *
  56.  *  8/24/93 Masahiro Iwadare    Included IS modification in Layer III.*
  57.  *                              Changed for 1 pass decoding.          *
  58.  *  9/07/93 Toshiyuki Ishino    Integrated Layer III with Ver 3.9.    *
  59.  *--------------------------------------------------------------------*
  60.  * 11/20/93 Masahiro Iwadare    Integrated Layer III with Ver 4.0.    *
  61.  *--------------------------------------------------------------------*
  62.  *  7/14/94 Juergen Koller      Fix for HPUX an IRIX in AIFF-Strings  *
  63.  *  6/12/95 Soeren H. Nielsen   Bug fix in new_ext().                 *
  64.  *  7/11/95 Soeren H. Nielsen   Added defs. for MPEG-2 LSF            *
  65.  *--------------------------------------------------------------------*
  66.  * 8/02/95  mc@fivebats.com     Changes to AIFF stuff for portability *
  67.  *                              to little-endian machines             *
  68.  **********************************************************************/
  69. #ifndef COMMON_DOT_H
  70. #define COMMON_DOT_H
  71. /***********************************************************************
  72. *
  73. *  Global Conditional Compile Switches
  74. *
  75. ***********************************************************************/
  76. #if 0
  77. #define      UNIX            /* Unix conditional compile switch */
  78. #define      MACINTOSH       /* Macintosh conditional compile switch */
  79. #define      MS_DOS          /* IBM PC conditional compile switch */
  80. #define      MSC60           /* Compiled for MS_DOS with MSC v6.0 */
  81. #define      AIX             /* AIX conditional compile switch    */
  82. #define      CONVEX          /* CONVEX conditional compile switch */
  83. #endif
  84. #if defined(MSC60) 
  85. #ifndef MS_DOS
  86. #define MS_DOS
  87. #endif
  88. #ifndef PROTO_ARGS
  89. #define PROTO_ARGS
  90. #endif
  91. #endif
  92. #ifdef  UNIX
  93. #define         TABLES_PATH     "tables"  /* to find data files */
  94. /* name of environment variable holding path of table files */
  95. #define         MPEGTABENV      "MPEGTABLES"
  96. #define         PATH_SEPARATOR  "/"        /* how to build paths */
  97. #endif  /* UNIX */
  98. #ifdef  MACINTOSH
  99. #define      TABLES_PATH ":tables:"  /* where to find data files */
  100. #endif  /* MACINTOSH */
  101. /* 
  102.  * Don't define FAR to far unless you're willing to clean up the 
  103.  * prototypes
  104.  */
  105. #define FAR /*far*/
  106. #ifdef __STDC__
  107. #ifndef PROTO_ARGS
  108. #define PROTO_ARGS
  109. #endif
  110. #endif
  111. #ifdef CONVEX
  112. #define SEEK_SET        0
  113. #define SEEK_CUR        1
  114. #define SEEK_END        2
  115. #endif
  116. /* MS_DOS and VMS do not define TABLES_PATH, so OpenTableFile will default
  117.    to finding the data files in the default directory */
  118. /***********************************************************************
  119. *
  120. *  Global Include Files
  121. *
  122. ***********************************************************************/
  123. #include        <stdio.h>
  124. #include        <string.h>
  125. #include        <math.h>
  126. #include "portableio.h"
  127. #include "ieeefloat.h"
  128. #ifdef  UNIX
  129. #include        <unistd.h>
  130. #endif  /* UNIX */
  131. #ifdef __sgi
  132. #include <stdlib.h>
  133. #endif
  134. #ifdef  MACINTOSH
  135. #include        <stdlib.h>
  136. #include        <console.h>
  137. #endif  /* MACINTOSH */
  138. #ifdef  MS_DOS
  139. #include        <stdlib.h>
  140. #ifdef MSC60
  141. #include        <memory.h>
  142. #else
  143. #include        <alloc.h>
  144. #include        <mem.h>
  145. #endif  /* MSC60 */
  146. #endif  /* MS_DOS */
  147. #ifndef EXIT_SUCCESS
  148. #define EXIT_SUCCESS 0
  149. #endif
  150. #ifndef EXIT_FAILURE
  151. #define EXIT_FAILURE 1
  152. #endif
  153. /***********************************************************************
  154. *
  155. *  Global Definitions
  156. *
  157. ***********************************************************************/
  158. /* General Definitions */
  159. #ifdef  MS_DOS
  160. #define         FLOAT                   double
  161. #else
  162. #define         FLOAT                   float
  163. #endif
  164. #ifndef FALSE
  165. #define         FALSE                   0
  166. #endif
  167. #ifndef TRUE
  168. #define         TRUE                    1
  169. #endif
  170. #define         NULL_CHAR               ''
  171. #define         MAX_U_32_NUM            0xFFFFFFFF
  172. #ifndef PI
  173. #define         PI                      3.14159265358979
  174. #endif
  175. #define         PI4                     PI/4
  176. #define         PI64                    PI/64
  177. #define         LN_TO_LOG10             0.2302585093
  178. #define         VOL_REF_NUM             0
  179. #define         MPEG_AUDIO_ID           1
  180. #define MPEG_PHASE2_LSF 0 /* 1995-07-11 SHN */
  181. #define         MAC_WINDOW_SIZE         24
  182. #define         MONO                    1
  183. #define         STEREO                  2
  184. #define         BITS_IN_A_BYTE          8
  185. #define         WORD                    16
  186. #define         MAX_NAME_SIZE           81
  187. #define         SBLIMIT                 32
  188. #define         SSLIMIT                 18
  189. #define         FFT_SIZE                1024
  190. #define         HAN_SIZE                512
  191. #define         SCALE_BLOCK             12
  192. #define         SCALE_RANGE             64
  193. #define         SCALE                   32768
  194. #define         CRC16_POLYNOMIAL        0x8005
  195. /* MPEG Header Definitions - Mode Values */
  196. #define         MPG_MD_STEREO           0
  197. #define         MPG_MD_JOINT_STEREO     1
  198. #define         MPG_MD_DUAL_CHANNEL     2
  199. #define         MPG_MD_MONO             3
  200. /* Mode Extention */
  201. #define         MPG_MD_LR_LR             0
  202. #define         MPG_MD_LR_I              1
  203. #define         MPG_MD_MS_LR             2
  204. #define         MPG_MD_MS_I              3
  205. /* "bit_stream.h" Definitions */
  206. #define         MINIMUM         4    /* Minimum size of the buffer in bytes */
  207. #define         MAX_LENGTH      32   /* Maximum length of word written or
  208.                                         read from bit stream */
  209. #define         READ_MODE       0
  210. #define         WRITE_MODE      1
  211. #define         ALIGNING        8
  212. #define         BINARY          0
  213. #define         ASCII           1
  214. #ifndef BS_FORMAT
  215. #define         BS_FORMAT       ASCII /* BINARY or ASCII = 2x bytes */
  216. #endif
  217. #define         BUFFER_SIZE     4096
  218. #define         MIN(A, B)       ((A) < (B) ? (A) : (B))
  219. #define         MAX(A, B)       ((A) > (B) ? (A) : (B))
  220. /***********************************************************************
  221. *
  222. *  Global Type Definitions
  223. *
  224. ***********************************************************************/
  225. /* Structure for Reading Layer II Allocation Tables from File */
  226. typedef struct {
  227.     unsigned int    steps;
  228.     unsigned int    bits;
  229.     unsigned int    group;
  230.     unsigned int    quant;
  231. } sb_alloc, *alloc_ptr;
  232. typedef sb_alloc        al_table[SBLIMIT][16];
  233. /* Header Information Structure */
  234. typedef struct {
  235.     int version;
  236.     int lay;
  237.     int error_protection;
  238.     int bitrate_index;
  239.     int sampling_frequency;
  240.     int padding;
  241.     int extension;
  242.     int mode;
  243.     int mode_ext;
  244.     int copyright;
  245.     int original;
  246.     int emphasis;
  247. } layer, *the_layer;
  248. /* Parent Structure Interpreting some Frame Parameters in Header */
  249. typedef struct {
  250.     layer       *header;        /* raw header information */
  251.     int         actual_mode;    /* when writing IS, may forget if 0 chs */
  252.     al_table    *alloc;         /* bit allocation table read in */
  253.     int         tab_num;        /* number of table as loaded */
  254.     int         stereo;         /* 1 for mono, 2 for stereo */
  255.     int         jsbound;        /* first band of joint stereo coding */
  256.     int         sblimit;        /* total number of sub bands */
  257. } frame_params;
  258. /* AIFF Definitions */
  259. #define IFF_ID_FORM 0x464f524d /* "FORM" */
  260. #define IFF_ID_AIFF 0x41494646 /* "AIFF" */
  261. #define IFF_ID_COMM 0x434f4d4d /* "COMM" */
  262. #define IFF_ID_SSND 0x53534e44 /* "SSND" */
  263. #define IFF_ID_MPEG 0x4d504547 /* "MPEG" */
  264. #define AIFF_FORM_HEADER_SIZE 12
  265. #define AIFF_SSND_HEADER_SIZE 16
  266. typedef struct  blockAlign_struct {
  267.     unsigned long   offset;
  268.     unsigned long   blockSize;
  269. } blockAlign;
  270. typedef struct  IFF_AIFF_struct {
  271.     short           numChannels;
  272.     unsigned long   numSampleFrames;
  273.     short           sampleSize;
  274.     double          sampleRate;
  275.     unsigned long   sampleType;
  276.     blockAlign      blkAlgn;
  277. } IFF_AIFF;
  278. enum byte_order { order_unknown, order_bigEndian, order_littleEndian };
  279. extern enum byte_order NativeByteOrder;
  280. /* "bit_stream.h" Type Definitions */
  281. typedef struct  bit_stream_struc {
  282.     FILE        *pt;            /* pointer to bit stream device */
  283.     unsigned char *buf;         /* bit stream buffer */
  284.     int         buf_size;       /* size of buffer (in number of bytes) */
  285.     long        totbit;         /* bit counter of bit stream */
  286.     int         buf_byte_idx;   /* pointer to top byte in buffer */
  287.     int         buf_bit_idx;    /* pointer to top bit of top byte in buffer */
  288.     int         mode;           /* bit stream open in read or write mode */
  289.     int         eob;            /* end of buffer index */
  290.     int         eobs;           /* end of bit stream flag */
  291.     char        format;
  292.     
  293.     /* format of file in rd mode (BINARY/ASCII) */
  294. } Bit_stream_struc;
  295. #include "l3side.h"
  296. /***********************************************************************
  297. *
  298. *  Global Variable External Declarations
  299. *
  300. ***********************************************************************/
  301. extern char     *mode_names[4];
  302. extern char     *layer_names[3];
  303. extern char *version_names[2];
  304. extern double   s_freq[2][4];
  305. extern int      bitrate[2][3][15];
  306. extern double FAR multiple[64];
  307. /***********************************************************************
  308. *
  309. *  Global Function Prototype Declarations
  310. *
  311. ***********************************************************************/
  312. /* The following functions are in the file "common.c" */
  313. #ifdef  PROTO_ARGS
  314. extern FILE           *OpenTableFile(char*);
  315. extern int            read_bit_alloc(int, al_table*);
  316. extern int            pick_table(frame_params*);
  317. extern int            js_bound(int, int);
  318. extern void           hdr_to_frps(frame_params*);
  319. extern void           WriteHdr(frame_params*, FILE*);
  320. extern void           WriteBitAlloc(unsigned int[2][SBLIMIT], frame_params*,
  321.                         FILE*);
  322. extern void           WriteScale(unsigned int[2][SBLIMIT],
  323.                         unsigned int[2][SBLIMIT], unsigned int[2][3][SBLIMIT],
  324.                         frame_params*, FILE*);
  325. extern void           WriteSamples(int, unsigned int FAR [SBLIMIT],
  326.                         unsigned int[SBLIMIT], frame_params*, FILE*);
  327. extern int            NumericQ(char*);
  328. extern int            BitrateIndex(int, int, int);
  329. extern int            SmpFrqIndex(long, int*);
  330. extern int            memcheck(char*, int, int);
  331. extern void           FAR *mem_alloc(unsigned long, char*);
  332. extern void           mem_free(void**);
  333. extern void           double_to_extended(double*, char[10]);
  334. extern void           extended_to_double(char[10], double*);
  335. extern int            aiff_read_headers(FILE*, IFF_AIFF*);
  336. extern int            aiff_seek_to_sound_data(FILE*);
  337. extern int            aiff_write_headers(FILE*, IFF_AIFF*);
  338. extern int            refill_buffer(Bit_stream_struc*);
  339. extern void           empty_buffer(Bit_stream_struc*, int);
  340. extern void           open_bit_stream_w(Bit_stream_struc*, char*, int);
  341. extern void           open_bit_stream_r(Bit_stream_struc*, char*, int);
  342. extern void           close_bit_stream_r(Bit_stream_struc*);
  343. extern void           close_bit_stream_w(Bit_stream_struc*);
  344. extern void           alloc_buffer(Bit_stream_struc*, int);
  345. extern void           desalloc_buffer(Bit_stream_struc*);
  346. extern void           back_track_buffer(Bit_stream_struc*, int);
  347. extern unsigned int   get1bit(Bit_stream_struc*);
  348. extern void           put1bit(Bit_stream_struc*, int);
  349. extern unsigned long  look_ahead(Bit_stream_struc*, int);
  350. extern unsigned long  getbits(Bit_stream_struc*, int);
  351. extern void           putbits(Bit_stream_struc*, unsigned int, int);
  352. extern void           byte_ali_putbits(Bit_stream_struc*, unsigned int, int);
  353. extern unsigned long  byte_ali_getbits(Bit_stream_struc*, int);
  354. extern unsigned long  sstell(Bit_stream_struc*);
  355. extern int            end_bs(Bit_stream_struc*);
  356. extern int            seek_sync(Bit_stream_struc*, long, int);
  357. extern void           I_CRC_calc(frame_params*, unsigned int[2][SBLIMIT],
  358.                         unsigned int*);
  359. extern void           II_CRC_calc(frame_params*, unsigned int[2][SBLIMIT],
  360.                         unsigned int[2][SBLIMIT], unsigned int*);
  361. extern void           update_CRC(unsigned int, unsigned int, unsigned int*);
  362. extern void           read_absthr(FLOAT*, int);
  363. extern unsigned int   hget1bit(); /* MI */
  364. extern unsigned long  hgetbits(int);
  365. extern unsigned long  hsstell();
  366. extern void           hputbuf(unsigned int,int);
  367. extern enum byte_order DetermineByteOrder();
  368. extern void SwapBytesInWords( short *loc, int words );
  369. #ifdef  MACINTOSH
  370. extern void           set_mac_file_attr(char[MAX_NAME_SIZE], short, OSType,
  371.                         OSType);
  372. #endif
  373. #ifdef MS_DOS
  374. extern void           new_ext(char *filename, char *extname, char *newname); 
  375. #endif
  376. #else
  377. extern FILE           *OpenTableFile();
  378. extern int            read_bit_alloc();
  379. extern int            pick_table();
  380. extern int            js_bound();
  381. extern void           hdr_to_frps();
  382. extern void           WriteHdr();
  383. extern void           WriteBitAlloc();
  384. extern void           WriteScale();
  385. extern void           WriteSamples();
  386. extern int            NumericQ();
  387. extern int            BitrateIndex();
  388. extern int            SmpFrqIndex();
  389. extern int            memcheck();
  390. extern void           FAR *mem_alloc();
  391. extern void           mem_free();
  392. extern void           double_to_extended();
  393. extern void           extended_to_double();
  394. extern int            aiff_read_headers();
  395. extern int            aiff_seek_to_sound_data();
  396. extern int            aiff_write_headers();
  397. extern int            refill_buffer();
  398. extern void           empty_buffer();
  399. extern void           open_bit_stream_w();
  400. extern void           open_bit_stream_r();
  401. extern void           close_bit_stream_r();
  402. extern void           close_bit_stream_w();
  403. extern void           alloc_buffer();
  404. extern void           desalloc_buffer();
  405. extern void           back_track_buffer();
  406. extern unsigned int   get1bit();
  407. extern void           put1bit();
  408. extern unsigned long  look_ahead();
  409. extern unsigned long  getbits();
  410. extern void           putbits();
  411. extern void           byte_ali_putbits();
  412. extern unsigned long  byte_ali_getbits();
  413. extern unsigned long  sstell();
  414. extern int            end_bs();
  415. extern int            seek_sync();
  416. extern void           I_CRC_calc();
  417. extern void           II_CRC_calc();
  418. extern void           update_CRC();
  419. extern void           read_absthr();
  420. extern unsigned int   hget1bit();
  421. extern unsigned long  hgetbits();
  422. extern unsigned long  hsstell();
  423. extern void           hputbuf();
  424. #ifdef MS_DOS
  425. extern void           new_ext(); 
  426. #endif
  427. #endif
  428. #endif