Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-05-18 08:30:04

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