File: common.h

package info (click to toggle)
toolame 02i-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 604 kB
  • ctags: 558
  • sloc: ansic: 12,338; sh: 111; makefile: 96
file content (326 lines) | stat: -rw-r--r-- 9,071 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
#ifndef COMMON_DOT_H
#define COMMON_DOT_H
/***********************************************************************
*
*  Global Conditional Compile Switches
*
***********************************************************************/

#if 0
#define      UNIX		/* Unix conditional compile switch */
#endif

#ifdef  UNIX
#define         TABLES_PATH     "tables"	/* to find data files */
/* name of environment variable holding path of table files */
#define         MPEGTABENV      "MPEGTABLES"
#define         PATH_SEPARATOR  "/"	/* how to build paths */
#endif /* UNIX */

/*
 * Don't define FAR to far unless you're willing to clean up the 
 * prototypes
 */
#define FAR			/*far */

#ifdef __STDC__
#ifndef PROTO_ARGS
#define PROTO_ARGS
#endif
#endif

/***********************************************************************
*
*  Global Include Files
*
***********************************************************************/

#include        <stdio.h>
#include        <string.h>
#include        <math.h>
#include "portableio.h"
#include "ieeefloat.h"

#ifdef  UNIX
#include        <unistd.h>
#endif /* UNIX */

#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#endif

#ifndef EXIT_FAILURE
#define EXIT_FAILURE 1
#endif

/***********************************************************************
*
*  Global Definitions
*
***********************************************************************/

/* General Definitions */

#define         FLOAT                   float

#ifndef FALSE
#define         FALSE                   0
#endif

#ifndef TRUE
#define         TRUE                    1
#endif

#define         NULL_CHAR               '\0'

#define         MAX_U_32_NUM            0xFFFFFFFF
#ifndef PI
#define         PI                      3.14159265358979
#endif
#define         PI4                     PI/4
#define         PI64                    PI/64
#define         LN_TO_LOG10             0.2302585093

#define         VOL_REF_NUM             0
#define         MPEG_AUDIO_ID           1
#define		MPEG_PHASE2_LSF		0	/* 1995-07-11 SHN */
#define         MAC_WINDOW_SIZE         24

#define         MONO                    1
#define         STEREO                  2
#define         BITS_IN_A_BYTE          8
#define         WORD                    16
#define         MAX_NAME_SIZE           255
#define         SBLIMIT                 32
#define         SSLIMIT                 18
#define         FFT_SIZE                1024
#define         HAN_SIZE                512
#define         SCALE_BLOCK             12
#define         SCALE_RANGE             64
#define         SCALE                   32768
#define         CRC16_POLYNOMIAL        0x8005
#define         CRC8_POLYNOMIAL         0x1D

/* MPEG Header Definitions - Mode Values */

#define         MPG_MD_STEREO           0
#define         MPG_MD_JOINT_STEREO     1
#define         MPG_MD_DUAL_CHANNEL     2
#define         MPG_MD_MONO             3

/* Mode Extention */

#define         MPG_MD_LR_LR             0
#define         MPG_MD_LR_I              1
#define         MPG_MD_MS_LR             2
#define         MPG_MD_MS_I              3


/* "bit_stream.h" Definitions */

#define         MINIMUM         4	/* Minimum size of the buffer in bytes */
#define         MAX_LENGTH      32	/* Maximum length of word written or
					   read from bit stream */
#define         READ_MODE       0
#define         WRITE_MODE      1
#define         ALIGNING        8
#define         BINARY          0
#define         ASCII           1

#define         BUFFER_SIZE     4096

#define         MIN(A, B)       ((A) < (B) ? (A) : (B))
#define         MAX(A, B)       ((A) > (B) ? (A) : (B))

/***********************************************************************
*
*  Global Type Definitions
*
***********************************************************************/

/* Structure for Reading Layer II Allocation Tables from File */

typedef struct
{
  unsigned int steps;
  unsigned int bits;
  unsigned int group;
  unsigned int quant;
}
sb_alloc, *alloc_ptr;

typedef sb_alloc al_table[SBLIMIT][16];

/* Header Information Structure */

typedef struct
{
  int version;
  int lay;
  int error_protection;
  int dab_extention;
  int bitrate_index;
  int sampling_frequency;
  int padding;
  int extension;
  int mode;
  int mode_ext;
  int copyright;
  int original;
  int emphasis;
}
layer, *the_layer;

/* Parent Structure Interpreting some Frame Parameters in Header */

typedef struct
{
  layer *header;		/* raw header information */
  int actual_mode;		/* when writing IS, may forget if 0 chs */
  al_table *alloc;		/* bit allocation table read in */
  int tab_num;			/* number of table as loaded */
  int stereo;			/* 1 for mono, 2 for stereo */
  int jsbound;			/* first band of joint stereo coding */
  int sblimit;			/* total number of sub bands */
}
frame_params;


/* AIFF Definitions */

#define IFF_ID_FORM 0x464f524d	/* "FORM" */
#define IFF_ID_AIFF 0x41494646	/* "AIFF" */
#define IFF_ID_COMM 0x434f4d4d	/* "COMM" */
#define IFF_ID_SSND 0x53534e44	/* "SSND" */
#define IFF_ID_MPEG 0x4d504547	/* "MPEG" */

#define AIFF_FORM_HEADER_SIZE 12
#define AIFF_SSND_HEADER_SIZE 16


typedef struct blockAlign_struct
{
  unsigned long offset;
  unsigned long blockSize;
}
blockAlign;

typedef struct IFF_AIFF_struct
{
  short numChannels;
  unsigned long numSampleFrames;
  short sampleSize;
  double sampleRate;
  unsigned long sampleType;
  blockAlign blkAlgn;
}
IFF_AIFF;

enum byte_order
{ order_unknown, order_bigEndian, order_littleEndian };
extern enum byte_order NativeByteOrder;

/* "bit_stream.h" Type Definitions */

typedef struct bit_stream_struc
{
  FILE *pt;			/* pointer to bit stream device */
  unsigned char *buf;		/* bit stream buffer */
  int buf_size;			/* size of buffer (in number of bytes) */
  long totbit;			/* bit counter of bit stream */
  int buf_byte_idx;		/* pointer to top byte in buffer */
  int buf_bit_idx;		/* pointer to top bit of top byte in buffer */
  int mode;			/* bit stream open in read or write mode */
  int eob;			/* end of buffer index */
  int eobs;			/* end of bit stream flag */
  char format;

  /* format of file in rd mode (BINARY/ASCII) */
}
Bit_stream_struc;


/***********************************************************************
*
*  Global Variable External Declarations
*
***********************************************************************/

extern char *mode_names[4];
extern char *version_names[2];
extern double s_freq[2][4];
extern int bitrate[2][15];
extern double FAR multiple[64];

/***********************************************************************
*
*  Global Function Prototype Declarations
*
***********************************************************************/

/* common.c */
extern int js_bound (int);
extern void hdr_to_frps (frame_params *);
extern int BitrateIndex (int, int);
extern int SmpFrqIndex (long, int *);
extern void new_ext (char *filename, char *extname, char *newname);

/* tables.c */
extern FILE *OpenTableFile (char *);
extern int read_bit_alloc (int, al_table *);
extern int pick_table (frame_params *);

/* bitstream.c */
extern int refill_buffer (Bit_stream_struc *);
extern void empty_buffer (Bit_stream_struc *, int);
extern void open_bit_stream_w (Bit_stream_struc *, char *, int);
extern void close_bit_stream_w (Bit_stream_struc *);
extern void alloc_buffer (Bit_stream_struc *, int);
extern void desalloc_buffer (Bit_stream_struc *);
extern void back_track_buffer (Bit_stream_struc *, int);
extern unsigned int get1bit (Bit_stream_struc *);
extern void put1bit (Bit_stream_struc *, int);
extern unsigned long look_ahead (Bit_stream_struc *, int);
extern unsigned long getbits (Bit_stream_struc *, int);
extern void putbits (Bit_stream_struc *, unsigned int, int);
extern void byte_ali_putbits (Bit_stream_struc *, unsigned int, int);
extern unsigned long byte_ali_getbits (Bit_stream_struc *, int);
extern unsigned long sstell (Bit_stream_struc *);
extern int end_bs (Bit_stream_struc *);
extern int seek_sync (Bit_stream_struc *, long, int);
extern unsigned int hget1bit (void);	/* MI */
extern unsigned long hgetbits (int);
extern unsigned long hsstell (void);
extern void hputbuf (unsigned int, int);

/* mem.c */
extern void FAR *mem_alloc (unsigned long, char *);
extern void mem_free (void **);

/* crc.c */
extern void CRC_calc (frame_params *, unsigned int[2][SBLIMIT],
		      unsigned int[2][SBLIMIT], unsigned int *);
extern void update_CRC (unsigned int, unsigned int, unsigned int *);

extern void CRC_calcDAB (frame_params * fr_ps,
			 unsigned int bit_alloc[2][SBLIMIT],
			 unsigned int scfsi[2][SBLIMIT],
			 unsigned int scalar[2][3][SBLIMIT],
			 unsigned int *crc, int i);

extern void update_CRCDAB (unsigned int, unsigned int, unsigned int *);

/* get_audio.c */
extern int aiff_read_headers (FILE *, IFF_AIFF *);
extern int aiff_seek_to_sound_data (FILE *);
extern enum byte_order DetermineByteOrder (void);
extern void SwapBytesInWords (short *loc, int words);

/* psycho_II.c */
extern void read_absthr (FLOAT *, int);

#ifdef DMALLOC
#include <dmalloc.h>
#endif

#endif