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