source: trunk/third/firefox/jpeg/jmorecfg.h @ 21695

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