|
||||
File indexing completed on 2025-01-17 09:55:36
0001 /* 0002 * jpeglib.h 0003 * 0004 * This file was part of the Independent JPEG Group's software: 0005 * Copyright (C) 1991-1998, Thomas G. Lane. 0006 * Modified 2002-2009 by Guido Vollbeding. 0007 * Lossless JPEG Modifications: 0008 * Copyright (C) 1999, Ken Murchison. 0009 * libjpeg-turbo Modifications: 0010 * Copyright (C) 2009-2011, 2013-2014, 2016-2017, 2020, 2022-2023, 0011 D. R. Commander. 0012 * Copyright (C) 2015, Google, Inc. 0013 * For conditions of distribution and use, see the accompanying README.ijg 0014 * file. 0015 * 0016 * This file defines the application interface for the JPEG library. 0017 * Most applications using the library need only include this file, 0018 * and perhaps jerror.h if they want to know the exact error codes. 0019 */ 0020 0021 #ifndef JPEGLIB_H 0022 #define JPEGLIB_H 0023 0024 /* 0025 * First we include the configuration files that record how this 0026 * installation of the JPEG library is set up. jconfig.h can be 0027 * generated automatically for many systems. jmorecfg.h contains 0028 * manual configuration options that most people need not worry about. 0029 */ 0030 0031 #ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ 0032 #include "jconfig.h" /* widely used configuration options */ 0033 #endif 0034 #include "jmorecfg.h" /* seldom changed options */ 0035 0036 0037 #ifdef __cplusplus 0038 #ifndef DONT_USE_EXTERN_C 0039 extern "C" { 0040 #endif 0041 #endif 0042 0043 0044 /* Various constants determining the sizes of things. 0045 * All of these are specified by the JPEG standard, so don't change them 0046 * if you want to be compatible. 0047 */ 0048 0049 /* NOTE: In lossless mode, an MCU contains one or more samples rather than one 0050 * or more 8x8 DCT blocks, so the term "data unit" is used to generically 0051 * describe a sample in lossless mode or an 8x8 DCT block in lossy mode. To 0052 * preserve backward API/ABI compatibility, the field and macro names retain 0053 * the "block" terminology. 0054 */ 0055 0056 #define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ 0057 #define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ 0058 #define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ 0059 #define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ 0060 #define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ 0061 #define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ 0062 #define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ 0063 /* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; 0064 * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. 0065 * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU 0066 * to handle it. We even let you do this from the jconfig.h file. However, 0067 * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe 0068 * sometimes emits noncompliant files doesn't mean you should too. 0069 */ 0070 #define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on data units/MCU */ 0071 #ifndef D_MAX_BLOCKS_IN_MCU 0072 #define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on data units/MCU */ 0073 #endif 0074 0075 0076 /* Data structures for images (arrays of samples and of DCT coefficients). 0077 */ 0078 0079 typedef JSAMPLE *JSAMPROW; /* ptr to one image row of pixel samples. */ 0080 typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ 0081 typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ 0082 0083 typedef J12SAMPLE *J12SAMPROW; /* ptr to one image row of 12-bit pixel 0084 samples. */ 0085 typedef J12SAMPROW *J12SAMPARRAY; /* ptr to some 12-bit sample rows (a 2-D 0086 12-bit sample array) */ 0087 typedef J12SAMPARRAY *J12SAMPIMAGE; /* a 3-D 12-bit sample array: top index is 0088 color */ 0089 0090 typedef J16SAMPLE *J16SAMPROW; /* ptr to one image row of 16-bit pixel 0091 samples. */ 0092 typedef J16SAMPROW *J16SAMPARRAY; /* ptr to some 16-bit sample rows (a 2-D 0093 16-bit sample array) */ 0094 typedef J16SAMPARRAY *J16SAMPIMAGE; /* a 3-D 16-bit sample array: top index is 0095 color */ 0096 0097 typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ 0098 typedef JBLOCK *JBLOCKROW; /* pointer to one row of coefficient blocks */ 0099 typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ 0100 typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ 0101 0102 typedef JCOEF *JCOEFPTR; /* useful in a couple of places */ 0103 0104 0105 /* Types for JPEG compression parameters and working tables. */ 0106 0107 0108 /* DCT coefficient quantization tables. */ 0109 0110 typedef struct { 0111 /* This array gives the coefficient quantizers in natural array order 0112 * (not the zigzag order in which they are stored in a JPEG DQT marker). 0113 * CAUTION: IJG versions prior to v6a kept this array in zigzag order. 0114 */ 0115 UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ 0116 /* This field is used only during compression. It's initialized FALSE when 0117 * the table is created, and set TRUE when it's been output to the file. 0118 * You could suppress output of a table by setting this to TRUE. 0119 * (See jpeg_suppress_tables for an example.) 0120 */ 0121 boolean sent_table; /* TRUE when table has been output */ 0122 } JQUANT_TBL; 0123 0124 0125 /* Huffman coding tables. */ 0126 0127 typedef struct { 0128 /* These two fields directly represent the contents of a JPEG DHT marker */ 0129 UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ 0130 /* length k bits; bits[0] is unused */ 0131 UINT8 huffval[256]; /* The symbols, in order of incr code length */ 0132 /* This field is used only during compression. It's initialized FALSE when 0133 * the table is created, and set TRUE when it's been output to the file. 0134 * You could suppress output of a table by setting this to TRUE. 0135 * (See jpeg_suppress_tables for an example.) 0136 */ 0137 boolean sent_table; /* TRUE when table has been output */ 0138 } JHUFF_TBL; 0139 0140 0141 /* Basic info about one component (color channel). */ 0142 0143 typedef struct { 0144 /* These values are fixed over the whole image. */ 0145 /* For compression, they must be supplied by parameter setup; */ 0146 /* for decompression, they are read from the SOF marker. */ 0147 int component_id; /* identifier for this component (0..255) */ 0148 int component_index; /* its index in SOF or cinfo->comp_info[] */ 0149 int h_samp_factor; /* horizontal sampling factor (1..4) */ 0150 int v_samp_factor; /* vertical sampling factor (1..4) */ 0151 int quant_tbl_no; /* quantization table selector (0..3) */ 0152 /* These values may vary between scans. */ 0153 /* For compression, they must be supplied by parameter setup; */ 0154 /* for decompression, they are read from the SOS marker. */ 0155 /* The decompressor output side may not use these variables. */ 0156 int dc_tbl_no; /* DC entropy table selector (0..3) */ 0157 int ac_tbl_no; /* AC entropy table selector (0..3) */ 0158 0159 /* Remaining fields should be treated as private by applications. */ 0160 0161 /* These values are computed during compression or decompression startup: */ 0162 /* Component's size in data units. 0163 * In lossy mode, any dummy blocks added to complete an MCU are not counted; 0164 * therefore these values do not depend on whether a scan is interleaved or 0165 * not. In lossless mode, these are always equal to the image width and 0166 * height. 0167 */ 0168 JDIMENSION width_in_blocks; 0169 JDIMENSION height_in_blocks; 0170 /* Size of a data unit in samples. Always DCTSIZE for lossy compression. 0171 * For lossy decompression this is the size of the output from one DCT block, 0172 * reflecting any scaling we choose to apply during the IDCT step. 0173 * Values from 1 to 16 are supported. Note that different components may 0174 * receive different IDCT scalings. In lossless mode, this is always equal 0175 * to 1. 0176 */ 0177 #if JPEG_LIB_VERSION >= 70 0178 int DCT_h_scaled_size; 0179 int DCT_v_scaled_size; 0180 #else 0181 int DCT_scaled_size; 0182 #endif 0183 /* The downsampled dimensions are the component's actual, unpadded number 0184 * of samples at the main buffer (preprocessing/compression interface), thus 0185 * downsampled_width = ceil(image_width * Hi/Hmax) 0186 * and similarly for height. For lossy decompression, IDCT scaling is 0187 * included, so 0188 * downsampled_width = ceil(image_width * Hi/Hmax * DCT_[h_]scaled_size/DCTSIZE) 0189 * In lossless mode, these are always equal to the image width and height. 0190 */ 0191 JDIMENSION downsampled_width; /* actual width in samples */ 0192 JDIMENSION downsampled_height; /* actual height in samples */ 0193 /* This flag is used only for decompression. In cases where some of the 0194 * components will be ignored (eg grayscale output from YCbCr image), 0195 * we can skip most computations for the unused components. 0196 */ 0197 boolean component_needed; /* do we need the value of this component? */ 0198 0199 /* These values are computed before starting a scan of the component. */ 0200 /* The decompressor output side may not use these variables. */ 0201 int MCU_width; /* number of data units per MCU, horizontally */ 0202 int MCU_height; /* number of data units per MCU, vertically */ 0203 int MCU_blocks; /* MCU_width * MCU_height */ 0204 int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_[h_]scaled_size */ 0205 int last_col_width; /* # of non-dummy data units across in last MCU */ 0206 int last_row_height; /* # of non-dummy data units down in last MCU */ 0207 0208 /* Saved quantization table for component; NULL if none yet saved. 0209 * See jdinput.c comments about the need for this information. 0210 * This field is currently used only for decompression. 0211 */ 0212 JQUANT_TBL *quant_table; 0213 0214 /* Private per-component storage for DCT or IDCT subsystem. */ 0215 void *dct_table; 0216 } jpeg_component_info; 0217 0218 0219 /* The script for encoding a multiple-scan file is an array of these: */ 0220 0221 typedef struct { 0222 int comps_in_scan; /* number of components encoded in this scan */ 0223 int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ 0224 int Ss, Se; /* progressive JPEG spectral selection parms 0225 (Ss is the predictor selection value in 0226 lossless mode) */ 0227 int Ah, Al; /* progressive JPEG successive approx. parms 0228 (Al is the point transform value in lossless 0229 mode) */ 0230 } jpeg_scan_info; 0231 0232 /* The decompressor can save APPn and COM markers in a list of these: */ 0233 0234 typedef struct jpeg_marker_struct *jpeg_saved_marker_ptr; 0235 0236 struct jpeg_marker_struct { 0237 jpeg_saved_marker_ptr next; /* next in list, or NULL */ 0238 UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ 0239 unsigned int original_length; /* # bytes of data in the file */ 0240 unsigned int data_length; /* # bytes of data saved at data[] */ 0241 JOCTET *data; /* the data contained in the marker */ 0242 /* the marker length word is not counted in data_length or original_length */ 0243 }; 0244 0245 /* Known color spaces. */ 0246 0247 #define JCS_EXTENSIONS 1 0248 #define JCS_ALPHA_EXTENSIONS 1 0249 0250 typedef enum { 0251 JCS_UNKNOWN, /* error/unspecified */ 0252 JCS_GRAYSCALE, /* monochrome */ 0253 JCS_RGB, /* red/green/blue as specified by the RGB_RED, 0254 RGB_GREEN, RGB_BLUE, and RGB_PIXELSIZE macros */ 0255 JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ 0256 JCS_CMYK, /* C/M/Y/K */ 0257 JCS_YCCK, /* Y/Cb/Cr/K */ 0258 JCS_EXT_RGB, /* red/green/blue */ 0259 JCS_EXT_RGBX, /* red/green/blue/x */ 0260 JCS_EXT_BGR, /* blue/green/red */ 0261 JCS_EXT_BGRX, /* blue/green/red/x */ 0262 JCS_EXT_XBGR, /* x/blue/green/red */ 0263 JCS_EXT_XRGB, /* x/red/green/blue */ 0264 /* When out_color_space it set to JCS_EXT_RGBX, JCS_EXT_BGRX, JCS_EXT_XBGR, 0265 or JCS_EXT_XRGB during decompression, the X byte is undefined, and in 0266 order to ensure the best performance, libjpeg-turbo can set that byte to 0267 whatever value it wishes. Use the following colorspace constants to 0268 ensure that the X byte is set to 0xFF, so that it can be interpreted as an 0269 opaque alpha channel. */ 0270 JCS_EXT_RGBA, /* red/green/blue/alpha */ 0271 JCS_EXT_BGRA, /* blue/green/red/alpha */ 0272 JCS_EXT_ABGR, /* alpha/blue/green/red */ 0273 JCS_EXT_ARGB, /* alpha/red/green/blue */ 0274 JCS_RGB565 /* 5-bit red/6-bit green/5-bit blue 0275 [decompression only] */ 0276 } J_COLOR_SPACE; 0277 0278 /* DCT/IDCT algorithm options. */ 0279 0280 typedef enum { 0281 JDCT_ISLOW, /* accurate integer method */ 0282 JDCT_IFAST, /* less accurate integer method [legacy feature] */ 0283 JDCT_FLOAT /* floating-point method [legacy feature] */ 0284 } J_DCT_METHOD; 0285 0286 #ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ 0287 #define JDCT_DEFAULT JDCT_ISLOW 0288 #endif 0289 #ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ 0290 #define JDCT_FASTEST JDCT_IFAST 0291 #endif 0292 0293 /* Dithering options for decompression. */ 0294 0295 typedef enum { 0296 JDITHER_NONE, /* no dithering */ 0297 JDITHER_ORDERED, /* simple ordered dither */ 0298 JDITHER_FS /* Floyd-Steinberg error diffusion dither */ 0299 } J_DITHER_MODE; 0300 0301 0302 /* Common fields between JPEG compression and decompression master structs. */ 0303 0304 #define jpeg_common_fields \ 0305 struct jpeg_error_mgr *err; /* Error handler module */ \ 0306 struct jpeg_memory_mgr *mem; /* Memory manager module */ \ 0307 struct jpeg_progress_mgr *progress; /* Progress monitor, or NULL if none */ \ 0308 void *client_data; /* Available for use by application */ \ 0309 boolean is_decompressor; /* So common code can tell which is which */ \ 0310 int global_state /* For checking call sequence validity */ 0311 0312 /* Routines that are to be used by both halves of the library are declared 0313 * to receive a pointer to this structure. There are no actual instances of 0314 * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. 0315 */ 0316 struct jpeg_common_struct { 0317 jpeg_common_fields; /* Fields common to both master struct types */ 0318 /* Additional fields follow in an actual jpeg_compress_struct or 0319 * jpeg_decompress_struct. All three structs must agree on these 0320 * initial fields! (This would be a lot cleaner in C++.) 0321 */ 0322 }; 0323 0324 typedef struct jpeg_common_struct *j_common_ptr; 0325 typedef struct jpeg_compress_struct *j_compress_ptr; 0326 typedef struct jpeg_decompress_struct *j_decompress_ptr; 0327 0328 0329 /* Master record for a compression instance */ 0330 0331 struct jpeg_compress_struct { 0332 jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ 0333 0334 /* Destination for compressed data */ 0335 struct jpeg_destination_mgr *dest; 0336 0337 /* Description of source image --- these fields must be filled in by 0338 * outer application before starting compression. in_color_space must 0339 * be correct before you can even call jpeg_set_defaults(). 0340 */ 0341 0342 JDIMENSION image_width; /* input image width */ 0343 JDIMENSION image_height; /* input image height */ 0344 int input_components; /* # of color components in input image */ 0345 J_COLOR_SPACE in_color_space; /* colorspace of input image */ 0346 0347 double input_gamma; /* image gamma of input image */ 0348 0349 /* Compression parameters --- these fields must be set before calling 0350 * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to 0351 * initialize everything to reasonable defaults, then changing anything 0352 * the application specifically wants to change. That way you won't get 0353 * burnt when new parameters are added. Also note that there are several 0354 * helper routines to simplify changing parameters. 0355 */ 0356 0357 #if JPEG_LIB_VERSION >= 70 0358 unsigned int scale_num, scale_denom; /* fraction by which to scale image */ 0359 0360 JDIMENSION jpeg_width; /* scaled JPEG image width */ 0361 JDIMENSION jpeg_height; /* scaled JPEG image height */ 0362 /* Dimensions of actual JPEG image that will be written to file, 0363 * derived from input dimensions by scaling factors above. 0364 * These fields are computed by jpeg_start_compress(). 0365 * You can also use jpeg_calc_jpeg_dimensions() to determine these values 0366 * in advance of calling jpeg_start_compress(). 0367 */ 0368 #endif 0369 0370 int data_precision; /* bits of precision in image data */ 0371 0372 int num_components; /* # of color components in JPEG image */ 0373 J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ 0374 0375 jpeg_component_info *comp_info; 0376 /* comp_info[i] describes component that appears i'th in SOF */ 0377 0378 JQUANT_TBL *quant_tbl_ptrs[NUM_QUANT_TBLS]; 0379 #if JPEG_LIB_VERSION >= 70 0380 int q_scale_factor[NUM_QUANT_TBLS]; 0381 #endif 0382 /* ptrs to coefficient quantization tables, or NULL if not defined, 0383 * and corresponding scale factors (percentage, initialized 100). 0384 */ 0385 0386 JHUFF_TBL *dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; 0387 JHUFF_TBL *ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; 0388 /* ptrs to Huffman coding tables, or NULL if not defined */ 0389 0390 UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ 0391 UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ 0392 UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ 0393 0394 int num_scans; /* # of entries in scan_info array */ 0395 const jpeg_scan_info *scan_info; /* script for multi-scan file, or NULL */ 0396 /* The default value of scan_info is NULL, which causes a single-scan 0397 * sequential JPEG file to be emitted. To create a multi-scan file, 0398 * set num_scans and scan_info to point to an array of scan definitions. 0399 */ 0400 0401 boolean raw_data_in; /* TRUE=caller supplies downsampled data */ 0402 boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ 0403 boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ 0404 boolean CCIR601_sampling; /* TRUE=first samples are cosited */ 0405 #if JPEG_LIB_VERSION >= 70 0406 boolean do_fancy_downsampling; /* TRUE=apply fancy downsampling */ 0407 #endif 0408 int smoothing_factor; /* 1..100, or 0 for no input smoothing */ 0409 J_DCT_METHOD dct_method; /* DCT algorithm selector */ 0410 0411 /* The restart interval can be specified in absolute MCUs by setting 0412 * restart_interval, or in MCU rows by setting restart_in_rows 0413 * (in which case the correct restart_interval will be figured 0414 * for each scan). 0415 */ 0416 unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ 0417 int restart_in_rows; /* if > 0, MCU rows per restart interval */ 0418 0419 /* Parameters controlling emission of special markers. */ 0420 0421 boolean write_JFIF_header; /* should a JFIF marker be written? */ 0422 UINT8 JFIF_major_version; /* What to write for the JFIF version number */ 0423 UINT8 JFIF_minor_version; 0424 /* These three values are not used by the JPEG code, merely copied */ 0425 /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ 0426 /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ 0427 /* ratio is defined by X_density/Y_density even when density_unit=0. */ 0428 UINT8 density_unit; /* JFIF code for pixel size units */ 0429 UINT16 X_density; /* Horizontal pixel density */ 0430 UINT16 Y_density; /* Vertical pixel density */ 0431 boolean write_Adobe_marker; /* should an Adobe marker be written? */ 0432 0433 /* State variable: index of next scanline to be written to 0434 * jpeg_write_scanlines(). Application may use this to control its 0435 * processing loop, e.g., "while (next_scanline < image_height)". 0436 */ 0437 0438 JDIMENSION next_scanline; /* 0 .. image_height-1 */ 0439 0440 /* Remaining fields are known throughout compressor, but generally 0441 * should not be touched by a surrounding application. 0442 */ 0443 0444 /* 0445 * These fields are computed during compression startup 0446 */ 0447 boolean progressive_mode; /* TRUE if scan script uses progressive mode */ 0448 int max_h_samp_factor; /* largest h_samp_factor */ 0449 int max_v_samp_factor; /* largest v_samp_factor */ 0450 0451 #if JPEG_LIB_VERSION >= 70 0452 int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */ 0453 int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */ 0454 #endif 0455 0456 JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coefficient or 0457 difference controller */ 0458 /* The coefficient or difference controller receives data in units of MCU 0459 * rows as defined for fully interleaved scans (whether the JPEG file is 0460 * interleaved or not). In lossy mode, there are v_samp_factor * DCTSIZE 0461 * sample rows of each component in an "iMCU" (interleaved MCU) row. In 0462 * lossless mode, total_iMCU_rows is always equal to the image height. 0463 */ 0464 0465 /* 0466 * These fields are valid during any one scan. 0467 * They describe the components and MCUs actually appearing in the scan. 0468 */ 0469 int comps_in_scan; /* # of JPEG components in this scan */ 0470 jpeg_component_info *cur_comp_info[MAX_COMPS_IN_SCAN]; 0471 /* *cur_comp_info[i] describes component that appears i'th in SOS */ 0472 0473 JDIMENSION MCUs_per_row; /* # of MCUs across the image */ 0474 JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ 0475 0476 int blocks_in_MCU; /* # of data units per MCU */ 0477 int MCU_membership[C_MAX_BLOCKS_IN_MCU]; 0478 /* MCU_membership[i] is index in cur_comp_info of component owning */ 0479 /* i'th data unit in an MCU */ 0480 0481 int Ss, Se, Ah, Al; /* progressive/lossless JPEG parameters for 0482 scan */ 0483 0484 #if JPEG_LIB_VERSION >= 80 0485 int block_size; /* the basic DCT block size: 1..16 */ 0486 const int *natural_order; /* natural-order position array */ 0487 int lim_Se; /* min( Se, DCTSIZE2-1 ) */ 0488 #endif 0489 0490 /* 0491 * Links to compression subobjects (methods and private variables of modules) 0492 */ 0493 struct jpeg_comp_master *master; 0494 struct jpeg_c_main_controller *main; 0495 struct jpeg_c_prep_controller *prep; 0496 struct jpeg_c_coef_controller *coef; 0497 struct jpeg_marker_writer *marker; 0498 struct jpeg_color_converter *cconvert; 0499 struct jpeg_downsampler *downsample; 0500 struct jpeg_forward_dct *fdct; 0501 struct jpeg_entropy_encoder *entropy; 0502 jpeg_scan_info *script_space; /* workspace for jpeg_simple_progression */ 0503 int script_space_size; 0504 }; 0505 0506 0507 /* Master record for a decompression instance */ 0508 0509 struct jpeg_decompress_struct { 0510 jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ 0511 0512 /* Source of compressed data */ 0513 struct jpeg_source_mgr *src; 0514 0515 /* Basic description of image --- filled in by jpeg_read_header(). */ 0516 /* Application may inspect these values to decide how to process image. */ 0517 0518 JDIMENSION image_width; /* nominal image width (from SOF marker) */ 0519 JDIMENSION image_height; /* nominal image height */ 0520 int num_components; /* # of color components in JPEG image */ 0521 J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ 0522 0523 /* Decompression processing parameters --- these fields must be set before 0524 * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes 0525 * them to default values. 0526 */ 0527 0528 J_COLOR_SPACE out_color_space; /* colorspace for output */ 0529 0530 unsigned int scale_num, scale_denom; /* fraction by which to scale image */ 0531 0532 double output_gamma; /* image gamma wanted in output */ 0533 0534 boolean buffered_image; /* TRUE=multiple output passes */ 0535 boolean raw_data_out; /* TRUE=downsampled data wanted */ 0536 0537 J_DCT_METHOD dct_method; /* IDCT algorithm selector */ 0538 boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ 0539 boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ 0540 0541 boolean quantize_colors; /* TRUE=colormapped output wanted */ 0542 /* the following are ignored if not quantize_colors: */ 0543 J_DITHER_MODE dither_mode; /* type of color dithering to use */ 0544 boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ 0545 int desired_number_of_colors; /* max # colors to use in created colormap */ 0546 /* these are significant only in buffered-image mode: */ 0547 boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ 0548 boolean enable_external_quant;/* enable future use of external colormap */ 0549 boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ 0550 0551 /* Description of actual output image that will be returned to application. 0552 * These fields are computed by jpeg_start_decompress(). 0553 * You can also use jpeg_calc_output_dimensions() to determine these values 0554 * in advance of calling jpeg_start_decompress(). 0555 */ 0556 0557 JDIMENSION output_width; /* scaled image width */ 0558 JDIMENSION output_height; /* scaled image height */ 0559 int out_color_components; /* # of color components in out_color_space */ 0560 int output_components; /* # of color components returned */ 0561 /* output_components is 1 (a colormap index) when quantizing colors; 0562 * otherwise it equals out_color_components. 0563 */ 0564 int rec_outbuf_height; /* min recommended height of scanline buffer */ 0565 /* If the buffer passed to jpeg_read_scanlines() is less than this many rows 0566 * high, space and time will be wasted due to unnecessary data copying. 0567 * Usually rec_outbuf_height will be 1 or 2, at most 4. 0568 */ 0569 0570 /* When quantizing colors, the output colormap is described by these fields. 0571 * The application can supply a colormap by setting colormap non-NULL before 0572 * calling jpeg_start_decompress; otherwise a colormap is created during 0573 * jpeg_start_decompress or jpeg_start_output. 0574 * The map has out_color_components rows and actual_number_of_colors columns. 0575 */ 0576 int actual_number_of_colors; /* number of entries in use */ 0577 JSAMPARRAY colormap; /* The color map as a 2-D pixel array 0578 If data_precision is 12 or 16, then this is 0579 actually a J12SAMPARRAY or a J16SAMPARRAY, 0580 so callers must type-cast it in order to 0581 read/write 12-bit or 16-bit samples from/to 0582 the array. */ 0583 0584 /* State variables: these variables indicate the progress of decompression. 0585 * The application may examine these but must not modify them. 0586 */ 0587 0588 /* Row index of next scanline to be read from jpeg_read_scanlines(). 0589 * Application may use this to control its processing loop, e.g., 0590 * "while (output_scanline < output_height)". 0591 */ 0592 JDIMENSION output_scanline; /* 0 .. output_height-1 */ 0593 0594 /* Current input scan number and number of iMCU rows completed in scan. 0595 * These indicate the progress of the decompressor input side. 0596 */ 0597 int input_scan_number; /* Number of SOS markers seen so far */ 0598 JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ 0599 0600 /* The "output scan number" is the notional scan being displayed by the 0601 * output side. The decompressor will not allow output scan/row number 0602 * to get ahead of input scan/row, but it can fall arbitrarily far behind. 0603 */ 0604 int output_scan_number; /* Nominal scan number being displayed */ 0605 JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ 0606 0607 /* Current progression status. coef_bits[c][i] indicates the precision 0608 * with which component c's DCT coefficient i (in zigzag order) is known. 0609 * It is -1 when no data has yet been received, otherwise it is the point 0610 * transform (shift) value for the most recent scan of the coefficient 0611 * (thus, 0 at completion of the progression). 0612 * This pointer is NULL when reading a non-progressive file. 0613 */ 0614 int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ 0615 0616 /* Internal JPEG parameters --- the application usually need not look at 0617 * these fields. Note that the decompressor output side may not use 0618 * any parameters that can change between scans. 0619 */ 0620 0621 /* Quantization and Huffman tables are carried forward across input 0622 * datastreams when processing abbreviated JPEG datastreams. 0623 */ 0624 0625 JQUANT_TBL *quant_tbl_ptrs[NUM_QUANT_TBLS]; 0626 /* ptrs to coefficient quantization tables, or NULL if not defined */ 0627 0628 JHUFF_TBL *dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; 0629 JHUFF_TBL *ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; 0630 /* ptrs to Huffman coding tables, or NULL if not defined */ 0631 0632 /* These parameters are never carried across datastreams, since they 0633 * are given in SOF/SOS markers or defined to be reset by SOI. 0634 */ 0635 0636 int data_precision; /* bits of precision in image data */ 0637 0638 jpeg_component_info *comp_info; 0639 /* comp_info[i] describes component that appears i'th in SOF */ 0640 0641 #if JPEG_LIB_VERSION >= 80 0642 boolean is_baseline; /* TRUE if Baseline SOF0 encountered */ 0643 #endif 0644 boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ 0645 boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ 0646 0647 UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ 0648 UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ 0649 UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ 0650 0651 unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ 0652 0653 /* These fields record data obtained from optional markers recognized by 0654 * the JPEG library. 0655 */ 0656 boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ 0657 /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ 0658 UINT8 JFIF_major_version; /* JFIF version number */ 0659 UINT8 JFIF_minor_version; 0660 UINT8 density_unit; /* JFIF code for pixel size units */ 0661 UINT16 X_density; /* Horizontal pixel density */ 0662 UINT16 Y_density; /* Vertical pixel density */ 0663 boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ 0664 UINT8 Adobe_transform; /* Color transform code from Adobe marker */ 0665 0666 boolean CCIR601_sampling; /* TRUE=first samples are cosited */ 0667 0668 /* Aside from the specific data retained from APPn markers known to the 0669 * library, the uninterpreted contents of any or all APPn and COM markers 0670 * can be saved in a list for examination by the application. 0671 */ 0672 jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ 0673 0674 /* Remaining fields are known throughout decompressor, but generally 0675 * should not be touched by a surrounding application. 0676 */ 0677 0678 /* 0679 * These fields are computed during decompression startup 0680 */ 0681 int max_h_samp_factor; /* largest h_samp_factor */ 0682 int max_v_samp_factor; /* largest v_samp_factor */ 0683 0684 #if JPEG_LIB_VERSION >= 70 0685 int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */ 0686 int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */ 0687 #else 0688 int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ 0689 #endif 0690 0691 JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ 0692 /* The coefficient or difference controller's input and output progress is 0693 * measured in units of "iMCU" (interleaved MCU) rows. These are the same as 0694 * MCU rows in fully interleaved JPEG scans, but are used whether the scan is 0695 * interleaved or not. In lossy mode, we define an iMCU row as v_samp_factor 0696 * DCT block rows of each component. Therefore, the IDCT output contains 0697 * v_samp_factor*DCT_[v_]scaled_size sample rows of a component per iMCU row. 0698 * In lossless mode, total_iMCU_rows is always equal to the image height. 0699 */ 0700 0701 JSAMPLE *sample_range_limit; /* table for fast range-limiting 0702 If data_precision is 12 or 16, then this is 0703 actually a J12SAMPLE pointer or a J16SAMPLE 0704 pointer, so callers must type-cast it in 0705 order to read 12-bit or 16-bit samples from 0706 the array. */ 0707 0708 /* 0709 * These fields are valid during any one scan. 0710 * They describe the components and MCUs actually appearing in the scan. 0711 * Note that the decompressor output side must not use these fields. 0712 */ 0713 int comps_in_scan; /* # of JPEG components in this scan */ 0714 jpeg_component_info *cur_comp_info[MAX_COMPS_IN_SCAN]; 0715 /* *cur_comp_info[i] describes component that appears i'th in SOS */ 0716 0717 JDIMENSION MCUs_per_row; /* # of MCUs across the image */ 0718 JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ 0719 0720 int blocks_in_MCU; /* # of data units per MCU */ 0721 int MCU_membership[D_MAX_BLOCKS_IN_MCU]; 0722 /* MCU_membership[i] is index in cur_comp_info of component owning */ 0723 /* i'th data unit in an MCU */ 0724 0725 int Ss, Se, Ah, Al; /* progressive/lossless JPEG parameters for 0726 scan */ 0727 0728 #if JPEG_LIB_VERSION >= 80 0729 /* These fields are derived from Se of first SOS marker. 0730 */ 0731 int block_size; /* the basic DCT block size: 1..16 */ 0732 const int *natural_order; /* natural-order position array for entropy decode */ 0733 int lim_Se; /* min( Se, DCTSIZE2-1 ) for entropy decode */ 0734 #endif 0735 0736 /* This field is shared between entropy decoder and marker parser. 0737 * It is either zero or the code of a JPEG marker that has been 0738 * read from the data source, but has not yet been processed. 0739 */ 0740 int unread_marker; 0741 0742 /* 0743 * Links to decompression subobjects (methods, private variables of modules) 0744 */ 0745 struct jpeg_decomp_master *master; 0746 struct jpeg_d_main_controller *main; 0747 struct jpeg_d_coef_controller *coef; 0748 struct jpeg_d_post_controller *post; 0749 struct jpeg_input_controller *inputctl; 0750 struct jpeg_marker_reader *marker; 0751 struct jpeg_entropy_decoder *entropy; 0752 struct jpeg_inverse_dct *idct; 0753 struct jpeg_upsampler *upsample; 0754 struct jpeg_color_deconverter *cconvert; 0755 struct jpeg_color_quantizer *cquantize; 0756 }; 0757 0758 0759 /* "Object" declarations for JPEG modules that may be supplied or called 0760 * directly by the surrounding application. 0761 * As with all objects in the JPEG library, these structs only define the 0762 * publicly visible methods and state variables of a module. Additional 0763 * private fields may exist after the public ones. 0764 */ 0765 0766 0767 /* Error handler object */ 0768 0769 struct jpeg_error_mgr { 0770 /* Error exit handler: does not return to caller */ 0771 void (*error_exit) (j_common_ptr cinfo); 0772 /* Conditionally emit a trace or warning message */ 0773 void (*emit_message) (j_common_ptr cinfo, int msg_level); 0774 /* Routine that actually outputs a trace or error message */ 0775 void (*output_message) (j_common_ptr cinfo); 0776 /* Format a message string for the most recent JPEG error or message */ 0777 void (*format_message) (j_common_ptr cinfo, char *buffer); 0778 #define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ 0779 /* Reset error state variables at start of a new image */ 0780 void (*reset_error_mgr) (j_common_ptr cinfo); 0781 0782 /* The message ID code and any parameters are saved here. 0783 * A message can have one string parameter or up to 8 int parameters. 0784 */ 0785 int msg_code; 0786 #define JMSG_STR_PARM_MAX 80 0787 union { 0788 int i[8]; 0789 char s[JMSG_STR_PARM_MAX]; 0790 } msg_parm; 0791 0792 /* Standard state variables for error facility */ 0793 0794 int trace_level; /* max msg_level that will be displayed */ 0795 0796 /* For recoverable corrupt-data errors, we emit a warning message, 0797 * but keep going unless emit_message chooses to abort. emit_message 0798 * should count warnings in num_warnings. The surrounding application 0799 * can check for bad data by seeing if num_warnings is nonzero at the 0800 * end of processing. 0801 */ 0802 long num_warnings; /* number of corrupt-data warnings */ 0803 0804 /* These fields point to the table(s) of error message strings. 0805 * An application can change the table pointer to switch to a different 0806 * message list (typically, to change the language in which errors are 0807 * reported). Some applications may wish to add additional error codes 0808 * that will be handled by the JPEG library error mechanism; the second 0809 * table pointer is used for this purpose. 0810 * 0811 * First table includes all errors generated by JPEG library itself. 0812 * Error code 0 is reserved for a "no such error string" message. 0813 */ 0814 const char * const *jpeg_message_table; /* Library errors */ 0815 int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ 0816 /* Second table can be added by application (see cjpeg/djpeg for example). 0817 * It contains strings numbered first_addon_message..last_addon_message. 0818 */ 0819 const char * const *addon_message_table; /* Non-library errors */ 0820 int first_addon_message; /* code for first string in addon table */ 0821 int last_addon_message; /* code for last string in addon table */ 0822 }; 0823 0824 0825 /* Progress monitor object */ 0826 0827 struct jpeg_progress_mgr { 0828 void (*progress_monitor) (j_common_ptr cinfo); 0829 0830 long pass_counter; /* work units completed in this pass */ 0831 long pass_limit; /* total number of work units in this pass */ 0832 int completed_passes; /* passes completed so far */ 0833 int total_passes; /* total number of passes expected */ 0834 }; 0835 0836 0837 /* Data destination object for compression */ 0838 0839 struct jpeg_destination_mgr { 0840 JOCTET *next_output_byte; /* => next byte to write in buffer */ 0841 size_t free_in_buffer; /* # of byte spaces remaining in buffer */ 0842 0843 void (*init_destination) (j_compress_ptr cinfo); 0844 boolean (*empty_output_buffer) (j_compress_ptr cinfo); 0845 void (*term_destination) (j_compress_ptr cinfo); 0846 }; 0847 0848 0849 /* Data source object for decompression */ 0850 0851 struct jpeg_source_mgr { 0852 const JOCTET *next_input_byte; /* => next byte to read from buffer */ 0853 size_t bytes_in_buffer; /* # of bytes remaining in buffer */ 0854 0855 void (*init_source) (j_decompress_ptr cinfo); 0856 boolean (*fill_input_buffer) (j_decompress_ptr cinfo); 0857 void (*skip_input_data) (j_decompress_ptr cinfo, long num_bytes); 0858 boolean (*resync_to_restart) (j_decompress_ptr cinfo, int desired); 0859 void (*term_source) (j_decompress_ptr cinfo); 0860 }; 0861 0862 0863 /* Memory manager object. 0864 * Allocates "small" objects (a few K total), "large" objects (tens of K), 0865 * and "really big" objects (virtual arrays with backing store if needed). 0866 * The memory manager does not allow individual objects to be freed; rather, 0867 * each created object is assigned to a pool, and whole pools can be freed 0868 * at once. This is faster and more convenient than remembering exactly what 0869 * to free, especially where malloc()/free() are not too speedy. 0870 * NB: alloc routines never return NULL. They exit to error_exit if not 0871 * successful. 0872 */ 0873 0874 #define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ 0875 #define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ 0876 #define JPOOL_NUMPOOLS 2 0877 0878 typedef struct jvirt_sarray_control *jvirt_sarray_ptr; 0879 typedef struct jvirt_barray_control *jvirt_barray_ptr; 0880 0881 0882 struct jpeg_memory_mgr { 0883 /* Method pointers */ 0884 void *(*alloc_small) (j_common_ptr cinfo, int pool_id, size_t sizeofobject); 0885 void *(*alloc_large) (j_common_ptr cinfo, int pool_id, 0886 size_t sizeofobject); 0887 /* If cinfo->data_precision is 12 or 16, then this method and the 0888 * access_virt_sarray method actually return a J12SAMPARRAY or a 0889 * J16SAMPARRAY, so callers must type-cast the return value in order to 0890 * read/write 12-bit or 16-bit samples from/to the array. 0891 */ 0892 JSAMPARRAY (*alloc_sarray) (j_common_ptr cinfo, int pool_id, 0893 JDIMENSION samplesperrow, JDIMENSION numrows); 0894 JBLOCKARRAY (*alloc_barray) (j_common_ptr cinfo, int pool_id, 0895 JDIMENSION blocksperrow, JDIMENSION numrows); 0896 jvirt_sarray_ptr (*request_virt_sarray) (j_common_ptr cinfo, int pool_id, 0897 boolean pre_zero, 0898 JDIMENSION samplesperrow, 0899 JDIMENSION numrows, 0900 JDIMENSION maxaccess); 0901 jvirt_barray_ptr (*request_virt_barray) (j_common_ptr cinfo, int pool_id, 0902 boolean pre_zero, 0903 JDIMENSION blocksperrow, 0904 JDIMENSION numrows, 0905 JDIMENSION maxaccess); 0906 void (*realize_virt_arrays) (j_common_ptr cinfo); 0907 JSAMPARRAY (*access_virt_sarray) (j_common_ptr cinfo, jvirt_sarray_ptr ptr, 0908 JDIMENSION start_row, JDIMENSION num_rows, 0909 boolean writable); 0910 JBLOCKARRAY (*access_virt_barray) (j_common_ptr cinfo, jvirt_barray_ptr ptr, 0911 JDIMENSION start_row, JDIMENSION num_rows, 0912 boolean writable); 0913 void (*free_pool) (j_common_ptr cinfo, int pool_id); 0914 void (*self_destruct) (j_common_ptr cinfo); 0915 0916 /* Limit on memory allocation for this JPEG object. (Note that this is 0917 * merely advisory, not a guaranteed maximum; it only affects the space 0918 * used for virtual-array buffers.) May be changed by outer application 0919 * after creating the JPEG object. 0920 */ 0921 long max_memory_to_use; 0922 0923 /* Maximum allocation request accepted by alloc_large. */ 0924 long max_alloc_chunk; 0925 }; 0926 0927 0928 /* Routine signature for application-supplied marker processing methods. 0929 * Need not pass marker code since it is stored in cinfo->unread_marker. 0930 */ 0931 typedef boolean (*jpeg_marker_parser_method) (j_decompress_ptr cinfo); 0932 0933 0934 /* Originally, this macro was used as a way of defining function prototypes 0935 * for both modern compilers as well as older compilers that did not support 0936 * prototype parameters. libjpeg-turbo has never supported these older, 0937 * non-ANSI compilers, but the macro is still included because there is some 0938 * software out there that uses it. 0939 */ 0940 0941 #define JPP(arglist) arglist 0942 0943 0944 /* Default error-management setup */ 0945 EXTERN(struct jpeg_error_mgr *) jpeg_std_error(struct jpeg_error_mgr *err); 0946 0947 /* Initialization of JPEG compression objects. 0948 * jpeg_create_compress() and jpeg_create_decompress() are the exported 0949 * names that applications should call. These expand to calls on 0950 * jpeg_CreateCompress and jpeg_CreateDecompress with additional information 0951 * passed for version mismatch checking. 0952 * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. 0953 */ 0954 #define jpeg_create_compress(cinfo) \ 0955 jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ 0956 (size_t)sizeof(struct jpeg_compress_struct)) 0957 #define jpeg_create_decompress(cinfo) \ 0958 jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ 0959 (size_t)sizeof(struct jpeg_decompress_struct)) 0960 EXTERN(void) jpeg_CreateCompress(j_compress_ptr cinfo, int version, 0961 size_t structsize); 0962 EXTERN(void) jpeg_CreateDecompress(j_decompress_ptr cinfo, int version, 0963 size_t structsize); 0964 /* Destruction of JPEG compression objects */ 0965 EXTERN(void) jpeg_destroy_compress(j_compress_ptr cinfo); 0966 EXTERN(void) jpeg_destroy_decompress(j_decompress_ptr cinfo); 0967 0968 /* Standard data source and destination managers: stdio streams. */ 0969 /* Caller is responsible for opening the file before and closing after. */ 0970 EXTERN(void) jpeg_stdio_dest(j_compress_ptr cinfo, FILE *outfile); 0971 EXTERN(void) jpeg_stdio_src(j_decompress_ptr cinfo, FILE *infile); 0972 0973 /* Data source and destination managers: memory buffers. */ 0974 EXTERN(void) jpeg_mem_dest(j_compress_ptr cinfo, unsigned char **outbuffer, 0975 unsigned long *outsize); 0976 EXTERN(void) jpeg_mem_src(j_decompress_ptr cinfo, 0977 const unsigned char *inbuffer, unsigned long insize); 0978 0979 /* Default parameter setup for compression */ 0980 EXTERN(void) jpeg_set_defaults(j_compress_ptr cinfo); 0981 /* Compression parameter setup aids */ 0982 EXTERN(void) jpeg_set_colorspace(j_compress_ptr cinfo, 0983 J_COLOR_SPACE colorspace); 0984 EXTERN(void) jpeg_default_colorspace(j_compress_ptr cinfo); 0985 EXTERN(void) jpeg_set_quality(j_compress_ptr cinfo, int quality, 0986 boolean force_baseline); 0987 EXTERN(void) jpeg_set_linear_quality(j_compress_ptr cinfo, int scale_factor, 0988 boolean force_baseline); 0989 #if JPEG_LIB_VERSION >= 70 0990 EXTERN(void) jpeg_default_qtables(j_compress_ptr cinfo, 0991 boolean force_baseline); 0992 #endif 0993 EXTERN(void) jpeg_add_quant_table(j_compress_ptr cinfo, int which_tbl, 0994 const unsigned int *basic_table, 0995 int scale_factor, boolean force_baseline); 0996 EXTERN(int) jpeg_quality_scaling(int quality); 0997 EXTERN(void) jpeg_enable_lossless(j_compress_ptr cinfo, 0998 int predictor_selection_value, 0999 int point_transform); 1000 EXTERN(void) jpeg_simple_progression(j_compress_ptr cinfo); 1001 EXTERN(void) jpeg_suppress_tables(j_compress_ptr cinfo, boolean suppress); 1002 EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table(j_common_ptr cinfo); 1003 EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table(j_common_ptr cinfo); 1004 1005 /* Main entry points for compression */ 1006 EXTERN(void) jpeg_start_compress(j_compress_ptr cinfo, 1007 boolean write_all_tables); 1008 EXTERN(JDIMENSION) jpeg_write_scanlines(j_compress_ptr cinfo, 1009 JSAMPARRAY scanlines, 1010 JDIMENSION num_lines); 1011 EXTERN(JDIMENSION) jpeg12_write_scanlines(j_compress_ptr cinfo, 1012 J12SAMPARRAY scanlines, 1013 JDIMENSION num_lines); 1014 EXTERN(JDIMENSION) jpeg16_write_scanlines(j_compress_ptr cinfo, 1015 J16SAMPARRAY scanlines, 1016 JDIMENSION num_lines); 1017 EXTERN(void) jpeg_finish_compress(j_compress_ptr cinfo); 1018 1019 #if JPEG_LIB_VERSION >= 70 1020 /* Precalculate JPEG dimensions for current compression parameters. */ 1021 EXTERN(void) jpeg_calc_jpeg_dimensions(j_compress_ptr cinfo); 1022 #endif 1023 1024 /* Replaces jpeg_write_scanlines when writing raw downsampled data. */ 1025 EXTERN(JDIMENSION) jpeg_write_raw_data(j_compress_ptr cinfo, JSAMPIMAGE data, 1026 JDIMENSION num_lines); 1027 EXTERN(JDIMENSION) jpeg12_write_raw_data(j_compress_ptr cinfo, 1028 J12SAMPIMAGE data, 1029 JDIMENSION num_lines); 1030 1031 /* Write a special marker. See libjpeg.txt concerning safe usage. */ 1032 EXTERN(void) jpeg_write_marker(j_compress_ptr cinfo, int marker, 1033 const JOCTET *dataptr, unsigned int datalen); 1034 /* Same, but piecemeal. */ 1035 EXTERN(void) jpeg_write_m_header(j_compress_ptr cinfo, int marker, 1036 unsigned int datalen); 1037 EXTERN(void) jpeg_write_m_byte(j_compress_ptr cinfo, int val); 1038 1039 /* Alternate compression function: just write an abbreviated table file */ 1040 EXTERN(void) jpeg_write_tables(j_compress_ptr cinfo); 1041 1042 /* Write ICC profile. See libjpeg.txt for usage information. */ 1043 EXTERN(void) jpeg_write_icc_profile(j_compress_ptr cinfo, 1044 const JOCTET *icc_data_ptr, 1045 unsigned int icc_data_len); 1046 1047 1048 /* Decompression startup: read start of JPEG datastream to see what's there */ 1049 EXTERN(int) jpeg_read_header(j_decompress_ptr cinfo, boolean require_image); 1050 /* Return value is one of: */ 1051 #define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ 1052 #define JPEG_HEADER_OK 1 /* Found valid image datastream */ 1053 #define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ 1054 /* If you pass require_image = TRUE (normal case), you need not check for 1055 * a TABLES_ONLY return code; an abbreviated file will cause an error exit. 1056 * JPEG_SUSPENDED is only possible if you use a data source module that can 1057 * give a suspension return (the stdio source module doesn't). 1058 */ 1059 1060 /* Main entry points for decompression */ 1061 EXTERN(boolean) jpeg_start_decompress(j_decompress_ptr cinfo); 1062 EXTERN(JDIMENSION) jpeg_read_scanlines(j_decompress_ptr cinfo, 1063 JSAMPARRAY scanlines, 1064 JDIMENSION max_lines); 1065 EXTERN(JDIMENSION) jpeg12_read_scanlines(j_decompress_ptr cinfo, 1066 J12SAMPARRAY scanlines, 1067 JDIMENSION max_lines); 1068 EXTERN(JDIMENSION) jpeg16_read_scanlines(j_decompress_ptr cinfo, 1069 J16SAMPARRAY scanlines, 1070 JDIMENSION max_lines); 1071 EXTERN(JDIMENSION) jpeg_skip_scanlines(j_decompress_ptr cinfo, 1072 JDIMENSION num_lines); 1073 EXTERN(JDIMENSION) jpeg12_skip_scanlines(j_decompress_ptr cinfo, 1074 JDIMENSION num_lines); 1075 EXTERN(void) jpeg_crop_scanline(j_decompress_ptr cinfo, JDIMENSION *xoffset, 1076 JDIMENSION *width); 1077 EXTERN(void) jpeg12_crop_scanline(j_decompress_ptr cinfo, JDIMENSION *xoffset, 1078 JDIMENSION *width); 1079 EXTERN(boolean) jpeg_finish_decompress(j_decompress_ptr cinfo); 1080 1081 /* Replaces jpeg_read_scanlines when reading raw downsampled data. */ 1082 EXTERN(JDIMENSION) jpeg_read_raw_data(j_decompress_ptr cinfo, JSAMPIMAGE data, 1083 JDIMENSION max_lines); 1084 EXTERN(JDIMENSION) jpeg12_read_raw_data(j_decompress_ptr cinfo, 1085 J12SAMPIMAGE data, 1086 JDIMENSION max_lines); 1087 1088 /* Additional entry points for buffered-image mode. */ 1089 EXTERN(boolean) jpeg_has_multiple_scans(j_decompress_ptr cinfo); 1090 EXTERN(boolean) jpeg_start_output(j_decompress_ptr cinfo, int scan_number); 1091 EXTERN(boolean) jpeg_finish_output(j_decompress_ptr cinfo); 1092 EXTERN(boolean) jpeg_input_complete(j_decompress_ptr cinfo); 1093 EXTERN(void) jpeg_new_colormap(j_decompress_ptr cinfo); 1094 EXTERN(int) jpeg_consume_input(j_decompress_ptr cinfo); 1095 /* Return value is one of: */ 1096 /* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ 1097 #define JPEG_REACHED_SOS 1 /* Reached start of new scan */ 1098 #define JPEG_REACHED_EOI 2 /* Reached end of image */ 1099 #define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ 1100 #define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ 1101 1102 /* Precalculate output dimensions for current decompression parameters. */ 1103 #if JPEG_LIB_VERSION >= 80 1104 EXTERN(void) jpeg_core_output_dimensions(j_decompress_ptr cinfo); 1105 #endif 1106 EXTERN(void) jpeg_calc_output_dimensions(j_decompress_ptr cinfo); 1107 1108 /* Control saving of COM and APPn markers into marker_list. */ 1109 EXTERN(void) jpeg_save_markers(j_decompress_ptr cinfo, int marker_code, 1110 unsigned int length_limit); 1111 1112 /* Install a special processing method for COM or APPn markers. */ 1113 EXTERN(void) jpeg_set_marker_processor(j_decompress_ptr cinfo, 1114 int marker_code, 1115 jpeg_marker_parser_method routine); 1116 1117 /* Read or write raw DCT coefficients --- useful for lossless transcoding. */ 1118 EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients(j_decompress_ptr cinfo); 1119 EXTERN(void) jpeg_write_coefficients(j_compress_ptr cinfo, 1120 jvirt_barray_ptr *coef_arrays); 1121 EXTERN(void) jpeg_copy_critical_parameters(j_decompress_ptr srcinfo, 1122 j_compress_ptr dstinfo); 1123 1124 /* If you choose to abort compression or decompression before completing 1125 * jpeg_finish_(de)compress, then you need to clean up to release memory, 1126 * temporary files, etc. You can just call jpeg_destroy_(de)compress 1127 * if you're done with the JPEG object, but if you want to clean it up and 1128 * reuse it, call this: 1129 */ 1130 EXTERN(void) jpeg_abort_compress(j_compress_ptr cinfo); 1131 EXTERN(void) jpeg_abort_decompress(j_decompress_ptr cinfo); 1132 1133 /* Generic versions of jpeg_abort and jpeg_destroy that work on either 1134 * flavor of JPEG object. These may be more convenient in some places. 1135 */ 1136 EXTERN(void) jpeg_abort(j_common_ptr cinfo); 1137 EXTERN(void) jpeg_destroy(j_common_ptr cinfo); 1138 1139 /* Default restart-marker-resync procedure for use by data source modules */ 1140 EXTERN(boolean) jpeg_resync_to_restart(j_decompress_ptr cinfo, int desired); 1141 1142 /* Read ICC profile. See libjpeg.txt for usage information. */ 1143 EXTERN(boolean) jpeg_read_icc_profile(j_decompress_ptr cinfo, 1144 JOCTET **icc_data_ptr, 1145 unsigned int *icc_data_len); 1146 1147 1148 /* These marker codes are exported since applications and data source modules 1149 * are likely to want to use them. 1150 */ 1151 1152 #define JPEG_RST0 0xD0 /* RST0 marker code */ 1153 #define JPEG_EOI 0xD9 /* EOI marker code */ 1154 #define JPEG_APP0 0xE0 /* APP0 marker code */ 1155 #define JPEG_COM 0xFE /* COM marker code */ 1156 1157 1158 /* If we have a brain-damaged compiler that emits warnings (or worse, errors) 1159 * for structure definitions that are never filled in, keep it quiet by 1160 * supplying dummy definitions for the various substructures. 1161 */ 1162 1163 #ifdef INCOMPLETE_TYPES_BROKEN 1164 #ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ 1165 struct jvirt_sarray_control { long dummy; }; 1166 struct jvirt_barray_control { long dummy; }; 1167 struct jpeg_comp_master { long dummy; }; 1168 struct jpeg_c_main_controller { long dummy; }; 1169 struct jpeg_c_prep_controller { long dummy; }; 1170 struct jpeg_c_coef_controller { long dummy; }; 1171 struct jpeg_marker_writer { long dummy; }; 1172 struct jpeg_color_converter { long dummy; }; 1173 struct jpeg_downsampler { long dummy; }; 1174 struct jpeg_forward_dct { long dummy; }; 1175 struct jpeg_entropy_encoder { long dummy; }; 1176 struct jpeg_decomp_master { long dummy; }; 1177 struct jpeg_d_main_controller { long dummy; }; 1178 struct jpeg_d_coef_controller { long dummy; }; 1179 struct jpeg_d_post_controller { long dummy; }; 1180 struct jpeg_input_controller { long dummy; }; 1181 struct jpeg_marker_reader { long dummy; }; 1182 struct jpeg_entropy_decoder { long dummy; }; 1183 struct jpeg_inverse_dct { long dummy; }; 1184 struct jpeg_upsampler { long dummy; }; 1185 struct jpeg_color_deconverter { long dummy; }; 1186 struct jpeg_color_quantizer { long dummy; }; 1187 #endif /* JPEG_INTERNALS */ 1188 #endif /* INCOMPLETE_TYPES_BROKEN */ 1189 1190 1191 /* 1192 * The JPEG library modules define JPEG_INTERNALS before including this file. 1193 * The internal structure declarations are read only when that is true. 1194 * Applications using the library should not include jpegint.h, but may wish 1195 * to include jerror.h. 1196 */ 1197 1198 #ifdef JPEG_INTERNALS 1199 #include "jpegint.h" /* fetch private declarations */ 1200 #include "jerror.h" /* fetch error codes too */ 1201 #endif 1202 1203 #ifdef __cplusplus 1204 #ifndef DONT_USE_EXTERN_C 1205 } 1206 #endif 1207 #endif 1208 1209 #endif /* JPEGLIB_H */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |