xref: /plan9/sys/src/cmd/gs/jpeg/jmorecfg.h.save (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
17dd7cddfSDavid du Colombier/*
27dd7cddfSDavid du Colombier * jmorecfg.h
37dd7cddfSDavid du Colombier *
4*593dc095SDavid du Colombier * Copyright (C) 1991-1997, Thomas G. Lane.
57dd7cddfSDavid du Colombier * This file is part of the Independent JPEG Group's software.
67dd7cddfSDavid du Colombier * For conditions of distribution and use, see the accompanying README file.
77dd7cddfSDavid du Colombier *
87dd7cddfSDavid du Colombier * This file contains additional configuration options that customize the
97dd7cddfSDavid du Colombier * JPEG software for special applications or support machine-dependent
107dd7cddfSDavid du Colombier * optimizations.  Most users will not need to touch this file.
117dd7cddfSDavid du Colombier */
127dd7cddfSDavid du Colombier
137dd7cddfSDavid du Colombier
147dd7cddfSDavid du Colombier/*
157dd7cddfSDavid du Colombier * Define BITS_IN_JSAMPLE as either
167dd7cddfSDavid du Colombier *   8   for 8-bit sample values (the usual setting)
177dd7cddfSDavid du Colombier *   12  for 12-bit sample values
187dd7cddfSDavid du Colombier * Only 8 and 12 are legal data precisions for lossy JPEG according to the
197dd7cddfSDavid du Colombier * JPEG standard, and the IJG code does not support anything else!
207dd7cddfSDavid du Colombier * We do not support run-time selection of data precision, sorry.
217dd7cddfSDavid du Colombier */
227dd7cddfSDavid du Colombier
237dd7cddfSDavid du Colombier#define BITS_IN_JSAMPLE  8	/* use 8 or 12 */
247dd7cddfSDavid du Colombier
257dd7cddfSDavid du Colombier
267dd7cddfSDavid du Colombier/*
277dd7cddfSDavid du Colombier * Maximum number of components (color channels) allowed in JPEG image.
287dd7cddfSDavid du Colombier * To meet the letter of the JPEG spec, set this to 255.  However, darn
297dd7cddfSDavid du Colombier * few applications need more than 4 channels (maybe 5 for CMYK + alpha
307dd7cddfSDavid du Colombier * mask).  We recommend 10 as a reasonable compromise; use 4 if you are
317dd7cddfSDavid du Colombier * really short on memory.  (Each allowed component costs a hundred or so
327dd7cddfSDavid du Colombier * bytes of storage, whether actually used in an image or not.)
337dd7cddfSDavid du Colombier */
347dd7cddfSDavid du Colombier
357dd7cddfSDavid du Colombier#define MAX_COMPONENTS  10	/* maximum number of image components */
367dd7cddfSDavid du Colombier
377dd7cddfSDavid du Colombier
387dd7cddfSDavid du Colombier/*
397dd7cddfSDavid du Colombier * Basic data types.
407dd7cddfSDavid du Colombier * You may need to change these if you have a machine with unusual data
417dd7cddfSDavid du Colombier * type sizes; for example, "char" not 8 bits, "short" not 16 bits,
427dd7cddfSDavid du Colombier * or "long" not 32 bits.  We don't care whether "int" is 16 or 32 bits,
437dd7cddfSDavid du Colombier * but it had better be at least 16.
447dd7cddfSDavid du Colombier */
457dd7cddfSDavid du Colombier
467dd7cddfSDavid du Colombier/* Representation of a single sample (pixel element value).
477dd7cddfSDavid du Colombier * We frequently allocate large arrays of these, so it's important to keep
487dd7cddfSDavid du Colombier * them small.  But if you have memory to burn and access to char or short
497dd7cddfSDavid du Colombier * arrays is very slow on your hardware, you might want to change these.
507dd7cddfSDavid du Colombier */
517dd7cddfSDavid du Colombier
527dd7cddfSDavid du Colombier#if BITS_IN_JSAMPLE == 8
537dd7cddfSDavid du Colombier/* JSAMPLE should be the smallest type that will hold the values 0..255.
547dd7cddfSDavid du Colombier * You can use a signed char by having GETJSAMPLE mask it with 0xFF.
557dd7cddfSDavid du Colombier */
567dd7cddfSDavid du Colombier
577dd7cddfSDavid du Colombier#ifdef HAVE_UNSIGNED_CHAR
587dd7cddfSDavid du Colombier
597dd7cddfSDavid du Colombiertypedef unsigned char JSAMPLE;
607dd7cddfSDavid du Colombier#define GETJSAMPLE(value)  ((int) (value))
617dd7cddfSDavid du Colombier
627dd7cddfSDavid du Colombier#else /* not HAVE_UNSIGNED_CHAR */
637dd7cddfSDavid du Colombier
647dd7cddfSDavid du Colombiertypedef char JSAMPLE;
657dd7cddfSDavid du Colombier#ifdef CHAR_IS_UNSIGNED
667dd7cddfSDavid du Colombier#define GETJSAMPLE(value)  ((int) (value))
677dd7cddfSDavid du Colombier#else
687dd7cddfSDavid du Colombier#define GETJSAMPLE(value)  ((int) (value) & 0xFF)
697dd7cddfSDavid du Colombier#endif /* CHAR_IS_UNSIGNED */
707dd7cddfSDavid du Colombier
717dd7cddfSDavid du Colombier#endif /* HAVE_UNSIGNED_CHAR */
727dd7cddfSDavid du Colombier
737dd7cddfSDavid du Colombier#define MAXJSAMPLE	255
747dd7cddfSDavid du Colombier#define CENTERJSAMPLE	128
757dd7cddfSDavid du Colombier
767dd7cddfSDavid du Colombier#endif /* BITS_IN_JSAMPLE == 8 */
777dd7cddfSDavid du Colombier
787dd7cddfSDavid du Colombier
797dd7cddfSDavid du Colombier#if BITS_IN_JSAMPLE == 12
807dd7cddfSDavid du Colombier/* JSAMPLE should be the smallest type that will hold the values 0..4095.
817dd7cddfSDavid du Colombier * On nearly all machines "short" will do nicely.
827dd7cddfSDavid du Colombier */
837dd7cddfSDavid du Colombier
847dd7cddfSDavid du Colombiertypedef short JSAMPLE;
857dd7cddfSDavid du Colombier#define GETJSAMPLE(value)  ((int) (value))
867dd7cddfSDavid du Colombier
877dd7cddfSDavid du Colombier#define MAXJSAMPLE	4095
887dd7cddfSDavid du Colombier#define CENTERJSAMPLE	2048
897dd7cddfSDavid du Colombier
907dd7cddfSDavid du Colombier#endif /* BITS_IN_JSAMPLE == 12 */
917dd7cddfSDavid du Colombier
927dd7cddfSDavid du Colombier
937dd7cddfSDavid du Colombier/* Representation of a DCT frequency coefficient.
947dd7cddfSDavid du Colombier * This should be a signed value of at least 16 bits; "short" is usually OK.
957dd7cddfSDavid du Colombier * Again, we allocate large arrays of these, but you can change to int
967dd7cddfSDavid du Colombier * if you have memory to burn and "short" is really slow.
977dd7cddfSDavid du Colombier */
987dd7cddfSDavid du Colombier
997dd7cddfSDavid du Colombiertypedef short JCOEF;
1007dd7cddfSDavid du Colombier
1017dd7cddfSDavid du Colombier
1027dd7cddfSDavid du Colombier/* Compressed datastreams are represented as arrays of JOCTET.
1037dd7cddfSDavid du Colombier * These must be EXACTLY 8 bits wide, at least once they are written to
1047dd7cddfSDavid du Colombier * external storage.  Note that when using the stdio data source/destination
1057dd7cddfSDavid du Colombier * managers, this is also the data type passed to fread/fwrite.
1067dd7cddfSDavid du Colombier */
1077dd7cddfSDavid du Colombier
1087dd7cddfSDavid du Colombier#ifdef HAVE_UNSIGNED_CHAR
1097dd7cddfSDavid du Colombier
1107dd7cddfSDavid du Colombiertypedef unsigned char JOCTET;
1117dd7cddfSDavid du Colombier#define GETJOCTET(value)  (value)
1127dd7cddfSDavid du Colombier
1137dd7cddfSDavid du Colombier#else /* not HAVE_UNSIGNED_CHAR */
1147dd7cddfSDavid du Colombier
1157dd7cddfSDavid du Colombiertypedef char JOCTET;
1167dd7cddfSDavid du Colombier#ifdef CHAR_IS_UNSIGNED
1177dd7cddfSDavid du Colombier#define GETJOCTET(value)  (value)
1187dd7cddfSDavid du Colombier#else
1197dd7cddfSDavid du Colombier#define GETJOCTET(value)  ((value) & 0xFF)
1207dd7cddfSDavid du Colombier#endif /* CHAR_IS_UNSIGNED */
1217dd7cddfSDavid du Colombier
1227dd7cddfSDavid du Colombier#endif /* HAVE_UNSIGNED_CHAR */
1237dd7cddfSDavid du Colombier
1247dd7cddfSDavid du Colombier
1257dd7cddfSDavid du Colombier/* These typedefs are used for various table entries and so forth.
1267dd7cddfSDavid du Colombier * They must be at least as wide as specified; but making them too big
1277dd7cddfSDavid du Colombier * won't cost a huge amount of memory, so we don't provide special
1287dd7cddfSDavid du Colombier * extraction code like we did for JSAMPLE.  (In other words, these
1297dd7cddfSDavid du Colombier * typedefs live at a different point on the speed/space tradeoff curve.)
1307dd7cddfSDavid du Colombier */
1317dd7cddfSDavid du Colombier
1327dd7cddfSDavid du Colombier/* UINT8 must hold at least the values 0..255. */
1337dd7cddfSDavid du Colombier
1347dd7cddfSDavid du Colombier#ifdef HAVE_UNSIGNED_CHAR
1357dd7cddfSDavid du Colombiertypedef unsigned char UINT8;
1367dd7cddfSDavid du Colombier#else /* not HAVE_UNSIGNED_CHAR */
1377dd7cddfSDavid du Colombier#ifdef CHAR_IS_UNSIGNED
1387dd7cddfSDavid du Colombiertypedef char UINT8;
1397dd7cddfSDavid du Colombier#else /* not CHAR_IS_UNSIGNED */
1407dd7cddfSDavid du Colombiertypedef short UINT8;
1417dd7cddfSDavid du Colombier#endif /* CHAR_IS_UNSIGNED */
1427dd7cddfSDavid du Colombier#endif /* HAVE_UNSIGNED_CHAR */
1437dd7cddfSDavid du Colombier
1447dd7cddfSDavid du Colombier/* UINT16 must hold at least the values 0..65535. */
1457dd7cddfSDavid du Colombier
1467dd7cddfSDavid du Colombier#ifdef HAVE_UNSIGNED_SHORT
1477dd7cddfSDavid du Colombiertypedef unsigned short UINT16;
1487dd7cddfSDavid du Colombier#else /* not HAVE_UNSIGNED_SHORT */
1497dd7cddfSDavid du Colombiertypedef unsigned int UINT16;
1507dd7cddfSDavid du Colombier#endif /* HAVE_UNSIGNED_SHORT */
1517dd7cddfSDavid du Colombier
1527dd7cddfSDavid du Colombier/* INT16 must hold at least the values -32768..32767. */
1537dd7cddfSDavid du Colombier
1547dd7cddfSDavid du Colombier#ifndef XMD_H			/* X11/xmd.h correctly defines INT16 */
1557dd7cddfSDavid du Colombiertypedef short INT16;
1567dd7cddfSDavid du Colombier#endif
1577dd7cddfSDavid du Colombier
1587dd7cddfSDavid du Colombier/* INT32 must hold at least signed 32-bit values. */
1597dd7cddfSDavid du Colombier
1607dd7cddfSDavid du Colombier#ifndef XMD_H			/* X11/xmd.h correctly defines INT32 */
1617dd7cddfSDavid du Colombiertypedef long INT32;
1627dd7cddfSDavid du Colombier#endif
1637dd7cddfSDavid du Colombier
1647dd7cddfSDavid du Colombier/* Datatype used for image dimensions.  The JPEG standard only supports
1657dd7cddfSDavid du Colombier * images up to 64K*64K due to 16-bit fields in SOF markers.  Therefore
1667dd7cddfSDavid du Colombier * "unsigned int" is sufficient on all machines.  However, if you need to
1677dd7cddfSDavid du Colombier * handle larger images and you don't mind deviating from the spec, you
1687dd7cddfSDavid du Colombier * can change this datatype.
1697dd7cddfSDavid du Colombier */
1707dd7cddfSDavid du Colombier
1717dd7cddfSDavid du Colombiertypedef unsigned int JDIMENSION;
1727dd7cddfSDavid du Colombier
1737dd7cddfSDavid du Colombier#define JPEG_MAX_DIMENSION  65500L  /* a tad under 64K to prevent overflows */
1747dd7cddfSDavid du Colombier
1757dd7cddfSDavid du Colombier
1767dd7cddfSDavid du Colombier/* These macros are used in all function definitions and extern declarations.
1777dd7cddfSDavid du Colombier * You could modify them if you need to change function linkage conventions;
1787dd7cddfSDavid du Colombier * in particular, you'll need to do that to make the library a Windows DLL.
1797dd7cddfSDavid du Colombier * Another application is to make all functions global for use with debuggers
1807dd7cddfSDavid du Colombier * or code profilers that require it.
1817dd7cddfSDavid du Colombier */
1827dd7cddfSDavid du Colombier
1837dd7cddfSDavid du Colombier/* a function called through method pointers: */
1847dd7cddfSDavid du Colombier#define METHODDEF(type)		static type
1857dd7cddfSDavid du Colombier/* a function used only in its module: */
1867dd7cddfSDavid du Colombier#define LOCAL(type)		static type
1877dd7cddfSDavid du Colombier/* a function referenced thru EXTERNs: */
1887dd7cddfSDavid du Colombier#define GLOBAL(type)		type
1897dd7cddfSDavid du Colombier/* a reference to a GLOBAL function: */
1907dd7cddfSDavid du Colombier#define EXTERN(type)		extern type
1917dd7cddfSDavid du Colombier
1927dd7cddfSDavid du Colombier
1937dd7cddfSDavid du Colombier/* This macro is used to declare a "method", that is, a function pointer.
1947dd7cddfSDavid du Colombier * We want to supply prototype parameters if the compiler can cope.
1957dd7cddfSDavid du Colombier * Note that the arglist parameter must be parenthesized!
1967dd7cddfSDavid du Colombier * Again, you can customize this if you need special linkage keywords.
1977dd7cddfSDavid du Colombier */
1987dd7cddfSDavid du Colombier
1997dd7cddfSDavid du Colombier#ifdef HAVE_PROTOTYPES
2007dd7cddfSDavid du Colombier#define JMETHOD(type,methodname,arglist)  type (*methodname) arglist
2017dd7cddfSDavid du Colombier#else
2027dd7cddfSDavid du Colombier#define JMETHOD(type,methodname,arglist)  type (*methodname) ()
2037dd7cddfSDavid du Colombier#endif
2047dd7cddfSDavid du Colombier
2057dd7cddfSDavid du Colombier
2067dd7cddfSDavid du Colombier/* Here is the pseudo-keyword for declaring pointers that must be "far"
2077dd7cddfSDavid du Colombier * on 80x86 machines.  Most of the specialized coding for 80x86 is handled
2087dd7cddfSDavid du Colombier * by just saying "FAR *" where such a pointer is needed.  In a few places
2097dd7cddfSDavid du Colombier * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
2107dd7cddfSDavid du Colombier */
2117dd7cddfSDavid du Colombier
2127dd7cddfSDavid du Colombier#ifdef NEED_FAR_POINTERS
2137dd7cddfSDavid du Colombier#define FAR  far
2147dd7cddfSDavid du Colombier#else
2157dd7cddfSDavid du Colombier#define FAR
2167dd7cddfSDavid du Colombier#endif
2177dd7cddfSDavid du Colombier
2187dd7cddfSDavid du Colombier
2197dd7cddfSDavid du Colombier/*
2207dd7cddfSDavid du Colombier * On a few systems, type boolean and/or its values FALSE, TRUE may appear
2217dd7cddfSDavid du Colombier * in standard header files.  Or you may have conflicts with application-
2227dd7cddfSDavid du Colombier * specific header files that you want to include together with these files.
2237dd7cddfSDavid du Colombier * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
2247dd7cddfSDavid du Colombier */
2257dd7cddfSDavid du Colombier
2267dd7cddfSDavid du Colombier#ifndef HAVE_BOOLEAN
2277dd7cddfSDavid du Colombiertypedef int boolean;
2287dd7cddfSDavid du Colombier#endif
2297dd7cddfSDavid du Colombier#ifndef FALSE			/* in case these macros already exist */
2307dd7cddfSDavid du Colombier#define FALSE	0		/* values of boolean */
2317dd7cddfSDavid du Colombier#endif
2327dd7cddfSDavid du Colombier#ifndef TRUE
2337dd7cddfSDavid du Colombier#define TRUE	1
2347dd7cddfSDavid du Colombier#endif
2357dd7cddfSDavid du Colombier
2367dd7cddfSDavid du Colombier
2377dd7cddfSDavid du Colombier/*
2387dd7cddfSDavid du Colombier * The remaining options affect code selection within the JPEG library,
2397dd7cddfSDavid du Colombier * but they don't need to be visible to most applications using the library.
2407dd7cddfSDavid du Colombier * To minimize application namespace pollution, the symbols won't be
2417dd7cddfSDavid du Colombier * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.
2427dd7cddfSDavid du Colombier */
2437dd7cddfSDavid du Colombier
2447dd7cddfSDavid du Colombier#ifdef JPEG_INTERNALS
2457dd7cddfSDavid du Colombier#define JPEG_INTERNAL_OPTIONS
2467dd7cddfSDavid du Colombier#endif
2477dd7cddfSDavid du Colombier
2487dd7cddfSDavid du Colombier#ifdef JPEG_INTERNAL_OPTIONS
2497dd7cddfSDavid du Colombier
2507dd7cddfSDavid du Colombier
2517dd7cddfSDavid du Colombier/*
2527dd7cddfSDavid du Colombier * These defines indicate whether to include various optional functions.
2537dd7cddfSDavid du Colombier * Undefining some of these symbols will produce a smaller but less capable
2547dd7cddfSDavid du Colombier * library.  Note that you can leave certain source files out of the
2557dd7cddfSDavid du Colombier * compilation/linking process if you've #undef'd the corresponding symbols.
2567dd7cddfSDavid du Colombier * (You may HAVE to do that if your compiler doesn't like null source files.)
2577dd7cddfSDavid du Colombier */
2587dd7cddfSDavid du Colombier
2597dd7cddfSDavid du Colombier/* Arithmetic coding is unsupported for legal reasons.  Complaints to IBM. */
2607dd7cddfSDavid du Colombier
2617dd7cddfSDavid du Colombier/* Capability options common to encoder and decoder: */
2627dd7cddfSDavid du Colombier
2637dd7cddfSDavid du Colombier#define DCT_ISLOW_SUPPORTED	/* slow but accurate integer algorithm */
2647dd7cddfSDavid du Colombier#define DCT_IFAST_SUPPORTED	/* faster, less accurate integer method */
2657dd7cddfSDavid du Colombier#define DCT_FLOAT_SUPPORTED	/* floating-point: accurate, fast on fast HW */
2667dd7cddfSDavid du Colombier
2677dd7cddfSDavid du Colombier/* Encoder capability options: */
2687dd7cddfSDavid du Colombier
2697dd7cddfSDavid du Colombier#undef  C_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
2707dd7cddfSDavid du Colombier#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
2717dd7cddfSDavid du Colombier#define C_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/
2727dd7cddfSDavid du Colombier#define ENTROPY_OPT_SUPPORTED	    /* Optimization of entropy coding parms? */
2737dd7cddfSDavid du Colombier/* Note: if you selected 12-bit data precision, it is dangerous to turn off
2747dd7cddfSDavid du Colombier * ENTROPY_OPT_SUPPORTED.  The standard Huffman tables are only good for 8-bit
2757dd7cddfSDavid du Colombier * precision, so jchuff.c normally uses entropy optimization to compute
2767dd7cddfSDavid du Colombier * usable tables for higher precision.  If you don't want to do optimization,
2777dd7cddfSDavid du Colombier * you'll have to supply different default Huffman tables.
2787dd7cddfSDavid du Colombier * The exact same statements apply for progressive JPEG: the default tables
2797dd7cddfSDavid du Colombier * don't work for progressive mode.  (This may get fixed, however.)
2807dd7cddfSDavid du Colombier */
2817dd7cddfSDavid du Colombier#define INPUT_SMOOTHING_SUPPORTED   /* Input image smoothing option? */
2827dd7cddfSDavid du Colombier
2837dd7cddfSDavid du Colombier/* Decoder capability options: */
2847dd7cddfSDavid du Colombier
2857dd7cddfSDavid du Colombier#undef  D_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
2867dd7cddfSDavid du Colombier#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
2877dd7cddfSDavid du Colombier#define D_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/
288*593dc095SDavid du Colombier#define SAVE_MARKERS_SUPPORTED	    /* jpeg_save_markers() needed? */
2897dd7cddfSDavid du Colombier#define BLOCK_SMOOTHING_SUPPORTED   /* Block smoothing? (Progressive only) */
2907dd7cddfSDavid du Colombier#define IDCT_SCALING_SUPPORTED	    /* Output rescaling via IDCT? */
2917dd7cddfSDavid du Colombier#undef  UPSAMPLE_SCALING_SUPPORTED  /* Output rescaling at upsample stage? */
2927dd7cddfSDavid du Colombier#define UPSAMPLE_MERGING_SUPPORTED  /* Fast path for sloppy upsampling? */
2937dd7cddfSDavid du Colombier#define QUANT_1PASS_SUPPORTED	    /* 1-pass color quantization? */
2947dd7cddfSDavid du Colombier#define QUANT_2PASS_SUPPORTED	    /* 2-pass color quantization? */
2957dd7cddfSDavid du Colombier
2967dd7cddfSDavid du Colombier/* more capability options later, no doubt */
2977dd7cddfSDavid du Colombier
2987dd7cddfSDavid du Colombier
2997dd7cddfSDavid du Colombier/*
3007dd7cddfSDavid du Colombier * Ordering of RGB data in scanlines passed to or from the application.
3017dd7cddfSDavid du Colombier * If your application wants to deal with data in the order B,G,R, just
3027dd7cddfSDavid du Colombier * change these macros.  You can also deal with formats such as R,G,B,X
3037dd7cddfSDavid du Colombier * (one extra byte per pixel) by changing RGB_PIXELSIZE.  Note that changing
3047dd7cddfSDavid du Colombier * the offsets will also change the order in which colormap data is organized.
3057dd7cddfSDavid du Colombier * RESTRICTIONS:
3067dd7cddfSDavid du Colombier * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
3077dd7cddfSDavid du Colombier * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not
3087dd7cddfSDavid du Colombier *    useful if you are using JPEG color spaces other than YCbCr or grayscale.
3097dd7cddfSDavid du Colombier * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
3107dd7cddfSDavid du Colombier *    is not 3 (they don't understand about dummy color components!).  So you
3117dd7cddfSDavid du Colombier *    can't use color quantization if you change that value.
3127dd7cddfSDavid du Colombier */
3137dd7cddfSDavid du Colombier
3147dd7cddfSDavid du Colombier#define RGB_RED		0	/* Offset of Red in an RGB scanline element */
3157dd7cddfSDavid du Colombier#define RGB_GREEN	1	/* Offset of Green */
3167dd7cddfSDavid du Colombier#define RGB_BLUE	2	/* Offset of Blue */
3177dd7cddfSDavid du Colombier#define RGB_PIXELSIZE	3	/* JSAMPLEs per RGB scanline element */
3187dd7cddfSDavid du Colombier
3197dd7cddfSDavid du Colombier
3207dd7cddfSDavid du Colombier/* Definitions for speed-related optimizations. */
3217dd7cddfSDavid du Colombier
3227dd7cddfSDavid du Colombier
3237dd7cddfSDavid du Colombier/* If your compiler supports inline functions, define INLINE
3247dd7cddfSDavid du Colombier * as the inline keyword; otherwise define it as empty.
3257dd7cddfSDavid du Colombier */
3267dd7cddfSDavid du Colombier
3277dd7cddfSDavid du Colombier#ifndef INLINE
3287dd7cddfSDavid du Colombier#ifdef __GNUC__			/* for instance, GNU C knows about inline */
3297dd7cddfSDavid du Colombier#define INLINE __inline__
3307dd7cddfSDavid du Colombier#endif
3317dd7cddfSDavid du Colombier#ifndef INLINE
3327dd7cddfSDavid du Colombier#define INLINE			/* default is to define it as empty */
3337dd7cddfSDavid du Colombier#endif
3347dd7cddfSDavid du Colombier#endif
3357dd7cddfSDavid du Colombier
3367dd7cddfSDavid du Colombier
3377dd7cddfSDavid du Colombier/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying
3387dd7cddfSDavid du Colombier * two 16-bit shorts is faster than multiplying two ints.  Define MULTIPLIER
3397dd7cddfSDavid du Colombier * as short on such a machine.  MULTIPLIER must be at least 16 bits wide.
3407dd7cddfSDavid du Colombier */
3417dd7cddfSDavid du Colombier
3427dd7cddfSDavid du Colombier#ifndef MULTIPLIER
3437dd7cddfSDavid du Colombier#define MULTIPLIER  int		/* type for fastest integer multiply */
3447dd7cddfSDavid du Colombier#endif
3457dd7cddfSDavid du Colombier
3467dd7cddfSDavid du Colombier
3477dd7cddfSDavid du Colombier/* FAST_FLOAT should be either float or double, whichever is done faster
3487dd7cddfSDavid du Colombier * by your compiler.  (Note that this type is only used in the floating point
3497dd7cddfSDavid du Colombier * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)
3507dd7cddfSDavid du Colombier * Typically, float is faster in ANSI C compilers, while double is faster in
3517dd7cddfSDavid du Colombier * pre-ANSI compilers (because they insist on converting to double anyway).
3527dd7cddfSDavid du Colombier * The code below therefore chooses float if we have ANSI-style prototypes.
3537dd7cddfSDavid du Colombier */
3547dd7cddfSDavid du Colombier
3557dd7cddfSDavid du Colombier#ifndef FAST_FLOAT
3567dd7cddfSDavid du Colombier#ifdef HAVE_PROTOTYPES
3577dd7cddfSDavid du Colombier#define FAST_FLOAT  float
3587dd7cddfSDavid du Colombier#else
3597dd7cddfSDavid du Colombier#define FAST_FLOAT  double
3607dd7cddfSDavid du Colombier#endif
3617dd7cddfSDavid du Colombier#endif
3627dd7cddfSDavid du Colombier
3637dd7cddfSDavid du Colombier#endif /* JPEG_INTERNAL_OPTIONS */
364