source: trunk/third/firefox/jpeg/jpeglib.h @ 21695

Revision 21695, 45.5 KB checked in by rbasch, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r21694, which included commits to RCS files with non-trunk default branches.
Line 
1/*
2 * jpeglib.h
3 *
4 * Copyright (C) 1991-1998, Thomas G. Lane.
5 * This file is part of the Independent JPEG Group's software.
6 * For conditions of distribution and use, see the accompanying README file.
7 *
8 * This file defines the application interface for the JPEG library.
9 * Most applications using the library need only include this file,
10 * and perhaps jerror.h if they want to know the exact error codes.
11 */
12
13#ifndef JPEGLIB_H
14#define JPEGLIB_H
15
16#ifdef XP_OS2
17/*
18 * On OS/2, the system will have defined RGB_* so we #undef 'em to avoid warnings
19 * from jmorecfg.h.
20 */
21#ifdef RGB_RED
22        #undef RGB_RED
23#endif
24#ifdef RGB_GREEN
25        #undef RGB_GREEN
26#endif
27#ifdef RGB_BLUE
28        #undef RGB_BLUE
29#endif
30
31#endif
32
33/*
34 * First we include the configuration files that record how this
35 * installation of the JPEG library is set up.  jconfig.h can be
36 * generated automatically for many systems.  jmorecfg.h contains
37 * manual configuration options that most people need not worry about.
38 */
39
40#ifndef JCONFIG_INCLUDED        /* in case jinclude.h already did */
41#include "jconfig.h"            /* widely used configuration options */
42#endif
43#include "jmorecfg.h"           /* seldom changed options */
44
45
46#ifdef HAVE_MMX_INTEL_MNEMONICS
47        extern int MMXAvailable;
48#endif
49
50
51/* Version ID for the JPEG library.
52 * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60".
53 */
54
55#define JPEG_LIB_VERSION  62    /* Version 6b */
56
57
58/* Various constants determining the sizes of things.
59 * All of these are specified by the JPEG standard, so don't change them
60 * if you want to be compatible.
61 */
62
63#define DCTSIZE             8   /* The basic DCT block is 8x8 samples */
64#define DCTSIZE2            64  /* DCTSIZE squared; # of elements in a block */
65#define NUM_QUANT_TBLS      4   /* Quantization tables are numbered 0..3 */
66#define NUM_HUFF_TBLS       4   /* Huffman tables are numbered 0..3 */
67#define NUM_ARITH_TBLS      16  /* Arith-coding tables are numbered 0..15 */
68#define MAX_COMPS_IN_SCAN   4   /* JPEG limit on # of components in one scan */
69#define MAX_SAMP_FACTOR     4   /* JPEG limit on sampling factors */
70/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard;
71 * the PostScript DCT filter can emit files with many more than 10 blocks/MCU.
72 * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU
73 * to handle it.  We even let you do this from the jconfig.h file.  However,
74 * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe
75 * sometimes emits noncompliant files doesn't mean you should too.
76 */
77#define C_MAX_BLOCKS_IN_MCU   10 /* compressor's limit on blocks per MCU */
78#ifndef D_MAX_BLOCKS_IN_MCU
79#define D_MAX_BLOCKS_IN_MCU   10 /* decompressor's limit on blocks per MCU */
80#endif
81
82
83/* Data structures for images (arrays of samples and of DCT coefficients).
84 * On 80x86 machines, the image arrays are too big for near pointers,
85 * but the pointer arrays can fit in near memory.
86 */
87
88typedef JSAMPLE FAR *JSAMPROW;  /* ptr to one image row of pixel samples. */
89typedef JSAMPROW *JSAMPARRAY;   /* ptr to some rows (a 2-D sample array) */
90typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */
91
92typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */
93typedef JBLOCK FAR *JBLOCKROW;  /* pointer to one row of coefficient blocks */
94typedef JBLOCKROW *JBLOCKARRAY;         /* a 2-D array of coefficient blocks */
95typedef JBLOCKARRAY *JBLOCKIMAGE;       /* a 3-D array of coefficient blocks */
96
97typedef JCOEF FAR *JCOEFPTR;    /* useful in a couple of places */
98
99
100/* Types for JPEG compression parameters and working tables. */
101
102
103/* DCT coefficient quantization tables. */
104
105typedef struct {
106  /* This array gives the coefficient quantizers in natural array order
107   * (not the zigzag order in which they are stored in a JPEG DQT marker).
108   * CAUTION: IJG versions prior to v6a kept this array in zigzag order.
109   */
110  UINT16 quantval[DCTSIZE2];    /* quantization step for each coefficient */
111  /* This field is used only during compression.  It's initialized FALSE when
112   * the table is created, and set TRUE when it's been output to the file.
113   * You could suppress output of a table by setting this to TRUE.
114   * (See jpeg_suppress_tables for an example.)
115   */
116  boolean sent_table;           /* TRUE when table has been output */
117} JQUANT_TBL;
118
119
120/* Huffman coding tables. */
121
122typedef struct {
123  /* These two fields directly represent the contents of a JPEG DHT marker */
124  UINT8 bits[17];               /* bits[k] = # of symbols with codes of */
125                                /* length k bits; bits[0] is unused */
126  UINT8 huffval[256];           /* The symbols, in order of incr code length */
127  /* This field is used only during compression.  It's initialized FALSE when
128   * the table is created, and set TRUE when it's been output to the file.
129   * You could suppress output of a table by setting this to TRUE.
130   * (See jpeg_suppress_tables for an example.)
131   */
132  boolean sent_table;           /* TRUE when table has been output */
133} JHUFF_TBL;
134
135
136/* Basic info about one component (color channel). */
137
138typedef struct {
139  /* These values are fixed over the whole image. */
140  /* For compression, they must be supplied by parameter setup; */
141  /* for decompression, they are read from the SOF marker. */
142  int component_id;             /* identifier for this component (0..255) */
143  int component_index;          /* its index in SOF or cinfo->comp_info[] */
144  int h_samp_factor;            /* horizontal sampling factor (1..4) */
145  int v_samp_factor;            /* vertical sampling factor (1..4) */
146  int quant_tbl_no;             /* quantization table selector (0..3) */
147  /* These values may vary between scans. */
148  /* For compression, they must be supplied by parameter setup; */
149  /* for decompression, they are read from the SOS marker. */
150  /* The decompressor output side may not use these variables. */
151  int dc_tbl_no;                /* DC entropy table selector (0..3) */
152  int ac_tbl_no;                /* AC entropy table selector (0..3) */
153 
154  /* Remaining fields should be treated as private by applications. */
155 
156  /* These values are computed during compression or decompression startup: */
157  /* Component's size in DCT blocks.
158   * Any dummy blocks added to complete an MCU are not counted; therefore
159   * these values do not depend on whether a scan is interleaved or not.
160   */
161  JDIMENSION width_in_blocks;
162  JDIMENSION height_in_blocks;
163  /* Size of a DCT block in samples.  Always DCTSIZE for compression.
164   * For decompression this is the size of the output from one DCT block,
165   * reflecting any scaling we choose to apply during the IDCT step.
166   * Values of 1,2,4,8 are likely to be supported.  Note that different
167   * components may receive different IDCT scalings.
168   */
169  int DCT_scaled_size;
170  /* The downsampled dimensions are the component's actual, unpadded number
171   * of samples at the main buffer (preprocessing/compression interface), thus
172   * downsampled_width = ceil(image_width * Hi/Hmax)
173   * and similarly for height.  For decompression, IDCT scaling is included, so
174   * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
175   */
176  JDIMENSION downsampled_width;  /* actual width in samples */
177  JDIMENSION downsampled_height; /* actual height in samples */
178  /* This flag is used only for decompression.  In cases where some of the
179   * components will be ignored (eg grayscale output from YCbCr image),
180   * we can skip most computations for the unused components.
181   */
182  boolean component_needed;     /* do we need the value of this component? */
183
184  /* These values are computed before starting a scan of the component. */
185  /* The decompressor output side may not use these variables. */
186  int MCU_width;                /* number of blocks per MCU, horizontally */
187  int MCU_height;               /* number of blocks per MCU, vertically */
188  int MCU_blocks;               /* MCU_width * MCU_height */
189  int MCU_sample_width;         /* MCU width in samples, MCU_width*DCT_scaled_size */
190  int last_col_width;           /* # of non-dummy blocks across in last MCU */
191  int last_row_height;          /* # of non-dummy blocks down in last MCU */
192
193  /* Saved quantization table for component; NULL if none yet saved.
194   * See jdinput.c comments about the need for this information.
195   * This field is currently used only for decompression.
196   */
197  JQUANT_TBL * quant_table;
198
199  /* Private per-component storage for DCT or IDCT subsystem. */
200  void * dct_table;
201} jpeg_component_info;
202
203
204/* The script for encoding a multiple-scan file is an array of these: */
205
206typedef struct {
207  int comps_in_scan;            /* number of components encoded in this scan */
208  int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */
209  int Ss, Se;                   /* progressive JPEG spectral selection parms */
210  int Ah, Al;                   /* progressive JPEG successive approx. parms */
211} jpeg_scan_info;
212
213/* The decompressor can save APPn and COM markers in a list of these: */
214
215typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr;
216
217struct jpeg_marker_struct {
218  jpeg_saved_marker_ptr next;   /* next in list, or NULL */
219  UINT8 marker;                 /* marker code: JPEG_COM, or JPEG_APP0+n */
220  unsigned int original_length; /* # bytes of data in the file */
221  unsigned int data_length;     /* # bytes of data saved at data[] */
222  JOCTET FAR * data;            /* the data contained in the marker */
223  /* the marker length word is not counted in data_length or original_length */
224};
225
226/* Known color spaces. */
227
228typedef enum {
229        JCS_UNKNOWN,            /* error/unspecified */
230        JCS_GRAYSCALE,          /* monochrome */
231        JCS_RGB,                /* red/green/blue */
232        JCS_YCbCr,              /* Y/Cb/Cr (also known as YUV) */
233        JCS_CMYK,               /* C/M/Y/K */
234        JCS_YCCK                /* Y/Cb/Cr/K */
235} J_COLOR_SPACE;
236
237/* DCT/IDCT algorithm options. */
238
239typedef enum {
240        JDCT_ISLOW,             /* slow but accurate integer algorithm */
241        JDCT_IFAST,             /* faster, less accurate integer method */
242        JDCT_FLOAT              /* floating-point: accurate, fast on fast HW */
243} J_DCT_METHOD;
244
245#ifndef JDCT_DEFAULT            /* may be overridden in jconfig.h */
246#define JDCT_DEFAULT  JDCT_ISLOW
247#endif
248#ifndef JDCT_FASTEST            /* may be overridden in jconfig.h */
249#define JDCT_FASTEST  JDCT_IFAST
250#endif
251
252/* Dithering options for decompression. */
253
254typedef enum {
255        JDITHER_NONE,           /* no dithering */
256        JDITHER_ORDERED,        /* simple ordered dither */
257        JDITHER_FS              /* Floyd-Steinberg error diffusion dither */
258} J_DITHER_MODE;
259
260
261/* Common fields between JPEG compression and decompression master structs. */
262
263#define jpeg_common_fields \
264  struct jpeg_error_mgr * err;  /* Error handler module */\
265  struct jpeg_memory_mgr * mem; /* Memory manager module */\
266  struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
267  void * client_data;           /* Available for use by application */\
268  boolean is_decompressor;      /* So common code can tell which is which */\
269  int global_state              /* For checking call sequence validity */
270
271/* Routines that are to be used by both halves of the library are declared
272 * to receive a pointer to this structure.  There are no actual instances of
273 * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
274 */
275struct jpeg_common_struct {
276  jpeg_common_fields;           /* Fields common to both master struct types */
277  /* Additional fields follow in an actual jpeg_compress_struct or
278   * jpeg_decompress_struct.  All three structs must agree on these
279   * initial fields!  (This would be a lot cleaner in C++.)
280   */
281};
282
283typedef struct jpeg_common_struct * j_common_ptr;
284typedef struct jpeg_compress_struct * j_compress_ptr;
285typedef struct jpeg_decompress_struct * j_decompress_ptr;
286
287
288/* Master record for a compression instance */
289
290struct jpeg_compress_struct {
291  jpeg_common_fields;           /* Fields shared with jpeg_decompress_struct */
292
293  /* Destination for compressed data */
294  struct jpeg_destination_mgr * dest;
295
296  /* Description of source image --- these fields must be filled in by
297   * outer application before starting compression.  in_color_space must
298   * be correct before you can even call jpeg_set_defaults().
299   */
300
301  JDIMENSION image_width;       /* input image width */
302  JDIMENSION image_height;      /* input image height */
303  int input_components;         /* # of color components in input image */
304  J_COLOR_SPACE in_color_space; /* colorspace of input image */
305
306  double input_gamma;           /* image gamma of input image */
307
308  /* Compression parameters --- these fields must be set before calling
309   * jpeg_start_compress().  We recommend calling jpeg_set_defaults() to
310   * initialize everything to reasonable defaults, then changing anything
311   * the application specifically wants to change.  That way you won't get
312   * burnt when new parameters are added.  Also note that there are several
313   * helper routines to simplify changing parameters.
314   */
315
316  int data_precision;           /* bits of precision in image data */
317
318  int num_components;           /* # of color components in JPEG image */
319  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
320
321  jpeg_component_info * comp_info;
322  /* comp_info[i] describes component that appears i'th in SOF */
323 
324  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
325  /* ptrs to coefficient quantization tables, or NULL if not defined */
326 
327  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
328  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
329  /* ptrs to Huffman coding tables, or NULL if not defined */
330 
331  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
332  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
333  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
334
335  int num_scans;                /* # of entries in scan_info array */
336  const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */
337  /* The default value of scan_info is NULL, which causes a single-scan
338   * sequential JPEG file to be emitted.  To create a multi-scan file,
339   * set num_scans and scan_info to point to an array of scan definitions.
340   */
341
342  boolean raw_data_in;          /* TRUE=caller supplies downsampled data */
343  boolean arith_code;           /* TRUE=arithmetic coding, FALSE=Huffman */
344  boolean optimize_coding;      /* TRUE=optimize entropy encoding parms */
345  boolean CCIR601_sampling;     /* TRUE=first samples are cosited */
346  int smoothing_factor;         /* 1..100, or 0 for no input smoothing */
347  J_DCT_METHOD dct_method;      /* DCT algorithm selector */
348
349  /* The restart interval can be specified in absolute MCUs by setting
350   * restart_interval, or in MCU rows by setting restart_in_rows
351   * (in which case the correct restart_interval will be figured
352   * for each scan).
353   */
354  unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
355  int restart_in_rows;          /* if > 0, MCU rows per restart interval */
356
357  /* Parameters controlling emission of special markers. */
358
359  boolean write_JFIF_header;    /* should a JFIF marker be written? */
360  UINT8 JFIF_major_version;     /* What to write for the JFIF version number */
361  UINT8 JFIF_minor_version;
362  /* These three values are not used by the JPEG code, merely copied */
363  /* into the JFIF APP0 marker.  density_unit can be 0 for unknown, */
364  /* 1 for dots/inch, or 2 for dots/cm.  Note that the pixel aspect */
365  /* ratio is defined by X_density/Y_density even when density_unit=0. */
366  UINT8 density_unit;           /* JFIF code for pixel size units */
367  UINT16 X_density;             /* Horizontal pixel density */
368  UINT16 Y_density;             /* Vertical pixel density */
369  boolean write_Adobe_marker;   /* should an Adobe marker be written? */
370 
371  /* State variable: index of next scanline to be written to
372   * jpeg_write_scanlines().  Application may use this to control its
373   * processing loop, e.g., "while (next_scanline < image_height)".
374   */
375
376  JDIMENSION next_scanline;     /* 0 .. image_height-1  */
377
378  /* Remaining fields are known throughout compressor, but generally
379   * should not be touched by a surrounding application.
380   */
381
382  /*
383   * These fields are computed during compression startup
384   */
385  boolean progressive_mode;     /* TRUE if scan script uses progressive mode */
386  int max_h_samp_factor;        /* largest h_samp_factor */
387  int max_v_samp_factor;        /* largest v_samp_factor */
388
389  JDIMENSION total_iMCU_rows;   /* # of iMCU rows to be input to coef ctlr */
390  /* The coefficient controller receives data in units of MCU rows as defined
391   * for fully interleaved scans (whether the JPEG file is interleaved or not).
392   * There are v_samp_factor * DCTSIZE sample rows of each component in an
393   * "iMCU" (interleaved MCU) row.
394   */
395 
396  /*
397   * These fields are valid during any one scan.
398   * They describe the components and MCUs actually appearing in the scan.
399   */
400  int comps_in_scan;            /* # of JPEG components in this scan */
401  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
402  /* *cur_comp_info[i] describes component that appears i'th in SOS */
403 
404  JDIMENSION MCUs_per_row;      /* # of MCUs across the image */
405  JDIMENSION MCU_rows_in_scan;  /* # of MCU rows in the image */
406 
407  int blocks_in_MCU;            /* # of DCT blocks per MCU */
408  int MCU_membership[C_MAX_BLOCKS_IN_MCU];
409  /* MCU_membership[i] is index in cur_comp_info of component owning */
410  /* i'th block in an MCU */
411
412  int Ss, Se, Ah, Al;           /* progressive JPEG parameters for scan */
413
414  /*
415   * Links to compression subobjects (methods and private variables of modules)
416   */
417  struct jpeg_comp_master * master;
418  struct jpeg_c_main_controller * main;
419  struct jpeg_c_prep_controller * prep;
420  struct jpeg_c_coef_controller * coef;
421  struct jpeg_marker_writer * marker;
422  struct jpeg_color_converter * cconvert;
423  struct jpeg_downsampler * downsample;
424  struct jpeg_forward_dct * fdct;
425  struct jpeg_entropy_encoder * entropy;
426  jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */
427  int script_space_size;
428};
429
430
431/* Master record for a decompression instance */
432
433struct jpeg_decompress_struct {
434  jpeg_common_fields;           /* Fields shared with jpeg_compress_struct */
435
436  /* Source of compressed data */
437  struct jpeg_source_mgr * src;
438
439  /* Basic description of image --- filled in by jpeg_read_header(). */
440  /* Application may inspect these values to decide how to process image. */
441
442  JDIMENSION image_width;       /* nominal image width (from SOF marker) */
443  JDIMENSION image_height;      /* nominal image height */
444  int num_components;           /* # of color components in JPEG image */
445  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
446
447  /* Decompression processing parameters --- these fields must be set before
448   * calling jpeg_start_decompress().  Note that jpeg_read_header() initializes
449   * them to default values.
450   */
451
452  J_COLOR_SPACE out_color_space; /* colorspace for output */
453
454  unsigned int scale_num, scale_denom; /* fraction by which to scale image */
455
456  double output_gamma;          /* image gamma wanted in output */
457
458  boolean buffered_image;       /* TRUE=multiple output passes */
459  boolean raw_data_out;         /* TRUE=downsampled data wanted */
460
461  J_DCT_METHOD dct_method;      /* IDCT algorithm selector */
462  boolean do_fancy_upsampling;  /* TRUE=apply fancy upsampling */
463  boolean do_block_smoothing;   /* TRUE=apply interblock smoothing */
464
465  boolean quantize_colors;      /* TRUE=colormapped output wanted */
466  /* the following are ignored if not quantize_colors: */
467  J_DITHER_MODE dither_mode;    /* type of color dithering to use */
468  boolean two_pass_quantize;    /* TRUE=use two-pass color quantization */
469  int desired_number_of_colors; /* max # colors to use in created colormap */
470  /* these are significant only in buffered-image mode: */
471  boolean enable_1pass_quant;   /* enable future use of 1-pass quantizer */
472  boolean enable_external_quant;/* enable future use of external colormap */
473  boolean enable_2pass_quant;   /* enable future use of 2-pass quantizer */
474
475  /* Description of actual output image that will be returned to application.
476   * These fields are computed by jpeg_start_decompress().
477   * You can also use jpeg_calc_output_dimensions() to determine these values
478   * in advance of calling jpeg_start_decompress().
479   */
480
481  JDIMENSION output_width;      /* scaled image width */
482  JDIMENSION output_height;     /* scaled image height */
483  int out_color_components;     /* # of color components in out_color_space */
484  int output_components;        /* # of color components returned */
485  /* output_components is 1 (a colormap index) when quantizing colors;
486   * otherwise it equals out_color_components.
487   */
488  int rec_outbuf_height;        /* min recommended height of scanline buffer */
489  /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
490   * high, space and time will be wasted due to unnecessary data copying.
491   * Usually rec_outbuf_height will be 1 or 2, at most 4.
492   */
493
494  /* When quantizing colors, the output colormap is described by these fields.
495   * The application can supply a colormap by setting colormap non-NULL before
496   * calling jpeg_start_decompress; otherwise a colormap is created during
497   * jpeg_start_decompress or jpeg_start_output.
498   * The map has out_color_components rows and actual_number_of_colors columns.
499   */
500  int actual_number_of_colors;  /* number of entries in use */
501  JSAMPARRAY colormap;          /* The color map as a 2-D pixel array */
502
503  /* State variables: these variables indicate the progress of decompression.
504   * The application may examine these but must not modify them.
505   */
506
507  /* Row index of next scanline to be read from jpeg_read_scanlines().
508   * Application may use this to control its processing loop, e.g.,
509   * "while (output_scanline < output_height)".
510   */
511  JDIMENSION output_scanline;   /* 0 .. output_height-1  */
512
513  /* Current input scan number and number of iMCU rows completed in scan.
514   * These indicate the progress of the decompressor input side.
515   */
516  int input_scan_number;        /* Number of SOS markers seen so far */
517  JDIMENSION input_iMCU_row;    /* Number of iMCU rows completed */
518
519  /* The "output scan number" is the notional scan being displayed by the
520   * output side.  The decompressor will not allow output scan/row number
521   * to get ahead of input scan/row, but it can fall arbitrarily far behind.
522   */
523  int output_scan_number;       /* Nominal scan number being displayed */
524  JDIMENSION output_iMCU_row;   /* Number of iMCU rows read */
525
526  /* Current progression status.  coef_bits[c][i] indicates the precision
527   * with which component c's DCT coefficient i (in zigzag order) is known.
528   * It is -1 when no data has yet been received, otherwise it is the point
529   * transform (shift) value for the most recent scan of the coefficient
530   * (thus, 0 at completion of the progression).
531   * This pointer is NULL when reading a non-progressive file.
532   */
533  int (*coef_bits)[DCTSIZE2];   /* -1 or current Al value for each coef */
534
535  /* Internal JPEG parameters --- the application usually need not look at
536   * these fields.  Note that the decompressor output side may not use
537   * any parameters that can change between scans.
538   */
539
540  /* Quantization and Huffman tables are carried forward across input
541   * datastreams when processing abbreviated JPEG datastreams.
542   */
543
544  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
545  /* ptrs to coefficient quantization tables, or NULL if not defined */
546
547  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
548  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
549  /* ptrs to Huffman coding tables, or NULL if not defined */
550
551  /* These parameters are never carried across datastreams, since they
552   * are given in SOF/SOS markers or defined to be reset by SOI.
553   */
554
555  int data_precision;           /* bits of precision in image data */
556
557  jpeg_component_info * comp_info;
558  /* comp_info[i] describes component that appears i'th in SOF */
559
560  boolean progressive_mode;     /* TRUE if SOFn specifies progressive mode */
561  boolean arith_code;           /* TRUE=arithmetic coding, FALSE=Huffman */
562
563  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
564  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
565  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
566
567  unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */
568
569  /* These fields record data obtained from optional markers recognized by
570   * the JPEG library.
571   */
572  boolean saw_JFIF_marker;      /* TRUE iff a JFIF APP0 marker was found */
573  /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
574  UINT8 JFIF_major_version;     /* JFIF version number */
575  UINT8 JFIF_minor_version;
576  UINT8 density_unit;           /* JFIF code for pixel size units */
577  UINT16 X_density;             /* Horizontal pixel density */
578  UINT16 Y_density;             /* Vertical pixel density */
579  boolean saw_Adobe_marker;     /* TRUE iff an Adobe APP14 marker was found */
580  UINT8 Adobe_transform;        /* Color transform code from Adobe marker */
581
582  boolean CCIR601_sampling;     /* TRUE=first samples are cosited */
583
584  /* Aside from the specific data retained from APPn markers known to the
585   * library, the uninterpreted contents of any or all APPn and COM markers
586   * can be saved in a list for examination by the application.
587   */
588  jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
589
590  /* Remaining fields are known throughout decompressor, but generally
591   * should not be touched by a surrounding application.
592   */
593
594  /*
595   * These fields are computed during decompression startup
596   */
597  int max_h_samp_factor;        /* largest h_samp_factor */
598  int max_v_samp_factor;        /* largest v_samp_factor */
599
600  int min_DCT_scaled_size;      /* smallest DCT_scaled_size of any component */
601
602  JDIMENSION total_iMCU_rows;   /* # of iMCU rows in image */
603  /* The coefficient controller's input and output progress is measured in
604   * units of "iMCU" (interleaved MCU) rows.  These are the same as MCU rows
605   * in fully interleaved JPEG scans, but are used whether the scan is
606   * interleaved or not.  We define an iMCU row as v_samp_factor DCT block
607   * rows of each component.  Therefore, the IDCT output contains
608   * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row.
609   */
610
611  JSAMPLE * sample_range_limit; /* table for fast range-limiting */
612
613  /*
614   * These fields are valid during any one scan.
615   * They describe the components and MCUs actually appearing in the scan.
616   * Note that the decompressor output side must not use these fields.
617   */
618  int comps_in_scan;            /* # of JPEG components in this scan */
619  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
620  /* *cur_comp_info[i] describes component that appears i'th in SOS */
621
622  JDIMENSION MCUs_per_row;      /* # of MCUs across the image */
623  JDIMENSION MCU_rows_in_scan;  /* # of MCU rows in the image */
624
625  int blocks_in_MCU;            /* # of DCT blocks per MCU */
626  int MCU_membership[D_MAX_BLOCKS_IN_MCU];
627  /* MCU_membership[i] is index in cur_comp_info of component owning */
628  /* i'th block in an MCU */
629
630  int Ss, Se, Ah, Al;           /* progressive JPEG parameters for scan */
631
632  /* This field is shared between entropy decoder and marker parser.
633   * It is either zero or the code of a JPEG marker that has been
634   * read from the data source, but has not yet been processed.
635   */
636  int unread_marker;
637
638  /*
639   * Links to decompression subobjects (methods, private variables of modules)
640   */
641  struct jpeg_decomp_master * master;
642  struct jpeg_d_main_controller * main;
643  struct jpeg_d_coef_controller * coef;
644  struct jpeg_d_post_controller * post;
645  struct jpeg_input_controller * inputctl;
646  struct jpeg_marker_reader * marker;
647  struct jpeg_entropy_decoder * entropy;
648  struct jpeg_inverse_dct * idct;
649  struct jpeg_upsampler * upsample;
650  struct jpeg_color_deconverter * cconvert;
651  struct jpeg_color_quantizer * cquantize;
652};
653
654
655/* "Object" declarations for JPEG modules that may be supplied or called
656 * directly by the surrounding application.
657 * As with all objects in the JPEG library, these structs only define the
658 * publicly visible methods and state variables of a module.  Additional
659 * private fields may exist after the public ones.
660 */
661
662
663/* Error handler object */
664
665struct jpeg_error_mgr {
666  /* Error exit handler: does not return to caller */
667  JMETHOD(void, error_exit, (j_common_ptr cinfo));
668  /* Conditionally emit a trace or warning message */
669  JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));
670  /* Routine that actually outputs a trace or error message */
671  JMETHOD(void, output_message, (j_common_ptr cinfo));
672  /* Format a message string for the most recent JPEG error or message */
673  JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer));
674#define JMSG_LENGTH_MAX  200    /* recommended size of format_message buffer */
675  /* Reset error state variables at start of a new image */
676  JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo));
677 
678  /* The message ID code and any parameters are saved here.
679   * A message can have one string parameter or up to 8 int parameters.
680   */
681  int msg_code;
682#define JMSG_STR_PARM_MAX  80
683  union {
684    int i[8];
685    char s[JMSG_STR_PARM_MAX];
686  } msg_parm;
687 
688  /* Standard state variables for error facility */
689 
690  int trace_level;              /* max msg_level that will be displayed */
691 
692  /* For recoverable corrupt-data errors, we emit a warning message,
693   * but keep going unless emit_message chooses to abort.  emit_message
694   * should count warnings in num_warnings.  The surrounding application
695   * can check for bad data by seeing if num_warnings is nonzero at the
696   * end of processing.
697   */
698  long num_warnings;            /* number of corrupt-data warnings */
699
700  /* These fields point to the table(s) of error message strings.
701   * An application can change the table pointer to switch to a different
702   * message list (typically, to change the language in which errors are
703   * reported).  Some applications may wish to add additional error codes
704   * that will be handled by the JPEG library error mechanism; the second
705   * table pointer is used for this purpose.
706   *
707   * First table includes all errors generated by JPEG library itself.
708   * Error code 0 is reserved for a "no such error string" message.
709   */
710  const char * const * jpeg_message_table; /* Library errors */
711  int last_jpeg_message;    /* Table contains strings 0..last_jpeg_message */
712  /* Second table can be added by application (see cjpeg/djpeg for example).
713   * It contains strings numbered first_addon_message..last_addon_message.
714   */
715  const char * const * addon_message_table; /* Non-library errors */
716  int first_addon_message;      /* code for first string in addon table */
717  int last_addon_message;       /* code for last string in addon table */
718};
719
720
721/* Progress monitor object */
722
723struct jpeg_progress_mgr {
724  JMETHOD(void, progress_monitor, (j_common_ptr cinfo));
725
726  long pass_counter;            /* work units completed in this pass */
727  long pass_limit;              /* total number of work units in this pass */
728  int completed_passes;         /* passes completed so far */
729  int total_passes;             /* total number of passes expected */
730};
731
732
733/* Data destination object for compression */
734
735struct jpeg_destination_mgr {
736  JOCTET * next_output_byte;    /* => next byte to write in buffer */
737  size_t free_in_buffer;        /* # of byte spaces remaining in buffer */
738
739  JMETHOD(void, init_destination, (j_compress_ptr cinfo));
740  JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));
741  JMETHOD(void, term_destination, (j_compress_ptr cinfo));
742};
743
744
745/* Data source object for decompression */
746
747struct jpeg_source_mgr {
748  const JOCTET * next_input_byte; /* => next byte to read from buffer */
749  size_t bytes_in_buffer;       /* # of bytes remaining in buffer */
750
751  JMETHOD(void, init_source, (j_decompress_ptr cinfo));
752  JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo));
753  JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes));
754  JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired));
755  JMETHOD(void, term_source, (j_decompress_ptr cinfo));
756};
757
758
759/* Memory manager object.
760 * Allocates "small" objects (a few K total), "large" objects (tens of K),
761 * and "really big" objects (virtual arrays with backing store if needed).
762 * The memory manager does not allow individual objects to be freed; rather,
763 * each created object is assigned to a pool, and whole pools can be freed
764 * at once.  This is faster and more convenient than remembering exactly what
765 * to free, especially where malloc()/free() are not too speedy.
766 * NB: alloc routines never return NULL.  They exit to error_exit if not
767 * successful.
768 */
769
770#define JPOOL_PERMANENT 0       /* lasts until master record is destroyed */
771#define JPOOL_IMAGE     1       /* lasts until done with image/datastream */
772#define JPOOL_NUMPOOLS  2
773
774typedef struct jvirt_sarray_control * jvirt_sarray_ptr;
775typedef struct jvirt_barray_control * jvirt_barray_ptr;
776
777
778struct jpeg_memory_mgr {
779  /* Method pointers */
780  JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id,
781                                size_t sizeofobject));
782  JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id,
783                                     size_t sizeofobject));
784  JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id,
785                                     JDIMENSION samplesperrow,
786                                     JDIMENSION numrows));
787  JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id,
788                                      JDIMENSION blocksperrow,
789                                      JDIMENSION numrows));
790  JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo,
791                                                  int pool_id,
792                                                  boolean pre_zero,
793                                                  JDIMENSION samplesperrow,
794                                                  JDIMENSION numrows,
795                                                  JDIMENSION maxaccess));
796  JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo,
797                                                  int pool_id,
798                                                  boolean pre_zero,
799                                                  JDIMENSION blocksperrow,
800                                                  JDIMENSION numrows,
801                                                  JDIMENSION maxaccess));
802  JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo));
803  JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo,
804                                           jvirt_sarray_ptr ptr,
805                                           JDIMENSION start_row,
806                                           JDIMENSION num_rows,
807                                           boolean writable));
808  JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo,
809                                            jvirt_barray_ptr ptr,
810                                            JDIMENSION start_row,
811                                            JDIMENSION num_rows,
812                                            boolean writable));
813  JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id));
814  JMETHOD(void, self_destruct, (j_common_ptr cinfo));
815
816  /* Limit on memory allocation for this JPEG object.  (Note that this is
817   * merely advisory, not a guaranteed maximum; it only affects the space
818   * used for virtual-array buffers.)  May be changed by outer application
819   * after creating the JPEG object.
820   */
821  long max_memory_to_use;
822
823  /* Maximum allocation request accepted by alloc_large. */
824  long max_alloc_chunk;
825};
826
827
828/* Routine signature for application-supplied marker processing methods.
829 * Need not pass marker code since it is stored in cinfo->unread_marker.
830 */
831typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));
832
833
834/* Declarations for routines called by application.
835 * The JPP macro hides prototype parameters from compilers that can't cope.
836 * Note JPP requires double parentheses.
837 */
838
839#ifdef HAVE_PROTOTYPES
840#define JPP(arglist)    arglist
841#else
842#define JPP(arglist)    ()
843#endif
844
845
846/* Short forms of external names for systems with brain-damaged linkers.
847 * We shorten external names to be unique in the first six letters, which
848 * is good enough for all known systems.
849 * (If your compiler itself needs names to be unique in less than 15
850 * characters, you are out of luck.  Get a better compiler.)
851 */
852
853#ifdef NEED_SHORT_EXTERNAL_NAMES
854#define jpeg_std_error          jStdError
855#define jpeg_CreateCompress     jCreaCompress
856#define jpeg_CreateDecompress   jCreaDecompress
857#define jpeg_destroy_compress   jDestCompress
858#define jpeg_destroy_decompress jDestDecompress
859#define jpeg_stdio_dest         jStdDest
860#define jpeg_stdio_src          jStdSrc
861#define jpeg_set_defaults       jSetDefaults
862#define jpeg_set_colorspace     jSetColorspace
863#define jpeg_default_colorspace jDefColorspace
864#define jpeg_set_quality        jSetQuality
865#define jpeg_set_linear_quality jSetLQuality
866#define jpeg_add_quant_table    jAddQuantTable
867#define jpeg_quality_scaling    jQualityScaling
868#define jpeg_simple_progression jSimProgress
869#define jpeg_suppress_tables    jSuppressTables
870#define jpeg_alloc_quant_table  jAlcQTable
871#define jpeg_alloc_huff_table   jAlcHTable
872#define jpeg_start_compress     jStrtCompress
873#define jpeg_write_scanlines    jWrtScanlines
874#define jpeg_finish_compress    jFinCompress
875#define jpeg_write_raw_data     jWrtRawData
876#define jpeg_write_marker       jWrtMarker
877#define jpeg_write_m_header     jWrtMHeader
878#define jpeg_write_m_byte       jWrtMByte
879#define jpeg_write_tables       jWrtTables
880#define jpeg_read_header        jReadHeader
881#define jpeg_start_decompress   jStrtDecompress
882#define jpeg_read_scanlines     jReadScanlines
883#define jpeg_finish_decompress  jFinDecompress
884#define jpeg_read_raw_data      jReadRawData
885#define jpeg_has_multiple_scans jHasMultScn
886#define jpeg_start_output       jStrtOutput
887#define jpeg_finish_output      jFinOutput
888#define jpeg_input_complete     jInComplete
889#define jpeg_new_colormap       jNewCMap
890#define jpeg_consume_input      jConsumeInput
891#define jpeg_calc_output_dimensions     jCalcDimensions
892#define jpeg_save_markers       jSaveMarkers
893#define jpeg_set_marker_processor       jSetMarker
894#define jpeg_read_coefficients  jReadCoefs
895#define jpeg_write_coefficients jWrtCoefs
896#define jpeg_copy_critical_parameters   jCopyCrit
897#define jpeg_abort_compress     jAbrtCompress
898#define jpeg_abort_decompress   jAbrtDecompress
899#define jpeg_abort              jAbort
900#define jpeg_destroy            jDestroy
901#define jpeg_resync_to_restart  jResyncRestart
902#endif /* NEED_SHORT_EXTERNAL_NAMES */
903
904#ifdef __cplusplus
905extern "C" {
906#endif
907
908/* Default error-management setup */
909EXTERN(struct jpeg_error_mgr *) jpeg_std_error
910        JPP((struct jpeg_error_mgr * err));
911
912/* Initialization of JPEG compression objects.
913 * jpeg_create_compress() and jpeg_create_decompress() are the exported
914 * names that applications should call.  These expand to calls on
915 * jpeg_CreateCompress and jpeg_CreateDecompress with additional information
916 * passed for version mismatch checking.
917 * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx.
918 */
919#define jpeg_create_compress(cinfo) \
920    jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \
921                        (size_t) sizeof(struct jpeg_compress_struct))
922#define jpeg_create_decompress(cinfo) \
923    jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
924                          (size_t) sizeof(struct jpeg_decompress_struct))
925EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo,
926                                      int version, size_t structsize));
927EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo,
928                                        int version, size_t structsize));
929/* Destruction of JPEG compression objects */
930EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo));
931EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));
932
933/* Standard data source and destination managers: stdio streams. */
934/* Caller is responsible for opening the file before and closing after. */
935EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
936EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
937
938/* Default parameter setup for compression */
939EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo));
940/* Compression parameter setup aids */
941EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo,
942                                      J_COLOR_SPACE colorspace));
943EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo));
944EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality,
945                                   boolean force_baseline));
946EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo,
947                                          int scale_factor,
948                                          boolean force_baseline));
949EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl,
950                                       const unsigned int *basic_table,
951                                       int scale_factor,
952                                       boolean force_baseline));
953EXTERN(int) jpeg_quality_scaling JPP((int quality));
954EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo));
955EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo,
956                                       boolean suppress));
957EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo));
958EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo));
959
960/* Main entry points for compression */
961EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo,
962                                      boolean write_all_tables));
963EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo,
964                                             JSAMPARRAY scanlines,
965                                             JDIMENSION num_lines));
966EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo));
967
968/* Replaces jpeg_write_scanlines when writing raw downsampled data. */
969EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo,
970                                            JSAMPIMAGE data,
971                                            JDIMENSION num_lines));
972
973/* Write a special marker.  See libjpeg.doc concerning safe usage. */
974EXTERN(void) jpeg_write_marker
975        JPP((j_compress_ptr cinfo, int marker,
976             const JOCTET * dataptr, unsigned int datalen));
977/* Same, but piecemeal. */
978EXTERN(void) jpeg_write_m_header
979        JPP((j_compress_ptr cinfo, int marker, unsigned int datalen));
980EXTERN(void) jpeg_write_m_byte
981        JPP((j_compress_ptr cinfo, int val));
982
983/* Alternate compression function: just write an abbreviated table file */
984EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo));
985
986/* Decompression startup: read start of JPEG datastream to see what's there */
987EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo,
988                                  boolean require_image));
989/* Return value is one of: */
990#define JPEG_SUSPENDED          0 /* Suspended due to lack of input data */
991#define JPEG_HEADER_OK          1 /* Found valid image datastream */
992#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */
993/* If you pass require_image = TRUE (normal case), you need not check for
994 * a TABLES_ONLY return code; an abbreviated file will cause an error exit.
995 * JPEG_SUSPENDED is only possible if you use a data source module that can
996 * give a suspension return (the stdio source module doesn't).
997 */
998
999/* Main entry points for decompression */
1000EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo));
1001EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo,
1002                                            JSAMPARRAY scanlines,
1003                                            JDIMENSION max_lines));
1004EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo));
1005
1006/* Replaces jpeg_read_scanlines when reading raw downsampled data. */
1007EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo,
1008                                           JSAMPIMAGE data,
1009                                           JDIMENSION max_lines));
1010
1011/* Additional entry points for buffered-image mode. */
1012EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo));
1013EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo,
1014                                       int scan_number));
1015EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo));
1016EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo));
1017EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo));
1018EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo));
1019/* Return value is one of: */
1020/* #define JPEG_SUSPENDED       0    Suspended due to lack of input data */
1021#define JPEG_REACHED_SOS        1 /* Reached start of new scan */
1022#define JPEG_REACHED_EOI        2 /* Reached end of image */
1023#define JPEG_ROW_COMPLETED      3 /* Completed one iMCU row */
1024#define JPEG_SCAN_COMPLETED     4 /* Completed last iMCU row of a scan */
1025
1026/* Precalculate output dimensions for current decompression parameters. */
1027EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo));
1028
1029/* Control saving of COM and APPn markers into marker_list. */
1030EXTERN(void) jpeg_save_markers
1031        JPP((j_decompress_ptr cinfo, int marker_code,
1032             unsigned int length_limit));
1033
1034/* Install a special processing method for COM or APPn markers. */
1035EXTERN(void) jpeg_set_marker_processor
1036        JPP((j_decompress_ptr cinfo, int marker_code,
1037             jpeg_marker_parser_method routine));
1038
1039/* Read or write raw DCT coefficients --- useful for lossless transcoding. */
1040EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo));
1041EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo,
1042                                          jvirt_barray_ptr * coef_arrays));
1043EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo,
1044                                                j_compress_ptr dstinfo));
1045
1046/* If you choose to abort compression or decompression before completing
1047 * jpeg_finish_(de)compress, then you need to clean up to release memory,
1048 * temporary files, etc.  You can just call jpeg_destroy_(de)compress
1049 * if you're done with the JPEG object, but if you want to clean it up and
1050 * reuse it, call this:
1051 */
1052EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo));
1053EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo));
1054
1055/* Generic versions of jpeg_abort and jpeg_destroy that work on either
1056 * flavor of JPEG object.  These may be more convenient in some places.
1057 */
1058EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo));
1059EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo));
1060
1061/* Default restart-marker-resync procedure for use by data source modules */
1062EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo,
1063                                            int desired));
1064
1065#ifdef __cplusplus
1066} /* extern "C" */
1067#endif /* __cplusplus */
1068
1069/* These marker codes are exported since applications and data source modules
1070 * are likely to want to use them.
1071 */
1072
1073#define JPEG_RST0       0xD0    /* RST0 marker code */
1074#define JPEG_EOI        0xD9    /* EOI marker code */
1075#define JPEG_APP0       0xE0    /* APP0 marker code */
1076#define JPEG_COM        0xFE    /* COM marker code */
1077
1078
1079/* If we have a brain-damaged compiler that emits warnings (or worse, errors)
1080 * for structure definitions that are never filled in, keep it quiet by
1081 * supplying dummy definitions for the various substructures.
1082 */
1083
1084#ifdef INCOMPLETE_TYPES_BROKEN
1085#ifndef JPEG_INTERNALS          /* will be defined in jpegint.h */
1086struct jvirt_sarray_control { long dummy; };
1087struct jvirt_barray_control { long dummy; };
1088struct jpeg_comp_master { long dummy; };
1089struct jpeg_c_main_controller { long dummy; };
1090struct jpeg_c_prep_controller { long dummy; };
1091struct jpeg_c_coef_controller { long dummy; };
1092struct jpeg_marker_writer { long dummy; };
1093struct jpeg_color_converter { long dummy; };
1094struct jpeg_downsampler { long dummy; };
1095struct jpeg_forward_dct { long dummy; };
1096struct jpeg_entropy_encoder { long dummy; };
1097struct jpeg_decomp_master { long dummy; };
1098struct jpeg_d_main_controller { long dummy; };
1099struct jpeg_d_coef_controller { long dummy; };
1100struct jpeg_d_post_controller { long dummy; };
1101struct jpeg_input_controller { long dummy; };
1102struct jpeg_marker_reader { long dummy; };
1103struct jpeg_entropy_decoder { long dummy; };
1104struct jpeg_inverse_dct { long dummy; };
1105struct jpeg_upsampler { long dummy; };
1106struct jpeg_color_deconverter { long dummy; };
1107struct jpeg_color_quantizer { long dummy; };
1108#endif /* JPEG_INTERNALS */
1109#endif /* INCOMPLETE_TYPES_BROKEN */
1110
1111
1112/*
1113 * The JPEG library modules define JPEG_INTERNALS before including this file.
1114 * The internal structure declarations are read only when that is true.
1115 * Applications using the library should not include jpegint.h, but may wish
1116 * to include jerror.h.
1117 */
1118
1119#ifdef JPEG_INTERNALS
1120#include "jpegint.h"            /* fetch private declarations */
1121#include "jerror.h"             /* fetch error codes too */
1122#endif
1123
1124#endif /* JPEGLIB_H */
Note: See TracBrowser for help on using the repository browser.