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