mozjpeg_sys/
lib.rs

1//! Please **[read libjpeg manual](https://github.com/mozilla/mozjpeg/blob/master/libjpeg.txt)** for description of functions in this crate.
2
3#![allow(non_snake_case)]
4#![allow(non_camel_case_types)]
5#![allow(non_upper_case_globals)]
6
7use std::mem;
8pub use std::os::raw::{c_int, c_long, c_uint, c_ulong, c_void};
9
10#[cfg(not(target_arch = "wasm32"))]
11pub use libc::FILE;
12#[cfg(target_arch = "wasm32")]
13pub use std::os::raw::c_void as FILE;
14
15mod jerror;
16pub use jerror::*;
17
18pub use JINT_COMPRESS_PROFILE_VALUE::*;
19pub use J_BOOLEAN_PARAM::*;
20pub use J_COLOR_SPACE::*;
21pub use J_DCT_METHOD::JDCT_IFAST as JDCT_FASTEST;
22pub use J_DCT_METHOD::JDCT_ISLOW as JDCT_DEFAULT;
23pub use J_FLOAT_PARAM::*;
24pub use J_INT_PARAM::*;
25
26#[cfg(feature = "jpeg80_abi")]
27pub const JPEG_LIB_VERSION: c_int = 80;
28#[cfg(all(feature = "jpeg70_abi", not(feature = "jpeg80_abi")))]
29pub const JPEG_LIB_VERSION: c_int = 70;
30#[cfg(not(feature = "jpeg70_abi"))] // ABI 80 implies ABI 70
31pub const JPEG_LIB_VERSION: c_int = 62;
32
33/// The basic DCT block is 8x8 samples
34pub const DCTSIZE: usize = 8;
35/// DCTSIZE²
36pub const DCTSIZE2: usize = DCTSIZE * DCTSIZE;
37
38/// lasts until master record is destroyed
39pub const JPOOL_PERMANENT: c_int = 0;
40/// lasts until done with image/datastream
41pub const JPOOL_IMAGE: c_int = 1;
42/// Quantization tables are numbered 0..3
43pub const NUM_QUANT_TBLS: usize = 4;
44
45pub type boolean = c_int;
46pub type JSAMPLE = u8;
47pub type JCOEF = i16;
48pub type JDIMENSION = c_uint;
49/// ptr to one image row of pixel samples.
50pub type JSAMPROW = *const JSAMPLE;
51pub type JSAMPROW_MUT = *mut JSAMPLE;
52/// ptr to some rows (a 2-D sample array)
53pub type JSAMPARRAY = *const JSAMPROW;
54pub type JSAMPARRAY_MUT = *mut JSAMPROW_MUT;
55/// a 3-D sample array: top index is color
56pub type JSAMPIMAGE = *const JSAMPARRAY;
57pub type JSAMPIMAGE_MUT = *mut JSAMPARRAY_MUT;
58/// one block of coefficients
59pub type JBLOCK = [JCOEF; 64usize];
60/// pointer to one row of coefficient blocks
61pub type JBLOCKROW = *mut JBLOCK;
62pub type JBLOCKARRAY = *mut JBLOCKROW;
63
64// must match dct.h; assumes bits in sample == 8
65/// type for individual integer DCT coefficient
66#[cfg(feature = "nasm_simd")]
67pub type DCTELEM = i16;
68#[cfg(not(feature = "nasm_simd"))]
69pub type DCTELEM = c_int;
70
71#[cfg(feature = "jpegtran")]
72include!("transform.rs");
73
74#[repr(C)]
75pub struct JQUANT_TBL {
76    /// This array gives the coefficient quantizers in natural array order
77    /// (not the zigzag order in which they are stored in a JPEG DQT marker).
78    /// CAUTION: IJG versions prior to v6a kept this array in zigzag order.
79    pub quantval: [u16; 64usize],
80    sent_table: boolean,
81}
82impl Default for JQUANT_TBL {
83    fn default() -> JQUANT_TBL { unsafe { mem::zeroed() } }
84}
85
86#[repr(C)]
87pub struct JHUFF_TBL {
88    pub bits: [u8; 17usize],
89    pub huffval: [u8; 256usize],
90    sent_table: boolean,
91}
92impl Default for JHUFF_TBL {
93    fn default() -> JHUFF_TBL { unsafe { mem::zeroed() } }
94}
95
96#[repr(C)]
97pub struct jpeg_component_info {
98    /// identifier for this component (0..255)
99    pub component_id: c_int,
100    /// its index in SOF or cinfo->comp_info[]
101    pub component_index: c_int,
102    /// horizontal sampling factor (1..4)
103    pub h_samp_factor: c_int,
104    /// vertical sampling factor (1..4)
105    pub v_samp_factor: c_int,
106    /// quantization table selector (0..3)
107    pub quant_tbl_no: c_int,
108    /// DC entropy table selector (0..3)
109    ///
110    /// These values may vary between scans.
111    /// For compression, they must be supplied by parameter setup;
112    /// for decompression, they are read from the SOS marker.
113    /// The decompressor output side may not use these variables.
114    pub dc_tbl_no: c_int,
115    /// AC entropy table selector (0..3)
116    pub ac_tbl_no: c_int,
117    pub width_in_blocks: JDIMENSION,
118    pub height_in_blocks: JDIMENSION,
119
120    /// Remaining fields should be treated as private by applications.
121    #[cfg(feature = "jpeg70_abi")]
122    DCT_h_scaled_size: c_int,
123    #[cfg(feature = "jpeg70_abi")]
124    DCT_v_scaled_size: c_int,
125    #[cfg(not(feature = "jpeg70_abi"))]
126    DCT_scaled_size: c_int,
127
128    downsampled_width: JDIMENSION,
129    downsampled_height: JDIMENSION,
130    component_needed: boolean,
131    MCU_width: c_int,
132    MCU_height: c_int,
133    MCU_blocks: c_int,
134    MCU_sample_width: c_int,
135    last_col_width: c_int,
136    last_row_height: c_int,
137    pub quant_table: *mut JQUANT_TBL,
138    dct_table: *mut c_void,
139}
140impl Default for jpeg_component_info {
141    fn default() -> jpeg_component_info { unsafe { mem::zeroed() } }
142}
143
144#[repr(C)]
145#[derive(Copy, Clone)]
146pub struct jpeg_scan_info {
147    pub comps_in_scan: c_int,
148    pub component_index: [c_int; 4usize],
149    pub Ss: c_int,
150    pub Se: c_int,
151    pub Ah: c_int,
152    pub Al: c_int,
153}
154impl Default for jpeg_scan_info {
155    fn default() -> jpeg_scan_info { unsafe { mem::zeroed() } }
156}
157
158#[repr(C)]
159pub struct jpeg_marker_struct {
160    pub next: *mut jpeg_marker_struct,
161    pub marker: u8,
162    pub original_length: c_uint,
163    pub data_length: c_uint,
164    pub data: *mut u8,
165}
166
167pub enum jpeg_marker {
168    APP0  = 0xE0,    /* APP0 marker code */
169    COM  = 0xFE,    /* COM marker code */
170}
171
172#[repr(C)]
173#[derive(Copy, Clone, Eq, PartialEq, Debug)]
174pub enum J_COLOR_SPACE {
175    /// error/unspecified
176    JCS_UNKNOWN,
177    /// monochrome
178    JCS_GRAYSCALE,
179    /// red/green/blue as specified by the `RGB_RED`, `RGB_GREEN`, `RGB_BLUE`, and `RGB_PIXELSIZE` macros
180    JCS_RGB,
181    /// Y/Cb/Cr (also known as YUV)
182    JCS_YCbCr,
183    /// C/M/Y/K
184    JCS_CMYK,
185    /// Y/Cb/Cr/K
186    JCS_YCCK,
187    /// red/green/blue
188    JCS_EXT_RGB,
189    /// red/green/blue/x
190    /// When `out_color_space` it set to `JCS_EXT_RGBX`, `JCS_EXT_BGRX`, `JCS_EXT_XBGR`,
191    /// or `JCS_EXT_XRGB` during decompression, the X byte is undefined, and in
192    /// order to ensure the best performance, libjpeg-turbo can set that byte to
193    /// whatever value it wishes.
194    JCS_EXT_RGBX,
195    /// blue/green/red
196    JCS_EXT_BGR,
197    /// blue/green/red/x
198    JCS_EXT_BGRX,
199    /// x/blue/green/red
200    JCS_EXT_XBGR,
201    /// x/red/green/blue
202    JCS_EXT_XRGB,
203    /// Use the following colorspace constants to
204    /// ensure that the X byte is set to 0xFF, so that it can be interpreted as an
205    /// opaque alpha channel.
206    ///
207    /// red/green/blue/alpha
208    JCS_EXT_RGBA,
209    /// blue/green/red/alpha
210    JCS_EXT_BGRA,
211    /// alpha/blue/green/red
212    JCS_EXT_ABGR,
213    /// alpha/red/green/blue
214    JCS_EXT_ARGB,
215    /// 5-bit red/6-bit green/5-bit blue
216    JCS_RGB565,
217}
218
219#[repr(C)]
220#[derive(Copy, Clone, Eq, PartialEq, Debug)]
221pub enum J_DCT_METHOD {
222    JDCT_ISLOW = 0,
223    JDCT_IFAST = 1,
224    JDCT_FLOAT = 2,
225}
226
227#[repr(C)]
228// #[deprecated]
229pub enum J_DITHER_MODE {
230    JDITHER_NONE = 0,
231    JDITHER_ORDERED = 1,
232    JDITHER_FS = 2,
233}
234
235#[repr(u32)]
236#[derive(Copy, Clone, Eq, PartialEq, Debug)]
237/// These 32-bit GUIDs and the corresponding `jpeg_*_get_*_param()`
238/// `jpeg_*_set_*_param()` functions allow for extending the libjpeg API without
239/// breaking backward ABI compatibility.  The actual parameters are stored in
240/// the opaque `jpeg_comp_master` and `jpeg_decomp_master` structs.
241pub enum J_BOOLEAN_PARAM {
242    /// TRUE=optimize progressive coding scans
243    JBOOLEAN_OPTIMIZE_SCANS = 0x680C061E,
244    /// TRUE=use trellis quantization
245    JBOOLEAN_TRELLIS_QUANT = 0xC5122033,
246    /// TRUE=use trellis quant for DC coefficient
247    JBOOLEAN_TRELLIS_QUANT_DC = 0x339D4C0C,
248    /// TRUE=optimize for sequences of EOB
249    JBOOLEAN_TRELLIS_EOB_OPT = 0xD7F73780,
250    /// TRUE=use lambda weighting table
251    JBOOLEAN_USE_LAMBDA_WEIGHT_TBL = 0x339DB65F,
252    /// TRUE=use scans in trellis optimization
253    JBOOLEAN_USE_SCANS_IN_TRELLIS = 0xFD841435,
254    /// TRUE=optimize quant table in trellis loop
255    JBOOLEAN_TRELLIS_Q_OPT = 0xE12AE269,
256    /// TRUE=preprocess input to reduce ringing of edges on white background
257    JBOOLEAN_OVERSHOOT_DERINGING = 0x3F4BBBF9,
258}
259
260#[repr(u32)]
261#[derive(Copy, Clone, Eq, PartialEq, Debug)]
262pub enum J_FLOAT_PARAM {
263    JFLOAT_LAMBDA_LOG_SCALE1 = 0x5B61A599,
264    JFLOAT_LAMBDA_LOG_SCALE2 = 0xB9BBAE03,
265    JFLOAT_TRELLIS_DELTA_DC_WEIGHT = 0x13775453,
266}
267
268#[repr(u32)]
269#[derive(Copy, Clone, Eq, PartialEq, Debug)]
270pub enum J_INT_PARAM {
271    /// compression profile
272    JINT_COMPRESS_PROFILE = 0xE9918625,
273    /// splitting point for frequency in trellis quantization
274    JINT_TRELLIS_FREQ_SPLIT = 0x6FAFF127,
275    /// number of trellis loops
276    JINT_TRELLIS_NUM_LOOPS = 0xB63EBF39,
277    /// base quantization table index
278    JINT_BASE_QUANT_TBL_IDX = 0x44492AB1,
279    /// DC scan optimization mode
280    JINT_DC_SCAN_OPT_MODE = 0x0BE7AD3C,
281}
282
283#[repr(C)]
284#[derive(Copy, Clone, Eq, PartialEq, Debug)]
285pub enum JINT_COMPRESS_PROFILE_VALUE {
286    JCP_MAX_COMPRESSION = 0x5D083AAD, /* best compression ratio (progressive, all mozjpeg extensions) */
287    JCP_FASTEST = 0x2AEA5CB4, /* libjpeg[-turbo] defaults (baseline, no mozjpeg extensions) */
288}
289
290#[repr(C)]
291/// Routines that are to be used by both halves of the library are declared
292/// to receive a pointer to this structure.  There are no actual instances of
293/// `jpeg_common_struct`, only of `jpeg_compress_struct` and `jpeg_decompress_struct`.
294pub struct jpeg_common_struct {
295    pub err: *mut jpeg_error_mgr,
296    pub mem: *mut jpeg_memory_mgr,
297    /// Progress monitor, or NULL if none
298    pub progress: *mut jpeg_progress_mgr,
299    /// Available for use by application
300    pub client_data: *mut c_void,
301    /// So common code can tell which is which
302    pub is_decompressor: boolean,
303    /// For checking call sequence validity
304    pub global_state: c_int,
305}
306
307enum jpeg_comp_master {}
308enum jpeg_c_main_controller {}
309enum jpeg_c_prep_controller {}
310enum jpeg_c_coef_controller {}
311enum jpeg_marker_writer {}
312enum jpeg_color_converter {}
313enum jpeg_downsampler {}
314enum jpeg_forward_dct {}
315enum jpeg_entropy_encoder {}
316
317#[repr(C)]
318pub struct jpeg_compress_struct {
319    pub common: jpeg_common_struct,
320    pub dest: *mut jpeg_destination_mgr,
321    /// Description of source image --- these fields must be filled in by
322    /// outer application before starting compression.
323    pub image_width: JDIMENSION,
324    pub image_height: JDIMENSION,
325    pub input_components: c_int,
326    /// `in_color_space` must be correct before you can even call `jpeg_set_defaults()`.
327    pub in_color_space: J_COLOR_SPACE,
328    /// image gamma of input image
329    pub input_gamma: f64,
330
331    #[cfg(feature = "jpeg70_abi")]
332    /// fraction by which to scale image
333    scale_num: c_uint,
334    #[cfg(feature = "jpeg70_abi")]
335    /// fraction by which to scale image
336    scale_denom: c_uint,
337
338    /// scaled JPEG image width
339    ///
340    /// Dimensions of actual JPEG image that will be written to file,
341    /// derived from input dimensions by scaling factors.
342    /// These fields are computed by `jpeg_start_compress()`.
343    /// You can also use `jpeg_calc_jpeg_dimensions()` to determine these values
344    /// in advance of calling `jpeg_start_compress()`.
345    #[cfg(feature = "jpeg70_abi")]
346    jpeg_width: JDIMENSION,
347    /// scaled JPEG image height
348    #[cfg(feature = "jpeg70_abi")]
349    jpeg_height: JDIMENSION,
350
351    /// bits of precision in image data
352    pub data_precision: c_int,
353    pub num_components: c_int,
354    pub jpeg_color_space: J_COLOR_SPACE,
355    /// `comp_info[i]` describes component that appears i'th in SOF
356    pub comp_info: *mut jpeg_component_info,
357    pub quant_tbl_ptrs: [*mut JQUANT_TBL; 4usize],
358
359    #[cfg(feature = "jpeg70_abi")]
360    q_scale_factor: [c_int; NUM_QUANT_TBLS],
361
362    /// ptrs to coefficient quantization tables, or NULL if not defined,
363    /// and corresponding scale factors (percentage, initialized 100).
364    pub dc_huff_tbl_ptrs: [*mut JHUFF_TBL; 4usize],
365    pub ac_huff_tbl_ptrs: [*mut JHUFF_TBL; 4usize],
366    pub arith_dc_L: [u8; 16usize],
367    pub arith_dc_U: [u8; 16usize],
368    pub arith_ac_K: [u8; 16usize],
369    pub num_scans: c_int,
370    pub scan_info: *const jpeg_scan_info,
371    /// TRUE=caller supplies downsampled data
372    pub raw_data_in: boolean,
373    pub arith_code: boolean,
374    /// TRUE=optimize entropy encoding parms
375    pub optimize_coding: boolean,
376    pub CCIR601_sampling: boolean,
377    /// TRUE=apply fancy downsampling
378    #[cfg(feature = "jpeg70_abi")]
379    pub do_fancy_downsampling: boolean,
380    pub smoothing_factor: c_int,
381    pub dct_method: J_DCT_METHOD,
382    /// MCUs per restart, or 0 for no restart
383    pub restart_interval: c_uint,
384    pub restart_in_rows: c_int,
385    pub write_JFIF_header: boolean,
386    pub JFIF_major_version: u8,
387    pub JFIF_minor_version: u8,
388    pub density_unit: u8,
389    pub X_density: u16,
390    pub Y_density: u16,
391    pub write_Adobe_marker: boolean,
392    pub next_scanline: JDIMENSION,
393    /// Remaining fields are known throughout compressor, but generally
394    /// should not be touched by a surrounding application.
395    /// These fields are computed during compression startup
396    progressive_mode: boolean,
397    pub max_h_samp_factor: c_int,
398    pub max_v_samp_factor: c_int,
399    /// smallest DCT_h_scaled_size of any component
400    #[cfg(feature = "jpeg70_abi")]
401    min_DCT_h_scaled_size: c_int,
402    /// smallest DCT_v_scaled_size of any component
403    #[cfg(feature = "jpeg70_abi")]
404    min_DCT_v_scaled_size: c_int,
405
406    total_iMCU_rows: JDIMENSION,
407    comps_in_scan: c_int,
408    cur_comp_info: [*mut jpeg_component_info; 4usize],
409    MCUs_per_row: JDIMENSION,
410    MCU_rows_in_scan: JDIMENSION,
411    blocks_in_MCU: c_int,
412    MCU_membership: [c_int; 10usize],
413    Ss: c_int,
414    Se: c_int,
415    Ah: c_int,
416    Al: c_int,
417    /// the basic DCT block size: 1..16
418    #[cfg(feature = "jpeg80_abi")]
419    block_size: c_int,
420    /// natural-order position array
421    #[cfg(feature = "jpeg80_abi")]
422    natural_order: *const c_int,
423    /// min( Se, DCTSIZE2-1 )
424    #[cfg(feature = "jpeg80_abi")]
425    lim_Se: c_int,
426
427    master: *mut jpeg_comp_master,
428    main: *mut jpeg_c_main_controller,
429    prep: *mut jpeg_c_prep_controller,
430    coef: *mut jpeg_c_coef_controller,
431    marker: *mut jpeg_marker_writer,
432    cconvert: *mut jpeg_color_converter,
433    downsample: *mut jpeg_downsampler,
434    fdct: *mut jpeg_forward_dct,
435    entropy: *mut jpeg_entropy_encoder,
436    script_space: *mut jpeg_scan_info,
437    script_space_size: c_int,
438}
439
440enum jpeg_decomp_master {}
441enum jpeg_d_main_controller {}
442enum jpeg_d_coef_controller {}
443enum jpeg_d_post_controller {}
444enum jpeg_input_controller {}
445enum jpeg_marker_reader {}
446enum jpeg_entropy_decoder {}
447enum jpeg_inverse_dct {}
448enum jpeg_upsampler {}
449enum jpeg_color_deconverter {}
450enum jpeg_color_quantizer {}
451
452#[repr(C)]
453pub struct jpeg_decompress_struct {
454    pub common: jpeg_common_struct,
455
456    pub src: *mut jpeg_source_mgr,
457    /// Basic description of image --- filled in by `jpeg_read_header()`
458    pub image_width: JDIMENSION,
459    pub image_height: JDIMENSION,
460    pub num_components: c_int,
461    pub jpeg_color_space: J_COLOR_SPACE,
462    /// Decompression processing parameters --- these fields must be set before
463    /// calling `jpeg_start_decompress()`.  Note that `jpeg_read_header()` initializes
464    /// them to default values.
465    pub out_color_space: J_COLOR_SPACE,
466    pub scale_num: c_uint,
467    pub scale_denom: c_uint,
468    /// image gamma wanted in output
469    pub output_gamma: f64,
470    pub buffered_image: boolean,
471    /// TRUE=downsampled data wanted
472    pub raw_data_out: boolean,
473    pub dct_method: J_DCT_METHOD,
474    pub do_fancy_upsampling: boolean,
475    pub do_block_smoothing: boolean,
476    // #[deprecated]
477    pub quantize_colors: boolean,
478    // #[deprecated]
479    pub dither_mode: J_DITHER_MODE,
480    // #[deprecated]
481    pub two_pass_quantize: boolean,
482    // #[deprecated]
483    pub desired_number_of_colors: c_int,
484    // #[deprecated]
485    pub enable_1pass_quant: boolean,
486    // #[deprecated]
487    pub enable_external_quant: boolean,
488    // #[deprecated]
489    pub enable_2pass_quant: boolean,
490    /// Description of actual output image that will be returned to application.
491    /// These fields are computed by `jpeg_start_decompress()`.
492    /// You can also use `jpeg_calc_output_dimensions()` to determine these values
493    /// in advance of calling `jpeg_start_decompress()`.
494    pub output_width: JDIMENSION,
495    pub output_height: JDIMENSION,
496    pub out_color_components: c_int,
497    pub output_components: c_int,
498    /// min recommended height of scanline buffer
499    /// If the buffer passed to `jpeg_read_scanlines()` is less than this many rows
500    /// high, space and time will be wasted due to unnecessary data copying.
501    /// Usually `rec_outbuf_height` will be 1 or 2, at most 4.
502    pub rec_outbuf_height: c_int,
503    // #[deprecated]
504    pub actual_number_of_colors: c_int,
505    // #[deprecated]
506    pub colormap: JSAMPARRAY_MUT,
507    /// Row index of next scanline to be read from `jpeg_read_scanlines()`.
508    /// Application may use this to control its processing loop, e.g.,
509    /// "while (`output_scanline` < `output_height`)".
510    pub output_scanline: JDIMENSION,
511    /// Current input scan number and number of iMCU rows completed in scan.
512    /// These indicate the progress of the decompressor input side.
513    pub input_scan_number: c_int,
514    pub input_iMCU_row: JDIMENSION,
515    pub output_scan_number: c_int,
516    pub output_iMCU_row: JDIMENSION,
517    /// Current progression status.  `coef_bits[c][i]` indicates the precision
518    /// with which component c's DCT coefficient i (in zigzag order) is known.
519    /// It is -1 when no data has yet been received, otherwise it is the point
520    /// transform (shift) value for the most recent scan of the coefficient
521    /// (thus, 0 at completion of the progression).
522    /// This pointer is NULL when reading a non-progressive file.
523    pub coef_bits: *mut c_void,
524    /// Internal JPEG parameters --- the application usually need not look at
525    /// these fields.  Note that the decompressor output side may not use
526    /// any parameters that can change between scans.
527    pub quant_tbl_ptrs: [*mut JQUANT_TBL; 4usize],
528    dc_huff_tbl_ptrs: [*mut JHUFF_TBL; 4usize],
529    ac_huff_tbl_ptrs: [*mut JHUFF_TBL; 4usize],
530    data_precision: c_int,
531    pub comp_info: *mut jpeg_component_info,
532
533    /// TRUE if Baseline SOF0 encountered
534    #[cfg(feature = "jpeg80_abi")]
535    is_baseline: boolean,
536    progressive_mode: boolean,
537
538    arith_code: boolean,
539    arith_dc_L: [u8; 16usize],
540    arith_dc_U: [u8; 16usize],
541    arith_ac_K: [u8; 16usize],
542    restart_interval: c_uint,
543    saw_JFIF_marker: boolean,
544    JFIF_major_version: u8,
545    JFIF_minor_version: u8,
546    pub density_unit: u8,
547    pub X_density: u16,
548    pub Y_density: u16,
549    saw_Adobe_marker: boolean,
550    Adobe_transform: u8,
551    CCIR601_sampling: boolean,
552    pub marker_list: *mut jpeg_marker_struct,
553    /// These fields are computed during decompression startup
554    pub max_h_samp_factor: c_int,
555    pub max_v_samp_factor: c_int,
556
557    /// smallest DCT_h_scaled_size of any component
558    #[cfg(feature = "jpeg70_abi")]
559    min_DCT_h_scaled_size: c_int,
560    /// smallest DCT_v_scaled_size of any component
561    #[cfg(feature = "jpeg70_abi")]
562    min_DCT_v_scaled_size: c_int,
563    /// smallest `DCT_scaled_size` of any component
564    #[cfg(not(feature = "jpeg70_abi"))]
565    min_DCT_scaled_size: c_int,
566    total_iMCU_rows: JDIMENSION,
567    sample_range_limit: *mut JSAMPLE,
568    comps_in_scan: c_int,
569    cur_comp_info: [*mut jpeg_component_info; 4usize],
570    MCUs_per_row: JDIMENSION,
571    MCU_rows_in_scan: JDIMENSION,
572    blocks_in_MCU: c_int,
573    MCU_membership: [c_int; 10usize],
574    Ss: c_int,
575    Se: c_int,
576    Ah: c_int,
577    Al: c_int,
578
579    /// the basic DCT block size: 1..16
580    #[cfg(feature = "jpeg80_abi")]
581    block_size: c_int,
582    /// natural-order position array for entropy decode
583    #[cfg(feature = "jpeg80_abi")]
584    natural_order: *const c_int,
585    /// min( Se, DCTSIZE2-1 ) for entropy decode
586    #[cfg(feature = "jpeg80_abi")]
587    lim_Se: c_int,
588
589    unread_marker: c_int,
590    master: *mut jpeg_decomp_master,
591    main: *mut jpeg_d_main_controller,
592    coef: *mut jpeg_d_coef_controller,
593    post: *mut jpeg_d_post_controller,
594    inputctl: *mut jpeg_input_controller,
595    marker: *mut jpeg_marker_reader,
596    entropy: *mut jpeg_entropy_decoder,
597    idct: *mut jpeg_inverse_dct,
598    upsample: *mut jpeg_upsampler,
599    cconvert: *mut jpeg_color_deconverter,
600    cquantize: *mut jpeg_color_quantizer,
601}
602
603#[repr(C)]
604/// Error handler object
605pub struct jpeg_error_mgr {
606    /// Error exit handler: does not return to caller
607    pub error_exit: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct)>,
608    pub emit_message: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct, msg_level: c_int)>,
609    pub output_message: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct)>,
610    pub format_message: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct, buffer: &[u8; 80usize])>,
611    pub reset_error_mgr: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct)>,
612    pub msg_code: c_int,
613    pub msg_parm: msg_parm_union,
614    pub trace_level: c_int,
615    pub num_warnings: c_long,
616    pub jpeg_message_table: *const *const i8,
617    pub last_jpeg_message: c_int,
618    pub addon_message_table: *const *const i8,
619    pub first_addon_message: c_int,
620    pub last_addon_message: c_int,
621}
622
623#[repr(C)]
624pub struct msg_parm_union {
625    pub _bindgen_data_: [u32; 20usize],
626}
627impl msg_parm_union {
628    pub unsafe fn i(&mut self) -> *mut [c_int; 8usize] {
629        ::std::mem::transmute(&self._bindgen_data_)
630    }
631    pub unsafe fn s(&mut self) -> *mut [i8; 80usize] {
632        ::std::mem::transmute(&self._bindgen_data_)
633    }
634}
635impl Default for msg_parm_union {
636    fn default() -> msg_parm_union { unsafe { mem::zeroed() } }
637}
638
639#[repr(C)]
640pub struct jpeg_progress_mgr {
641    pub progress_monitor: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct)>,
642    pub pass_counter: c_long,
643    pub pass_limit: c_long,
644    pub completed_passes: c_int,
645    pub total_passes: c_int,
646}
647
648#[repr(C)]
649pub struct jpeg_destination_mgr {
650    pub next_output_byte: *mut u8,
651    pub free_in_buffer: usize,
652    pub init_destination: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_compress_struct)>,
653    pub empty_output_buffer: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_compress_struct) -> boolean>,
654    pub term_destination: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_compress_struct)>,
655}
656
657#[repr(C)]
658pub struct jpeg_source_mgr {
659    pub next_input_byte: *const u8,
660    pub bytes_in_buffer: usize,
661    pub init_source: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_decompress_struct)>,
662    pub fill_input_buffer: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_decompress_struct)
663                                                     -> boolean>,
664    pub skip_input_data: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_decompress_struct,
665                                                    num_bytes:
666                                                        c_long)>,
667    pub resync_to_restart: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_decompress_struct,
668                                                      desired: c_int)
669                                                     -> boolean>,
670    pub term_source: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_decompress_struct)>,
671}
672
673/// This is an opaque type. Don't assume size or alignment of this struct.
674#[repr(C)]
675pub struct jvirt_sarray_control {
676    _priv: c_long,
677}
678
679/// This is an opaque type. Don't assume size or alignment of this struct.
680#[repr(C)]
681pub struct jvirt_barray_control {
682    _priv: c_long,
683}
684
685#[repr(C)]
686pub struct jpeg_memory_mgr {
687    pub alloc_small: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct,
688                                                pool_id: c_int,
689                                                sizeofobject: usize) -> *mut c_void>,
690    pub alloc_large: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct,
691                                                pool_id: c_int,
692                                                sizeofobject: usize) -> *mut c_void>,
693    pub alloc_sarray: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct,
694                                                 pool_id: c_int,
695                                                 samplesperrow: JDIMENSION,
696                                                 numrows: JDIMENSION) -> JSAMPARRAY_MUT>,
697    pub alloc_barray: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct,
698                                                 pool_id: c_int,
699                                                 blocksperrow: JDIMENSION,
700                                                 numrows: JDIMENSION) -> JBLOCKARRAY>,
701    pub request_virt_sarray: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct,
702                                                        pool_id: c_int,
703                                                        pre_zero: boolean,
704                                                        samplesperrow: JDIMENSION,
705                                                        numrows: JDIMENSION,
706                                                        maxaccess: JDIMENSION) -> *mut jvirt_sarray_control>,
707    pub request_virt_barray: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct,
708                                                        pool_id:
709                                                            c_int,
710                                                        pre_zero: boolean,
711                                                        blocksperrow:
712                                                            JDIMENSION,
713                                                        numrows: JDIMENSION,
714                                                        maxaccess: JDIMENSION) -> *mut jvirt_barray_control>,
715    pub realize_virt_arrays: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct)>,
716    pub access_virt_sarray: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct,
717                                                       ptr: *mut jvirt_sarray_control,
718                                                       start_row: JDIMENSION,
719                                                       num_rows: JDIMENSION,
720                                                       writable: boolean) -> JSAMPARRAY_MUT>,
721    pub access_virt_barray: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct,
722                                                       ptr: *mut jvirt_barray_control,
723                                                       start_row: JDIMENSION,
724                                                       num_rows: JDIMENSION,
725                                                       writable: boolean) -> JBLOCKARRAY>,
726    pub free_pool: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct, pool_id: c_int)>,
727    pub self_destruct: Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_common_struct)>,
728    pub max_memory_to_use: c_long,
729    pub max_alloc_chunk: c_long,
730}
731
732pub type jpeg_marker_parser_method = Option<unsafe extern "C-unwind" fn(cinfo: &mut jpeg_decompress_struct) -> boolean>;
733
734pub unsafe fn jpeg_create_decompress(dinfo: *mut jpeg_decompress_struct) {
735    jpeg_CreateDecompress(dinfo, JPEG_LIB_VERSION, mem::size_of::<jpeg_decompress_struct>());
736}
737
738pub unsafe fn jpeg_create_compress(cinfo: *mut jpeg_compress_struct) {
739    jpeg_CreateCompress(cinfo, JPEG_LIB_VERSION, mem::size_of::<jpeg_compress_struct>());
740}
741
742extern "C-unwind" {
743    pub fn jpeg_std_error<'a>(err: &'a mut jpeg_error_mgr) -> &'a mut jpeg_error_mgr;
744    pub fn jpeg_CreateCompress(cinfo: *mut jpeg_compress_struct, version: c_int, structsize: usize);
745    pub fn jpeg_CreateDecompress(cinfo: *mut jpeg_decompress_struct, version: c_int, structsize: usize);
746    pub fn jpeg_destroy_compress(cinfo: &mut jpeg_compress_struct);
747    pub fn jpeg_destroy_decompress(cinfo: &mut jpeg_decompress_struct);
748    #[cfg(not(target_arch = "wasm32"))]
749    pub fn jpeg_stdio_dest(cinfo: &mut jpeg_compress_struct, outfile: *mut FILE);
750    #[cfg(not(target_arch = "wasm32"))]
751    pub fn jpeg_stdio_src(cinfo: &mut jpeg_decompress_struct, infile: *mut FILE);
752    pub fn jpeg_mem_dest(cinfo: &mut jpeg_compress_struct,
753                     outbuffer: *mut *mut u8,
754                     outsize: *mut c_ulong);
755    pub fn jpeg_mem_src(cinfo: &mut jpeg_decompress_struct,
756                    inbuffer: *const u8,
757                    insize: c_ulong);
758    pub fn jpeg_set_defaults(cinfo: &mut jpeg_compress_struct);
759    pub fn jpeg_set_colorspace(cinfo: &mut jpeg_compress_struct, colorspace: J_COLOR_SPACE);
760    pub fn jpeg_default_colorspace(cinfo: &mut jpeg_compress_struct);
761    pub fn jpeg_set_quality(cinfo: &mut jpeg_compress_struct, quality: c_int, force_baseline: boolean);
762    pub fn jpeg_set_linear_quality(cinfo: &mut jpeg_compress_struct,
763                               scale_factor: c_int,
764                               force_baseline: boolean);
765    pub fn jpeg_add_quant_table(cinfo: &mut jpeg_compress_struct,
766                            which_tbl: c_int,
767                            basic_table: *const c_uint,
768                            scale_factor: c_int,
769                            force_baseline: boolean);
770    pub fn jpeg_quality_scaling(quality: c_int) -> c_int;
771    pub fn jpeg_float_quality_scaling(quality: f32) -> f32;
772    pub fn jpeg_simple_progression(cinfo: &mut jpeg_compress_struct);
773    pub fn jpeg_suppress_tables(cinfo: &mut jpeg_compress_struct, suppress: boolean);
774    pub fn jpeg_alloc_quant_table(cinfo: &mut jpeg_common_struct) -> *mut JQUANT_TBL;
775    pub fn jpeg_alloc_huff_table(cinfo: &mut jpeg_common_struct) -> *mut JHUFF_TBL;
776    pub fn jpeg_start_compress(cinfo: &mut jpeg_compress_struct, write_all_tables: boolean);
777    pub fn jpeg_write_scanlines(cinfo: &mut jpeg_compress_struct, scanlines: JSAMPARRAY,
778                            num_lines: JDIMENSION) -> JDIMENSION;
779    pub fn jpeg_finish_compress(cinfo: &mut jpeg_compress_struct);
780    pub fn jpeg_write_raw_data(cinfo: &mut jpeg_compress_struct, data: JSAMPIMAGE,
781                           num_lines: JDIMENSION) -> JDIMENSION;
782    pub fn jpeg_write_marker(cinfo: &mut jpeg_compress_struct, marker: c_int,
783                         dataptr: *const u8, datalen: c_uint);
784    pub fn jpeg_write_m_header(cinfo: &mut jpeg_compress_struct, marker: c_int, datalen: c_uint);
785    pub fn jpeg_write_m_byte(cinfo: &mut jpeg_compress_struct, val: c_int);
786    pub fn jpeg_write_tables(cinfo: &mut jpeg_compress_struct);
787    pub fn jpeg_read_header(cinfo: &mut jpeg_decompress_struct, require_image: boolean) -> c_int;
788    pub fn jpeg_start_decompress(cinfo: &mut jpeg_decompress_struct) -> boolean;
789    pub fn jpeg_read_scanlines(cinfo: &mut jpeg_decompress_struct, scanlines: JSAMPARRAY_MUT,
790                           max_lines: JDIMENSION) -> JDIMENSION;
791    pub fn jpeg_finish_decompress(cinfo: &mut jpeg_decompress_struct) -> boolean;
792    pub fn jpeg_read_raw_data(cinfo: &mut jpeg_decompress_struct, data: JSAMPIMAGE_MUT,
793                          max_lines: JDIMENSION) -> JDIMENSION;
794    /// The ICC has defined a standard for including such data in JPEG "APP2" markers.
795    /// The aforementioned functions do not know anything about the internal structure
796    /// of the ICC profile data; they just know how to embed the profile data into a
797    /// JPEG file while writing it, or to extract the profile data from a JPEG file
798    /// while reading it.
799    /// This memory region is allocated by the library using malloc() and must be freed
800    /// by the caller using free() when the memory region is no longer needed.
801    /// Callers wishing to use jpeg_read_icc_profile() must call jpeg_save_markers(cinfo, JPEG_APP0 + 2, 0xFFFF);
802    /// prior to calling jpeg_read_header(). jpeg_read_icc_profile() can be called at
803    /// any point between jpeg_read_header() and jpeg_finish_decompress().
804    #[cfg(feature = "icc_io")]
805    pub fn jpeg_read_icc_profile(cinfo: &mut jpeg_decompress_struct, icc_data_ptr: *mut *mut u8, icc_data_len: *mut c_uint) -> boolean;
806    /// jpeg_write_icc_profile() must be called after calling jpeg_start_compress() and
807    /// before the first call to jpeg_write_scanlines() or jpeg_write_raw_data().  This
808    /// ordering ensures that the APP2 marker(s) will appear after the SOI and JFIF or
809    /// Adobe markers, but before all other data.
810    #[cfg(feature = "icc_io")]
811    pub fn jpeg_write_icc_profile(cinfo: &mut jpeg_compress_struct, icc_data_ptr: *const u8, icc_data_len: c_uint);
812    /// This function provides application programmers with the ability to skip over
813    /// multiple rows in the JPEG image.
814    ///
815    /// Suspending data sources are not supported by this function.  Calling
816    /// jpeg_skip_scanlines() with a suspending data source will result in undefined
817    /// behavior.
818    pub fn jpeg_skip_scanlines(cinfo: &mut jpeg_decompress_struct, num_lines: JDIMENSION) -> JDIMENSION;
819    /// This function provides application programmers with the ability to decompress
820    /// only a portion of each row in the JPEG image.  It must be called after
821    /// jpeg_start_decompress() and before any calls to jpeg_read_scanlines() or
822    /// jpeg_skip_scanlines().
823    /// If the output image is scaled, then xoffset and width are relative to the scaled image dimensions.
824    /// xoffset and width are passed by reference because xoffset must fall on an iMCU
825    /// boundary.  If it doesn't, then it will be moved left to the nearest iMCU
826    /// boundary, and width will be increased accordingly.
827    pub fn jpeg_crop_scanline(cinfo: &mut jpeg_decompress_struct, xoffset: &mut JDIMENSION, width: &mut JDIMENSION);
828    pub fn jpeg_has_multiple_scans(cinfo: &jpeg_decompress_struct) -> boolean;
829    pub fn jpeg_start_output(cinfo: &mut jpeg_decompress_struct, scan_number: c_int) -> boolean;
830    pub fn jpeg_finish_output(cinfo: &mut jpeg_decompress_struct) -> boolean;
831    pub fn jpeg_input_complete(cinfo: &jpeg_decompress_struct) -> boolean;
832    #[deprecated]
833    pub fn jpeg_new_colormap(cinfo: &mut jpeg_decompress_struct);
834    pub fn jpeg_consume_input(cinfo: &mut jpeg_decompress_struct) -> c_int;
835    /// Precalculate JPEG dimensions for current compression parameters
836    #[cfg(feature = "jpeg70_abi")]
837    pub fn jpeg_calc_jpeg_dimensions(cinfo: &mut jpeg_compress_struct);
838    pub fn jpeg_calc_output_dimensions(cinfo: &mut jpeg_decompress_struct);
839    pub fn jpeg_save_markers(cinfo: &mut jpeg_decompress_struct,
840                         marker_code: c_int,
841                         length_limit: c_uint);
842    pub fn jpeg_set_marker_processor(cinfo: &mut jpeg_decompress_struct,
843                                 marker_code: c_int,
844                                 routine: jpeg_marker_parser_method);
845    pub fn jpeg_read_coefficients(cinfo: &mut jpeg_decompress_struct) -> *mut *mut jvirt_barray_control;
846    pub fn jpeg_write_coefficients(cinfo: &mut jpeg_compress_struct,
847                               coef_arrays: *mut *mut jvirt_barray_control);
848    pub fn jpeg_copy_critical_parameters(srcinfo: &jpeg_decompress_struct,
849                                     dstinfo: &mut jpeg_compress_struct);
850    #[cfg(feature = "jpeg80_abi")]
851    pub fn jpeg_core_output_dimensions(cinfo: &mut jpeg_decompress_struct);
852    pub fn jpeg_abort_compress(cinfo: &mut jpeg_compress_struct);
853    pub fn jpeg_abort_decompress(cinfo: &mut jpeg_decompress_struct);
854    pub fn jpeg_resync_to_restart(cinfo: &mut jpeg_decompress_struct, desired: c_int) -> boolean;
855    pub fn jpeg_c_bool_param_supported(cinfo: &jpeg_compress_struct,
856                                   param: J_BOOLEAN_PARAM) -> boolean;
857    pub fn jpeg_c_set_bool_param(cinfo: &mut jpeg_compress_struct,
858                             param: J_BOOLEAN_PARAM, value: boolean);
859    pub fn jpeg_c_get_bool_param(cinfo: &jpeg_compress_struct,
860                             param: J_BOOLEAN_PARAM) -> boolean;
861    pub fn jpeg_c_float_param_supported(cinfo: &jpeg_compress_struct, param: J_FLOAT_PARAM) -> boolean;
862    pub fn jpeg_abort(cinfo: &mut jpeg_common_struct);
863    pub fn jpeg_destroy(cinfo: &mut jpeg_common_struct);
864    pub fn jpeg_c_set_float_param(cinfo: &mut jpeg_compress_struct, param: J_FLOAT_PARAM, value: f32);
865    pub fn jpeg_c_get_float_param(cinfo: &jpeg_compress_struct, param: J_FLOAT_PARAM) -> f32;
866    pub fn jpeg_c_int_param_supported(cinfo: &jpeg_compress_struct, param: J_INT_PARAM) -> boolean;
867    pub fn jpeg_c_set_int_param(cinfo: &mut jpeg_compress_struct, param: J_INT_PARAM, value: c_int);
868    pub fn jpeg_c_get_int_param(cinfo: &jpeg_compress_struct, param: J_INT_PARAM) -> c_int;
869    pub fn jpeg_set_idct_method_selector(cinfo: &jpeg_compress_struct, param: *const c_void);
870    #[cfg(test)] #[allow(dead_code)] fn jsimd_can_rgb_ycc() -> c_int;
871    #[cfg(test)] #[allow(dead_code)] fn jsimd_can_fdct_ifast() -> c_int;
872    #[cfg(test)] #[allow(dead_code)] fn jsimd_fdct_ifast(block: *mut DCTELEM);
873}
874
875#[test]
876fn enum_32bit() {
877    assert_eq!(JBOOLEAN_TRELLIS_QUANT as u64, 0xC5122033);
878}
879
880#[test]
881#[cfg(feature = "with_simd")]
882fn simd_is_detectable() {
883    unsafe {
884        jsimd_can_rgb_ycc();
885    }
886}
887
888#[test]
889#[cfg(all(target_arch = "x86_64", feature = "nasm_simd"))]
890fn simd_works_sse2() {
891    #[repr(align(16))]
892    struct Aligned([DCTELEM; 64]);
893
894    unsafe {
895        assert!(jsimd_can_fdct_ifast() != 0);
896        let mut data = Aligned([0 as DCTELEM; 64]);
897        jsimd_fdct_ifast(data.0.as_mut_ptr());
898    }
899}
900
901#[test]
902fn try_decompress() {
903    unsafe {
904        let mut err = mem::zeroed();
905        jpeg_std_error(&mut err);
906        let mut cinfo: jpeg_decompress_struct = mem::zeroed();
907        cinfo.common.err = &mut err;
908        jpeg_create_decompress(&mut cinfo);
909        jpeg_destroy_decompress(&mut cinfo);
910    }
911}
912
913#[test]
914fn try_compress() {
915    unsafe {
916        let mut err = mem::zeroed();
917        jpeg_std_error(&mut err);
918        let mut cinfo: jpeg_compress_struct = mem::zeroed();
919        cinfo.common.err = &mut err;
920        if 0 == jpeg_c_bool_param_supported(&cinfo, JBOOLEAN_TRELLIS_QUANT) {
921            panic!("Not linked to mozjpeg?");
922        }
923        jpeg_create_compress(&mut cinfo);
924        jpeg_destroy_compress(&mut cinfo);
925    }
926}
927
928#[test]
929#[cfg(target_pointer_width = "32")]
930fn bindgen_test_layout_JQUANT_TBL() {
931    assert_eq!(::std::mem::size_of::<JQUANT_TBL>(), 132usize, concat!("Size of: ", stringify!(JQUANT_TBL)));
932    assert_eq!(::std::mem::align_of::<JQUANT_TBL>(), 4usize, concat!("Alignment of ", stringify!(JQUANT_TBL)));
933    assert_eq!(unsafe { &(*(::std::ptr::null::<JQUANT_TBL>())).quantval as *const _ as usize }, 0usize, concat!("Offset of field: ", stringify!(JQUANT_TBL), "::", stringify!(quantval)));
934    assert_eq!(unsafe { &(*(::std::ptr::null::<JQUANT_TBL>())).sent_table as *const _ as usize }, 128usize, concat!("Offset of field: ", stringify!(JQUANT_TBL), "::", stringify!(sent_table)));
935}
936
937#[test]
938#[cfg(target_pointer_width = "32")]
939fn bindgen_test_layout_JHUFF_TBL() {
940    assert_eq!(::std::mem::size_of::<JHUFF_TBL>(), 280usize, concat!("Size of: ", stringify!(JHUFF_TBL)));
941    assert_eq!(::std::mem::align_of::<JHUFF_TBL>(), 4usize, concat!("Alignment of ", stringify!(JHUFF_TBL)));
942    assert_eq!(unsafe { &(*(::std::ptr::null::<JHUFF_TBL>())).bits as *const _ as usize }, 0usize, concat!("Offset of field: ", stringify!(JHUFF_TBL), "::", stringify!(bits)));
943    assert_eq!(unsafe { &(*(::std::ptr::null::<JHUFF_TBL>())).huffval as *const _ as usize }, 17usize, concat!("Offset of field: ", stringify!(JHUFF_TBL), "::", stringify!(huffval)));
944    assert_eq!(unsafe { &(*(::std::ptr::null::<JHUFF_TBL>())).sent_table as *const _ as usize }, 276usize, concat!("Offset of field: ", stringify!(JHUFF_TBL), "::", stringify!(sent_table)));
945}
946
947#[test]
948#[cfg(target_pointer_width = "32")]
949fn bindgen_test_layout_jpeg_component_info() {
950    assert_eq!(::std::mem::align_of::<jpeg_component_info>(), 4usize, concat!("Alignment of ", stringify!(jpeg_component_info)));
951    assert_eq!(
952        unsafe { &(*(::std::ptr::null::<jpeg_component_info>())).component_id as *const _ as usize },
953        0usize,
954        concat!("Offset of field: ", stringify!(jpeg_component_info), "::", stringify!(component_id))
955    );
956    assert_eq!(
957        unsafe { &(*(::std::ptr::null::<jpeg_component_info>())).component_index as *const _ as usize },
958        4usize,
959        concat!("Offset of field: ", stringify!(jpeg_component_info), "::", stringify!(component_index))
960    );
961    assert_eq!(
962        unsafe { &(*(::std::ptr::null::<jpeg_component_info>())).h_samp_factor as *const _ as usize },
963        8usize,
964        concat!("Offset of field: ", stringify!(jpeg_component_info), "::", stringify!(h_samp_factor))
965    );
966    assert_eq!(
967        unsafe { &(*(::std::ptr::null::<jpeg_component_info>())).v_samp_factor as *const _ as usize },
968        12usize,
969        concat!("Offset of field: ", stringify!(jpeg_component_info), "::", stringify!(v_samp_factor))
970    );
971    assert_eq!(
972        unsafe { &(*(::std::ptr::null::<jpeg_component_info>())).quant_tbl_no as *const _ as usize },
973        16usize,
974        concat!("Offset of field: ", stringify!(jpeg_component_info), "::", stringify!(quant_tbl_no))
975    );
976    assert_eq!(
977        unsafe { &(*(::std::ptr::null::<jpeg_component_info>())).dc_tbl_no as *const _ as usize },
978        20usize,
979        concat!("Offset of field: ", stringify!(jpeg_component_info), "::", stringify!(dc_tbl_no))
980    );
981    assert_eq!(
982        unsafe { &(*(::std::ptr::null::<jpeg_component_info>())).ac_tbl_no as *const _ as usize },
983        24usize,
984        concat!("Offset of field: ", stringify!(jpeg_component_info), "::", stringify!(ac_tbl_no))
985    );
986    assert_eq!(
987        unsafe { &(*(::std::ptr::null::<jpeg_component_info>())).width_in_blocks as *const _ as usize },
988        28usize,
989        concat!("Offset of field: ", stringify!(jpeg_component_info), "::", stringify!(width_in_blocks))
990    );
991    assert_eq!(
992        unsafe { &(*(::std::ptr::null::<jpeg_component_info>())).height_in_blocks as *const _ as usize },
993        32usize,
994        concat!("Offset of field: ", stringify!(jpeg_component_info), "::", stringify!(height_in_blocks))
995    );
996}
997
998#[test]
999#[cfg(target_pointer_width = "32")]
1000fn bindgen_test_layout_jpeg_scan_info() {
1001    assert_eq!(::std::mem::size_of::<jpeg_scan_info>(), 36usize, concat!("Size of: ", stringify!(jpeg_scan_info)));
1002    assert_eq!(::std::mem::align_of::<jpeg_scan_info>(), 4usize, concat!("Alignment of ", stringify!(jpeg_scan_info)));
1003    assert_eq!(
1004        unsafe { &(*(::std::ptr::null::<jpeg_scan_info>())).comps_in_scan as *const _ as usize },
1005        0usize,
1006        concat!("Offset of field: ", stringify!(jpeg_scan_info), "::", stringify!(comps_in_scan))
1007    );
1008    assert_eq!(
1009        unsafe { &(*(::std::ptr::null::<jpeg_scan_info>())).component_index as *const _ as usize },
1010        4usize,
1011        concat!("Offset of field: ", stringify!(jpeg_scan_info), "::", stringify!(component_index))
1012    );
1013    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_scan_info>())).Ss as *const _ as usize }, 20usize, concat!("Offset of field: ", stringify!(jpeg_scan_info), "::", stringify!(Ss)));
1014    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_scan_info>())).Se as *const _ as usize }, 24usize, concat!("Offset of field: ", stringify!(jpeg_scan_info), "::", stringify!(Se)));
1015    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_scan_info>())).Ah as *const _ as usize }, 28usize, concat!("Offset of field: ", stringify!(jpeg_scan_info), "::", stringify!(Ah)));
1016    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_scan_info>())).Al as *const _ as usize }, 32usize, concat!("Offset of field: ", stringify!(jpeg_scan_info), "::", stringify!(Al)));
1017}
1018
1019#[test]
1020#[cfg(target_pointer_width = "32")]
1021fn bindgen_test_layout_jpeg_marker_struct() {
1022    assert_eq!(::std::mem::size_of::<jpeg_marker_struct>(), 20usize, concat!("Size of: ", stringify!(jpeg_marker_struct)));
1023    assert_eq!(::std::mem::align_of::<jpeg_marker_struct>(), 4usize, concat!("Alignment of ", stringify!(jpeg_marker_struct)));
1024    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_marker_struct>())).next as *const _ as usize }, 0usize, concat!("Offset of field: ", stringify!(jpeg_marker_struct), "::", stringify!(next)));
1025    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_marker_struct>())).marker as *const _ as usize }, 4usize, concat!("Offset of field: ", stringify!(jpeg_marker_struct), "::", stringify!(marker)));
1026    assert_eq!(
1027        unsafe { &(*(::std::ptr::null::<jpeg_marker_struct>())).original_length as *const _ as usize },
1028        8usize,
1029        concat!("Offset of field: ", stringify!(jpeg_marker_struct), "::", stringify!(original_length))
1030    );
1031    assert_eq!(
1032        unsafe { &(*(::std::ptr::null::<jpeg_marker_struct>())).data_length as *const _ as usize },
1033        12usize,
1034        concat!("Offset of field: ", stringify!(jpeg_marker_struct), "::", stringify!(data_length))
1035    );
1036    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_marker_struct>())).data as *const _ as usize }, 16usize, concat!("Offset of field: ", stringify!(jpeg_marker_struct), "::", stringify!(data)));
1037}
1038
1039#[test]
1040#[cfg(target_pointer_width = "32")]
1041fn bindgen_test_layout_jpeg_common_struct() {
1042    assert_eq!(::std::mem::size_of::<jpeg_common_struct>(), 24usize, concat!("Size of: ", stringify!(jpeg_common_struct)));
1043    assert_eq!(::std::mem::align_of::<jpeg_common_struct>(), 4usize, concat!("Alignment of ", stringify!(jpeg_common_struct)));
1044    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_common_struct>())).err as *const _ as usize }, 0usize, concat!("Offset of field: ", stringify!(jpeg_common_struct), "::", stringify!(err)));
1045    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_common_struct>())).mem as *const _ as usize }, 4usize, concat!("Offset of field: ", stringify!(jpeg_common_struct), "::", stringify!(mem)));
1046    assert_eq!(
1047        unsafe { &(*(::std::ptr::null::<jpeg_common_struct>())).progress as *const _ as usize },
1048        8usize,
1049        concat!("Offset of field: ", stringify!(jpeg_common_struct), "::", stringify!(progress))
1050    );
1051    assert_eq!(
1052        unsafe { &(*(::std::ptr::null::<jpeg_common_struct>())).client_data as *const _ as usize },
1053        12usize,
1054        concat!("Offset of field: ", stringify!(jpeg_common_struct), "::", stringify!(client_data))
1055    );
1056    assert_eq!(
1057        unsafe { &(*(::std::ptr::null::<jpeg_common_struct>())).is_decompressor as *const _ as usize },
1058        16usize,
1059        concat!("Offset of field: ", stringify!(jpeg_common_struct), "::", stringify!(is_decompressor))
1060    );
1061    assert_eq!(
1062        unsafe { &(*(::std::ptr::null::<jpeg_common_struct>())).global_state as *const _ as usize },
1063        20usize,
1064        concat!("Offset of field: ", stringify!(jpeg_common_struct), "::", stringify!(global_state))
1065    );
1066}
1067
1068#[test]
1069#[cfg(target_pointer_width = "32")]
1070fn bindgen_test_layout_jpeg_compress_struct() {
1071    assert_eq!(::std::mem::align_of::<jpeg_compress_struct>(), 4usize, concat!("Alignment of ", stringify!(jpeg_compress_struct)));
1072    assert_eq!(
1073        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).common.err as *const _ as usize },
1074        0usize,
1075        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(err))
1076    );
1077    assert_eq!(
1078        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).common.mem as *const _ as usize },
1079        4usize,
1080        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(mem))
1081    );
1082    assert_eq!(
1083        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).common.progress as *const _ as usize },
1084        8usize,
1085        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(progress))
1086    );
1087    assert_eq!(
1088        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).common.client_data as *const _ as usize },
1089        12usize,
1090        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(client_data))
1091    );
1092    assert_eq!(
1093        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).common.is_decompressor as *const _ as usize },
1094        16usize,
1095        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(is_decompressor))
1096    );
1097    assert_eq!(
1098        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).common.global_state as *const _ as usize },
1099        20usize,
1100        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(global_state))
1101    );
1102    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).dest as *const _ as usize }, 24usize, concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(dest)));
1103    assert_eq!(
1104        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).image_width as *const _ as usize },
1105        28usize,
1106        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(image_width))
1107    );
1108    assert_eq!(
1109        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).image_height as *const _ as usize },
1110        32usize,
1111        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(image_height))
1112    );
1113    assert_eq!(
1114        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).input_components as *const _ as usize },
1115        36usize,
1116        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(input_components))
1117    );
1118    assert_eq!(
1119        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).in_color_space as *const _ as usize },
1120        40usize,
1121        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(in_color_space))
1122    );
1123    assert_eq!(
1124        unsafe { &(*(::std::ptr::null::<jpeg_compress_struct>())).input_gamma as *const _ as usize },
1125        44usize,
1126        concat!("Offset of field: ", stringify!(jpeg_compress_struct), "::", stringify!(input_gamma))
1127    );
1128}
1129
1130#[test]
1131#[cfg(target_pointer_width = "32")]
1132fn bindgen_test_layout_jpeg_decompress_struct() {
1133    assert_eq!(::std::mem::align_of::<jpeg_decompress_struct>(), 4usize, concat!("Alignment of ", stringify!(jpeg_decompress_struct)));
1134    assert_eq!(
1135        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).common.err as *const _ as usize },
1136        0usize,
1137        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(err))
1138    );
1139    assert_eq!(
1140        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).common.mem as *const _ as usize },
1141        4usize,
1142        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(mem))
1143    );
1144    assert_eq!(
1145        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).common.progress as *const _ as usize },
1146        8usize,
1147        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(progress))
1148    );
1149    assert_eq!(
1150        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).common.client_data as *const _ as usize },
1151        12usize,
1152        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(client_data))
1153    );
1154    assert_eq!(
1155        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).common.is_decompressor as *const _ as usize },
1156        16usize,
1157        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(is_decompressor))
1158    );
1159    assert_eq!(
1160        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).common.global_state as *const _ as usize },
1161        20usize,
1162        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(global_state))
1163    );
1164    assert_eq!(
1165        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).src as *const _ as usize },
1166        24usize,
1167        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(src))
1168    );
1169    assert_eq!(
1170        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).image_width as *const _ as usize },
1171        28usize,
1172        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(image_width))
1173    );
1174    assert_eq!(
1175        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).image_height as *const _ as usize },
1176        32usize,
1177        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(image_height))
1178    );
1179    assert_eq!(
1180        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).num_components as *const _ as usize },
1181        36usize,
1182        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(num_components))
1183    );
1184    assert_eq!(
1185        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).jpeg_color_space as *const _ as usize },
1186        40usize,
1187        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(jpeg_color_space))
1188    );
1189    assert_eq!(
1190        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).out_color_space as *const _ as usize },
1191        44usize,
1192        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(out_color_space))
1193    );
1194    assert_eq!(
1195        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).scale_num as *const _ as usize },
1196        48usize,
1197        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(scale_num))
1198    );
1199    assert_eq!(
1200        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).scale_denom as *const _ as usize },
1201        52usize,
1202        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(scale_denom))
1203    );
1204    assert_eq!(
1205        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).output_gamma as *const _ as usize },
1206        56usize,
1207        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(output_gamma))
1208    );
1209    assert_eq!(
1210        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).buffered_image as *const _ as usize },
1211        64usize,
1212        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(buffered_image))
1213    );
1214    assert_eq!(
1215        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).raw_data_out as *const _ as usize },
1216        68usize,
1217        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(raw_data_out))
1218    );
1219    assert_eq!(
1220        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).dct_method as *const _ as usize },
1221        72usize,
1222        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(dct_method))
1223    );
1224    assert_eq!(
1225        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).do_fancy_upsampling as *const _ as usize },
1226        76usize,
1227        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(do_fancy_upsampling))
1228    );
1229    assert_eq!(
1230        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).do_block_smoothing as *const _ as usize },
1231        80usize,
1232        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(do_block_smoothing))
1233    );
1234    assert_eq!(
1235        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).quantize_colors as *const _ as usize },
1236        84usize,
1237        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(quantize_colors))
1238    );
1239    assert_eq!(
1240        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).dither_mode as *const _ as usize },
1241        88usize,
1242        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(dither_mode))
1243    );
1244    assert_eq!(
1245        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).two_pass_quantize as *const _ as usize },
1246        92usize,
1247        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(two_pass_quantize))
1248    );
1249    assert_eq!(
1250        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).desired_number_of_colors as *const _ as usize },
1251        96usize,
1252        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(desired_number_of_colors))
1253    );
1254    assert_eq!(
1255        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).enable_1pass_quant as *const _ as usize },
1256        100usize,
1257        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(enable_1pass_quant))
1258    );
1259    assert_eq!(
1260        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).enable_external_quant as *const _ as usize },
1261        104usize,
1262        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(enable_external_quant))
1263    );
1264    assert_eq!(
1265        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).enable_2pass_quant as *const _ as usize },
1266        108usize,
1267        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(enable_2pass_quant))
1268    );
1269    assert_eq!(
1270        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).output_width as *const _ as usize },
1271        112usize,
1272        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(output_width))
1273    );
1274    assert_eq!(
1275        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).output_height as *const _ as usize },
1276        116usize,
1277        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(output_height))
1278    );
1279    assert_eq!(
1280        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).out_color_components as *const _ as usize },
1281        120usize,
1282        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(out_color_components))
1283    );
1284    assert_eq!(
1285        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).output_components as *const _ as usize },
1286        124usize,
1287        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(output_components))
1288    );
1289    assert_eq!(
1290        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).rec_outbuf_height as *const _ as usize },
1291        128usize,
1292        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(rec_outbuf_height))
1293    );
1294    assert_eq!(
1295        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).actual_number_of_colors as *const _ as usize },
1296        132usize,
1297        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(actual_number_of_colors))
1298    );
1299    assert_eq!(
1300        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).colormap as *const _ as usize },
1301        136usize,
1302        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(colormap))
1303    );
1304    assert_eq!(
1305        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).output_scanline as *const _ as usize },
1306        140usize,
1307        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(output_scanline))
1308    );
1309    assert_eq!(
1310        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).input_scan_number as *const _ as usize },
1311        144usize,
1312        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(input_scan_number))
1313    );
1314    assert_eq!(
1315        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).input_iMCU_row as *const _ as usize },
1316        148usize,
1317        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(input_iMCU_row))
1318    );
1319    assert_eq!(
1320        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).output_scan_number as *const _ as usize },
1321        152usize,
1322        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(output_scan_number))
1323    );
1324    assert_eq!(
1325        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).output_iMCU_row as *const _ as usize },
1326        156usize,
1327        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(output_iMCU_row))
1328    );
1329    assert_eq!(
1330        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).coef_bits as *const _ as usize },
1331        160usize,
1332        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(coef_bits))
1333    );
1334    assert_eq!(
1335        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).quant_tbl_ptrs as *const _ as usize },
1336        164usize,
1337        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(quant_tbl_ptrs))
1338    );
1339    assert_eq!(
1340        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).dc_huff_tbl_ptrs as *const _ as usize },
1341        180usize,
1342        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(dc_huff_tbl_ptrs))
1343    );
1344    assert_eq!(
1345        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).ac_huff_tbl_ptrs as *const _ as usize },
1346        196usize,
1347        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(ac_huff_tbl_ptrs))
1348    );
1349    assert_eq!(
1350        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).data_precision as *const _ as usize },
1351        212usize,
1352        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(data_precision))
1353    );
1354    assert_eq!(
1355        unsafe { &(*(::std::ptr::null::<jpeg_decompress_struct>())).comp_info as *const _ as usize },
1356        216usize,
1357        concat!("Offset of field: ", stringify!(jpeg_decompress_struct), "::", stringify!(comp_info))
1358    );
1359}
1360
1361#[test]
1362#[cfg(target_pointer_width = "32")]
1363fn bindgen_test_layout_jpeg_error_mgr() {
1364    assert_eq!(::std::mem::size_of::<jpeg_error_mgr>(), 132usize, concat!("Size of: ", stringify!(jpeg_error_mgr)));
1365    assert_eq!(::std::mem::align_of::<jpeg_error_mgr>(), 4usize, concat!("Alignment of ", stringify!(jpeg_error_mgr)));
1366    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).error_exit as *const _ as usize }, 0usize, concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(error_exit)));
1367    assert_eq!(
1368        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).emit_message as *const _ as usize },
1369        4usize,
1370        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(emit_message))
1371    );
1372    assert_eq!(
1373        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).output_message as *const _ as usize },
1374        8usize,
1375        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(output_message))
1376    );
1377    assert_eq!(
1378        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).format_message as *const _ as usize },
1379        12usize,
1380        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(format_message))
1381    );
1382    assert_eq!(
1383        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).reset_error_mgr as *const _ as usize },
1384        16usize,
1385        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(reset_error_mgr))
1386    );
1387    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).msg_code as *const _ as usize }, 20usize, concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(msg_code)));
1388    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).msg_parm as *const _ as usize }, 24usize, concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(msg_parm)));
1389    assert_eq!(
1390        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).trace_level as *const _ as usize },
1391        104usize,
1392        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(trace_level))
1393    );
1394    assert_eq!(
1395        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).num_warnings as *const _ as usize },
1396        108usize,
1397        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(num_warnings))
1398    );
1399    assert_eq!(
1400        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).jpeg_message_table as *const _ as usize },
1401        112usize,
1402        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(jpeg_message_table))
1403    );
1404    assert_eq!(
1405        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).last_jpeg_message as *const _ as usize },
1406        116usize,
1407        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(last_jpeg_message))
1408    );
1409    assert_eq!(
1410        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).addon_message_table as *const _ as usize },
1411        120usize,
1412        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(addon_message_table))
1413    );
1414    assert_eq!(
1415        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).first_addon_message as *const _ as usize },
1416        124usize,
1417        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(first_addon_message))
1418    );
1419    assert_eq!(
1420        unsafe { &(*(::std::ptr::null::<jpeg_error_mgr>())).last_addon_message as *const _ as usize },
1421        128usize,
1422        concat!("Offset of field: ", stringify!(jpeg_error_mgr), "::", stringify!(last_addon_message))
1423    );
1424}
1425
1426#[test]
1427#[cfg(target_pointer_width = "32")]
1428fn bindgen_test_layout_jpeg_progress_mgr() {
1429    assert_eq!(::std::mem::size_of::<jpeg_progress_mgr>(), 20usize, concat!("Size of: ", stringify!(jpeg_progress_mgr)));
1430    assert_eq!(::std::mem::align_of::<jpeg_progress_mgr>(), 4usize, concat!("Alignment of ", stringify!(jpeg_progress_mgr)));
1431    assert_eq!(
1432        unsafe { &(*(::std::ptr::null::<jpeg_progress_mgr>())).progress_monitor as *const _ as usize },
1433        0usize,
1434        concat!("Offset of field: ", stringify!(jpeg_progress_mgr), "::", stringify!(progress_monitor))
1435    );
1436    assert_eq!(
1437        unsafe { &(*(::std::ptr::null::<jpeg_progress_mgr>())).pass_counter as *const _ as usize },
1438        4usize,
1439        concat!("Offset of field: ", stringify!(jpeg_progress_mgr), "::", stringify!(pass_counter))
1440    );
1441    assert_eq!(
1442        unsafe { &(*(::std::ptr::null::<jpeg_progress_mgr>())).pass_limit as *const _ as usize },
1443        8usize,
1444        concat!("Offset of field: ", stringify!(jpeg_progress_mgr), "::", stringify!(pass_limit))
1445    );
1446    assert_eq!(
1447        unsafe { &(*(::std::ptr::null::<jpeg_progress_mgr>())).completed_passes as *const _ as usize },
1448        12usize,
1449        concat!("Offset of field: ", stringify!(jpeg_progress_mgr), "::", stringify!(completed_passes))
1450    );
1451    assert_eq!(
1452        unsafe { &(*(::std::ptr::null::<jpeg_progress_mgr>())).total_passes as *const _ as usize },
1453        16usize,
1454        concat!("Offset of field: ", stringify!(jpeg_progress_mgr), "::", stringify!(total_passes))
1455    );
1456}
1457
1458#[test]
1459#[cfg(target_pointer_width = "32")]
1460fn bindgen_test_layout_jpeg_destination_mgr() {
1461    assert_eq!(::std::mem::size_of::<jpeg_destination_mgr>(), 20usize, concat!("Size of: ", stringify!(jpeg_destination_mgr)));
1462    assert_eq!(::std::mem::align_of::<jpeg_destination_mgr>(), 4usize, concat!("Alignment of ", stringify!(jpeg_destination_mgr)));
1463    assert_eq!(
1464        unsafe { &(*(::std::ptr::null::<jpeg_destination_mgr>())).next_output_byte as *const _ as usize },
1465        0usize,
1466        concat!("Offset of field: ", stringify!(jpeg_destination_mgr), "::", stringify!(next_output_byte))
1467    );
1468    assert_eq!(
1469        unsafe { &(*(::std::ptr::null::<jpeg_destination_mgr>())).free_in_buffer as *const _ as usize },
1470        4usize,
1471        concat!("Offset of field: ", stringify!(jpeg_destination_mgr), "::", stringify!(free_in_buffer))
1472    );
1473    assert_eq!(
1474        unsafe { &(*(::std::ptr::null::<jpeg_destination_mgr>())).init_destination as *const _ as usize },
1475        8usize,
1476        concat!("Offset of field: ", stringify!(jpeg_destination_mgr), "::", stringify!(init_destination))
1477    );
1478    assert_eq!(
1479        unsafe { &(*(::std::ptr::null::<jpeg_destination_mgr>())).empty_output_buffer as *const _ as usize },
1480        12usize,
1481        concat!("Offset of field: ", stringify!(jpeg_destination_mgr), "::", stringify!(empty_output_buffer))
1482    );
1483    assert_eq!(
1484        unsafe { &(*(::std::ptr::null::<jpeg_destination_mgr>())).term_destination as *const _ as usize },
1485        16usize,
1486        concat!("Offset of field: ", stringify!(jpeg_destination_mgr), "::", stringify!(term_destination))
1487    );
1488}
1489
1490#[test]
1491#[cfg(target_pointer_width = "32")]
1492fn bindgen_test_layout_jpeg_source_mgr() {
1493    assert_eq!(::std::mem::size_of::<jpeg_source_mgr>(), 28usize, concat!("Size of: ", stringify!(jpeg_source_mgr)));
1494    assert_eq!(::std::mem::align_of::<jpeg_source_mgr>(), 4usize, concat!("Alignment of ", stringify!(jpeg_source_mgr)));
1495    assert_eq!(
1496        unsafe { &(*(::std::ptr::null::<jpeg_source_mgr>())).next_input_byte as *const _ as usize },
1497        0usize,
1498        concat!("Offset of field: ", stringify!(jpeg_source_mgr), "::", stringify!(next_input_byte))
1499    );
1500    assert_eq!(
1501        unsafe { &(*(::std::ptr::null::<jpeg_source_mgr>())).bytes_in_buffer as *const _ as usize },
1502        4usize,
1503        concat!("Offset of field: ", stringify!(jpeg_source_mgr), "::", stringify!(bytes_in_buffer))
1504    );
1505    assert_eq!(
1506        unsafe { &(*(::std::ptr::null::<jpeg_source_mgr>())).init_source as *const _ as usize },
1507        8usize,
1508        concat!("Offset of field: ", stringify!(jpeg_source_mgr), "::", stringify!(init_source))
1509    );
1510    assert_eq!(
1511        unsafe { &(*(::std::ptr::null::<jpeg_source_mgr>())).fill_input_buffer as *const _ as usize },
1512        12usize,
1513        concat!("Offset of field: ", stringify!(jpeg_source_mgr), "::", stringify!(fill_input_buffer))
1514    );
1515    assert_eq!(
1516        unsafe { &(*(::std::ptr::null::<jpeg_source_mgr>())).skip_input_data as *const _ as usize },
1517        16usize,
1518        concat!("Offset of field: ", stringify!(jpeg_source_mgr), "::", stringify!(skip_input_data))
1519    );
1520    assert_eq!(
1521        unsafe { &(*(::std::ptr::null::<jpeg_source_mgr>())).resync_to_restart as *const _ as usize },
1522        20usize,
1523        concat!("Offset of field: ", stringify!(jpeg_source_mgr), "::", stringify!(resync_to_restart))
1524    );
1525    assert_eq!(
1526        unsafe { &(*(::std::ptr::null::<jpeg_source_mgr>())).term_source as *const _ as usize },
1527        24usize,
1528        concat!("Offset of field: ", stringify!(jpeg_source_mgr), "::", stringify!(term_source))
1529    );
1530}
1531
1532#[test]
1533#[cfg(target_pointer_width = "32")]
1534fn bindgen_test_layout_jpeg_memory_mgr() {
1535    assert_eq!(::std::mem::size_of::<jpeg_memory_mgr>(), 52usize, concat!("Size of: ", stringify!(jpeg_memory_mgr)));
1536    assert_eq!(::std::mem::align_of::<jpeg_memory_mgr>(), 4usize, concat!("Alignment of ", stringify!(jpeg_memory_mgr)));
1537    assert_eq!(
1538        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).alloc_small as *const _ as usize },
1539        0usize,
1540        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(alloc_small))
1541    );
1542    assert_eq!(
1543        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).alloc_large as *const _ as usize },
1544        4usize,
1545        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(alloc_large))
1546    );
1547    assert_eq!(
1548        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).alloc_sarray as *const _ as usize },
1549        8usize,
1550        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(alloc_sarray))
1551    );
1552    assert_eq!(
1553        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).alloc_barray as *const _ as usize },
1554        12usize,
1555        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(alloc_barray))
1556    );
1557    assert_eq!(
1558        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).request_virt_sarray as *const _ as usize },
1559        16usize,
1560        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(request_virt_sarray))
1561    );
1562    assert_eq!(
1563        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).request_virt_barray as *const _ as usize },
1564        20usize,
1565        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(request_virt_barray))
1566    );
1567    assert_eq!(
1568        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).realize_virt_arrays as *const _ as usize },
1569        24usize,
1570        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(realize_virt_arrays))
1571    );
1572    assert_eq!(
1573        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).access_virt_sarray as *const _ as usize },
1574        28usize,
1575        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(access_virt_sarray))
1576    );
1577    assert_eq!(
1578        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).access_virt_barray as *const _ as usize },
1579        32usize,
1580        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(access_virt_barray))
1581    );
1582    assert_eq!(unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).free_pool as *const _ as usize }, 36usize, concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(free_pool)));
1583    assert_eq!(
1584        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).self_destruct as *const _ as usize },
1585        40usize,
1586        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(self_destruct))
1587    );
1588    assert_eq!(
1589        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).max_memory_to_use as *const _ as usize },
1590        44usize,
1591        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(max_memory_to_use))
1592    );
1593    assert_eq!(
1594        unsafe { &(*(::std::ptr::null::<jpeg_memory_mgr>())).max_alloc_chunk as *const _ as usize },
1595        48usize,
1596        concat!("Offset of field: ", stringify!(jpeg_memory_mgr), "::", stringify!(max_alloc_chunk))
1597    );
1598}
1599
1600#[test]
1601fn all_links() {
1602    let _x = [
1603        jpeg_std_error as *const c_void,
1604        jpeg_CreateCompress as *const c_void,
1605        jpeg_CreateDecompress as *const c_void,
1606        jpeg_destroy_compress as *const c_void,
1607        jpeg_destroy_decompress as *const c_void,
1608        jpeg_stdio_dest as *const c_void,
1609        jpeg_stdio_src as *const c_void,
1610        jpeg_mem_dest as *const c_void,
1611        jpeg_mem_src as *const c_void,
1612        jpeg_set_defaults as *const c_void,
1613        jpeg_set_colorspace as *const c_void,
1614        jpeg_default_colorspace as *const c_void,
1615        jpeg_set_quality as *const c_void,
1616        jpeg_set_linear_quality as *const c_void,
1617        jpeg_add_quant_table as *const c_void,
1618        jpeg_quality_scaling as *const c_void,
1619        jpeg_float_quality_scaling as *const c_void,
1620        jpeg_simple_progression as *const c_void,
1621        jpeg_suppress_tables as *const c_void,
1622        jpeg_alloc_quant_table as *const c_void,
1623        jpeg_alloc_huff_table as *const c_void,
1624        jpeg_start_compress as *const c_void,
1625        jpeg_write_scanlines as *const c_void,
1626        jpeg_finish_compress as *const c_void,
1627        jpeg_write_raw_data as *const c_void,
1628        jpeg_write_marker as *const c_void,
1629        jpeg_write_m_header as *const c_void,
1630        jpeg_write_m_byte as *const c_void,
1631        jpeg_write_tables as *const c_void,
1632        jpeg_read_header as *const c_void,
1633        jpeg_start_decompress as *const c_void,
1634        jpeg_read_scanlines as *const c_void,
1635        jpeg_finish_decompress as *const c_void,
1636        jpeg_read_raw_data as *const c_void,
1637        #[cfg(feature = "icc_io")] {
1638            jpeg_read_icc_profile as *const c_void
1639        },
1640        #[cfg(feature = "icc_io")] {
1641            jpeg_write_icc_profile as *const c_void
1642        },
1643        jpeg_skip_scanlines as *const c_void,
1644        jpeg_crop_scanline as *const c_void,
1645        jpeg_has_multiple_scans as *const c_void,
1646        jpeg_start_output as *const c_void,
1647        jpeg_finish_output as *const c_void,
1648        jpeg_input_complete as *const c_void,
1649        jpeg_consume_input as *const c_void,
1650        #[cfg(feature = "jpeg70_abi")] {
1651            jpeg_calc_jpeg_dimensions as *const c_void
1652        },
1653        jpeg_calc_output_dimensions as *const c_void,
1654        jpeg_save_markers as *const c_void,
1655        jpeg_set_marker_processor as *const c_void,
1656        jpeg_read_coefficients as *const c_void,
1657        jpeg_write_coefficients as *const c_void,
1658        jpeg_copy_critical_parameters as *const c_void,
1659        jpeg_abort_compress as *const c_void,
1660        jpeg_abort_decompress as *const c_void,
1661        jpeg_resync_to_restart as *const c_void,
1662        jpeg_c_bool_param_supported as *const c_void,
1663        jpeg_c_set_bool_param as *const c_void,
1664        jpeg_c_get_bool_param as *const c_void,
1665        jpeg_c_float_param_supported as *const c_void,
1666        jpeg_abort as *const c_void,
1667        jpeg_destroy as *const c_void,
1668        jpeg_c_set_float_param as *const c_void,
1669        jpeg_c_get_float_param as *const c_void,
1670        jpeg_c_int_param_supported as *const c_void,
1671        jpeg_c_set_int_param as *const c_void,
1672        jpeg_c_get_int_param as *const c_void,
1673        jpeg_set_idct_method_selector as *const c_void,
1674    ];
1675}