# Home    # nevrax.com   
Nevrax
Nevrax.org
#News
#Mailing-list
#Documentation
#CVS
#Bugs
#License
Docs
 
Documentation  
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Search  

jpeglib.h

Go to the documentation of this file.
00001 /*
00002  * jpeglib.h
00003  *
00004  * Copyright (C) 1991-1998, Thomas G. Lane.
00005  * This file is part of the Independent JPEG Group's software.
00006  * For conditions of distribution and use, see the accompanying README file.
00007  *
00008  * This file defines the application interface for the JPEG library.
00009  * Most applications using the library need only include this file,
00010  * and perhaps jerror.h if they want to know the exact error codes.
00011  */
00012 
00013 #ifndef JPEGLIB_H
00014 #define JPEGLIB_H
00015 
00016 /*
00017  * First we include the configuration files that record how this
00018  * installation of the JPEG library is set up.  jconfig.h can be
00019  * generated automatically for many systems.  jmorecfg.h contains
00020  * manual configuration options that most people need not worry about.
00021  */
00022 
00023 #ifndef JCONFIG_INCLUDED        /* in case jinclude.h already did */
00024 #include "jconfig.h"            /* widely used configuration options */
00025 #endif
00026 #include "jmorecfg.h"           /* seldom changed options */
00027 
00028 
00029 /* Version ID for the JPEG library.
00030  * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60".
00031  */
00032 
00033 #define JPEG_LIB_VERSION  62    /* Version 6b */
00034 
00035 
00036 /* Various constants determining the sizes of things.
00037  * All of these are specified by the JPEG standard, so don't change them
00038  * if you want to be compatible.
00039  */
00040 
00041 #define DCTSIZE             8   /* The basic DCT block is 8x8 samples */
00042 #define DCTSIZE2            64  /* DCTSIZE squared; # of elements in a block */
00043 #define NUM_QUANT_TBLS      4   /* Quantization tables are numbered 0..3 */
00044 #define NUM_HUFF_TBLS       4   /* Huffman tables are numbered 0..3 */
00045 #define NUM_ARITH_TBLS      16  /* Arith-coding tables are numbered 0..15 */
00046 #define MAX_COMPS_IN_SCAN   4   /* JPEG limit on # of components in one scan */
00047 #define MAX_SAMP_FACTOR     4   /* JPEG limit on sampling factors */
00048 /* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard;
00049  * the PostScript DCT filter can emit files with many more than 10 blocks/MCU.
00050  * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU
00051  * to handle it.  We even let you do this from the jconfig.h file.  However,
00052  * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe
00053  * sometimes emits noncompliant files doesn't mean you should too.
00054  */
00055 #define C_MAX_BLOCKS_IN_MCU   10 /* compressor's limit on blocks per MCU */
00056 #ifndef D_MAX_BLOCKS_IN_MCU
00057 #define D_MAX_BLOCKS_IN_MCU   10 /* decompressor's limit on blocks per MCU */
00058 #endif
00059 
00060 
00061 /* Data structures for images (arrays of samples and of DCT coefficients).
00062  * On 80x86 machines, the image arrays are too big for near pointers,
00063  * but the pointer arrays can fit in near memory.
00064  */
00065 
00066 typedef JSAMPLE FAR *JSAMPROW;  /* ptr to one image row of pixel samples. */
00067 typedef JSAMPROW *JSAMPARRAY;   /* ptr to some rows (a 2-D sample array) */
00068 typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */
00069 
00070 typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */
00071 typedef JBLOCK FAR *JBLOCKROW;  /* pointer to one row of coefficient blocks */
00072 typedef JBLOCKROW *JBLOCKARRAY;         /* a 2-D array of coefficient blocks */
00073 typedef JBLOCKARRAY *JBLOCKIMAGE;       /* a 3-D array of coefficient blocks */
00074 
00075 typedef JCOEF FAR *JCOEFPTR;    /* useful in a couple of places */
00076 
00077 
00078 /* Types for JPEG compression parameters and working tables. */
00079 
00080 
00081 /* DCT coefficient quantization tables. */
00082 
00083 typedef struct {
00084   /* This array gives the coefficient quantizers in natural array order
00085    * (not the zigzag order in which they are stored in a JPEG DQT marker).
00086    * CAUTION: IJG versions prior to v6a kept this array in zigzag order.
00087    */
00088   UINT16 quantval[DCTSIZE2];    /* quantization step for each coefficient */
00089   /* This field is used only during compression.  It's initialized FALSE when
00090    * the table is created, and set TRUE when it's been output to the file.
00091    * You could suppress output of a table by setting this to TRUE.
00092    * (See jpeg_suppress_tables for an example.)
00093    */
00094   boolean sent_table;           /* TRUE when table has been output */
00095 } JQUANT_TBL;
00096 
00097 
00098 /* Huffman coding tables. */
00099 
00100 typedef struct {
00101   /* These two fields directly represent the contents of a JPEG DHT marker */
00102   UINT8 bits[17];               /* bits[k] = # of symbols with codes of */
00103                                 /* length k bits; bits[0] is unused */
00104   UINT8 huffval[256];           /* The symbols, in order of incr code length */
00105   /* This field is used only during compression.  It's initialized FALSE when
00106    * the table is created, and set TRUE when it's been output to the file.
00107    * You could suppress output of a table by setting this to TRUE.
00108    * (See jpeg_suppress_tables for an example.)
00109    */
00110   boolean sent_table;           /* TRUE when table has been output */
00111 } JHUFF_TBL;
00112 
00113 
00114 /* Basic info about one component (color channel). */
00115 
00116 typedef struct {
00117   /* These values are fixed over the whole image. */
00118   /* For compression, they must be supplied by parameter setup; */
00119   /* for decompression, they are read from the SOF marker. */
00120   int component_id;             /* identifier for this component (0..255) */
00121   int component_index;          /* its index in SOF or cinfo->comp_info[] */
00122   int h_samp_factor;            /* horizontal sampling factor (1..4) */
00123   int v_samp_factor;            /* vertical sampling factor (1..4) */
00124   int quant_tbl_no;             /* quantization table selector (0..3) */
00125   /* These values may vary between scans. */
00126   /* For compression, they must be supplied by parameter setup; */
00127   /* for decompression, they are read from the SOS marker. */
00128   /* The decompressor output side may not use these variables. */
00129   int dc_tbl_no;                /* DC entropy table selector (0..3) */
00130   int ac_tbl_no;                /* AC entropy table selector (0..3) */
00131   
00132   /* Remaining fields should be treated as private by applications. */
00133   
00134   /* These values are computed during compression or decompression startup: */
00135   /* Component's size in DCT blocks.
00136    * Any dummy blocks added to complete an MCU are not counted; therefore
00137    * these values do not depend on whether a scan is interleaved or not.
00138    */
00139   JDIMENSION width_in_blocks;
00140   JDIMENSION height_in_blocks;
00141   /* Size of a DCT block in samples.  Always DCTSIZE for compression.
00142    * For decompression this is the size of the output from one DCT block,
00143    * reflecting any scaling we choose to apply during the IDCT step.
00144    * Values of 1,2,4,8 are likely to be supported.  Note that different
00145    * components may receive different IDCT scalings.
00146    */
00147   int DCT_scaled_size;
00148   /* The downsampled dimensions are the component's actual, unpadded number
00149    * of samples at the main buffer (preprocessing/compression interface), thus
00150    * downsampled_width = ceil(image_width * Hi/Hmax)
00151    * and similarly for height.  For decompression, IDCT scaling is included, so
00152    * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
00153    */
00154   JDIMENSION downsampled_width;  /* actual width in samples */
00155   JDIMENSION downsampled_height; /* actual height in samples */
00156   /* This flag is used only for decompression.  In cases where some of the
00157    * components will be ignored (eg grayscale output from YCbCr image),
00158    * we can skip most computations for the unused components.
00159    */
00160   boolean component_needed;     /* do we need the value of this component? */
00161 
00162   /* These values are computed before starting a scan of the component. */
00163   /* The decompressor output side may not use these variables. */
00164   int MCU_width;                /* number of blocks per MCU, horizontally */
00165   int MCU_height;               /* number of blocks per MCU, vertically */
00166   int MCU_blocks;               /* MCU_width * MCU_height */
00167   int MCU_sample_width;         /* MCU width in samples, MCU_width*DCT_scaled_size */
00168   int last_col_width;           /* # of non-dummy blocks across in last MCU */
00169   int last_row_height;          /* # of non-dummy blocks down in last MCU */
00170 
00171   /* Saved quantization table for component; NULL if none yet saved.
00172    * See jdinput.c comments about the need for this information.
00173    * This field is currently used only for decompression.
00174    */
00175   JQUANT_TBL * quant_table;
00176 
00177   /* Private per-component storage for DCT or IDCT subsystem. */
00178   void * dct_table;
00179 } jpeg_component_info;
00180 
00181 
00182 /* The script for encoding a multiple-scan file is an array of these: */
00183 
00184 typedef struct {
00185   int comps_in_scan;            /* number of components encoded in this scan */
00186   int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */
00187   int Ss, Se;                   /* progressive JPEG spectral selection parms */
00188   int Ah, Al;                   /* progressive JPEG successive approx. parms */
00189 } jpeg_scan_info;
00190 
00191 /* The decompressor can save APPn and COM markers in a list of these: */
00192 
00193 typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr;
00194 
00195 struct jpeg_marker_struct {
00196   jpeg_saved_marker_ptr next;   /* next in list, or NULL */
00197   UINT8 marker;                 /* marker code: JPEG_COM, or JPEG_APP0+n */
00198   unsigned int original_length; /* # bytes of data in the file */
00199   unsigned int data_length;     /* # bytes of data saved at data[] */
00200   JOCTET FAR * data;            /* the data contained in the marker */
00201   /* the marker length word is not counted in data_length or original_length */
00202 };
00203 
00204 /* Known color spaces. */
00205 
00206 typedef enum {
00207         JCS_UNKNOWN,            /* error/unspecified */
00208         JCS_GRAYSCALE,          /* monochrome */
00209         JCS_RGB,                /* red/green/blue */
00210         JCS_YCbCr,              /* Y/Cb/Cr (also known as YUV) */
00211         JCS_CMYK,               /* C/M/Y/K */
00212         JCS_YCCK                /* Y/Cb/Cr/K */
00213 } J_COLOR_SPACE;
00214 
00215 /* DCT/IDCT algorithm options. */
00216 
00217 typedef enum {
00218         JDCT_ISLOW,             /* slow but accurate integer algorithm */
00219         JDCT_IFAST,             /* faster, less accurate integer method */
00220         JDCT_FLOAT              /* floating-point: accurate, fast on fast HW */
00221 } J_DCT_METHOD;
00222 
00223 #ifndef JDCT_DEFAULT            /* may be overridden in jconfig.h */
00224 #define JDCT_DEFAULT  JDCT_ISLOW
00225 #endif
00226 #ifndef JDCT_FASTEST            /* may be overridden in jconfig.h */
00227 #define JDCT_FASTEST  JDCT_IFAST
00228 #endif
00229 
00230 /* Dithering options for decompression. */
00231 
00232 typedef enum {
00233         JDITHER_NONE,           /* no dithering */
00234         JDITHER_ORDERED,        /* simple ordered dither */
00235         JDITHER_FS              /* Floyd-Steinberg error diffusion dither */
00236 } J_DITHER_MODE;
00237 
00238 
00239 /* Common fields between JPEG compression and decompression master structs. */
00240 
00241 #define jpeg_common_fields \
00242   struct jpeg_error_mgr * err;  /* Error handler module */\
00243   struct jpeg_memory_mgr * mem; /* Memory manager module */\
00244   struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
00245   void * client_data;           /* Available for use by application */\
00246   boolean is_decompressor;      /* So common code can tell which is which */\
00247   int global_state              /* For checking call sequence validity */
00248 
00249 /* Routines that are to be used by both halves of the library are declared
00250  * to receive a pointer to this structure.  There are no actual instances of
00251  * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
00252  */
00253 struct jpeg_common_struct {
00254   jpeg_common_fields;           /* Fields common to both master struct types */
00255   /* Additional fields follow in an actual jpeg_compress_struct or
00256    * jpeg_decompress_struct.  All three structs must agree on these
00257    * initial fields!  (This would be a lot cleaner in C++.)
00258    */
00259 };
00260 
00261 typedef struct jpeg_common_struct * j_common_ptr;
00262 typedef struct jpeg_compress_struct * j_compress_ptr;
00263 typedef struct jpeg_decompress_struct * j_decompress_ptr;
00264 
00265 
00266 /* Master record for a compression instance */
00267 
00268 struct jpeg_compress_struct {
00269   jpeg_common_fields;           /* Fields shared with jpeg_decompress_struct */
00270 
00271   /* Destination for compressed data */
00272   struct jpeg_destination_mgr * dest;
00273 
00274   /* Description of source image --- these fields must be filled in by
00275    * outer application before starting compression.  in_color_space must
00276    * be correct before you can even call jpeg_set_defaults().
00277    */
00278 
00279   JDIMENSION image_width;       /* input image width */
00280   JDIMENSION image_height;      /* input image height */
00281   int input_components;         /* # of color components in input image */
00282   J_COLOR_SPACE in_color_space; /* colorspace of input image */
00283 
00284   double input_gamma;           /* image gamma of input image */
00285 
00286   /* Compression parameters --- these fields must be set before calling
00287    * jpeg_start_compress().  We recommend calling jpeg_set_defaults() to
00288    * initialize everything to reasonable defaults, then changing anything
00289    * the application specifically wants to change.  That way you won't get
00290    * burnt when new parameters are added.  Also note that there are several
00291    * helper routines to simplify changing parameters.
00292    */
00293 
00294   int data_precision;           /* bits of precision in image data */
00295 
00296   int num_components;           /* # of color components in JPEG image */
00297   J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
00298 
00299   jpeg_component_info * comp_info;
00300   /* comp_info[i] describes component that appears i'th in SOF */
00301   
00302   JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
00303   /* ptrs to coefficient quantization tables, or NULL if not defined */
00304   
00305   JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
00306   JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
00307   /* ptrs to Huffman coding tables, or NULL if not defined */
00308   
00309   UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
00310   UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
00311   UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
00312 
00313   int num_scans;                /* # of entries in scan_info array */
00314   const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */
00315   /* The default value of scan_info is NULL, which causes a single-scan
00316    * sequential JPEG file to be emitted.  To create a multi-scan file,
00317    * set num_scans and scan_info to point to an array of scan definitions.
00318    */
00319 
00320   boolean raw_data_in;          /* TRUE=caller supplies downsampled data */
00321   boolean arith_code;           /* TRUE=arithmetic coding, FALSE=Huffman */
00322   boolean optimize_coding;      /* TRUE=optimize entropy encoding parms */
00323   boolean CCIR601_sampling;     /* TRUE=first samples are cosited */
00324   int smoothing_factor;         /* 1..100, or 0 for no input smoothing */
00325   J_DCT_METHOD dct_method;      /* DCT algorithm selector */
00326 
00327   /* The restart interval can be specified in absolute MCUs by setting
00328    * restart_interval, or in MCU rows by setting restart_in_rows
00329    * (in which case the correct restart_interval will be figured
00330    * for each scan).
00331    */
00332   unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
00333   int restart_in_rows;          /* if > 0, MCU rows per restart interval */
00334 
00335   /* Parameters controlling emission of special markers. */
00336 
00337   boolean write_JFIF_header;    /* should a JFIF marker be written? */
00338   UINT8 JFIF_major_version;     /* What to write for the JFIF version number */
00339   UINT8 JFIF_minor_version;
00340   /* These three values are not used by the JPEG code, merely copied */
00341   /* into the JFIF APP0 marker.  density_unit can be 0 for unknown, */
00342   /* 1 for dots/inch, or 2 for dots/cm.  Note that the pixel aspect */
00343   /* ratio is defined by X_density/Y_density even when density_unit=0. */
00344   UINT8 density_unit;           /* JFIF code for pixel size units */
00345   UINT16 X_density;             /* Horizontal pixel density */
00346   UINT16 Y_density;             /* Vertical pixel density */
00347   boolean write_Adobe_marker;   /* should an Adobe marker be written? */
00348   
00349   /* State variable: index of next scanline to be written to
00350    * jpeg_write_scanlines().  Application may use this to control its
00351    * processing loop, e.g., "while (next_scanline < image_height)".
00352    */
00353 
00354   JDIMENSION next_scanline;     /* 0 .. image_height-1  */
00355 
00356   /* Remaining fields are known throughout compressor, but generally
00357    * should not be touched by a surrounding application.
00358    */
00359 
00360   /*
00361    * These fields are computed during compression startup
00362    */
00363   boolean progressive_mode;     /* TRUE if scan script uses progressive mode */
00364   int max_h_samp_factor;        /* largest h_samp_factor */
00365   int max_v_samp_factor;        /* largest v_samp_factor */
00366 
00367   JDIMENSION total_iMCU_rows;   /* # of iMCU rows to be input to coef ctlr */
00368   /* The coefficient controller receives data in units of MCU rows as defined
00369    * for fully interleaved scans (whether the JPEG file is interleaved or not).
00370    * There are v_samp_factor * DCTSIZE sample rows of each component in an
00371    * "iMCU" (interleaved MCU) row.
00372    */
00373   
00374   /*
00375    * These fields are valid during any one scan.
00376    * They describe the components and MCUs actually appearing in the scan.
00377    */
00378   int comps_in_scan;            /* # of JPEG components in this scan */
00379   jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
00380   /* *cur_comp_info[i] describes component that appears i'th in SOS */
00381   
00382   JDIMENSION MCUs_per_row;      /* # of MCUs across the image */
00383   JDIMENSION MCU_rows_in_scan;  /* # of MCU rows in the image */
00384   
00385   int blocks_in_MCU;            /* # of DCT blocks per MCU */
00386   int MCU_membership[C_MAX_BLOCKS_IN_MCU];
00387   /* MCU_membership[i] is index in cur_comp_info of component owning */
00388   /* i'th block in an MCU */
00389 
00390   int Ss, Se, Ah, Al;           /* progressive JPEG parameters for scan */
00391 
00392   /*
00393    * Links to compression subobjects (methods and private variables of modules)
00394    */
00395   struct jpeg_comp_master * master;
00396   struct jpeg_c_main_controller * main;
00397   struct jpeg_c_prep_controller * prep;
00398   struct jpeg_c_coef_controller * coef;
00399   struct jpeg_marker_writer * marker;
00400   struct jpeg_color_converter * cconvert;
00401   struct jpeg_downsampler * downsample;
00402   struct jpeg_forward_dct * fdct;
00403   struct jpeg_entropy_encoder * entropy;
00404   jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */
00405   int script_space_size;
00406 };
00407 
00408 
00409 /* Master record for a decompression instance */
00410 
00411 struct jpeg_decompress_struct {
00412   jpeg_common_fields;           /* Fields shared with jpeg_compress_struct */
00413 
00414   /* Source of compressed data */
00415   struct jpeg_source_mgr * src;
00416 
00417   /* Basic description of image --- filled in by jpeg_read_header(). */
00418   /* Application may inspect these values to decide how to process image. */
00419 
00420   JDIMENSION image_width;       /* nominal image width (from SOF marker) */
00421   JDIMENSION image_height;      /* nominal image height */
00422   int num_components;           /* # of color components in JPEG image */
00423   J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
00424 
00425   /* Decompression processing parameters --- these fields must be set before
00426    * calling jpeg_start_decompress().  Note that jpeg_read_header() initializes
00427    * them to default values.
00428    */
00429 
00430   J_COLOR_SPACE out_color_space; /* colorspace for output */
00431 
00432   unsigned int scale_num, scale_denom; /* fraction by which to scale image */
00433 
00434   double output_gamma;          /* image gamma wanted in output */
00435 
00436   boolean buffered_image;       /* TRUE=multiple output passes */
00437   boolean raw_data_out;         /* TRUE=downsampled data wanted */
00438 
00439   J_DCT_METHOD dct_method;      /* IDCT algorithm selector */
00440   boolean do_fancy_upsampling;  /* TRUE=apply fancy upsampling */
00441   boolean do_block_smoothing;   /* TRUE=apply interblock smoothing */
00442 
00443   boolean quantize_colors;      /* TRUE=colormapped output wanted */
00444   /* the following are ignored if not quantize_colors: */
00445   J_DITHER_MODE dither_mode;    /* type of color dithering to use */
00446   boolean two_pass_quantize;    /* TRUE=use two-pass color quantization */
00447   int desired_number_of_colors; /* max # colors to use in created colormap */
00448   /* these are significant only in buffered-image mode: */
00449   boolean enable_1pass_quant;   /* enable future use of 1-pass quantizer */
00450   boolean enable_external_quant;/* enable future use of external colormap */
00451   boolean enable_2pass_quant;   /* enable future use of 2-pass quantizer */
00452 
00453   /* Description of actual output image that will be returned to application.
00454    * These fields are computed by jpeg_start_decompress().
00455    * You can also use jpeg_calc_output_dimensions() to determine these values
00456    * in advance of calling jpeg_start_decompress().
00457    */
00458 
00459   JDIMENSION output_width;      /* scaled image width */
00460   JDIMENSION output_height;     /* scaled image height */
00461   int out_color_components;     /* # of color components in out_color_space */
00462   int output_components;        /* # of color components returned */
00463   /* output_components is 1 (a colormap index) when quantizing colors;
00464    * otherwise it equals out_color_components.
00465    */
00466   int rec_outbuf_height;        /* min recommended height of scanline buffer */
00467   /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
00468    * high, space and time will be wasted due to unnecessary data copying.
00469    * Usually rec_outbuf_height will be 1 or 2, at most 4.
00470    */
00471 
00472   /* When quantizing colors, the output colormap is described by these fields.
00473    * The application can supply a colormap by setting colormap non-NULL before
00474    * calling jpeg_start_decompress; otherwise a colormap is created during
00475    * jpeg_start_decompress or jpeg_start_output.
00476    * The map has out_color_components rows and actual_number_of_colors columns.
00477    */
00478   int actual_number_of_colors;  /* number of entries in use */
00479   JSAMPARRAY colormap;          /* The color map as a 2-D pixel array */
00480 
00481   /* State variables: these variables indicate the progress of decompression.
00482    * The application may examine these but must not modify them.
00483    */
00484 
00485   /* Row index of next scanline to be read from jpeg_read_scanlines().
00486    * Application may use this to control its processing loop, e.g.,
00487    * "while (output_scanline < output_height)".
00488    */
00489   JDIMENSION output_scanline;   /* 0 .. output_height-1  */
00490 
00491   /* Current input scan number and number of iMCU rows completed in scan.
00492    * These indicate the progress of the decompressor input side.
00493    */
00494   int input_scan_number;        /* Number of SOS markers seen so far */
00495   JDIMENSION input_iMCU_row;    /* Number of iMCU rows completed */
00496 
00497   /* The "output scan number" is the notional scan being displayed by the
00498    * output side.  The decompressor will not allow output scan/row number
00499    * to get ahead of input scan/row, but it can fall arbitrarily far behind.
00500    */
00501   int output_scan_number;       /* Nominal scan number being displayed */
00502   JDIMENSION output_iMCU_row;   /* Number of iMCU rows read */
00503 
00504   /* Current progression status.  coef_bits[c][i] indicates the precision
00505    * with which component c's DCT coefficient i (in zigzag order) is known.
00506    * It is -1 when no data has yet been received, otherwise it is the point
00507    * transform (shift) value for the most recent scan of the coefficient
00508    * (thus, 0 at completion of the progression).
00509    * This pointer is NULL when reading a non-progressive file.
00510    */
00511   int (*coef_bits)[DCTSIZE2];   /* -1 or current Al value for each coef */
00512 
00513   /* Internal JPEG parameters --- the application usually need not look at
00514    * these fields.  Note that the decompressor output side may not use
00515    * any parameters that can change between scans.
00516    */
00517 
00518   /* Quantization and Huffman tables are carried forward across input
00519    * datastreams when processing abbreviated JPEG datastreams.
00520    */
00521 
00522   JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
00523   /* ptrs to coefficient quantization tables, or NULL if not defined */
00524 
00525   JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
00526   JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
00527   /* ptrs to Huffman coding tables, or NULL if not defined */
00528 
00529   /* These parameters are never carried across datastreams, since they
00530    * are given in SOF/SOS markers or defined to be reset by SOI.
00531    */
00532 
00533   int data_precision;           /* bits of precision in image data */
00534 
00535   jpeg_component_info * comp_info;
00536   /* comp_info[i] describes component that appears i'th in SOF */
00537 
00538   boolean progressive_mode;     /* TRUE if SOFn specifies progressive mode */
00539   boolean arith_code;           /* TRUE=arithmetic coding, FALSE=Huffman */
00540 
00541   UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
00542   UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
00543   UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
00544 
00545   unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */
00546 
00547   /* These fields record data obtained from optional markers recognized by
00548    * the JPEG library.
00549    */
00550   boolean saw_JFIF_marker;      /* TRUE iff a JFIF APP0 marker was found */
00551   /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
00552   UINT8 JFIF_major_version;     /* JFIF version number */
00553   UINT8 JFIF_minor_version;
00554   UINT8 density_unit;           /* JFIF code for pixel size units */
00555   UINT16 X_density;             /* Horizontal pixel density */
00556   UINT16 Y_density;             /* Vertical pixel density */
00557   boolean saw_Adobe_marker;     /* TRUE iff an Adobe APP14 marker was found */
00558   UINT8 Adobe_transform;        /* Color transform code from Adobe marker */
00559 
00560   boolean CCIR601_sampling;     /* TRUE=first samples are cosited */
00561 
00562   /* Aside from the specific data retained from APPn markers known to the
00563    * library, the uninterpreted contents of any or all APPn and COM markers
00564    * can be saved in a list for examination by the application.
00565    */
00566   jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
00567 
00568   /* Remaining fields are known throughout decompressor, but generally
00569    * should not be touched by a surrounding application.
00570    */
00571 
00572   /*
00573    * These fields are computed during decompression startup
00574    */
00575   int max_h_samp_factor;        /* largest h_samp_factor */
00576   int max_v_samp_factor;        /* largest v_samp_factor */
00577 
00578   int min_DCT_scaled_size;      /* smallest DCT_scaled_size of any component */
00579 
00580   JDIMENSION total_iMCU_rows;   /* # of iMCU rows in image */
00581   /* The coefficient controller's input and output progress is measured in
00582    * units of "iMCU" (interleaved MCU) rows.  These are the same as MCU rows
00583    * in fully interleaved JPEG scans, but are used whether the scan is
00584    * interleaved or not.  We define an iMCU row as v_samp_factor DCT block
00585    * rows of each component.  Therefore, the IDCT output contains
00586    * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row.
00587    */
00588 
00589   JSAMPLE * sample_range_limit; /* table for fast range-limiting */
00590 
00591   /*
00592    * These fields are valid during any one scan.
00593    * They describe the components and MCUs actually appearing in the scan.
00594    * Note that the decompressor output side must not use these fields.
00595    */
00596   int comps_in_scan;            /* # of JPEG components in this scan */
00597   jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
00598   /* *cur_comp_info[i] describes component that appears i'th in SOS */
00599 
00600   JDIMENSION MCUs_per_row;      /* # of MCUs across the image */
00601   JDIMENSION MCU_rows_in_scan;  /* # of MCU rows in the image */
00602 
00603   int blocks_in_MCU;            /* # of DCT blocks per MCU */
00604   int MCU_membership[D_MAX_BLOCKS_IN_MCU];
00605   /* MCU_membership[i] is index in cur_comp_info of component owning */
00606   /* i'th block in an MCU */
00607 
00608   int Ss, Se, Ah, Al;           /* progressive JPEG parameters for scan */
00609 
00610   /* This field is shared between entropy decoder and marker parser.
00611    * It is either zero or the code of a JPEG marker that has been
00612    * read from the data source, but has not yet been processed.
00613    */
00614   int unread_marker;
00615 
00616   /*
00617    * Links to decompression subobjects (methods, private variables of modules)
00618    */
00619   struct jpeg_decomp_master * master;
00620   struct jpeg_d_main_controller * main;
00621   struct jpeg_d_coef_controller * coef;
00622   struct jpeg_d_post_controller * post;
00623   struct jpeg_input_controller * inputctl;
00624   struct jpeg_marker_reader * marker;
00625   struct jpeg_entropy_decoder * entropy;
00626   struct jpeg_inverse_dct * idct;
00627   struct jpeg_upsampler * upsample;
00628   struct jpeg_color_deconverter * cconvert;
00629   struct jpeg_color_quantizer * cquantize;
00630 };
00631 
00632 
00633 /* "Object" declarations for JPEG modules that may be supplied or called
00634  * directly by the surrounding application.
00635  * As with all objects in the JPEG library, these structs only define the
00636  * publicly visible methods and state variables of a module.  Additional
00637  * private fields may exist after the public ones.
00638  */
00639 
00640 
00641 /* Error handler object */
00642 
00643 struct jpeg_error_mgr {
00644   /* Error exit handler: does not return to caller */
00645   JMETHOD(void, error_exit, (j_common_ptr cinfo));
00646   /* Conditionally emit a trace or warning message */
00647   JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));
00648   /* Routine that actually outputs a trace or error message */
00649   JMETHOD(void, output_message, (j_common_ptr cinfo));
00650   /* Format a message string for the most recent JPEG error or message */
00651   JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer));
00652 #define JMSG_LENGTH_MAX  200    /* recommended size of format_message buffer */
00653   /* Reset error state variables at start of a new image */
00654   JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo));
00655   
00656   /* The message ID code and any parameters are saved here.
00657    * A message can have one string parameter or up to 8 int parameters.
00658    */
00659   int msg_code;
00660 #define JMSG_STR_PARM_MAX  80
00661   union {
00662     int i[8];
00663     char s[JMSG_STR_PARM_MAX];
00664   } msg_parm;
00665   
00666   /* Standard state variables for error facility */
00667   
00668   int trace_level;              /* max msg_level that will be displayed */
00669   
00670   /* For recoverable corrupt-data errors, we emit a warning message,
00671    * but keep going unless emit_message chooses to abort.  emit_message
00672    * should count warnings in num_warnings.  The surrounding application
00673    * can check for bad data by seeing if num_warnings is nonzero at the
00674    * end of processing.
00675    */
00676   long num_warnings;            /* number of corrupt-data warnings */
00677 
00678   /* These fields point to the table(s) of error message strings.
00679    * An application can change the table pointer to switch to a different
00680    * message list (typically, to change the language in which errors are
00681    * reported).  Some applications may wish to add additional error codes
00682    * that will be handled by the JPEG library error mechanism; the second
00683    * table pointer is used for this purpose.
00684    *
00685    * First table includes all errors generated by JPEG library itself.
00686    * Error code 0 is reserved for a "no such error string" message.
00687    */
00688   const char * const * jpeg_message_table; /* Library errors */
00689   int last_jpeg_message;    /* Table contains strings 0..last_jpeg_message */
00690   /* Second table can be added by application (see cjpeg/djpeg for example).
00691    * It contains strings numbered first_addon_message..last_addon_message.
00692    */
00693   const char * const * addon_message_table; /* Non-library errors */
00694   int first_addon_message;      /* code for first string in addon table */
00695   int last_addon_message;       /* code for last string in addon table */
00696 };
00697 
00698 
00699 /* Progress monitor object */
00700 
00701 struct jpeg_progress_mgr {
00702   JMETHOD(void, progress_monitor, (j_common_ptr cinfo));
00703 
00704   long pass_counter;            /* work units completed in this pass */
00705   long pass_limit;              /* total number of work units in this pass */
00706   int completed_passes;         /* passes completed so far */
00707   int total_passes;             /* total number of passes expected */
00708 };
00709 
00710 
00711 /* Data destination object for compression */
00712 
00713 struct jpeg_destination_mgr {
00714   JOCTET * next_output_byte;    /* => next byte to write in buffer */
00715   size_t free_in_buffer;        /* # of byte spaces remaining in buffer */
00716 
00717   JMETHOD(void, init_destination, (j_compress_ptr cinfo));
00718   JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));
00719   JMETHOD(void, term_destination, (j_compress_ptr cinfo));
00720 };
00721 
00722 
00723 /* Data source object for decompression */
00724 
00725 struct jpeg_source_mgr {
00726   const JOCTET * next_input_byte; /* => next byte to read from buffer */
00727   size_t bytes_in_buffer;       /* # of bytes remaining in buffer */
00728 
00729   JMETHOD(void, init_source, (j_decompress_ptr cinfo));
00730   JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo));
00731   JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes));
00732   JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired));
00733   JMETHOD(void, term_source, (j_decompress_ptr cinfo));
00734 };
00735 
00736 
00737 /* Memory manager object.
00738  * Allocates "small" objects (a few K total), "large" objects (tens of K),
00739  * and "really big" objects (virtual arrays with backing store if needed).
00740  * The memory manager does not allow individual objects to be freed; rather,
00741  * each created object is assigned to a pool, and whole pools can be freed
00742  * at once.  This is faster and more convenient than remembering exactly what
00743  * to free, especially where malloc()/free() are not too speedy.
00744  * NB: alloc routines never return NULL.  They exit to error_exit if not
00745  * successful.
00746  */
00747 
00748 #define JPOOL_PERMANENT 0       /* lasts until master record is destroyed */
00749 #define JPOOL_IMAGE     1       /* lasts until done with image/datastream */
00750 #define JPOOL_NUMPOOLS  2
00751 
00752 typedef struct jvirt_sarray_control * jvirt_sarray_ptr;
00753 typedef struct jvirt_barray_control * jvirt_barray_ptr;
00754 
00755 
00756 struct jpeg_memory_mgr {
00757   /* Method pointers */
00758   JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id,
00759                                 size_t sizeofobject));
00760   JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id,
00761                                      size_t sizeofobject));
00762   JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id,
00763                                      JDIMENSION samplesperrow,
00764                                      JDIMENSION numrows));
00765   JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id,
00766                                       JDIMENSION blocksperrow,
00767                                       JDIMENSION numrows));
00768   JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo,
00769                                                   int pool_id,
00770                                                   boolean pre_zero,
00771                                                   JDIMENSION samplesperrow,
00772                                                   JDIMENSION numrows,
00773                                                   JDIMENSION maxaccess));
00774   JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo,
00775                                                   int pool_id,
00776                                                   boolean pre_zero,
00777                                                   JDIMENSION blocksperrow,
00778                                                   JDIMENSION numrows,
00779                                                   JDIMENSION maxaccess));
00780   JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo));
00781   JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo,
00782                                            jvirt_sarray_ptr ptr,
00783                                            JDIMENSION start_row,
00784                                            JDIMENSION num_rows,
00785                                            boolean writable));
00786   JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo,
00787                                             jvirt_barray_ptr ptr,
00788                                             JDIMENSION start_row,
00789                                             JDIMENSION num_rows,
00790                                             boolean writable));
00791   JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id));
00792   JMETHOD(void, self_destruct, (j_common_ptr cinfo));
00793 
00794   /* Limit on memory allocation for this JPEG object.  (Note that this is
00795    * merely advisory, not a guaranteed maximum; it only affects the space
00796    * used for virtual-array buffers.)  May be changed by outer application
00797    * after creating the JPEG object.
00798    */
00799   long max_memory_to_use;
00800 
00801   /* Maximum allocation request accepted by alloc_large. */
00802   long max_alloc_chunk;
00803 };
00804 
00805 
00806 /* Routine signature for application-supplied marker processing methods.
00807  * Need not pass marker code since it is stored in cinfo->unread_marker.
00808  */
00809 typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));
00810 
00811 
00812 /* Declarations for routines called by application.
00813  * The JPP macro hides prototype parameters from compilers that can't cope.
00814  * Note JPP requires double parentheses.
00815  */
00816 
00817 #ifdef HAVE_PROTOTYPES
00818 #define JPP(arglist)    arglist
00819 #else
00820 #define JPP(arglist)    ()
00821 #endif
00822 
00823 
00824 /* Short forms of external names for systems with brain-damaged linkers.
00825  * We shorten external names to be unique in the first six letters, which
00826  * is good enough for all known systems.
00827  * (If your compiler itself needs names to be unique in less than 15 
00828  * characters, you are out of luck.  Get a better compiler.)
00829  */
00830 
00831 #ifdef NEED_SHORT_EXTERNAL_NAMES
00832 #define jpeg_std_error          jStdError
00833 #define jpeg_CreateCompress     jCreaCompress
00834 #define jpeg_CreateDecompress   jCreaDecompress
00835 #define jpeg_destroy_compress   jDestCompress
00836 #define jpeg_destroy_decompress jDestDecompress
00837 #define jpeg_stdio_dest         jStdDest
00838 #define jpeg_stdio_src          jStdSrc
00839 #define jpeg_set_defaults       jSetDefaults
00840 #define jpeg_set_colorspace     jSetColorspace
00841 #define jpeg_default_colorspace jDefColorspace
00842 #define jpeg_set_quality        jSetQuality
00843 #define jpeg_set_linear_quality jSetLQuality
00844 #define jpeg_add_quant_table    jAddQuantTable
00845 #define jpeg_quality_scaling    jQualityScaling
00846 #define jpeg_simple_progression jSimProgress
00847 #define jpeg_suppress_tables    jSuppressTables
00848 #define jpeg_alloc_quant_table  jAlcQTable
00849 #define jpeg_alloc_huff_table   jAlcHTable
00850 #define jpeg_start_compress     jStrtCompress
00851 #define jpeg_write_scanlines    jWrtScanlines
00852 #define jpeg_finish_compress    jFinCompress
00853 #define jpeg_write_raw_data     jWrtRawData
00854 #define jpeg_write_marker       jWrtMarker
00855 #define jpeg_write_m_header     jWrtMHeader
00856 #define jpeg_write_m_byte       jWrtMByte
00857 #define jpeg_write_tables       jWrtTables
00858 #define jpeg_read_header        jReadHeader
00859 #define jpeg_start_decompress   jStrtDecompress
00860 #define jpeg_read_scanlines     jReadScanlines
00861 #define jpeg_finish_decompress  jFinDecompress
00862 #define jpeg_read_raw_data      jReadRawData
00863 #define jpeg_has_multiple_scans jHasMultScn
00864 #define jpeg_start_output       jStrtOutput
00865 #define jpeg_finish_output      jFinOutput
00866 #define jpeg_input_complete     jInComplete
00867 #define jpeg_new_colormap       jNewCMap
00868 #define jpeg_consume_input      jConsumeInput
00869 #define jpeg_calc_output_dimensions     jCalcDimensions
00870 #define jpeg_save_markers       jSaveMarkers
00871 #define jpeg_set_marker_processor       jSetMarker
00872 #define jpeg_read_coefficients  jReadCoefs
00873 #define jpeg_write_coefficients jWrtCoefs
00874 #define jpeg_copy_critical_parameters   jCopyCrit
00875 #define jpeg_abort_compress     jAbrtCompress
00876 #define jpeg_abort_decompress   jAbrtDecompress
00877 #define jpeg_abort              jAbort
00878 #define jpeg_destroy            jDestroy
00879 #define jpeg_resync_to_restart  jResyncRestart
00880 #endif /* NEED_SHORT_EXTERNAL_NAMES */
00881 
00882 
00883 /* Default error-management setup */
00884 EXTERN(struct jpeg_error_mgr *) jpeg_std_error
00885         JPP((struct jpeg_error_mgr * err));
00886 
00887 /* Initialization of JPEG compression objects.
00888  * jpeg_create_compress() and jpeg_create_decompress() are the exported
00889  * names that applications should call.  These expand to calls on
00890  * jpeg_CreateCompress and jpeg_CreateDecompress with additional information
00891  * passed for version mismatch checking.
00892  * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx.
00893  */
00894 #define jpeg_create_compress(cinfo) \
00895     jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \
00896                         (size_t) sizeof(struct jpeg_compress_struct))
00897 #define jpeg_create_decompress(cinfo) \
00898     jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
00899                           (size_t) sizeof(struct jpeg_decompress_struct))
00900 EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo,
00901                                       int version, size_t structsize));
00902 EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo,
00903                                         int version, size_t structsize));
00904 /* Destruction of JPEG compression objects */
00905 EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo));
00906 EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));
00907 
00908 /* Standard data source and destination managers: stdio streams. */
00909 /* Caller is responsible for opening the file before and closing after. */
00910 EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
00911 EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
00912 
00913 /* Default parameter setup for compression */
00914 EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo));
00915 /* Compression parameter setup aids */
00916 EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo,
00917                                       J_COLOR_SPACE colorspace));
00918 EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo));
00919 EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality,
00920                                    boolean force_baseline));
00921 EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo,
00922                                           int scale_factor,
00923                                           boolean force_baseline));
00924 EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl,
00925                                        const unsigned int *basic_table,
00926                                        int scale_factor,
00927                                        boolean force_baseline));
00928 EXTERN(int) jpeg_quality_scaling JPP((int quality));
00929 EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo));
00930 EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo,
00931                                        boolean suppress));
00932 EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo));
00933 EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo));
00934 
00935 /* Main entry points for compression */
00936 EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo,
00937                                       boolean write_all_tables));
00938 EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo,
00939                                              JSAMPARRAY scanlines,
00940                                              JDIMENSION num_lines));
00941 EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo));
00942 
00943 /* Replaces jpeg_write_scanlines when writing raw downsampled data. */
00944 EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo,
00945                                             JSAMPIMAGE data,
00946                                             JDIMENSION num_lines));
00947 
00948 /* Write a special marker.  See libjpeg.doc concerning safe usage. */
00949 EXTERN(void) jpeg_write_marker
00950         JPP((j_compress_ptr cinfo, int marker,
00951              const JOCTET * dataptr, unsigned int datalen));
00952 /* Same, but piecemeal. */
00953 EXTERN(void) jpeg_write_m_header
00954         JPP((j_compress_ptr cinfo, int marker, unsigned int datalen));
00955 EXTERN(void) jpeg_write_m_byte
00956         JPP((j_compress_ptr cinfo, int val));
00957 
00958 /* Alternate compression function: just write an abbreviated table file */
00959 EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo));
00960 
00961 /* Decompression startup: read start of JPEG datastream to see what's there */
00962 EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo,
00963                                   boolean require_image));
00964 /* Return value is one of: */
00965 #define JPEG_SUSPENDED          0 /* Suspended due to lack of input data */
00966 #define JPEG_HEADER_OK          1 /* Found valid image datastream */
00967 #define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */
00968 /* If you pass require_image = TRUE (normal case), you need not check for
00969  * a TABLES_ONLY return code; an abbreviated file will cause an error exit.
00970  * JPEG_SUSPENDED is only possible if you use a data source module that can
00971  * give a suspension return (the stdio source module doesn't).
00972  */
00973 
00974 /* Main entry points for decompression */
00975 EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo));
00976 EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo,
00977                                             JSAMPARRAY scanlines,
00978                                             JDIMENSION max_lines));
00979 EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo));
00980 
00981 /* Replaces jpeg_read_scanlines when reading raw downsampled data. */
00982 EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo,
00983                                            JSAMPIMAGE data,
00984                                            JDIMENSION max_lines));
00985 
00986 /* Additional entry points for buffered-image mode. */
00987 EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo));
00988 EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo,
00989                                        int scan_number));
00990 EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo));
00991 EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo));
00992 EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo));
00993 EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo));
00994 /* Return value is one of: */
00995 /* #define JPEG_SUSPENDED       0    Suspended due to lack of input data */
00996 #define JPEG_REACHED_SOS        1 /* Reached start of new scan */
00997 #define JPEG_REACHED_EOI        2 /* Reached end of image */
00998 #define JPEG_ROW_COMPLETED      3 /* Completed one iMCU row */
00999 #define JPEG_SCAN_COMPLETED     4 /* Completed last iMCU row of a scan */
01000 
01001 /* Precalculate output dimensions for current decompression parameters. */
01002 EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo));
01003 
01004 /* Control saving of COM and APPn markers into marker_list. */
01005 EXTERN(void) jpeg_save_markers
01006         JPP((j_decompress_ptr cinfo, int marker_code,
01007              unsigned int length_limit));
01008 
01009 /* Install a special processing method for COM or APPn markers. */
01010 EXTERN(void) jpeg_set_marker_processor
01011         JPP((j_decompress_ptr cinfo, int marker_code,
01012              jpeg_marker_parser_method routine));
01013 
01014 /* Read or write raw DCT coefficients --- useful for lossless transcoding. */
01015 EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo));
01016 EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo,
01017                                           jvirt_barray_ptr * coef_arrays));
01018 EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo,
01019                                                 j_compress_ptr dstinfo));
01020 
01021 /* If you choose to abort compression or decompression before completing
01022  * jpeg_finish_(de)compress, then you need to clean up to release memory,
01023  * temporary files, etc.  You can just call jpeg_destroy_(de)compress
01024  * if you're done with the JPEG object, but if you want to clean it up and
01025  * reuse it, call this:
01026  */
01027 EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo));
01028 EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo));
01029 
01030 /* Generic versions of jpeg_abort and jpeg_destroy that work on either
01031  * flavor of JPEG object.  These may be more convenient in some places.
01032  */
01033 EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo));
01034 EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo));
01035 
01036 /* Default restart-marker-resync procedure for use by data source modules */
01037 EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo,
01038                                             int desired));
01039 
01040 
01041 /* These marker codes are exported since applications and data source modules
01042  * are likely to want to use them.
01043  */
01044 
01045 #define JPEG_RST0       0xD0    /* RST0 marker code */
01046 #define JPEG_EOI        0xD9    /* EOI marker code */
01047 #define JPEG_APP0       0xE0    /* APP0 marker code */
01048 #define JPEG_COM        0xFE    /* COM marker code */
01049 
01050 
01051 /* If we have a brain-damaged compiler that emits warnings (or worse, errors)
01052  * for structure definitions that are never filled in, keep it quiet by
01053  * supplying dummy definitions for the various substructures.
01054  */
01055 
01056 #ifdef INCOMPLETE_TYPES_BROKEN
01057 #ifndef JPEG_INTERNALS          /* will be defined in jpegint.h */
01058 struct jvirt_sarray_control { long dummy; };
01059 struct jvirt_barray_control { long dummy; };
01060 struct jpeg_comp_master { long dummy; };
01061 struct jpeg_c_main_controller { long dummy; };
01062 struct jpeg_c_prep_controller { long dummy; };
01063 struct jpeg_c_coef_controller { long dummy; };
01064 struct jpeg_marker_writer { long dummy; };
01065 struct jpeg_color_converter { long dummy; };
01066 struct jpeg_downsampler { long dummy; };
01067 struct jpeg_forward_dct { long dummy; };
01068 struct jpeg_entropy_encoder { long dummy; };
01069 struct jpeg_decomp_master { long dummy; };
01070 struct jpeg_d_main_controller { long dummy; };
01071 struct jpeg_d_coef_controller { long dummy; };
01072 struct jpeg_d_post_controller { long dummy; };
01073 struct jpeg_input_controller { long dummy; };
01074 struct jpeg_marker_reader { long dummy; };
01075 struct jpeg_entropy_decoder { long dummy; };
01076 struct jpeg_inverse_dct { long dummy; };
01077 struct jpeg_upsampler { long dummy; };
01078 struct jpeg_color_deconverter { long dummy; };
01079 struct jpeg_color_quantizer { long dummy; };
01080 #endif /* JPEG_INTERNALS */
01081 #endif /* INCOMPLETE_TYPES_BROKEN */
01082 
01083 
01084 /*
01085  * The JPEG library modules define JPEG_INTERNALS before including this file.
01086  * The internal structure declarations are read only when that is true.
01087  * Applications using the library should not include jpegint.h, but may wish
01088  * to include jerror.h.
01089  */
01090 
01091 #ifdef JPEG_INTERNALS
01092 #include "jpegint.h"            /* fetch private declarations */
01093 #include "jerror.h"             /* fetch error codes too */
01094 #endif
01095 
01096 #endif /* JPEGLIB_H */