ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

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

Generated on Sat May 26 2012 04:31:58 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.