jpeglib.h 53 KB

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