1 /* 2 * jconfig.h 3 * 4 * Copyright (C) 1991, 1992, 1993, 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 preprocessor declarations that help customize 9 * the JPEG software for a particular application, machine, or compiler. 10 * Edit these declarations as needed (or add -D flags to the Makefile). 11 */ 12 13 14 /* 15 * These symbols indicate the properties of your machine or compiler. 16 * The conditional definitions given may do the right thing already, 17 * but you'd best look them over closely, especially if your compiler 18 * does not handle full ANSI C. An ANSI-compliant C compiler should 19 * provide all the necessary features; __STDC__ is supposed to be 20 * predefined by such compilers. 21 */ 22 23 /* 24 * HAVE_STDC is tested below to see whether ANSI features are available. 25 * We avoid testing __STDC__ directly for arcane reasons of portability. 26 * (On some compilers, __STDC__ is only defined if a switch is given, 27 * but the switch also disables machine-specific features we need to get at. 28 * In that case, -DHAVE_STDC in the Makefile is a convenient solution.) 29 */ 30 31 #ifdef __STDC__ /* if compiler claims to be ANSI, believe it */ 32 #define HAVE_STDC 33 #endif 34 35 36 /* Does your compiler support function prototypes? */ 37 /* (If not, you also need to use ansi2knr, see SETUP) */ 38 39 #ifdef HAVE_STDC /* ANSI C compilers always have prototypes */ 40 #define PROTO 41 #else 42 #ifdef __cplusplus /* So do C++ compilers */ 43 #define PROTO 44 #endif 45 #endif 46 47 /* Does your compiler support the declaration "unsigned char" ? */ 48 /* How about "unsigned short" ? */ 49 50 #ifdef HAVE_STDC /* ANSI C compilers must support both */ 51 #define HAVE_UNSIGNED_CHAR 52 #define HAVE_UNSIGNED_SHORT 53 #endif 54 55 /* Define this if an ordinary "char" type is unsigned. 56 * If you're not sure, leaving it undefined will work at some cost in speed. 57 * If you defined HAVE_UNSIGNED_CHAR then it doesn't matter very much. 58 */ 59 60 /* #define CHAR_IS_UNSIGNED */ 61 62 /* Define this if your compiler implements ">>" on signed values as a logical 63 * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift, 64 * which is the normal and rational definition. 65 */ 66 67 /* #define RIGHT_SHIFT_IS_UNSIGNED */ 68 69 /* Define "void" as "char" if your compiler doesn't know about type void. 70 * NOTE: be sure to define void such that "void *" represents the most general 71 * pointer type, e.g., that returned by malloc(). 72 */ 73 74 /* #define void char */ 75 76 /* Define const as empty if your compiler doesn't know the "const" keyword. */ 77 /* (Even if it does, defining const as empty won't break anything.) */ 78 79 #ifndef HAVE_STDC /* ANSI C and C++ compilers should know it. */ 80 #ifndef __cplusplus 81 #define const 82 #endif 83 #endif 84 85 /* For 80x86 machines, you need to define NEED_FAR_POINTERS, 86 * unless you are using a large-data memory model or 80386 flat-memory mode. 87 * On less brain-damaged CPUs this symbol must not be defined. 88 * (Defining this symbol causes large data structures to be referenced through 89 * "far" pointers and to be allocated with a special version of malloc.) 90 */ 91 92 #ifdef MSDOS 93 #define NEED_FAR_POINTERS 94 #endif 95 96 97 /* The next three symbols only affect the system-dependent user interface 98 * modules (jcmain.c, jdmain.c). You can ignore these if you are supplying 99 * your own user interface code. 100 */ 101 102 /* Define this if you want to name both input and output files on the command 103 * line, rather than using stdout and optionally stdin. You MUST do this if 104 * your system can't cope with binary I/O to stdin/stdout. See comments at 105 * head of jcmain.c or jdmain.c. 106 */ 107 108 #ifdef MSDOS /* two-file style is needed for PCs */ 109 #ifndef USE_FDOPEN /* unless you have fdopen() or setmode() */ 110 #ifndef USE_SETMODE 111 #define TWO_FILE_COMMANDLINE 112 #endif 113 #endif 114 #endif 115 #ifdef THINK_C /* it's needed for Macintosh too */ 116 #define TWO_FILE_COMMANDLINE 117 #endif 118 119 /* Define this if your system needs explicit cleanup of temporary files. 120 * This is crucial under MS-DOS, where the temporary "files" may be areas 121 * of extended memory; on most other systems it's not as important. 122 */ 123 124 #ifdef MSDOS 125 #define NEED_SIGNAL_CATCHER 126 #endif 127 128 /* By default, we open image files with fopen(...,"rb") or fopen(...,"wb"). 129 * This is necessary on systems that distinguish text files from binary files, 130 * and is harmless on most systems that don't. If you have one of the rare 131 * systems that complains about the "b" spec, define this symbol. 132 */ 133 134 /* #define DONT_USE_B_MODE */ 135 136 137 /* If you're getting bored, that's the end of the symbols you HAVE to 138 * worry about. Go fix the makefile and compile. 139 */ 140 141 142 /* If your compiler supports inline functions, define INLINE 143 * as the inline keyword; otherwise define it as empty. 144 */ 145 146 #ifdef __GNUC__ /* for instance, GNU C knows about inline */ 147 #define INLINE __inline__ 148 #endif 149 #ifndef INLINE /* default is to define it as empty */ 150 #define INLINE 151 #endif 152 153 /* On a few systems, type boolean and/or macros FALSE, TRUE may appear 154 * in standard header files. Or you may have conflicts with application- 155 * specific header files that you want to include together with these files. 156 * In that case you need only comment out these definitions. 157 */ 158 159 typedef int boolean; 160 #undef FALSE /* in case these macros already exist */ 161 #undef TRUE 162 #define FALSE 0 /* values of boolean */ 163 #define TRUE 1 164 165 /* This defines the size of the I/O buffers for entropy compression 166 * and decompression; you could reduce it if memory is tight. 167 */ 168 169 #define JPEG_BUF_SIZE 4096 /* bytes */ 170 171 172 173 /* These symbols determine the JPEG functionality supported. */ 174 175 /* 176 * These defines indicate whether to include various optional functions. 177 * Undefining some of these symbols will produce a smaller but less capable 178 * program file. Note that you can leave certain source files out of the 179 * compilation/linking process if you've #undef'd the corresponding symbols. 180 * (You may HAVE to do that if your compiler doesn't like null source files.) 181 */ 182 183 /* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ 184 185 /* Encoder capability options: */ 186 #undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ 187 #undef C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? (NYI) */ 188 #define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ 189 #define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ 190 /* Decoder capability options: */ 191 #undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ 192 #define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ 193 #define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing during decoding? */ 194 #define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ 195 #define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ 196 /* these defines indicate which JPEG file formats are allowed */ 197 #define JFIF_SUPPORTED /* JFIF or "raw JPEG" files */ 198 #undef JTIFF_SUPPORTED /* JPEG-in-TIFF (not yet implemented) */ 199 /* these defines indicate which image (non-JPEG) file formats are allowed */ 200 #define GIF_SUPPORTED /* GIF image file format */ 201 /* #define RLE_SUPPORTED */ /* RLE image file format (by default, no) */ 202 #define PPM_SUPPORTED /* PPM/PGM image file format */ 203 #define TARGA_SUPPORTED /* Targa image file format */ 204 #undef TIFF_SUPPORTED /* TIFF image file format (not yet impl.) */ 205 206 /* more capability options later, no doubt */ 207 208 209 /* 210 * Define exactly one of these three symbols to indicate whether you want 211 * 8-bit, 12-bit, or 16-bit sample (pixel component) values. 8-bit is the 212 * default and is nearly always the right thing to use. You can use 12-bit if 213 * you need to support image formats with more than 8 bits of resolution in a 214 * color value. 16-bit should only be used for the lossless JPEG mode (not 215 * currently supported). Note that 12- and 16-bit values take up twice as 216 * much memory as 8-bit! 217 * Note: if you select 12- or 16-bit precision, it is dangerous to turn off 218 * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit 219 * precision, so jchuff.c normally uses entropy optimization to compute 220 * usable tables for higher precision. If you don't want to do optimization, 221 * you'll have to supply different default Huffman tables. 222 */ 223 224 #define EIGHT_BIT_SAMPLES 225 #undef TWELVE_BIT_SAMPLES 226 #undef SIXTEEN_BIT_SAMPLES 227 228 229 230 /* 231 * The remaining definitions don't need to be hand-edited in most cases. 232 * You may need to change these if you have a machine with unusual data 233 * types; for example, "char" not 8 bits, "short" not 16 bits, 234 * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, 235 * but it had better be at least 16. 236 */ 237 238 /* First define the representation of a single pixel element value. */ 239 240 #ifdef EIGHT_BIT_SAMPLES 241 /* JSAMPLE should be the smallest type that will hold the values 0..255. 242 * You can use a signed char by having GETJSAMPLE mask it with 0xFF. 243 * If you have only signed chars, and you are more worried about speed than 244 * memory usage, it might be a win to make JSAMPLE be short. 245 */ 246 247 #ifdef HAVE_UNSIGNED_CHAR 248 249 typedef unsigned char JSAMPLE; 250 #define GETJSAMPLE(value) (value) 251 252 #else /* not HAVE_UNSIGNED_CHAR */ 253 #ifdef CHAR_IS_UNSIGNED 254 255 typedef char JSAMPLE; 256 #define GETJSAMPLE(value) (value) 257 258 #else /* not CHAR_IS_UNSIGNED */ 259 260 typedef char JSAMPLE; 261 #define GETJSAMPLE(value) ((value) & 0xFF) 262 263 #endif /* CHAR_IS_UNSIGNED */ 264 #endif /* HAVE_UNSIGNED_CHAR */ 265 266 #define BITS_IN_JSAMPLE 8 267 #define MAXJSAMPLE 255 268 #define CENTERJSAMPLE 128 269 270 #endif /* EIGHT_BIT_SAMPLES */ 271 272 273 #ifdef TWELVE_BIT_SAMPLES 274 /* JSAMPLE should be the smallest type that will hold the values 0..4095. */ 275 /* On nearly all machines "short" will do nicely. */ 276 277 typedef short JSAMPLE; 278 #define GETJSAMPLE(value) (value) 279 280 #define BITS_IN_JSAMPLE 12 281 #define MAXJSAMPLE 4095 282 #define CENTERJSAMPLE 2048 283 284 #endif /* TWELVE_BIT_SAMPLES */ 285 286 287 #ifdef SIXTEEN_BIT_SAMPLES 288 /* JSAMPLE should be the smallest type that will hold the values 0..65535. */ 289 290 #ifdef HAVE_UNSIGNED_SHORT 291 292 typedef unsigned short JSAMPLE; 293 #define GETJSAMPLE(value) (value) 294 295 #else /* not HAVE_UNSIGNED_SHORT */ 296 297 /* If int is 32 bits this'll be horrendously inefficient storage-wise. 298 * But since we don't actually support 16-bit samples (ie lossless coding) yet, 299 * I'm not going to worry about making a smarter definition ... 300 */ 301 typedef unsigned int JSAMPLE; 302 #define GETJSAMPLE(value) (value) 303 304 #endif /* HAVE_UNSIGNED_SHORT */ 305 306 #define BITS_IN_JSAMPLE 16 307 #define MAXJSAMPLE 65535 308 #define CENTERJSAMPLE 32768 309 310 #endif /* SIXTEEN_BIT_SAMPLES */ 311 312 313 /* Here we define the representation of a DCT frequency coefficient. 314 * This should be a signed 16-bit value; "short" is usually right. 315 * It's important that this be exactly 16 bits, no more and no less; 316 * more will cost you a BIG hit of memory, less will give wrong answers. 317 */ 318 319 typedef short JCOEF; 320 321 322 /* The remaining typedefs are used for various table entries and so forth. 323 * They must be at least as wide as specified; but making them too big 324 * won't cost a huge amount of memory, so we don't provide special 325 * extraction code like we did for JSAMPLE. (In other words, these 326 * typedefs live at a different point on the speed/space tradeoff curve.) 327 */ 328 329 /* UINT8 must hold at least the values 0..255. */ 330 331 #ifdef HAVE_UNSIGNED_CHAR 332 typedef unsigned char UINT8; 333 #else /* not HAVE_UNSIGNED_CHAR */ 334 #ifdef CHAR_IS_UNSIGNED 335 typedef char UINT8; 336 #else /* not CHAR_IS_UNSIGNED */ 337 typedef short UINT8; 338 #endif /* CHAR_IS_UNSIGNED */ 339 #endif /* HAVE_UNSIGNED_CHAR */ 340 341 /* UINT16 must hold at least the values 0..65535. */ 342 343 #ifdef HAVE_UNSIGNED_SHORT 344 typedef unsigned short UINT16; 345 #else /* not HAVE_UNSIGNED_SHORT */ 346 typedef unsigned int UINT16; 347 #endif /* HAVE_UNSIGNED_SHORT */ 348 349 /* INT16 must hold at least the values -32768..32767. */ 350 351 #ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ 352 typedef short INT16; 353 #endif 354 355 /* INT32 must hold signed 32-bit values; if your machine happens */ 356 /* to have 64-bit longs, you might want to change this. */ 357 358 #ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ 359 typedef long INT32; 360 #endif 361