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