jpeglib.h 53 KB

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