17dd7cddfSDavid du Colombier /* 27dd7cddfSDavid du Colombier * jpeglib.h 37dd7cddfSDavid du Colombier * 4*593dc095SDavid du Colombier * Copyright (C) 1991-1998, Thomas G. Lane. 57dd7cddfSDavid du Colombier * This file is part of the Independent JPEG Group's software. 67dd7cddfSDavid du Colombier * For conditions of distribution and use, see the accompanying README file. 77dd7cddfSDavid du Colombier * 87dd7cddfSDavid du Colombier * This file defines the application interface for the JPEG library. 97dd7cddfSDavid du Colombier * Most applications using the library need only include this file, 107dd7cddfSDavid du Colombier * and perhaps jerror.h if they want to know the exact error codes. 117dd7cddfSDavid du Colombier */ 127dd7cddfSDavid du Colombier 137dd7cddfSDavid du Colombier #ifndef JPEGLIB_H 147dd7cddfSDavid du Colombier #define JPEGLIB_H 157dd7cddfSDavid du Colombier 167dd7cddfSDavid du Colombier /* 177dd7cddfSDavid du Colombier * First we include the configuration files that record how this 187dd7cddfSDavid du Colombier * installation of the JPEG library is set up. jconfig.h can be 197dd7cddfSDavid du Colombier * generated automatically for many systems. jmorecfg.h contains 207dd7cddfSDavid du Colombier * manual configuration options that most people need not worry about. 217dd7cddfSDavid du Colombier */ 227dd7cddfSDavid du Colombier 237dd7cddfSDavid du Colombier #ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ 247dd7cddfSDavid du Colombier #include "jconfig.h" /* widely used configuration options */ 257dd7cddfSDavid du Colombier #endif 267dd7cddfSDavid du Colombier #include "jmorecfg.h" /* seldom changed options */ 277dd7cddfSDavid du Colombier 287dd7cddfSDavid du Colombier 297dd7cddfSDavid du Colombier /* Version ID for the JPEG library. 307dd7cddfSDavid du Colombier * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". 317dd7cddfSDavid du Colombier */ 327dd7cddfSDavid du Colombier 33*593dc095SDavid du Colombier #define JPEG_LIB_VERSION 62 /* Version 6b */ 347dd7cddfSDavid du Colombier 357dd7cddfSDavid du Colombier 367dd7cddfSDavid du Colombier /* Various constants determining the sizes of things. 377dd7cddfSDavid du Colombier * All of these are specified by the JPEG standard, so don't change them 387dd7cddfSDavid du Colombier * if you want to be compatible. 397dd7cddfSDavid du Colombier */ 407dd7cddfSDavid du Colombier 417dd7cddfSDavid du Colombier #define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ 427dd7cddfSDavid du Colombier #define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ 437dd7cddfSDavid du Colombier #define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ 447dd7cddfSDavid du Colombier #define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ 457dd7cddfSDavid du Colombier #define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ 467dd7cddfSDavid du Colombier #define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ 477dd7cddfSDavid du Colombier #define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ 487dd7cddfSDavid du Colombier /* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; 497dd7cddfSDavid du Colombier * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. 507dd7cddfSDavid du Colombier * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU 517dd7cddfSDavid du Colombier * to handle it. We even let you do this from the jconfig.h file. However, 527dd7cddfSDavid du Colombier * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe 537dd7cddfSDavid du Colombier * sometimes emits noncompliant files doesn't mean you should too. 547dd7cddfSDavid du Colombier */ 557dd7cddfSDavid du Colombier #define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ 567dd7cddfSDavid du Colombier #ifndef D_MAX_BLOCKS_IN_MCU 577dd7cddfSDavid du Colombier #define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ 587dd7cddfSDavid du Colombier #endif 597dd7cddfSDavid du Colombier 607dd7cddfSDavid du Colombier 617dd7cddfSDavid du Colombier /* Data structures for images (arrays of samples and of DCT coefficients). 627dd7cddfSDavid du Colombier * On 80x86 machines, the image arrays are too big for near pointers, 637dd7cddfSDavid du Colombier * but the pointer arrays can fit in near memory. 647dd7cddfSDavid du Colombier */ 657dd7cddfSDavid du Colombier 667dd7cddfSDavid du Colombier typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ 677dd7cddfSDavid du Colombier typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ 687dd7cddfSDavid du Colombier typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ 697dd7cddfSDavid du Colombier 707dd7cddfSDavid du Colombier typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ 717dd7cddfSDavid du Colombier typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ 727dd7cddfSDavid du Colombier typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ 737dd7cddfSDavid du Colombier typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ 747dd7cddfSDavid du Colombier 757dd7cddfSDavid du Colombier typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ 767dd7cddfSDavid du Colombier 777dd7cddfSDavid du Colombier 787dd7cddfSDavid du Colombier /* Types for JPEG compression parameters and working tables. */ 797dd7cddfSDavid du Colombier 807dd7cddfSDavid du Colombier 817dd7cddfSDavid du Colombier /* DCT coefficient quantization tables. */ 827dd7cddfSDavid du Colombier 837dd7cddfSDavid du Colombier typedef struct { 847dd7cddfSDavid du Colombier /* This array gives the coefficient quantizers in natural array order 857dd7cddfSDavid du Colombier * (not the zigzag order in which they are stored in a JPEG DQT marker). 867dd7cddfSDavid du Colombier * CAUTION: IJG versions prior to v6a kept this array in zigzag order. 877dd7cddfSDavid du Colombier */ 887dd7cddfSDavid du Colombier UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ 897dd7cddfSDavid du Colombier /* This field is used only during compression. It's initialized FALSE when 907dd7cddfSDavid du Colombier * the table is created, and set TRUE when it's been output to the file. 917dd7cddfSDavid du Colombier * You could suppress output of a table by setting this to TRUE. 927dd7cddfSDavid du Colombier * (See jpeg_suppress_tables for an example.) 937dd7cddfSDavid du Colombier */ 947dd7cddfSDavid du Colombier boolean sent_table; /* TRUE when table has been output */ 957dd7cddfSDavid du Colombier } JQUANT_TBL; 967dd7cddfSDavid du Colombier 977dd7cddfSDavid du Colombier 987dd7cddfSDavid du Colombier /* Huffman coding tables. */ 997dd7cddfSDavid du Colombier 1007dd7cddfSDavid du Colombier typedef struct { 1017dd7cddfSDavid du Colombier /* These two fields directly represent the contents of a JPEG DHT marker */ 1027dd7cddfSDavid du Colombier UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ 1037dd7cddfSDavid du Colombier /* length k bits; bits[0] is unused */ 1047dd7cddfSDavid du Colombier UINT8 huffval[256]; /* The symbols, in order of incr code length */ 1057dd7cddfSDavid du Colombier /* This field is used only during compression. It's initialized FALSE when 1067dd7cddfSDavid du Colombier * the table is created, and set TRUE when it's been output to the file. 1077dd7cddfSDavid du Colombier * You could suppress output of a table by setting this to TRUE. 1087dd7cddfSDavid du Colombier * (See jpeg_suppress_tables for an example.) 1097dd7cddfSDavid du Colombier */ 1107dd7cddfSDavid du Colombier boolean sent_table; /* TRUE when table has been output */ 1117dd7cddfSDavid du Colombier } JHUFF_TBL; 1127dd7cddfSDavid du Colombier 1137dd7cddfSDavid du Colombier 1147dd7cddfSDavid du Colombier /* Basic info about one component (color channel). */ 1157dd7cddfSDavid du Colombier 1167dd7cddfSDavid du Colombier typedef struct { 1177dd7cddfSDavid du Colombier /* These values are fixed over the whole image. */ 1187dd7cddfSDavid du Colombier /* For compression, they must be supplied by parameter setup; */ 1197dd7cddfSDavid du Colombier /* for decompression, they are read from the SOF marker. */ 1207dd7cddfSDavid du Colombier int component_id; /* identifier for this component (0..255) */ 1217dd7cddfSDavid du Colombier int component_index; /* its index in SOF or cinfo->comp_info[] */ 1227dd7cddfSDavid du Colombier int h_samp_factor; /* horizontal sampling factor (1..4) */ 1237dd7cddfSDavid du Colombier int v_samp_factor; /* vertical sampling factor (1..4) */ 1247dd7cddfSDavid du Colombier int quant_tbl_no; /* quantization table selector (0..3) */ 1257dd7cddfSDavid du Colombier /* These values may vary between scans. */ 1267dd7cddfSDavid du Colombier /* For compression, they must be supplied by parameter setup; */ 1277dd7cddfSDavid du Colombier /* for decompression, they are read from the SOS marker. */ 1287dd7cddfSDavid du Colombier /* The decompressor output side may not use these variables. */ 1297dd7cddfSDavid du Colombier int dc_tbl_no; /* DC entropy table selector (0..3) */ 1307dd7cddfSDavid du Colombier int ac_tbl_no; /* AC entropy table selector (0..3) */ 1317dd7cddfSDavid du Colombier 1327dd7cddfSDavid du Colombier /* Remaining fields should be treated as private by applications. */ 1337dd7cddfSDavid du Colombier 1347dd7cddfSDavid du Colombier /* These values are computed during compression or decompression startup: */ 1357dd7cddfSDavid du Colombier /* Component's size in DCT blocks. 1367dd7cddfSDavid du Colombier * Any dummy blocks added to complete an MCU are not counted; therefore 1377dd7cddfSDavid du Colombier * these values do not depend on whether a scan is interleaved or not. 1387dd7cddfSDavid du Colombier */ 1397dd7cddfSDavid du Colombier JDIMENSION width_in_blocks; 1407dd7cddfSDavid du Colombier JDIMENSION height_in_blocks; 1417dd7cddfSDavid du Colombier /* Size of a DCT block in samples. Always DCTSIZE for compression. 1427dd7cddfSDavid du Colombier * For decompression this is the size of the output from one DCT block, 1437dd7cddfSDavid du Colombier * reflecting any scaling we choose to apply during the IDCT step. 1447dd7cddfSDavid du Colombier * Values of 1,2,4,8 are likely to be supported. Note that different 1457dd7cddfSDavid du Colombier * components may receive different IDCT scalings. 1467dd7cddfSDavid du Colombier */ 1477dd7cddfSDavid du Colombier int DCT_scaled_size; 1487dd7cddfSDavid du Colombier /* The downsampled dimensions are the component's actual, unpadded number 1497dd7cddfSDavid du Colombier * of samples at the main buffer (preprocessing/compression interface), thus 1507dd7cddfSDavid du Colombier * downsampled_width = ceil(image_width * Hi/Hmax) 1517dd7cddfSDavid du Colombier * and similarly for height. For decompression, IDCT scaling is included, so 1527dd7cddfSDavid du Colombier * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) 1537dd7cddfSDavid du Colombier */ 1547dd7cddfSDavid du Colombier JDIMENSION downsampled_width; /* actual width in samples */ 1557dd7cddfSDavid du Colombier JDIMENSION downsampled_height; /* actual height in samples */ 1567dd7cddfSDavid du Colombier /* This flag is used only for decompression. In cases where some of the 1577dd7cddfSDavid du Colombier * components will be ignored (eg grayscale output from YCbCr image), 1587dd7cddfSDavid du Colombier * we can skip most computations for the unused components. 1597dd7cddfSDavid du Colombier */ 1607dd7cddfSDavid du Colombier boolean component_needed; /* do we need the value of this component? */ 1617dd7cddfSDavid du Colombier 1627dd7cddfSDavid du Colombier /* These values are computed before starting a scan of the component. */ 1637dd7cddfSDavid du Colombier /* The decompressor output side may not use these variables. */ 1647dd7cddfSDavid du Colombier int MCU_width; /* number of blocks per MCU, horizontally */ 1657dd7cddfSDavid du Colombier int MCU_height; /* number of blocks per MCU, vertically */ 1667dd7cddfSDavid du Colombier int MCU_blocks; /* MCU_width * MCU_height */ 1677dd7cddfSDavid du Colombier int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ 1687dd7cddfSDavid du Colombier int last_col_width; /* # of non-dummy blocks across in last MCU */ 1697dd7cddfSDavid du Colombier int last_row_height; /* # of non-dummy blocks down in last MCU */ 1707dd7cddfSDavid du Colombier 1717dd7cddfSDavid du Colombier /* Saved quantization table for component; NULL if none yet saved. 1727dd7cddfSDavid du Colombier * See jdinput.c comments about the need for this information. 1737dd7cddfSDavid du Colombier * This field is currently used only for decompression. 1747dd7cddfSDavid du Colombier */ 1757dd7cddfSDavid du Colombier JQUANT_TBL * quant_table; 1767dd7cddfSDavid du Colombier 1777dd7cddfSDavid du Colombier /* Private per-component storage for DCT or IDCT subsystem. */ 1787dd7cddfSDavid du Colombier void * dct_table; 1797dd7cddfSDavid du Colombier } jpeg_component_info; 1807dd7cddfSDavid du Colombier 1817dd7cddfSDavid du Colombier 1827dd7cddfSDavid du Colombier /* The script for encoding a multiple-scan file is an array of these: */ 1837dd7cddfSDavid du Colombier 1847dd7cddfSDavid du Colombier typedef struct { 1857dd7cddfSDavid du Colombier int comps_in_scan; /* number of components encoded in this scan */ 1867dd7cddfSDavid du Colombier int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ 1877dd7cddfSDavid du Colombier int Ss, Se; /* progressive JPEG spectral selection parms */ 1887dd7cddfSDavid du Colombier int Ah, Al; /* progressive JPEG successive approx. parms */ 1897dd7cddfSDavid du Colombier } jpeg_scan_info; 1907dd7cddfSDavid du Colombier 191*593dc095SDavid du Colombier /* The decompressor can save APPn and COM markers in a list of these: */ 192*593dc095SDavid du Colombier 193*593dc095SDavid du Colombier typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; 194*593dc095SDavid du Colombier 195*593dc095SDavid du Colombier struct jpeg_marker_struct { 196*593dc095SDavid du Colombier jpeg_saved_marker_ptr next; /* next in list, or NULL */ 197*593dc095SDavid du Colombier UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ 198*593dc095SDavid du Colombier unsigned int original_length; /* # bytes of data in the file */ 199*593dc095SDavid du Colombier unsigned int data_length; /* # bytes of data saved at data[] */ 200*593dc095SDavid du Colombier JOCTET FAR * data; /* the data contained in the marker */ 201*593dc095SDavid du Colombier /* the marker length word is not counted in data_length or original_length */ 202*593dc095SDavid du Colombier }; 2037dd7cddfSDavid du Colombier 2047dd7cddfSDavid du Colombier /* Known color spaces. */ 2057dd7cddfSDavid du Colombier 2067dd7cddfSDavid du Colombier typedef enum { 2077dd7cddfSDavid du Colombier JCS_UNKNOWN, /* error/unspecified */ 2087dd7cddfSDavid du Colombier JCS_GRAYSCALE, /* monochrome */ 2097dd7cddfSDavid du Colombier JCS_RGB, /* red/green/blue */ 2107dd7cddfSDavid du Colombier JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ 2117dd7cddfSDavid du Colombier JCS_CMYK, /* C/M/Y/K */ 2127dd7cddfSDavid du Colombier JCS_YCCK /* Y/Cb/Cr/K */ 2137dd7cddfSDavid du Colombier } J_COLOR_SPACE; 2147dd7cddfSDavid du Colombier 2157dd7cddfSDavid du Colombier /* DCT/IDCT algorithm options. */ 2167dd7cddfSDavid du Colombier 2177dd7cddfSDavid du Colombier typedef enum { 2187dd7cddfSDavid du Colombier JDCT_ISLOW, /* slow but accurate integer algorithm */ 2197dd7cddfSDavid du Colombier JDCT_IFAST, /* faster, less accurate integer method */ 2207dd7cddfSDavid du Colombier JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ 2217dd7cddfSDavid du Colombier } J_DCT_METHOD; 2227dd7cddfSDavid du Colombier 2237dd7cddfSDavid du Colombier #ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ 2247dd7cddfSDavid du Colombier #define JDCT_DEFAULT JDCT_ISLOW 2257dd7cddfSDavid du Colombier #endif 2267dd7cddfSDavid du Colombier #ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ 2277dd7cddfSDavid du Colombier #define JDCT_FASTEST JDCT_IFAST 2287dd7cddfSDavid du Colombier #endif 2297dd7cddfSDavid du Colombier 2307dd7cddfSDavid du Colombier /* Dithering options for decompression. */ 2317dd7cddfSDavid du Colombier 2327dd7cddfSDavid du Colombier typedef enum { 2337dd7cddfSDavid du Colombier JDITHER_NONE, /* no dithering */ 2347dd7cddfSDavid du Colombier JDITHER_ORDERED, /* simple ordered dither */ 2357dd7cddfSDavid du Colombier JDITHER_FS /* Floyd-Steinberg error diffusion dither */ 2367dd7cddfSDavid du Colombier } J_DITHER_MODE; 2377dd7cddfSDavid du Colombier 2387dd7cddfSDavid du Colombier 2397dd7cddfSDavid du Colombier /* Common fields between JPEG compression and decompression master structs. */ 2407dd7cddfSDavid du Colombier 2417dd7cddfSDavid du Colombier #define jpeg_common_fields \ 2427dd7cddfSDavid du Colombier struct jpeg_error_mgr * err; /* Error handler module */\ 2437dd7cddfSDavid du Colombier struct jpeg_memory_mgr * mem; /* Memory manager module */\ 2447dd7cddfSDavid du Colombier struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ 245*593dc095SDavid du Colombier void * client_data; /* Available for use by application */\ 246*593dc095SDavid du Colombier boolean is_decompressor; /* So common code can tell which is which */\ 247*593dc095SDavid du Colombier int global_state /* For checking call sequence validity */ 2487dd7cddfSDavid du Colombier 2497dd7cddfSDavid du Colombier /* Routines that are to be used by both halves of the library are declared 2507dd7cddfSDavid du Colombier * to receive a pointer to this structure. There are no actual instances of 2517dd7cddfSDavid du Colombier * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. 2527dd7cddfSDavid du Colombier */ 2537dd7cddfSDavid du Colombier struct jpeg_common_struct { 2547dd7cddfSDavid du Colombier jpeg_common_fields; /* Fields common to both master struct types */ 2557dd7cddfSDavid du Colombier /* Additional fields follow in an actual jpeg_compress_struct or 2567dd7cddfSDavid du Colombier * jpeg_decompress_struct. All three structs must agree on these 2577dd7cddfSDavid du Colombier * initial fields! (This would be a lot cleaner in C++.) 2587dd7cddfSDavid du Colombier */ 2597dd7cddfSDavid du Colombier }; 2607dd7cddfSDavid du Colombier 2617dd7cddfSDavid du Colombier typedef struct jpeg_common_struct * j_common_ptr; 2627dd7cddfSDavid du Colombier typedef struct jpeg_compress_struct * j_compress_ptr; 2637dd7cddfSDavid du Colombier typedef struct jpeg_decompress_struct * j_decompress_ptr; 2647dd7cddfSDavid du Colombier 2657dd7cddfSDavid du Colombier 2667dd7cddfSDavid du Colombier /* Master record for a compression instance */ 2677dd7cddfSDavid du Colombier 2687dd7cddfSDavid du Colombier struct jpeg_compress_struct { 2697dd7cddfSDavid du Colombier jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ 2707dd7cddfSDavid du Colombier 2717dd7cddfSDavid du Colombier /* Destination for compressed data */ 2727dd7cddfSDavid du Colombier struct jpeg_destination_mgr * dest; 2737dd7cddfSDavid du Colombier 2747dd7cddfSDavid du Colombier /* Description of source image --- these fields must be filled in by 2757dd7cddfSDavid du Colombier * outer application before starting compression. in_color_space must 2767dd7cddfSDavid du Colombier * be correct before you can even call jpeg_set_defaults(). 2777dd7cddfSDavid du Colombier */ 2787dd7cddfSDavid du Colombier 2797dd7cddfSDavid du Colombier JDIMENSION image_width; /* input image width */ 2807dd7cddfSDavid du Colombier JDIMENSION image_height; /* input image height */ 2817dd7cddfSDavid du Colombier int input_components; /* # of color components in input image */ 2827dd7cddfSDavid du Colombier J_COLOR_SPACE in_color_space; /* colorspace of input image */ 2837dd7cddfSDavid du Colombier 2847dd7cddfSDavid du Colombier double input_gamma; /* image gamma of input image */ 2857dd7cddfSDavid du Colombier 2867dd7cddfSDavid du Colombier /* Compression parameters --- these fields must be set before calling 2877dd7cddfSDavid du Colombier * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to 2887dd7cddfSDavid du Colombier * initialize everything to reasonable defaults, then changing anything 2897dd7cddfSDavid du Colombier * the application specifically wants to change. That way you won't get 2907dd7cddfSDavid du Colombier * burnt when new parameters are added. Also note that there are several 2917dd7cddfSDavid du Colombier * helper routines to simplify changing parameters. 2927dd7cddfSDavid du Colombier */ 2937dd7cddfSDavid du Colombier 2947dd7cddfSDavid du Colombier int data_precision; /* bits of precision in image data */ 2957dd7cddfSDavid du Colombier 2967dd7cddfSDavid du Colombier int num_components; /* # of color components in JPEG image */ 2977dd7cddfSDavid du Colombier J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ 2987dd7cddfSDavid du Colombier 2997dd7cddfSDavid du Colombier jpeg_component_info * comp_info; 3007dd7cddfSDavid du Colombier /* comp_info[i] describes component that appears i'th in SOF */ 3017dd7cddfSDavid du Colombier 3027dd7cddfSDavid du Colombier JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; 3037dd7cddfSDavid du Colombier /* ptrs to coefficient quantization tables, or NULL if not defined */ 3047dd7cddfSDavid du Colombier 3057dd7cddfSDavid du Colombier JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; 3067dd7cddfSDavid du Colombier JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; 3077dd7cddfSDavid du Colombier /* ptrs to Huffman coding tables, or NULL if not defined */ 3087dd7cddfSDavid du Colombier 3097dd7cddfSDavid du Colombier UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ 3107dd7cddfSDavid du Colombier UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ 3117dd7cddfSDavid du Colombier UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ 3127dd7cddfSDavid du Colombier 3137dd7cddfSDavid du Colombier int num_scans; /* # of entries in scan_info array */ 3147dd7cddfSDavid du Colombier const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ 3157dd7cddfSDavid du Colombier /* The default value of scan_info is NULL, which causes a single-scan 3167dd7cddfSDavid du Colombier * sequential JPEG file to be emitted. To create a multi-scan file, 3177dd7cddfSDavid du Colombier * set num_scans and scan_info to point to an array of scan definitions. 3187dd7cddfSDavid du Colombier */ 3197dd7cddfSDavid du Colombier 3207dd7cddfSDavid du Colombier boolean raw_data_in; /* TRUE=caller supplies downsampled data */ 3217dd7cddfSDavid du Colombier boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ 3227dd7cddfSDavid du Colombier boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ 3237dd7cddfSDavid du Colombier boolean CCIR601_sampling; /* TRUE=first samples are cosited */ 3247dd7cddfSDavid du Colombier int smoothing_factor; /* 1..100, or 0 for no input smoothing */ 3257dd7cddfSDavid du Colombier J_DCT_METHOD dct_method; /* DCT algorithm selector */ 3267dd7cddfSDavid du Colombier 3277dd7cddfSDavid du Colombier /* The restart interval can be specified in absolute MCUs by setting 3287dd7cddfSDavid du Colombier * restart_interval, or in MCU rows by setting restart_in_rows 3297dd7cddfSDavid du Colombier * (in which case the correct restart_interval will be figured 3307dd7cddfSDavid du Colombier * for each scan). 3317dd7cddfSDavid du Colombier */ 3327dd7cddfSDavid du Colombier unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ 3337dd7cddfSDavid du Colombier int restart_in_rows; /* if > 0, MCU rows per restart interval */ 3347dd7cddfSDavid du Colombier 3357dd7cddfSDavid du Colombier /* Parameters controlling emission of special markers. */ 3367dd7cddfSDavid du Colombier 3377dd7cddfSDavid du Colombier boolean write_JFIF_header; /* should a JFIF marker be written? */ 338*593dc095SDavid du Colombier UINT8 JFIF_major_version; /* What to write for the JFIF version number */ 339*593dc095SDavid du Colombier UINT8 JFIF_minor_version; 3407dd7cddfSDavid du Colombier /* These three values are not used by the JPEG code, merely copied */ 3417dd7cddfSDavid du Colombier /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ 3427dd7cddfSDavid du Colombier /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ 3437dd7cddfSDavid du Colombier /* ratio is defined by X_density/Y_density even when density_unit=0. */ 3447dd7cddfSDavid du Colombier UINT8 density_unit; /* JFIF code for pixel size units */ 3457dd7cddfSDavid du Colombier UINT16 X_density; /* Horizontal pixel density */ 3467dd7cddfSDavid du Colombier UINT16 Y_density; /* Vertical pixel density */ 3477dd7cddfSDavid du Colombier boolean write_Adobe_marker; /* should an Adobe marker be written? */ 3487dd7cddfSDavid du Colombier 3497dd7cddfSDavid du Colombier /* State variable: index of next scanline to be written to 3507dd7cddfSDavid du Colombier * jpeg_write_scanlines(). Application may use this to control its 3517dd7cddfSDavid du Colombier * processing loop, e.g., "while (next_scanline < image_height)". 3527dd7cddfSDavid du Colombier */ 3537dd7cddfSDavid du Colombier 3547dd7cddfSDavid du Colombier JDIMENSION next_scanline; /* 0 .. image_height-1 */ 3557dd7cddfSDavid du Colombier 3567dd7cddfSDavid du Colombier /* Remaining fields are known throughout compressor, but generally 3577dd7cddfSDavid du Colombier * should not be touched by a surrounding application. 3587dd7cddfSDavid du Colombier */ 3597dd7cddfSDavid du Colombier 3607dd7cddfSDavid du Colombier /* 3617dd7cddfSDavid du Colombier * These fields are computed during compression startup 3627dd7cddfSDavid du Colombier */ 3637dd7cddfSDavid du Colombier boolean progressive_mode; /* TRUE if scan script uses progressive mode */ 3647dd7cddfSDavid du Colombier int max_h_samp_factor; /* largest h_samp_factor */ 3657dd7cddfSDavid du Colombier int max_v_samp_factor; /* largest v_samp_factor */ 3667dd7cddfSDavid du Colombier 3677dd7cddfSDavid du Colombier JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ 3687dd7cddfSDavid du Colombier /* The coefficient controller receives data in units of MCU rows as defined 3697dd7cddfSDavid du Colombier * for fully interleaved scans (whether the JPEG file is interleaved or not). 3707dd7cddfSDavid du Colombier * There are v_samp_factor * DCTSIZE sample rows of each component in an 3717dd7cddfSDavid du Colombier * "iMCU" (interleaved MCU) row. 3727dd7cddfSDavid du Colombier */ 3737dd7cddfSDavid du Colombier 3747dd7cddfSDavid du Colombier /* 3757dd7cddfSDavid du Colombier * These fields are valid during any one scan. 3767dd7cddfSDavid du Colombier * They describe the components and MCUs actually appearing in the scan. 3777dd7cddfSDavid du Colombier */ 3787dd7cddfSDavid du Colombier int comps_in_scan; /* # of JPEG components in this scan */ 3797dd7cddfSDavid du Colombier jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; 3807dd7cddfSDavid du Colombier /* *cur_comp_info[i] describes component that appears i'th in SOS */ 3817dd7cddfSDavid du Colombier 3827dd7cddfSDavid du Colombier JDIMENSION MCUs_per_row; /* # of MCUs across the image */ 3837dd7cddfSDavid du Colombier JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ 3847dd7cddfSDavid du Colombier 3857dd7cddfSDavid du Colombier int blocks_in_MCU; /* # of DCT blocks per MCU */ 3867dd7cddfSDavid du Colombier int MCU_membership[C_MAX_BLOCKS_IN_MCU]; 3877dd7cddfSDavid du Colombier /* MCU_membership[i] is index in cur_comp_info of component owning */ 3887dd7cddfSDavid du Colombier /* i'th block in an MCU */ 3897dd7cddfSDavid du Colombier 3907dd7cddfSDavid du Colombier int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ 3917dd7cddfSDavid du Colombier 3927dd7cddfSDavid du Colombier /* 3937dd7cddfSDavid du Colombier * Links to compression subobjects (methods and private variables of modules) 3947dd7cddfSDavid du Colombier */ 3957dd7cddfSDavid du Colombier struct jpeg_comp_master * master; 3967dd7cddfSDavid du Colombier struct jpeg_c_main_controller * main; 3977dd7cddfSDavid du Colombier struct jpeg_c_prep_controller * prep; 3987dd7cddfSDavid du Colombier struct jpeg_c_coef_controller * coef; 3997dd7cddfSDavid du Colombier struct jpeg_marker_writer * marker; 4007dd7cddfSDavid du Colombier struct jpeg_color_converter * cconvert; 4017dd7cddfSDavid du Colombier struct jpeg_downsampler * downsample; 4027dd7cddfSDavid du Colombier struct jpeg_forward_dct * fdct; 4037dd7cddfSDavid du Colombier struct jpeg_entropy_encoder * entropy; 404*593dc095SDavid du Colombier jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ 405*593dc095SDavid du Colombier int script_space_size; 4067dd7cddfSDavid du Colombier }; 4077dd7cddfSDavid du Colombier 4087dd7cddfSDavid du Colombier 4097dd7cddfSDavid du Colombier /* Master record for a decompression instance */ 4107dd7cddfSDavid du Colombier 4117dd7cddfSDavid du Colombier struct jpeg_decompress_struct { 4127dd7cddfSDavid du Colombier jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ 4137dd7cddfSDavid du Colombier 4147dd7cddfSDavid du Colombier /* Source of compressed data */ 4157dd7cddfSDavid du Colombier struct jpeg_source_mgr * src; 4167dd7cddfSDavid du Colombier 4177dd7cddfSDavid du Colombier /* Basic description of image --- filled in by jpeg_read_header(). */ 4187dd7cddfSDavid du Colombier /* Application may inspect these values to decide how to process image. */ 4197dd7cddfSDavid du Colombier 4207dd7cddfSDavid du Colombier JDIMENSION image_width; /* nominal image width (from SOF marker) */ 4217dd7cddfSDavid du Colombier JDIMENSION image_height; /* nominal image height */ 4227dd7cddfSDavid du Colombier int num_components; /* # of color components in JPEG image */ 4237dd7cddfSDavid du Colombier J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ 4247dd7cddfSDavid du Colombier 4257dd7cddfSDavid du Colombier /* Decompression processing parameters --- these fields must be set before 4267dd7cddfSDavid du Colombier * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes 4277dd7cddfSDavid du Colombier * them to default values. 4287dd7cddfSDavid du Colombier */ 4297dd7cddfSDavid du Colombier 4307dd7cddfSDavid du Colombier J_COLOR_SPACE out_color_space; /* colorspace for output */ 4317dd7cddfSDavid du Colombier 4327dd7cddfSDavid du Colombier unsigned int scale_num, scale_denom; /* fraction by which to scale image */ 4337dd7cddfSDavid du Colombier 4347dd7cddfSDavid du Colombier double output_gamma; /* image gamma wanted in output */ 4357dd7cddfSDavid du Colombier 4367dd7cddfSDavid du Colombier boolean buffered_image; /* TRUE=multiple output passes */ 4377dd7cddfSDavid du Colombier boolean raw_data_out; /* TRUE=downsampled data wanted */ 4387dd7cddfSDavid du Colombier 4397dd7cddfSDavid du Colombier J_DCT_METHOD dct_method; /* IDCT algorithm selector */ 4407dd7cddfSDavid du Colombier boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ 4417dd7cddfSDavid du Colombier boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ 4427dd7cddfSDavid du Colombier 4437dd7cddfSDavid du Colombier boolean quantize_colors; /* TRUE=colormapped output wanted */ 4447dd7cddfSDavid du Colombier /* the following are ignored if not quantize_colors: */ 4457dd7cddfSDavid du Colombier J_DITHER_MODE dither_mode; /* type of color dithering to use */ 4467dd7cddfSDavid du Colombier boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ 4477dd7cddfSDavid du Colombier int desired_number_of_colors; /* max # colors to use in created colormap */ 4487dd7cddfSDavid du Colombier /* these are significant only in buffered-image mode: */ 4497dd7cddfSDavid du Colombier boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ 4507dd7cddfSDavid du Colombier boolean enable_external_quant;/* enable future use of external colormap */ 4517dd7cddfSDavid du Colombier boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ 4527dd7cddfSDavid du Colombier 4537dd7cddfSDavid du Colombier /* Description of actual output image that will be returned to application. 4547dd7cddfSDavid du Colombier * These fields are computed by jpeg_start_decompress(). 4557dd7cddfSDavid du Colombier * You can also use jpeg_calc_output_dimensions() to determine these values 4567dd7cddfSDavid du Colombier * in advance of calling jpeg_start_decompress(). 4577dd7cddfSDavid du Colombier */ 4587dd7cddfSDavid du Colombier 4597dd7cddfSDavid du Colombier JDIMENSION output_width; /* scaled image width */ 4607dd7cddfSDavid du Colombier JDIMENSION output_height; /* scaled image height */ 4617dd7cddfSDavid du Colombier int out_color_components; /* # of color components in out_color_space */ 4627dd7cddfSDavid du Colombier int output_components; /* # of color components returned */ 4637dd7cddfSDavid du Colombier /* output_components is 1 (a colormap index) when quantizing colors; 4647dd7cddfSDavid du Colombier * otherwise it equals out_color_components. 4657dd7cddfSDavid du Colombier */ 4667dd7cddfSDavid du Colombier int rec_outbuf_height; /* min recommended height of scanline buffer */ 4677dd7cddfSDavid du Colombier /* If the buffer passed to jpeg_read_scanlines() is less than this many rows 4687dd7cddfSDavid du Colombier * high, space and time will be wasted due to unnecessary data copying. 4697dd7cddfSDavid du Colombier * Usually rec_outbuf_height will be 1 or 2, at most 4. 4707dd7cddfSDavid du Colombier */ 4717dd7cddfSDavid du Colombier 4727dd7cddfSDavid du Colombier /* When quantizing colors, the output colormap is described by these fields. 4737dd7cddfSDavid du Colombier * The application can supply a colormap by setting colormap non-NULL before 4747dd7cddfSDavid du Colombier * calling jpeg_start_decompress; otherwise a colormap is created during 4757dd7cddfSDavid du Colombier * jpeg_start_decompress or jpeg_start_output. 4767dd7cddfSDavid du Colombier * The map has out_color_components rows and actual_number_of_colors columns. 4777dd7cddfSDavid du Colombier */ 4787dd7cddfSDavid du Colombier int actual_number_of_colors; /* number of entries in use */ 4797dd7cddfSDavid du Colombier JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ 4807dd7cddfSDavid du Colombier 4817dd7cddfSDavid du Colombier /* State variables: these variables indicate the progress of decompression. 4827dd7cddfSDavid du Colombier * The application may examine these but must not modify them. 4837dd7cddfSDavid du Colombier */ 4847dd7cddfSDavid du Colombier 4857dd7cddfSDavid du Colombier /* Row index of next scanline to be read from jpeg_read_scanlines(). 4867dd7cddfSDavid du Colombier * Application may use this to control its processing loop, e.g., 4877dd7cddfSDavid du Colombier * "while (output_scanline < output_height)". 4887dd7cddfSDavid du Colombier */ 4897dd7cddfSDavid du Colombier JDIMENSION output_scanline; /* 0 .. output_height-1 */ 4907dd7cddfSDavid du Colombier 4917dd7cddfSDavid du Colombier /* Current input scan number and number of iMCU rows completed in scan. 4927dd7cddfSDavid du Colombier * These indicate the progress of the decompressor input side. 4937dd7cddfSDavid du Colombier */ 4947dd7cddfSDavid du Colombier int input_scan_number; /* Number of SOS markers seen so far */ 4957dd7cddfSDavid du Colombier JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ 4967dd7cddfSDavid du Colombier 4977dd7cddfSDavid du Colombier /* The "output scan number" is the notional scan being displayed by the 4987dd7cddfSDavid du Colombier * output side. The decompressor will not allow output scan/row number 4997dd7cddfSDavid du Colombier * to get ahead of input scan/row, but it can fall arbitrarily far behind. 5007dd7cddfSDavid du Colombier */ 5017dd7cddfSDavid du Colombier int output_scan_number; /* Nominal scan number being displayed */ 5027dd7cddfSDavid du Colombier JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ 5037dd7cddfSDavid du Colombier 5047dd7cddfSDavid du Colombier /* Current progression status. coef_bits[c][i] indicates the precision 5057dd7cddfSDavid du Colombier * with which component c's DCT coefficient i (in zigzag order) is known. 5067dd7cddfSDavid du Colombier * It is -1 when no data has yet been received, otherwise it is the point 5077dd7cddfSDavid du Colombier * transform (shift) value for the most recent scan of the coefficient 5087dd7cddfSDavid du Colombier * (thus, 0 at completion of the progression). 5097dd7cddfSDavid du Colombier * This pointer is NULL when reading a non-progressive file. 5107dd7cddfSDavid du Colombier */ 5117dd7cddfSDavid du Colombier int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ 5127dd7cddfSDavid du Colombier 5137dd7cddfSDavid du Colombier /* Internal JPEG parameters --- the application usually need not look at 5147dd7cddfSDavid du Colombier * these fields. Note that the decompressor output side may not use 5157dd7cddfSDavid du Colombier * any parameters that can change between scans. 5167dd7cddfSDavid du Colombier */ 5177dd7cddfSDavid du Colombier 5187dd7cddfSDavid du Colombier /* Quantization and Huffman tables are carried forward across input 5197dd7cddfSDavid du Colombier * datastreams when processing abbreviated JPEG datastreams. 5207dd7cddfSDavid du Colombier */ 5217dd7cddfSDavid du Colombier 5227dd7cddfSDavid du Colombier JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; 5237dd7cddfSDavid du Colombier /* ptrs to coefficient quantization tables, or NULL if not defined */ 5247dd7cddfSDavid du Colombier 5257dd7cddfSDavid du Colombier JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; 5267dd7cddfSDavid du Colombier JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; 5277dd7cddfSDavid du Colombier /* ptrs to Huffman coding tables, or NULL if not defined */ 5287dd7cddfSDavid du Colombier 5297dd7cddfSDavid du Colombier /* These parameters are never carried across datastreams, since they 5307dd7cddfSDavid du Colombier * are given in SOF/SOS markers or defined to be reset by SOI. 5317dd7cddfSDavid du Colombier */ 5327dd7cddfSDavid du Colombier 5337dd7cddfSDavid du Colombier int data_precision; /* bits of precision in image data */ 5347dd7cddfSDavid du Colombier 5357dd7cddfSDavid du Colombier jpeg_component_info * comp_info; 5367dd7cddfSDavid du Colombier /* comp_info[i] describes component that appears i'th in SOF */ 5377dd7cddfSDavid du Colombier 5387dd7cddfSDavid du Colombier boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ 5397dd7cddfSDavid du Colombier boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ 5407dd7cddfSDavid du Colombier 5417dd7cddfSDavid du Colombier UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ 5427dd7cddfSDavid du Colombier UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ 5437dd7cddfSDavid du Colombier UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ 5447dd7cddfSDavid du Colombier 5457dd7cddfSDavid du Colombier unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ 5467dd7cddfSDavid du Colombier 5477dd7cddfSDavid du Colombier /* These fields record data obtained from optional markers recognized by 5487dd7cddfSDavid du Colombier * the JPEG library. 5497dd7cddfSDavid du Colombier */ 5507dd7cddfSDavid du Colombier boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ 551*593dc095SDavid du Colombier /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ 552*593dc095SDavid du Colombier UINT8 JFIF_major_version; /* JFIF version number */ 553*593dc095SDavid du Colombier UINT8 JFIF_minor_version; 5547dd7cddfSDavid du Colombier UINT8 density_unit; /* JFIF code for pixel size units */ 5557dd7cddfSDavid du Colombier UINT16 X_density; /* Horizontal pixel density */ 5567dd7cddfSDavid du Colombier UINT16 Y_density; /* Vertical pixel density */ 5577dd7cddfSDavid du Colombier boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ 5587dd7cddfSDavid du Colombier UINT8 Adobe_transform; /* Color transform code from Adobe marker */ 5597dd7cddfSDavid du Colombier 5607dd7cddfSDavid du Colombier boolean CCIR601_sampling; /* TRUE=first samples are cosited */ 5617dd7cddfSDavid du Colombier 562*593dc095SDavid du Colombier /* Aside from the specific data retained from APPn markers known to the 563*593dc095SDavid du Colombier * library, the uninterpreted contents of any or all APPn and COM markers 564*593dc095SDavid du Colombier * can be saved in a list for examination by the application. 565*593dc095SDavid du Colombier */ 566*593dc095SDavid du Colombier jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ 567*593dc095SDavid du Colombier 5687dd7cddfSDavid du Colombier /* Remaining fields are known throughout decompressor, but generally 5697dd7cddfSDavid du Colombier * should not be touched by a surrounding application. 5707dd7cddfSDavid du Colombier */ 5717dd7cddfSDavid du Colombier 5727dd7cddfSDavid du Colombier /* 5737dd7cddfSDavid du Colombier * These fields are computed during decompression startup 5747dd7cddfSDavid du Colombier */ 5757dd7cddfSDavid du Colombier int max_h_samp_factor; /* largest h_samp_factor */ 5767dd7cddfSDavid du Colombier int max_v_samp_factor; /* largest v_samp_factor */ 5777dd7cddfSDavid du Colombier 5787dd7cddfSDavid du Colombier int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ 5797dd7cddfSDavid du Colombier 5807dd7cddfSDavid du Colombier JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ 5817dd7cddfSDavid du Colombier /* The coefficient controller's input and output progress is measured in 5827dd7cddfSDavid du Colombier * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows 5837dd7cddfSDavid du Colombier * in fully interleaved JPEG scans, but are used whether the scan is 5847dd7cddfSDavid du Colombier * interleaved or not. We define an iMCU row as v_samp_factor DCT block 5857dd7cddfSDavid du Colombier * rows of each component. Therefore, the IDCT output contains 5867dd7cddfSDavid du Colombier * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. 5877dd7cddfSDavid du Colombier */ 5887dd7cddfSDavid du Colombier 5897dd7cddfSDavid du Colombier JSAMPLE * sample_range_limit; /* table for fast range-limiting */ 5907dd7cddfSDavid du Colombier 5917dd7cddfSDavid du Colombier /* 5927dd7cddfSDavid du Colombier * These fields are valid during any one scan. 5937dd7cddfSDavid du Colombier * They describe the components and MCUs actually appearing in the scan. 5947dd7cddfSDavid du Colombier * Note that the decompressor output side must not use these fields. 5957dd7cddfSDavid du Colombier */ 5967dd7cddfSDavid du Colombier int comps_in_scan; /* # of JPEG components in this scan */ 5977dd7cddfSDavid du Colombier jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; 5987dd7cddfSDavid du Colombier /* *cur_comp_info[i] describes component that appears i'th in SOS */ 5997dd7cddfSDavid du Colombier 6007dd7cddfSDavid du Colombier JDIMENSION MCUs_per_row; /* # of MCUs across the image */ 6017dd7cddfSDavid du Colombier JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ 6027dd7cddfSDavid du Colombier 6037dd7cddfSDavid du Colombier int blocks_in_MCU; /* # of DCT blocks per MCU */ 6047dd7cddfSDavid du Colombier int MCU_membership[D_MAX_BLOCKS_IN_MCU]; 6057dd7cddfSDavid du Colombier /* MCU_membership[i] is index in cur_comp_info of component owning */ 6067dd7cddfSDavid du Colombier /* i'th block in an MCU */ 6077dd7cddfSDavid du Colombier 6087dd7cddfSDavid du Colombier int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ 6097dd7cddfSDavid du Colombier 6107dd7cddfSDavid du Colombier /* This field is shared between entropy decoder and marker parser. 6117dd7cddfSDavid du Colombier * It is either zero or the code of a JPEG marker that has been 6127dd7cddfSDavid du Colombier * read from the data source, but has not yet been processed. 6137dd7cddfSDavid du Colombier */ 6147dd7cddfSDavid du Colombier int unread_marker; 6157dd7cddfSDavid du Colombier 6167dd7cddfSDavid du Colombier /* 6177dd7cddfSDavid du Colombier * Links to decompression subobjects (methods, private variables of modules) 6187dd7cddfSDavid du Colombier */ 6197dd7cddfSDavid du Colombier struct jpeg_decomp_master * master; 6207dd7cddfSDavid du Colombier struct jpeg_d_main_controller * main; 6217dd7cddfSDavid du Colombier struct jpeg_d_coef_controller * coef; 6227dd7cddfSDavid du Colombier struct jpeg_d_post_controller * post; 6237dd7cddfSDavid du Colombier struct jpeg_input_controller * inputctl; 6247dd7cddfSDavid du Colombier struct jpeg_marker_reader * marker; 6257dd7cddfSDavid du Colombier struct jpeg_entropy_decoder * entropy; 6267dd7cddfSDavid du Colombier struct jpeg_inverse_dct * idct; 6277dd7cddfSDavid du Colombier struct jpeg_upsampler * upsample; 6287dd7cddfSDavid du Colombier struct jpeg_color_deconverter * cconvert; 6297dd7cddfSDavid du Colombier struct jpeg_color_quantizer * cquantize; 6307dd7cddfSDavid du Colombier }; 6317dd7cddfSDavid du Colombier 6327dd7cddfSDavid du Colombier 6337dd7cddfSDavid du Colombier /* "Object" declarations for JPEG modules that may be supplied or called 6347dd7cddfSDavid du Colombier * directly by the surrounding application. 6357dd7cddfSDavid du Colombier * As with all objects in the JPEG library, these structs only define the 6367dd7cddfSDavid du Colombier * publicly visible methods and state variables of a module. Additional 6377dd7cddfSDavid du Colombier * private fields may exist after the public ones. 6387dd7cddfSDavid du Colombier */ 6397dd7cddfSDavid du Colombier 6407dd7cddfSDavid du Colombier 6417dd7cddfSDavid du Colombier /* Error handler object */ 6427dd7cddfSDavid du Colombier 6437dd7cddfSDavid du Colombier struct jpeg_error_mgr { 6447dd7cddfSDavid du Colombier /* Error exit handler: does not return to caller */ 6457dd7cddfSDavid du Colombier JMETHOD(void, error_exit, (j_common_ptr cinfo)); 6467dd7cddfSDavid du Colombier /* Conditionally emit a trace or warning message */ 6477dd7cddfSDavid du Colombier JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); 6487dd7cddfSDavid du Colombier /* Routine that actually outputs a trace or error message */ 6497dd7cddfSDavid du Colombier JMETHOD(void, output_message, (j_common_ptr cinfo)); 6507dd7cddfSDavid du Colombier /* Format a message string for the most recent JPEG error or message */ 6517dd7cddfSDavid du Colombier JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); 6527dd7cddfSDavid du Colombier #define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ 6537dd7cddfSDavid du Colombier /* Reset error state variables at start of a new image */ 6547dd7cddfSDavid du Colombier JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); 6557dd7cddfSDavid du Colombier 6567dd7cddfSDavid du Colombier /* The message ID code and any parameters are saved here. 6577dd7cddfSDavid du Colombier * A message can have one string parameter or up to 8 int parameters. 6587dd7cddfSDavid du Colombier */ 6597dd7cddfSDavid du Colombier int msg_code; 6607dd7cddfSDavid du Colombier #define JMSG_STR_PARM_MAX 80 6617dd7cddfSDavid du Colombier union { 6627dd7cddfSDavid du Colombier int i[8]; 6637dd7cddfSDavid du Colombier char s[JMSG_STR_PARM_MAX]; 6647dd7cddfSDavid du Colombier } msg_parm; 6657dd7cddfSDavid du Colombier 6667dd7cddfSDavid du Colombier /* Standard state variables for error facility */ 6677dd7cddfSDavid du Colombier 6687dd7cddfSDavid du Colombier int trace_level; /* max msg_level that will be displayed */ 6697dd7cddfSDavid du Colombier 6707dd7cddfSDavid du Colombier /* For recoverable corrupt-data errors, we emit a warning message, 6717dd7cddfSDavid du Colombier * but keep going unless emit_message chooses to abort. emit_message 6727dd7cddfSDavid du Colombier * should count warnings in num_warnings. The surrounding application 6737dd7cddfSDavid du Colombier * can check for bad data by seeing if num_warnings is nonzero at the 6747dd7cddfSDavid du Colombier * end of processing. 6757dd7cddfSDavid du Colombier */ 6767dd7cddfSDavid du Colombier long num_warnings; /* number of corrupt-data warnings */ 6777dd7cddfSDavid du Colombier 6787dd7cddfSDavid du Colombier /* These fields point to the table(s) of error message strings. 6797dd7cddfSDavid du Colombier * An application can change the table pointer to switch to a different 6807dd7cddfSDavid du Colombier * message list (typically, to change the language in which errors are 6817dd7cddfSDavid du Colombier * reported). Some applications may wish to add additional error codes 6827dd7cddfSDavid du Colombier * that will be handled by the JPEG library error mechanism; the second 6837dd7cddfSDavid du Colombier * table pointer is used for this purpose. 6847dd7cddfSDavid du Colombier * 6857dd7cddfSDavid du Colombier * First table includes all errors generated by JPEG library itself. 6867dd7cddfSDavid du Colombier * Error code 0 is reserved for a "no such error string" message. 6877dd7cddfSDavid du Colombier */ 6887dd7cddfSDavid du Colombier const char * const * jpeg_message_table; /* Library errors */ 6897dd7cddfSDavid du Colombier int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ 6907dd7cddfSDavid du Colombier /* Second table can be added by application (see cjpeg/djpeg for example). 6917dd7cddfSDavid du Colombier * It contains strings numbered first_addon_message..last_addon_message. 6927dd7cddfSDavid du Colombier */ 6937dd7cddfSDavid du Colombier const char * const * addon_message_table; /* Non-library errors */ 6947dd7cddfSDavid du Colombier int first_addon_message; /* code for first string in addon table */ 6957dd7cddfSDavid du Colombier int last_addon_message; /* code for last string in addon table */ 6967dd7cddfSDavid du Colombier }; 6977dd7cddfSDavid du Colombier 6987dd7cddfSDavid du Colombier 6997dd7cddfSDavid du Colombier /* Progress monitor object */ 7007dd7cddfSDavid du Colombier 7017dd7cddfSDavid du Colombier struct jpeg_progress_mgr { 7027dd7cddfSDavid du Colombier JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); 7037dd7cddfSDavid du Colombier 7047dd7cddfSDavid du Colombier long pass_counter; /* work units completed in this pass */ 7057dd7cddfSDavid du Colombier long pass_limit; /* total number of work units in this pass */ 7067dd7cddfSDavid du Colombier int completed_passes; /* passes completed so far */ 7077dd7cddfSDavid du Colombier int total_passes; /* total number of passes expected */ 7087dd7cddfSDavid du Colombier }; 7097dd7cddfSDavid du Colombier 7107dd7cddfSDavid du Colombier 7117dd7cddfSDavid du Colombier /* Data destination object for compression */ 7127dd7cddfSDavid du Colombier 7137dd7cddfSDavid du Colombier struct jpeg_destination_mgr { 7147dd7cddfSDavid du Colombier JOCTET * next_output_byte; /* => next byte to write in buffer */ 7157dd7cddfSDavid du Colombier size_t free_in_buffer; /* # of byte spaces remaining in buffer */ 7167dd7cddfSDavid du Colombier 7177dd7cddfSDavid du Colombier JMETHOD(void, init_destination, (j_compress_ptr cinfo)); 7187dd7cddfSDavid du Colombier JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); 7197dd7cddfSDavid du Colombier JMETHOD(void, term_destination, (j_compress_ptr cinfo)); 7207dd7cddfSDavid du Colombier }; 7217dd7cddfSDavid du Colombier 7227dd7cddfSDavid du Colombier 7237dd7cddfSDavid du Colombier /* Data source object for decompression */ 7247dd7cddfSDavid du Colombier 7257dd7cddfSDavid du Colombier struct jpeg_source_mgr { 7267dd7cddfSDavid du Colombier const JOCTET * next_input_byte; /* => next byte to read from buffer */ 7277dd7cddfSDavid du Colombier size_t bytes_in_buffer; /* # of bytes remaining in buffer */ 7287dd7cddfSDavid du Colombier 7297dd7cddfSDavid du Colombier JMETHOD(void, init_source, (j_decompress_ptr cinfo)); 7307dd7cddfSDavid du Colombier JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); 7317dd7cddfSDavid du Colombier JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); 7327dd7cddfSDavid du Colombier JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); 7337dd7cddfSDavid du Colombier JMETHOD(void, term_source, (j_decompress_ptr cinfo)); 7347dd7cddfSDavid du Colombier }; 7357dd7cddfSDavid du Colombier 7367dd7cddfSDavid du Colombier 7377dd7cddfSDavid du Colombier /* Memory manager object. 7387dd7cddfSDavid du Colombier * Allocates "small" objects (a few K total), "large" objects (tens of K), 7397dd7cddfSDavid du Colombier * and "really big" objects (virtual arrays with backing store if needed). 7407dd7cddfSDavid du Colombier * The memory manager does not allow individual objects to be freed; rather, 7417dd7cddfSDavid du Colombier * each created object is assigned to a pool, and whole pools can be freed 7427dd7cddfSDavid du Colombier * at once. This is faster and more convenient than remembering exactly what 7437dd7cddfSDavid du Colombier * to free, especially where malloc()/free() are not too speedy. 7447dd7cddfSDavid du Colombier * NB: alloc routines never return NULL. They exit to error_exit if not 7457dd7cddfSDavid du Colombier * successful. 7467dd7cddfSDavid du Colombier */ 7477dd7cddfSDavid du Colombier 7487dd7cddfSDavid du Colombier #define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ 7497dd7cddfSDavid du Colombier #define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ 7507dd7cddfSDavid du Colombier #define JPOOL_NUMPOOLS 2 7517dd7cddfSDavid du Colombier 7527dd7cddfSDavid du Colombier typedef struct jvirt_sarray_control * jvirt_sarray_ptr; 7537dd7cddfSDavid du Colombier typedef struct jvirt_barray_control * jvirt_barray_ptr; 7547dd7cddfSDavid du Colombier 7557dd7cddfSDavid du Colombier 7567dd7cddfSDavid du Colombier struct jpeg_memory_mgr { 7577dd7cddfSDavid du Colombier /* Method pointers */ 7587dd7cddfSDavid du Colombier JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, 7597dd7cddfSDavid du Colombier size_t sizeofobject)); 7607dd7cddfSDavid du Colombier JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, 7617dd7cddfSDavid du Colombier size_t sizeofobject)); 7627dd7cddfSDavid du Colombier JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, 7637dd7cddfSDavid du Colombier JDIMENSION samplesperrow, 7647dd7cddfSDavid du Colombier JDIMENSION numrows)); 7657dd7cddfSDavid du Colombier JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, 7667dd7cddfSDavid du Colombier JDIMENSION blocksperrow, 7677dd7cddfSDavid du Colombier JDIMENSION numrows)); 7687dd7cddfSDavid du Colombier JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, 7697dd7cddfSDavid du Colombier int pool_id, 7707dd7cddfSDavid du Colombier boolean pre_zero, 7717dd7cddfSDavid du Colombier JDIMENSION samplesperrow, 7727dd7cddfSDavid du Colombier JDIMENSION numrows, 7737dd7cddfSDavid du Colombier JDIMENSION maxaccess)); 7747dd7cddfSDavid du Colombier JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, 7757dd7cddfSDavid du Colombier int pool_id, 7767dd7cddfSDavid du Colombier boolean pre_zero, 7777dd7cddfSDavid du Colombier JDIMENSION blocksperrow, 7787dd7cddfSDavid du Colombier JDIMENSION numrows, 7797dd7cddfSDavid du Colombier JDIMENSION maxaccess)); 7807dd7cddfSDavid du Colombier JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); 7817dd7cddfSDavid du Colombier JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, 7827dd7cddfSDavid du Colombier jvirt_sarray_ptr ptr, 7837dd7cddfSDavid du Colombier JDIMENSION start_row, 7847dd7cddfSDavid du Colombier JDIMENSION num_rows, 7857dd7cddfSDavid du Colombier boolean writable)); 7867dd7cddfSDavid du Colombier JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, 7877dd7cddfSDavid du Colombier jvirt_barray_ptr ptr, 7887dd7cddfSDavid du Colombier JDIMENSION start_row, 7897dd7cddfSDavid du Colombier JDIMENSION num_rows, 7907dd7cddfSDavid du Colombier boolean writable)); 7917dd7cddfSDavid du Colombier JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); 7927dd7cddfSDavid du Colombier JMETHOD(void, self_destruct, (j_common_ptr cinfo)); 7937dd7cddfSDavid du Colombier 7947dd7cddfSDavid du Colombier /* Limit on memory allocation for this JPEG object. (Note that this is 7957dd7cddfSDavid du Colombier * merely advisory, not a guaranteed maximum; it only affects the space 7967dd7cddfSDavid du Colombier * used for virtual-array buffers.) May be changed by outer application 7977dd7cddfSDavid du Colombier * after creating the JPEG object. 7987dd7cddfSDavid du Colombier */ 7997dd7cddfSDavid du Colombier long max_memory_to_use; 800*593dc095SDavid du Colombier 801*593dc095SDavid du Colombier /* Maximum allocation request accepted by alloc_large. */ 802*593dc095SDavid du Colombier long max_alloc_chunk; 8037dd7cddfSDavid du Colombier }; 8047dd7cddfSDavid du Colombier 8057dd7cddfSDavid du Colombier 8067dd7cddfSDavid du Colombier /* Routine signature for application-supplied marker processing methods. 8077dd7cddfSDavid du Colombier * Need not pass marker code since it is stored in cinfo->unread_marker. 8087dd7cddfSDavid du Colombier */ 8097dd7cddfSDavid du Colombier typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); 8107dd7cddfSDavid du Colombier 8117dd7cddfSDavid du Colombier 8127dd7cddfSDavid du Colombier /* Declarations for routines called by application. 8137dd7cddfSDavid du Colombier * The JPP macro hides prototype parameters from compilers that can't cope. 8147dd7cddfSDavid du Colombier * Note JPP requires double parentheses. 8157dd7cddfSDavid du Colombier */ 8167dd7cddfSDavid du Colombier 8177dd7cddfSDavid du Colombier #ifdef HAVE_PROTOTYPES 8187dd7cddfSDavid du Colombier #define JPP(arglist) arglist 8197dd7cddfSDavid du Colombier #else 8207dd7cddfSDavid du Colombier #define JPP(arglist) () 8217dd7cddfSDavid du Colombier #endif 8227dd7cddfSDavid du Colombier 8237dd7cddfSDavid du Colombier 8247dd7cddfSDavid du Colombier /* Short forms of external names for systems with brain-damaged linkers. 8257dd7cddfSDavid du Colombier * We shorten external names to be unique in the first six letters, which 8267dd7cddfSDavid du Colombier * is good enough for all known systems. 8277dd7cddfSDavid du Colombier * (If your compiler itself needs names to be unique in less than 15 8287dd7cddfSDavid du Colombier * characters, you are out of luck. Get a better compiler.) 8297dd7cddfSDavid du Colombier */ 8307dd7cddfSDavid du Colombier 8317dd7cddfSDavid du Colombier #ifdef NEED_SHORT_EXTERNAL_NAMES 8327dd7cddfSDavid du Colombier #define jpeg_std_error jStdError 8337dd7cddfSDavid du Colombier #define jpeg_CreateCompress jCreaCompress 8347dd7cddfSDavid du Colombier #define jpeg_CreateDecompress jCreaDecompress 8357dd7cddfSDavid du Colombier #define jpeg_destroy_compress jDestCompress 8367dd7cddfSDavid du Colombier #define jpeg_destroy_decompress jDestDecompress 8377dd7cddfSDavid du Colombier #define jpeg_stdio_dest jStdDest 8387dd7cddfSDavid du Colombier #define jpeg_stdio_src jStdSrc 8397dd7cddfSDavid du Colombier #define jpeg_set_defaults jSetDefaults 8407dd7cddfSDavid du Colombier #define jpeg_set_colorspace jSetColorspace 8417dd7cddfSDavid du Colombier #define jpeg_default_colorspace jDefColorspace 8427dd7cddfSDavid du Colombier #define jpeg_set_quality jSetQuality 8437dd7cddfSDavid du Colombier #define jpeg_set_linear_quality jSetLQuality 8447dd7cddfSDavid du Colombier #define jpeg_add_quant_table jAddQuantTable 8457dd7cddfSDavid du Colombier #define jpeg_quality_scaling jQualityScaling 8467dd7cddfSDavid du Colombier #define jpeg_simple_progression jSimProgress 8477dd7cddfSDavid du Colombier #define jpeg_suppress_tables jSuppressTables 8487dd7cddfSDavid du Colombier #define jpeg_alloc_quant_table jAlcQTable 8497dd7cddfSDavid du Colombier #define jpeg_alloc_huff_table jAlcHTable 8507dd7cddfSDavid du Colombier #define jpeg_start_compress jStrtCompress 8517dd7cddfSDavid du Colombier #define jpeg_write_scanlines jWrtScanlines 8527dd7cddfSDavid du Colombier #define jpeg_finish_compress jFinCompress 8537dd7cddfSDavid du Colombier #define jpeg_write_raw_data jWrtRawData 8547dd7cddfSDavid du Colombier #define jpeg_write_marker jWrtMarker 855*593dc095SDavid du Colombier #define jpeg_write_m_header jWrtMHeader 856*593dc095SDavid du Colombier #define jpeg_write_m_byte jWrtMByte 8577dd7cddfSDavid du Colombier #define jpeg_write_tables jWrtTables 8587dd7cddfSDavid du Colombier #define jpeg_read_header jReadHeader 8597dd7cddfSDavid du Colombier #define jpeg_start_decompress jStrtDecompress 8607dd7cddfSDavid du Colombier #define jpeg_read_scanlines jReadScanlines 8617dd7cddfSDavid du Colombier #define jpeg_finish_decompress jFinDecompress 8627dd7cddfSDavid du Colombier #define jpeg_read_raw_data jReadRawData 8637dd7cddfSDavid du Colombier #define jpeg_has_multiple_scans jHasMultScn 8647dd7cddfSDavid du Colombier #define jpeg_start_output jStrtOutput 8657dd7cddfSDavid du Colombier #define jpeg_finish_output jFinOutput 8667dd7cddfSDavid du Colombier #define jpeg_input_complete jInComplete 8677dd7cddfSDavid du Colombier #define jpeg_new_colormap jNewCMap 8687dd7cddfSDavid du Colombier #define jpeg_consume_input jConsumeInput 8697dd7cddfSDavid du Colombier #define jpeg_calc_output_dimensions jCalcDimensions 870*593dc095SDavid du Colombier #define jpeg_save_markers jSaveMarkers 8717dd7cddfSDavid du Colombier #define jpeg_set_marker_processor jSetMarker 8727dd7cddfSDavid du Colombier #define jpeg_read_coefficients jReadCoefs 8737dd7cddfSDavid du Colombier #define jpeg_write_coefficients jWrtCoefs 8747dd7cddfSDavid du Colombier #define jpeg_copy_critical_parameters jCopyCrit 8757dd7cddfSDavid du Colombier #define jpeg_abort_compress jAbrtCompress 8767dd7cddfSDavid du Colombier #define jpeg_abort_decompress jAbrtDecompress 8777dd7cddfSDavid du Colombier #define jpeg_abort jAbort 8787dd7cddfSDavid du Colombier #define jpeg_destroy jDestroy 8797dd7cddfSDavid du Colombier #define jpeg_resync_to_restart jResyncRestart 8807dd7cddfSDavid du Colombier #endif /* NEED_SHORT_EXTERNAL_NAMES */ 8817dd7cddfSDavid du Colombier 8827dd7cddfSDavid du Colombier 8837dd7cddfSDavid du Colombier /* Default error-management setup */ 8847dd7cddfSDavid du Colombier EXTERN(struct jpeg_error_mgr *) jpeg_std_error 8857dd7cddfSDavid du Colombier JPP((struct jpeg_error_mgr * err)); 8867dd7cddfSDavid du Colombier 8877dd7cddfSDavid du Colombier /* Initialization of JPEG compression objects. 8887dd7cddfSDavid du Colombier * jpeg_create_compress() and jpeg_create_decompress() are the exported 8897dd7cddfSDavid du Colombier * names that applications should call. These expand to calls on 8907dd7cddfSDavid du Colombier * jpeg_CreateCompress and jpeg_CreateDecompress with additional information 8917dd7cddfSDavid du Colombier * passed for version mismatch checking. 8927dd7cddfSDavid du Colombier * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. 8937dd7cddfSDavid du Colombier */ 8947dd7cddfSDavid du Colombier #define jpeg_create_compress(cinfo) \ 8957dd7cddfSDavid du Colombier jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ 8967dd7cddfSDavid du Colombier (size_t) sizeof(struct jpeg_compress_struct)) 8977dd7cddfSDavid du Colombier #define jpeg_create_decompress(cinfo) \ 8987dd7cddfSDavid du Colombier jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ 8997dd7cddfSDavid du Colombier (size_t) sizeof(struct jpeg_decompress_struct)) 9007dd7cddfSDavid du Colombier EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, 9017dd7cddfSDavid du Colombier int version, size_t structsize)); 9027dd7cddfSDavid du Colombier EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, 9037dd7cddfSDavid du Colombier int version, size_t structsize)); 9047dd7cddfSDavid du Colombier /* Destruction of JPEG compression objects */ 9057dd7cddfSDavid du Colombier EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); 9067dd7cddfSDavid du Colombier EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); 9077dd7cddfSDavid du Colombier 9087dd7cddfSDavid du Colombier /* Standard data source and destination managers: stdio streams. */ 9097dd7cddfSDavid du Colombier /* Caller is responsible for opening the file before and closing after. */ 9107dd7cddfSDavid du Colombier EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); 9117dd7cddfSDavid du Colombier EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); 9127dd7cddfSDavid du Colombier 9137dd7cddfSDavid du Colombier /* Default parameter setup for compression */ 9147dd7cddfSDavid du Colombier EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); 9157dd7cddfSDavid du Colombier /* Compression parameter setup aids */ 9167dd7cddfSDavid du Colombier EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, 9177dd7cddfSDavid du Colombier J_COLOR_SPACE colorspace)); 9187dd7cddfSDavid du Colombier EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); 9197dd7cddfSDavid du Colombier EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, 9207dd7cddfSDavid du Colombier boolean force_baseline)); 9217dd7cddfSDavid du Colombier EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, 9227dd7cddfSDavid du Colombier int scale_factor, 9237dd7cddfSDavid du Colombier boolean force_baseline)); 9247dd7cddfSDavid du Colombier EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, 9257dd7cddfSDavid du Colombier const unsigned int *basic_table, 9267dd7cddfSDavid du Colombier int scale_factor, 9277dd7cddfSDavid du Colombier boolean force_baseline)); 9287dd7cddfSDavid du Colombier EXTERN(int) jpeg_quality_scaling JPP((int quality)); 9297dd7cddfSDavid du Colombier EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); 9307dd7cddfSDavid du Colombier EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, 9317dd7cddfSDavid du Colombier boolean suppress)); 9327dd7cddfSDavid du Colombier EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); 9337dd7cddfSDavid du Colombier EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); 9347dd7cddfSDavid du Colombier 9357dd7cddfSDavid du Colombier /* Main entry points for compression */ 9367dd7cddfSDavid du Colombier EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, 9377dd7cddfSDavid du Colombier boolean write_all_tables)); 9387dd7cddfSDavid du Colombier EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, 9397dd7cddfSDavid du Colombier JSAMPARRAY scanlines, 9407dd7cddfSDavid du Colombier JDIMENSION num_lines)); 9417dd7cddfSDavid du Colombier EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); 9427dd7cddfSDavid du Colombier 9437dd7cddfSDavid du Colombier /* Replaces jpeg_write_scanlines when writing raw downsampled data. */ 9447dd7cddfSDavid du Colombier EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, 9457dd7cddfSDavid du Colombier JSAMPIMAGE data, 9467dd7cddfSDavid du Colombier JDIMENSION num_lines)); 9477dd7cddfSDavid du Colombier 9487dd7cddfSDavid du Colombier /* Write a special marker. See libjpeg.doc concerning safe usage. */ 9497dd7cddfSDavid du Colombier EXTERN(void) jpeg_write_marker 9507dd7cddfSDavid du Colombier JPP((j_compress_ptr cinfo, int marker, 9517dd7cddfSDavid du Colombier const JOCTET * dataptr, unsigned int datalen)); 952*593dc095SDavid du Colombier /* Same, but piecemeal. */ 953*593dc095SDavid du Colombier EXTERN(void) jpeg_write_m_header 954*593dc095SDavid du Colombier JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); 955*593dc095SDavid du Colombier EXTERN(void) jpeg_write_m_byte 956*593dc095SDavid du Colombier JPP((j_compress_ptr cinfo, int val)); 9577dd7cddfSDavid du Colombier 9587dd7cddfSDavid du Colombier /* Alternate compression function: just write an abbreviated table file */ 9597dd7cddfSDavid du Colombier EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); 9607dd7cddfSDavid du Colombier 9617dd7cddfSDavid du Colombier /* Decompression startup: read start of JPEG datastream to see what's there */ 9627dd7cddfSDavid du Colombier EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, 9637dd7cddfSDavid du Colombier boolean require_image)); 9647dd7cddfSDavid du Colombier /* Return value is one of: */ 9657dd7cddfSDavid du Colombier #define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ 9667dd7cddfSDavid du Colombier #define JPEG_HEADER_OK 1 /* Found valid image datastream */ 9677dd7cddfSDavid du Colombier #define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ 9687dd7cddfSDavid du Colombier /* If you pass require_image = TRUE (normal case), you need not check for 9697dd7cddfSDavid du Colombier * a TABLES_ONLY return code; an abbreviated file will cause an error exit. 9707dd7cddfSDavid du Colombier * JPEG_SUSPENDED is only possible if you use a data source module that can 9717dd7cddfSDavid du Colombier * give a suspension return (the stdio source module doesn't). 9727dd7cddfSDavid du Colombier */ 9737dd7cddfSDavid du Colombier 9747dd7cddfSDavid du Colombier /* Main entry points for decompression */ 9757dd7cddfSDavid du Colombier EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); 9767dd7cddfSDavid du Colombier EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, 9777dd7cddfSDavid du Colombier JSAMPARRAY scanlines, 9787dd7cddfSDavid du Colombier JDIMENSION max_lines)); 9797dd7cddfSDavid du Colombier EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); 9807dd7cddfSDavid du Colombier 9817dd7cddfSDavid du Colombier /* Replaces jpeg_read_scanlines when reading raw downsampled data. */ 9827dd7cddfSDavid du Colombier EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, 9837dd7cddfSDavid du Colombier JSAMPIMAGE data, 9847dd7cddfSDavid du Colombier JDIMENSION max_lines)); 9857dd7cddfSDavid du Colombier 9867dd7cddfSDavid du Colombier /* Additional entry points for buffered-image mode. */ 9877dd7cddfSDavid du Colombier EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); 9887dd7cddfSDavid du Colombier EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, 9897dd7cddfSDavid du Colombier int scan_number)); 9907dd7cddfSDavid du Colombier EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); 9917dd7cddfSDavid du Colombier EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); 9927dd7cddfSDavid du Colombier EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); 9937dd7cddfSDavid du Colombier EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); 9947dd7cddfSDavid du Colombier /* Return value is one of: */ 9957dd7cddfSDavid du Colombier /* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ 9967dd7cddfSDavid du Colombier #define JPEG_REACHED_SOS 1 /* Reached start of new scan */ 9977dd7cddfSDavid du Colombier #define JPEG_REACHED_EOI 2 /* Reached end of image */ 9987dd7cddfSDavid du Colombier #define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ 9997dd7cddfSDavid du Colombier #define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ 10007dd7cddfSDavid du Colombier 10017dd7cddfSDavid du Colombier /* Precalculate output dimensions for current decompression parameters. */ 10027dd7cddfSDavid du Colombier EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); 10037dd7cddfSDavid du Colombier 1004*593dc095SDavid du Colombier /* Control saving of COM and APPn markers into marker_list. */ 1005*593dc095SDavid du Colombier EXTERN(void) jpeg_save_markers 1006*593dc095SDavid du Colombier JPP((j_decompress_ptr cinfo, int marker_code, 1007*593dc095SDavid du Colombier unsigned int length_limit)); 1008*593dc095SDavid du Colombier 10097dd7cddfSDavid du Colombier /* Install a special processing method for COM or APPn markers. */ 10107dd7cddfSDavid du Colombier EXTERN(void) jpeg_set_marker_processor 10117dd7cddfSDavid du Colombier JPP((j_decompress_ptr cinfo, int marker_code, 10127dd7cddfSDavid du Colombier jpeg_marker_parser_method routine)); 10137dd7cddfSDavid du Colombier 10147dd7cddfSDavid du Colombier /* Read or write raw DCT coefficients --- useful for lossless transcoding. */ 10157dd7cddfSDavid du Colombier EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); 10167dd7cddfSDavid du Colombier EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, 10177dd7cddfSDavid du Colombier jvirt_barray_ptr * coef_arrays)); 10187dd7cddfSDavid du Colombier EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, 10197dd7cddfSDavid du Colombier j_compress_ptr dstinfo)); 10207dd7cddfSDavid du Colombier 10217dd7cddfSDavid du Colombier /* If you choose to abort compression or decompression before completing 10227dd7cddfSDavid du Colombier * jpeg_finish_(de)compress, then you need to clean up to release memory, 10237dd7cddfSDavid du Colombier * temporary files, etc. You can just call jpeg_destroy_(de)compress 10247dd7cddfSDavid du Colombier * if you're done with the JPEG object, but if you want to clean it up and 10257dd7cddfSDavid du Colombier * reuse it, call this: 10267dd7cddfSDavid du Colombier */ 10277dd7cddfSDavid du Colombier EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); 10287dd7cddfSDavid du Colombier EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); 10297dd7cddfSDavid du Colombier 10307dd7cddfSDavid du Colombier /* Generic versions of jpeg_abort and jpeg_destroy that work on either 10317dd7cddfSDavid du Colombier * flavor of JPEG object. These may be more convenient in some places. 10327dd7cddfSDavid du Colombier */ 10337dd7cddfSDavid du Colombier EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); 10347dd7cddfSDavid du Colombier EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); 10357dd7cddfSDavid du Colombier 10367dd7cddfSDavid du Colombier /* Default restart-marker-resync procedure for use by data source modules */ 10377dd7cddfSDavid du Colombier EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, 10387dd7cddfSDavid du Colombier int desired)); 10397dd7cddfSDavid du Colombier 10407dd7cddfSDavid du Colombier 10417dd7cddfSDavid du Colombier /* These marker codes are exported since applications and data source modules 10427dd7cddfSDavid du Colombier * are likely to want to use them. 10437dd7cddfSDavid du Colombier */ 10447dd7cddfSDavid du Colombier 10457dd7cddfSDavid du Colombier #define JPEG_RST0 0xD0 /* RST0 marker code */ 10467dd7cddfSDavid du Colombier #define JPEG_EOI 0xD9 /* EOI marker code */ 10477dd7cddfSDavid du Colombier #define JPEG_APP0 0xE0 /* APP0 marker code */ 10487dd7cddfSDavid du Colombier #define JPEG_COM 0xFE /* COM marker code */ 10497dd7cddfSDavid du Colombier 10507dd7cddfSDavid du Colombier 10517dd7cddfSDavid du Colombier /* If we have a brain-damaged compiler that emits warnings (or worse, errors) 10527dd7cddfSDavid du Colombier * for structure definitions that are never filled in, keep it quiet by 10537dd7cddfSDavid du Colombier * supplying dummy definitions for the various substructures. 10547dd7cddfSDavid du Colombier */ 10557dd7cddfSDavid du Colombier 10567dd7cddfSDavid du Colombier #ifdef INCOMPLETE_TYPES_BROKEN 10577dd7cddfSDavid du Colombier #ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ 10587dd7cddfSDavid du Colombier struct jvirt_sarray_control { long dummy; }; 10597dd7cddfSDavid du Colombier struct jvirt_barray_control { long dummy; }; 10607dd7cddfSDavid du Colombier struct jpeg_comp_master { long dummy; }; 10617dd7cddfSDavid du Colombier struct jpeg_c_main_controller { long dummy; }; 10627dd7cddfSDavid du Colombier struct jpeg_c_prep_controller { long dummy; }; 10637dd7cddfSDavid du Colombier struct jpeg_c_coef_controller { long dummy; }; 10647dd7cddfSDavid du Colombier struct jpeg_marker_writer { long dummy; }; 10657dd7cddfSDavid du Colombier struct jpeg_color_converter { long dummy; }; 10667dd7cddfSDavid du Colombier struct jpeg_downsampler { long dummy; }; 10677dd7cddfSDavid du Colombier struct jpeg_forward_dct { long dummy; }; 10687dd7cddfSDavid du Colombier struct jpeg_entropy_encoder { long dummy; }; 10697dd7cddfSDavid du Colombier struct jpeg_decomp_master { long dummy; }; 10707dd7cddfSDavid du Colombier struct jpeg_d_main_controller { long dummy; }; 10717dd7cddfSDavid du Colombier struct jpeg_d_coef_controller { long dummy; }; 10727dd7cddfSDavid du Colombier struct jpeg_d_post_controller { long dummy; }; 10737dd7cddfSDavid du Colombier struct jpeg_input_controller { long dummy; }; 10747dd7cddfSDavid du Colombier struct jpeg_marker_reader { long dummy; }; 10757dd7cddfSDavid du Colombier struct jpeg_entropy_decoder { long dummy; }; 10767dd7cddfSDavid du Colombier struct jpeg_inverse_dct { long dummy; }; 10777dd7cddfSDavid du Colombier struct jpeg_upsampler { long dummy; }; 10787dd7cddfSDavid du Colombier struct jpeg_color_deconverter { long dummy; }; 10797dd7cddfSDavid du Colombier struct jpeg_color_quantizer { long dummy; }; 10807dd7cddfSDavid du Colombier #endif /* JPEG_INTERNALS */ 10817dd7cddfSDavid du Colombier #endif /* INCOMPLETE_TYPES_BROKEN */ 10827dd7cddfSDavid du Colombier 10837dd7cddfSDavid du Colombier 10847dd7cddfSDavid du Colombier /* 10857dd7cddfSDavid du Colombier * The JPEG library modules define JPEG_INTERNALS before including this file. 10867dd7cddfSDavid du Colombier * The internal structure declarations are read only when that is true. 10877dd7cddfSDavid du Colombier * Applications using the library should not include jpegint.h, but may wish 10887dd7cddfSDavid du Colombier * to include jerror.h. 10897dd7cddfSDavid du Colombier */ 10907dd7cddfSDavid du Colombier 10917dd7cddfSDavid du Colombier #ifdef JPEG_INTERNALS 10927dd7cddfSDavid du Colombier #include "jpegint.h" /* fetch private declarations */ 10937dd7cddfSDavid du Colombier #include "jerror.h" /* fetch error codes too */ 10947dd7cddfSDavid du Colombier #endif 10957dd7cddfSDavid du Colombier 10967dd7cddfSDavid du Colombier #endif /* JPEGLIB_H */ 1097