< prev index next >

modules/javafx.graphics/src/main/native-iio/libjpeg7/jpeglib.h

Print this page

        

@@ -1,10 +1,10 @@
 /*
  * jpeglib.h
  *
  * Copyright (C) 1991-1998, Thomas G. Lane.
- * Modified 2002-2009 by Guido Vollbeding.
+ * Modified 2002-2017 by Guido Vollbeding.
  * This file is part of the Independent JPEG Group's software.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file defines the application interface for the JPEG library.
  * Most applications using the library need only include this file,

@@ -31,23 +31,25 @@
 #ifndef DONT_USE_EXTERN_C
 extern "C" {
 #endif
 #endif
 
-/* Version ID for the JPEG library.
- * Might be useful for tests like "#if JPEG_LIB_VERSION >= 70".
+/* Version IDs for the JPEG library.
+ * Might be useful for tests like "#if JPEG_LIB_VERSION >= 90".
  */
 
-#define JPEG_LIB_VERSION  70    /* Version 7.0 */
+#define JPEG_LIB_VERSION        90      /* Compatibility version 9.0 */
+#define JPEG_LIB_VERSION_MAJOR  9
+#define JPEG_LIB_VERSION_MINOR  3
 
 
 /* Various constants determining the sizes of things.
- * All of these are specified by the JPEG standard, so don't change them
- * if you want to be compatible.
+ * All of these are specified by the JPEG standard,
+ * so don't change them if you want to be compatible.
  */
 
-#define DCTSIZE             8   /* The basic DCT block is 8x8 samples */
+#define DCTSIZE             8   /* The basic DCT block is 8x8 coefficients */
 #define DCTSIZE2            64  /* DCTSIZE squared; # of elements in a block */
 #define NUM_QUANT_TBLS      4   /* Quantization tables are numbered 0..3 */
 #define NUM_HUFF_TBLS       4   /* Huffman tables are numbered 0..3 */
 #define NUM_ARITH_TBLS      16  /* Arith-coding tables are numbered 0..15 */
 #define MAX_COMPS_IN_SCAN   4   /* JPEG limit on # of components in one scan */

@@ -153,27 +155,32 @@
   int DCT_h_scaled_size;
   int DCT_v_scaled_size;
   /* The downsampled dimensions are the component's actual, unpadded number
    * of samples at the main buffer (preprocessing/compression interface);
    * DCT scaling is included, so
-   * downsampled_width = ceil(image_width * Hi/Hmax * DCT_h_scaled_size/DCTSIZE)
+   * downsampled_width =
+   *   ceil(image_width * Hi/Hmax * DCT_h_scaled_size/block_size)
    * and similarly for height.
    */
   JDIMENSION downsampled_width;  /* actual width in samples */
   JDIMENSION downsampled_height; /* actual height in samples */
-  /* This flag is used only for decompression.  In cases where some of the
-   * components will be ignored (eg grayscale output from YCbCr image),
-   * we can skip most computations for the unused components.
+  /* For decompression, in cases where some of the components will be
+   * ignored (eg grayscale output from YCbCr image), we can skip most
+   * computations for the unused components.
+   * For compression, some of the components will need further quantization
+   * scale by factor of 2 after DCT (eg BG_YCC output from normal RGB input).
+   * The field is first set TRUE for decompression, FALSE for compression
+   * in initial_setup, and then adapted in color conversion setup.
    */
-  boolean component_needed;     /* do we need the value of this component? */
+  boolean component_needed;
 
   /* These values are computed before starting a scan of the component. */
   /* The decompressor output side may not use these variables. */
   int MCU_width;                /* number of blocks per MCU, horizontally */
   int MCU_height;               /* number of blocks per MCU, vertically */
   int MCU_blocks;               /* MCU_width * MCU_height */
-  int MCU_sample_width;         /* MCU width in samples, MCU_width*DCT_scaled_size */
+  int MCU_sample_width; /* MCU width in samples: MCU_width * DCT_h_scaled_size */
   int last_col_width;           /* # of non-dummy blocks across in last MCU */
   int last_row_height;          /* # of non-dummy blocks down in last MCU */
 
   /* Saved quantization table for component; NULL if none yet saved.
    * See jdinput.c comments about the need for this information.

@@ -211,16 +218,25 @@
 /* Known color spaces. */
 
 typedef enum {
         JCS_UNKNOWN,            /* error/unspecified */
         JCS_GRAYSCALE,          /* monochrome */
-        JCS_RGB,                /* red/green/blue */
-        JCS_YCbCr,              /* Y/Cb/Cr (also known as YUV) */
+        JCS_RGB,                /* red/green/blue, standard RGB (sRGB) */
+        JCS_YCbCr,              /* Y/Cb/Cr (also known as YUV), standard YCC */
         JCS_CMYK,               /* C/M/Y/K */
-        JCS_YCCK                /* Y/Cb/Cr/K */
+        JCS_YCCK,               /* Y/Cb/Cr/K */
+        JCS_BG_RGB,             /* big gamut red/green/blue, bg-sRGB */
+        JCS_BG_YCC              /* big gamut Y/Cb/Cr, bg-sYCC */
 } J_COLOR_SPACE;
 
+/* Supported color transforms. */
+
+typedef enum {
+        JCT_NONE           = 0,
+        JCT_SUBTRACT_GREEN = 1
+} J_COLOR_TRANSFORM;
+
 /* DCT/IDCT algorithm options. */
 
 typedef enum {
         JDCT_ISLOW,             /* slow but accurate integer algorithm */
         JDCT_IFAST,             /* faster, less accurate integer method */

@@ -366,10 +382,13 @@
   UINT8 density_unit;           /* JFIF code for pixel size units */
   UINT16 X_density;             /* Horizontal pixel density */
   UINT16 Y_density;             /* Vertical pixel density */
   boolean write_Adobe_marker;   /* should an Adobe marker be written? */
 
+  J_COLOR_TRANSFORM color_transform;
+  /* Color transform identifier, writes LSE marker if nonzero */
+
   /* State variable: index of next scanline to be written to
    * jpeg_write_scanlines().  Application may use this to control its
    * processing loop, e.g., "while (next_scanline < image_height)".
    */
 

@@ -390,12 +409,12 @@
   int min_DCT_v_scaled_size;    /* smallest DCT_v_scaled_size of any component */
 
   JDIMENSION total_iMCU_rows;   /* # of iMCU rows to be input to coef ctlr */
   /* The coefficient controller receives data in units of MCU rows as defined
    * for fully interleaved scans (whether the JPEG file is interleaved or not).
-   * There are v_samp_factor * DCTSIZE sample rows of each component in an
-   * "iMCU" (interleaved MCU) row.
+   * There are v_samp_factor * DCT_v_scaled_size sample rows of each component
+   * in an "iMCU" (interleaved MCU) row.
    */
 
   /*
    * These fields are valid during any one scan.
    * They describe the components and MCUs actually appearing in the scan.

@@ -412,10 +431,14 @@
   /* MCU_membership[i] is index in cur_comp_info of component owning */
   /* i'th block in an MCU */
 
   int Ss, Se, Ah, Al;           /* progressive JPEG parameters for scan */
 
+  int block_size;               /* the basic DCT block size: 1..16 */
+  const int * natural_order;    /* natural-order position array */
+  int lim_Se;                   /* min( Se, DCTSIZE2-1 ) */
+
   /*
    * Links to compression subobjects (methods and private variables of modules)
    */
   struct jpeg_comp_master * master;
   struct jpeg_c_main_controller * main;

@@ -558,10 +581,11 @@
   int data_precision;           /* bits of precision in image data */
 
   jpeg_component_info * comp_info;
   /* comp_info[i] describes component that appears i'th in SOF */
 
+  boolean is_baseline;          /* TRUE if Baseline SOF0 encountered */
   boolean progressive_mode;     /* TRUE if SOFn specifies progressive mode */
   boolean arith_code;           /* TRUE=arithmetic coding, FALSE=Huffman */
 
   UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
   UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */

@@ -580,10 +604,13 @@
   UINT16 X_density;             /* Horizontal pixel density */
   UINT16 Y_density;             /* Vertical pixel density */
   boolean saw_Adobe_marker;     /* TRUE iff an Adobe APP14 marker was found */
   UINT8 Adobe_transform;        /* Color transform code from Adobe marker */
 
+  J_COLOR_TRANSFORM color_transform;
+  /* Color transform identifier derived from LSE marker, otherwise zero */
+
   boolean CCIR601_sampling;     /* TRUE=first samples are cosited */
 
   /* Aside from the specific data retained from APPn markers known to the
    * library, the uninterpreted contents of any or all APPn and COM markers
    * can be saved in a list for examination by the application.

@@ -607,11 +634,11 @@
   /* The coefficient controller's input and output progress is measured in
    * units of "iMCU" (interleaved MCU) rows.  These are the same as MCU rows
    * in fully interleaved JPEG scans, but are used whether the scan is
    * interleaved or not.  We define an iMCU row as v_samp_factor DCT block
    * rows of each component.  Therefore, the IDCT output contains
-   * v_samp_factor*DCT_v_scaled_size sample rows of a component per iMCU row.
+   * v_samp_factor * DCT_v_scaled_size sample rows of a component per iMCU row.
    */
 
   JSAMPLE * sample_range_limit; /* table for fast range-limiting */
 
   /*

@@ -631,10 +658,16 @@
   /* MCU_membership[i] is index in cur_comp_info of component owning */
   /* i'th block in an MCU */
 
   int Ss, Se, Ah, Al;           /* progressive JPEG parameters for scan */
 
+  /* These fields are derived from Se of first SOS marker.
+   */
+  int block_size;               /* the basic DCT block size: 1..16 */
+  const int * natural_order; /* natural-order position array for entropy decode */
+  int lim_Se;                   /* min( Se, DCTSIZE2-1 ) for entropy decode */
+
   /* This field is shared between entropy decoder and marker parser.
    * It is either zero or the code of a JPEG marker that has been
    * read from the data source, but has not yet been processed.
    */
   int unread_marker;

@@ -666,11 +699,11 @@
 
 /* Error handler object */
 
 struct jpeg_error_mgr {
   /* Error exit handler: does not return to caller */
-  JMETHOD(void, error_exit, (j_common_ptr cinfo));
+  JMETHOD(noreturn_t, error_exit, (j_common_ptr cinfo));
   /* Conditionally emit a trace or warning message */
   JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));
   /* Routine that actually outputs a trace or error message */
   JMETHOD(void, output_message, (j_common_ptr cinfo));
   /* Format a message string for the most recent JPEG error or message */

@@ -860,10 +893,12 @@
 #define jpeg_CreateDecompress   jCreaDecompress
 #define jpeg_destroy_compress   jDestCompress
 #define jpeg_destroy_decompress jDestDecompress
 #define jpeg_stdio_dest         jStdDest
 #define jpeg_stdio_src          jStdSrc
+#define jpeg_mem_dest           jMemDest
+#define jpeg_mem_src            jMemSrc
 #define jpeg_set_defaults       jSetDefaults
 #define jpeg_set_colorspace     jSetColorspace
 #define jpeg_default_colorspace jDefColorspace
 #define jpeg_set_quality        jSetQuality
 #define jpeg_set_linear_quality jSetLQuality

@@ -892,10 +927,11 @@
 #define jpeg_start_output       jStrtOutput
 #define jpeg_finish_output      jFinOutput
 #define jpeg_input_complete     jInComplete
 #define jpeg_new_colormap       jNewCMap
 #define jpeg_consume_input      jConsumeInput
+#define jpeg_core_output_dimensions     jCoreDimensions
 #define jpeg_calc_output_dimensions     jCalcDimensions
 #define jpeg_save_markers       jSaveMarkers
 #define jpeg_set_marker_processor       jSetMarker
 #define jpeg_read_coefficients  jReadCoefs
 #define jpeg_write_coefficients jWrtCoefs

@@ -936,10 +972,18 @@
 /* Standard data source and destination managers: stdio streams. */
 /* Caller is responsible for opening the file before and closing after. */
 EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
 EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
 
+/* Data source and destination managers: memory buffers. */
+EXTERN(void) jpeg_mem_dest JPP((j_compress_ptr cinfo,
+                               unsigned char ** outbuffer,
+                               unsigned long * outsize));
+EXTERN(void) jpeg_mem_src JPP((j_decompress_ptr cinfo,
+                              const unsigned char * inbuffer,
+                              unsigned long insize));
+
 /* Default parameter setup for compression */
 EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo));
 /* Compression parameter setup aids */
 EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo,
                                       J_COLOR_SPACE colorspace));

@@ -1030,10 +1074,11 @@
 #define JPEG_REACHED_EOI        2 /* Reached end of image */
 #define JPEG_ROW_COMPLETED      3 /* Completed one iMCU row */
 #define JPEG_SCAN_COMPLETED     4 /* Completed last iMCU row of a scan */
 
 /* Precalculate output dimensions for current decompression parameters. */
+EXTERN(void) jpeg_core_output_dimensions JPP((j_decompress_ptr cinfo));
 EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo));
 
 /* Control saving of COM and APPn markers into marker_list. */
 EXTERN(void) jpeg_save_markers
         JPP((j_decompress_ptr cinfo, int marker_code,
< prev index next >