]> Creatis software - gdcm.git/blob - src/jpeg/libijg/jmorecfg.h
ENH: Update the jpeg library. This patch is the result of the ijg lib + ls-patch...
[gdcm.git] / src / jpeg / libijg / jmorecfg.h
1 /*
2  * jmorecfg.h
3  *
4  * Copyright (C) 1991-1998, Thomas G. Lane.
5  * This file is part of the Independent JPEG Group's software.
6  * For conditions of distribution and use, see the accompanying README file.
7  *
8  * This file contains additional configuration options that customize the
9  * JPEG software for special applications or support machine-dependent
10  * optimizations.  Most users will not need to touch this file.
11  */
12
13
14 /*
15  * Define BITS_IN_JSAMPLE as either
16  *   8   for 8-bit sample values (the usual setting)
17  *   12  for 12-bit sample values
18  * Only 8 and 12 are legal data precisions for lossy JPEG according to the
19  * JPEG standard, and the IJG code does not support anything else!
20  * We do not support run-time selection of data precision, sorry.
21  */
22
23 //#define BITS_IN_JSAMPLE  8  /* use 8 or 12 (or 16 only for lossless) */
24 #define BITS_IN_JSAMPLE @GDCM_BITS_IN_JSAMPLE@
25
26 /*
27  * Maximum number of components (color channels) allowed in JPEG image.
28  * To meet the letter of the JPEG spec, set this to 255.  However, darn
29  * few applications need more than 4 channels (maybe 5 for CMYK + alpha
30  * mask).  We recommend 10 as a reasonable compromise; use 4 if you are
31  * really short on memory.  (Each allowed component costs a hundred or so
32  * bytes of storage, whether actually used in an image or not.)
33  */
34
35 #define MAX_COMPONENTS  10  /* maximum number of image components */
36
37
38 /*
39  * Basic data types.
40  * You may need to change these if you have a machine with unusual data
41  * type sizes; for example, "char" not 8 bits, "short" not 16 bits,
42  * or "long" not 32 bits.  We don't care whether "int" is 16 or 32 bits,
43  * but it had better be at least 16.
44  */
45
46 /* Representation of a single sample (pixel element value).
47  * We frequently allocate large arrays of these, so it's important to keep
48  * them small.  But if you have memory to burn and access to char or short
49  * arrays is very slow on your hardware, you might want to change these.
50  */
51
52 #if BITS_IN_JSAMPLE == 8
53 /* JSAMPLE should be the smallest type that will hold the values 0..255.
54  * You can use a signed char by having GETJSAMPLE mask it with 0xFF.
55  */
56
57 #ifdef HAVE_UNSIGNED_CHAR
58
59 typedef unsigned char JSAMPLE;
60 #define GETJSAMPLE(value)  ((int) (value))
61
62 #else /* not HAVE_UNSIGNED_CHAR */
63
64 typedef char JSAMPLE;
65 #ifdef CHAR_IS_UNSIGNED
66 #define GETJSAMPLE(value)  ((int) (value))
67 #else
68 #define GETJSAMPLE(value)  ((int) (value) & 0xFF)
69 #endif /* CHAR_IS_UNSIGNED */
70
71 #endif /* HAVE_UNSIGNED_CHAR */
72
73 #define MAXJSAMPLE  255
74 #define CENTERJSAMPLE  128
75
76 #endif /* BITS_IN_JSAMPLE == 8 */
77
78
79 #if BITS_IN_JSAMPLE == 12
80 /* JSAMPLE should be the smallest type that will hold the values 0..4095.
81  * On nearly all machines "short" will do nicely.
82  */
83
84 typedef short JSAMPLE;
85 #define GETJSAMPLE(value)  ((int) (value))
86
87 #define MAXJSAMPLE  4095
88 #define CENTERJSAMPLE  2048
89
90 #endif /* BITS_IN_JSAMPLE == 12 */
91
92
93 #if BITS_IN_JSAMPLE == 16
94 /* JSAMPLE should be the smallest type that will hold the values 0..65535.
95  * You can use a signed short by having GETJSAMPLE mask it with 0xFFFF.
96  */
97
98 #ifdef HAVE_UNSIGNED_SHORT
99
100 typedef unsigned short JSAMPLE;
101 #define GETJSAMPLE(value)  ((int) (value))
102
103 #else /* not HAVE_UNSIGNED_SHORT */
104
105 typedef short JSAMPLE;
106 #ifdef SHORT_IS_UNSIGNED
107 #define GETJSAMPLE(value)  ((int) (value))
108 #else
109 #define GETJSAMPLE(value)  ((int) (value) & 0xFFFF)
110 #endif /* SHORT_IS_UNSIGNED */
111
112 #endif /* HAVE_UNSIGNED_SHORT */
113
114 #define MAXJSAMPLE  65535
115 #define CENTERJSAMPLE  32768
116
117 #endif /* BITS_IN_JSAMPLE == 16 */
118
119
120 /* Representation of a DCT frequency coefficient.
121  * This should be a signed value of at least 16 bits; "short" is usually OK.
122  * Again, we allocate large arrays of these, but you can change to int
123  * if you have memory to burn and "short" is really slow.
124  */
125
126 typedef short JCOEF;
127
128
129 /* Representation of a spatial difference value.
130  * This should be a signed value of at least 16 bits; int is usually OK.
131  */
132
133 typedef int JDIFF;
134
135
136 /* Compressed datastreams are represented as arrays of JOCTET.
137  * These must be EXACTLY 8 bits wide, at least once they are written to
138  * external storage.  Note that when using the stdio data source/destination
139  * managers, this is also the data type passed to fread/fwrite.
140  */
141
142 #ifdef HAVE_UNSIGNED_CHAR
143
144 typedef unsigned char JOCTET;
145 #define GETJOCTET(value)  (value)
146
147 #else /* not HAVE_UNSIGNED_CHAR */
148
149 typedef char JOCTET;
150 #ifdef CHAR_IS_UNSIGNED
151 #define GETJOCTET(value)  (value)
152 #else
153 #define GETJOCTET(value)  ((value) & 0xFF)
154 #endif /* CHAR_IS_UNSIGNED */
155
156 #endif /* HAVE_UNSIGNED_CHAR */
157
158
159 /* These typedefs are used for various table entries and so forth.
160  * They must be at least as wide as specified; but making them too big
161  * won't cost a huge amount of memory, so we don't provide special
162  * extraction code like we did for JSAMPLE.  (In other words, these
163  * typedefs live at a different point on the speed/space tradeoff curve.)
164  */
165
166 /* UINT8 must hold at least the values 0..255. */
167
168 #ifdef HAVE_UNSIGNED_CHAR
169 typedef unsigned char UINT8;
170 #else /* not HAVE_UNSIGNED_CHAR */
171 #ifdef CHAR_IS_UNSIGNED
172 typedef char UINT8;
173 #else /* not CHAR_IS_UNSIGNED */
174 typedef short UINT8;
175 #endif /* CHAR_IS_UNSIGNED */
176 #endif /* HAVE_UNSIGNED_CHAR */
177
178 /* UINT16 must hold at least the values 0..65535. */
179
180 #ifdef HAVE_UNSIGNED_SHORT
181 typedef unsigned short UINT16;
182 #else /* not HAVE_UNSIGNED_SHORT */
183 typedef unsigned int UINT16;
184 #endif /* HAVE_UNSIGNED_SHORT */
185
186 /* INT16 must hold at least the values -32768..32767. */
187
188 #ifndef XMD_H      /* X11/xmd.h correctly defines INT16 */
189 typedef short INT16;
190 #endif
191
192 /* INT32 must hold at least signed 32-bit values. */
193
194 #ifndef XMD_H      /* X11/xmd.h correctly defines INT32 */
195 typedef long INT32;
196 #endif
197
198 /* Datatype used for image dimensions.  The JPEG standard only supports
199  * images up to 64K*64K due to 16-bit fields in SOF markers.  Therefore
200  * "unsigned int" is sufficient on all machines.  However, if you need to
201  * handle larger images and you don't mind deviating from the spec, you
202  * can change this datatype.
203  */
204
205 typedef unsigned int JDIMENSION;
206
207 #define JPEG_MAX_DIMENSION  65500L  /* a tad under 64K to prevent overflows */
208
209
210 /* These macros are used in all function definitions and extern declarations.
211  * You could modify them if you need to change function linkage conventions;
212  * in particular, you'll need to do that to make the library a Windows DLL.
213  * Another application is to make all functions global for use with debuggers
214  * or code profilers that require it.
215  */
216
217 /* a function called through method pointers: */
218 #define METHODDEF(type)    static type
219 /* a function used only in its module: */
220 #define LOCAL(type)    static type
221 /* a function referenced thru EXTERNs: */
222 #if defined( _WIN32 ) && defined (JPEGDLL)
223 #define GLOBAL(type)            __declspec(dllexport) type
224 #else
225 #define GLOBAL(type)            type
226 #endif
227
228 /* a reference to a GLOBAL function: */
229 #if defined(_WIN32) && !defined(JPEGSTATIC)
230 #ifdef JPEGDLL
231 /* Win32, building a dll */
232 #define EXTERN(type)            __declspec(dllexport) type
233 #else
234 /* Win32, not building a dll but using the dll */
235 #define EXTERN(type)            __declspec(dllimport) type
236 #endif
237 #else
238 /* not a Win32 system or building a static Win32 lib */
239 #define EXTERN(type)            extern type
240 #endif
241
242
243 /* This macro is used to declare a "method", that is, a function pointer.
244  * We want to supply prototype parameters if the compiler can cope.
245  * Note that the arglist parameter must be parenthesized!
246  * Again, you can customize this if you need special linkage keywords.
247  */
248
249 #ifdef HAVE_PROTOTYPES
250 #define JMETHOD(type,methodname,arglist)  type (*methodname) arglist
251 #else
252 #define JMETHOD(type,methodname,arglist)  type (*methodname) ()
253 #endif
254
255
256 /* Here is the pseudo-keyword for declaring pointers that must be "far"
257  * on 80x86 machines.  Most of the specialized coding for 80x86 is handled
258  * by just saying "FAR *" where such a pointer is needed.  In a few places
259  * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
260  */
261
262 #ifdef NEED_FAR_POINTERS
263 #define FAR  far
264 #else
265 #define FAR
266 #endif
267
268
269 /*
270  * On a few systems, type boolean and/or its values FALSE, TRUE may appear
271  * in standard header files.  Or you may have conflicts with application-
272  * specific header files that you want to include together with these files.
273  * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
274  */
275
276 #ifndef HAVE_BOOLEAN
277 typedef int boolean;
278 #endif
279 #ifndef FALSE      /* in case these macros already exist */
280 #define FALSE  0    /* values of boolean */
281 #endif
282 #ifndef TRUE
283 #define TRUE  1
284 #endif
285
286
287 /*
288  * The remaining options affect code selection within the JPEG library,
289  * but they don't need to be visible to most applications using the library.
290  * To minimize application namespace pollution, the symbols won't be
291  * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.
292  */
293
294 #ifdef JPEG_INTERNALS
295 #define JPEG_INTERNAL_OPTIONS
296 #endif
297
298 #ifdef JPEG_INTERNAL_OPTIONS
299
300
301 /*
302  * These defines indicate whether to include various optional functions.
303  * Undefining some of these symbols will produce a smaller but less capable
304  * library.  Note that you can leave certain source files out of the
305  * compilation/linking process if you've #undef'd the corresponding symbols.
306  * (You may HAVE to do that if your compiler doesn't like null source files.)
307  */
308
309 /* Arithmetic coding is unsupported for legal reasons.  Complaints to IBM. */
310
311 /* Capability options common to encoder and decoder: */
312
313 #define DCT_ISLOW_SUPPORTED  /* slow but accurate integer algorithm */
314 #define DCT_IFAST_SUPPORTED  /* faster, less accurate integer method */
315 #define DCT_FLOAT_SUPPORTED  /* floating-point: accurate, fast on fast HW */
316
317 /* Encoder capability options: */
318
319 #undef  C_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
320 #define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
321 #define C_PROGRESSIVE_SUPPORTED      /* Progressive JPEG? (Requires MULTISCAN)*/
322 #define C_LOSSLESS_SUPPORTED      /* Lossless JPEG? */
323 #define ENTROPY_OPT_SUPPORTED      /* Optimization of entropy coding parms? */
324 /* Note: if you selected 12-bit data precision, it is dangerous to turn off
325  * ENTROPY_OPT_SUPPORTED.  The standard Huffman tables are only good for 8-bit
326  * precision, so jcshuff.c normally uses entropy optimization to compute
327  * usable tables for higher precision.  If you don't want to do optimization,
328  * you'll have to supply different default Huffman tables.
329  * The exact same statements apply for progressive and lossless JPEG:
330  * the default tables don't work for progressive mode or lossless mode.
331  * (This may get fixed, however.)
332  */
333 #define INPUT_SMOOTHING_SUPPORTED   /* Input image smoothing option? */
334
335 /* Decoder capability options: */
336
337 #undef  D_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
338 #define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
339 #define D_PROGRESSIVE_SUPPORTED      /* Progressive JPEG? (Requires MULTISCAN)*/
340 #define D_LOSSLESS_SUPPORTED      /* Lossless JPEG? */
341 #define SAVE_MARKERS_SUPPORTED      /* jpeg_save_markers() needed? */
342 #define BLOCK_SMOOTHING_SUPPORTED   /* Block smoothing? (Progressive only) */
343 #define IDCT_SCALING_SUPPORTED      /* Output rescaling via IDCT? */
344 #undef  UPSAMPLE_SCALING_SUPPORTED  /* Output rescaling at upsample stage? */
345 #define UPSAMPLE_MERGING_SUPPORTED  /* Fast path for sloppy upsampling? */
346 #define QUANT_1PASS_SUPPORTED      /* 1-pass color quantization? */
347 #define QUANT_2PASS_SUPPORTED      /* 2-pass color quantization? */
348
349 /* more capability options later, no doubt */
350
351
352 /*
353  * Ordering of RGB data in scanlines passed to or from the application.
354  * If your application wants to deal with data in the order B,G,R, just
355  * change these macros.  You can also deal with formats such as R,G,B,X
356  * (one extra byte per pixel) by changing RGB_PIXELSIZE.  Note that changing
357  * the offsets will also change the order in which colormap data is organized.
358  * RESTRICTIONS:
359  * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
360  * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not
361  *    useful if you are using JPEG color spaces other than YCbCr or grayscale.
362  * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
363  *    is not 3 (they don't understand about dummy color components!).  So you
364  *    can't use color quantization if you change that value.
365  */
366
367 #define RGB_RED    0  /* Offset of Red in an RGB scanline element */
368 #define RGB_GREEN  1  /* Offset of Green */
369 #define RGB_BLUE  2  /* Offset of Blue */
370 #define RGB_PIXELSIZE  3  /* JSAMPLEs per RGB scanline element */
371
372
373 /* Definitions for speed-related optimizations. */
374
375
376 /* If your compiler supports inline functions, define INLINE
377  * as the inline keyword; otherwise define it as empty.
378  */
379
380 #ifndef INLINE
381 #ifdef __GNUC__      /* for instance, GNU C knows about inline */
382 #define INLINE __inline__
383 #endif
384 #ifndef INLINE
385 #define INLINE      /* default is to define it as empty */
386 #endif
387 #endif
388
389
390 /* On some machines (notably 68000 series) "int" is 32 bits, but multiplying
391  * two 16-bit shorts is faster than multiplying two ints.  Define MULTIPLIER
392  * as short on such a machine.  MULTIPLIER must be at least 16 bits wide.
393  */
394
395 #ifndef MULTIPLIER
396 #define MULTIPLIER  int    /* type for fastest integer multiply */
397 #endif
398
399
400 /* FAST_FLOAT should be either float or double, whichever is done faster
401  * by your compiler.  (Note that this type is only used in the floating point
402  * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)
403  * Typically, float is faster in ANSI C compilers, while double is faster in
404  * pre-ANSI compilers (because they insist on converting to double anyway).
405  * The code below therefore chooses float if we have ANSI-style prototypes.
406  */
407
408 #ifndef FAST_FLOAT
409 #ifdef HAVE_PROTOTYPES
410 #define FAST_FLOAT  float
411 #else
412 #define FAST_FLOAT  double
413 #endif
414 #endif
415
416 #if defined ( _MSC_VER )
417 #pragma warning ( disable : 4100 )
418 #pragma warning ( disable : 4115 )
419 #pragma warning ( disable : 4127 )
420 #pragma warning ( disable : 4244 )
421 #pragma warning ( disable : 4251 )
422 #pragma warning ( disable : 4267 )
423 #pragma warning ( disable : 4305 )
424 #pragma warning ( disable : 4309 )
425 #pragma warning ( disable : 4706 )
426 #pragma warning ( disable : 4786 )
427 #pragma warning ( disable : 4057 )
428 #pragma warning ( disable : 4189 )
429 #pragma warning ( disable : 4505 )
430 #endif
431
432
433 #endif /* JPEG_INTERNAL_OPTIONS */