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