comparison dwt/internal/image/JPEGDecoder.d @ 246:fd9c62a2998e

Updater SWT 3.4M7 to 3.4
author Frank Benoit <benoit@tionex.de>
date Tue, 01 Jul 2008 10:15:59 +0200
parents 36f5cb12e1a2
children 0e2b4fed7a0f
comparison
equal deleted inserted replaced
245:d8c3d4a4f2b0 246:fd9c62a2998e
241 /* This field is used only during compression. It's initialized false when 241 /* This field is used only during compression. It's initialized false when
242 * the table is created, and set true when it's been output to the file. 242 * the table is created, and set true when it's been output to the file.
243 * You could suppress output of a table by setting this to true. 243 * You could suppress output of a table by setting this to true.
244 * (See jpeg_suppress_tables for an example.) 244 * (See jpeg_suppress_tables for an example.)
245 */ 245 */
246 bool sent_table; /* true when table has been output */ 246 bool sent_table; /* true when table has been output */
247 } 247 }
248 248
249 static final class JHUFF_TBL { 249 static final class JHUFF_TBL {
250 /* These two fields directly represent the contents of a JPEG DHT marker */ 250 /* These two fields directly represent the contents of a JPEG DHT marker */
251 byte[17] bits;// = new byte[17]; /* bits[k] = # of symbols with codes of */ 251 byte[17] bits;// = new byte[17]; /* bits[k] = # of symbols with codes of */
254 /* This field is used only during compression. It's initialized false when 254 /* This field is used only during compression. It's initialized false when
255 * the table is created, and set true when it's been output to the file. 255 * the table is created, and set true when it's been output to the file.
256 * You could suppress output of a table by setting this to true. 256 * You could suppress output of a table by setting this to true.
257 * (See jpeg_suppress_tables for an example.) 257 * (See jpeg_suppress_tables for an example.)
258 */ 258 */
259 bool sent_table; /* true when table has been output */ 259 bool sent_table; /* true when table has been output */
260 } 260 }
261 261
262 static final class bitread_perm_state { /* Bitreading state saved across MCUs */ 262 static final class bitread_perm_state { /* Bitreading state saved across MCUs */
263 int get_buffer; /* current bit-extraction buffer */ 263 int get_buffer; /* current bit-extraction buffer */
264 int bits_left; /* # of unused bits in it */ 264 int bits_left; /* # of unused bits in it */
372 abstract void start_pass (jpeg_decompress_struct cinfo); 372 abstract void start_pass (jpeg_decompress_struct cinfo);
373 abstract bool decode_mcu (jpeg_decompress_struct cinfo, short[][] MCU_data); 373 abstract bool decode_mcu (jpeg_decompress_struct cinfo, short[][] MCU_data);
374 374
375 /* This is here to share code between baseline and progressive decoders; */ 375 /* This is here to share code between baseline and progressive decoders; */
376 /* other modules probably should not use it */ 376 /* other modules probably should not use it */
377 bool insufficient_data; /* set true after emitting warning */ 377 bool insufficient_data; /* set true after emitting warning */
378 378
379 bitread_working_state br_state_local; 379 bitread_working_state br_state_local;
380 savable_state state_local; 380 savable_state state_local;
381 public this(){ 381 public this(){
382 br_state_local = new bitread_working_state(); 382 br_state_local = new bitread_working_state();
1278 entropy.restarts_to_go--; 1278 entropy.restarts_to_go--;
1279 1279
1280 return true; 1280 return true;
1281 } 1281 }
1282 1282
1283 bool decode_mcu_DC_first (jpeg_decompress_struct cinfo, short[][] MCU_data) { 1283 bool decode_mcu_DC_first (jpeg_decompress_struct cinfo, short[][] MCU_data) {
1284 phuff_entropy_decoder entropy = this; 1284 phuff_entropy_decoder entropy = this;
1285 int Al = cinfo.Al; 1285 int Al = cinfo.Al;
1286 int s = 0, r; 1286 int s = 0, r;
1287 int blkn, ci; 1287 int blkn, ci;
1288 short[] block; 1288 short[] block;
1594 int downsampled_height; /* actual height in samples */ 1594 int downsampled_height; /* actual height in samples */
1595 /* This flag is used only for decompression. In cases where some of the 1595 /* This flag is used only for decompression. In cases where some of the
1596 * components will be ignored (eg grayscale output from YCbCr image), 1596 * components will be ignored (eg grayscale output from YCbCr image),
1597 * we can skip most computations for the unused components. 1597 * we can skip most computations for the unused components.
1598 */ 1598 */
1599 bool component_needed; /* do we need the value of this component? */ 1599 bool component_needed; /* do we need the value of this component? */
1600 1600
1601 /* These values are computed before starting a scan of the component. */ 1601 /* These values are computed before starting a scan of the component. */
1602 /* The decompressor output side may not use these variables. */ 1602 /* The decompressor output side may not use these variables. */
1603 int MCU_width; /* number of blocks per MCU, horizontally */ 1603 int MCU_width; /* number of blocks per MCU, horizontally */
1604 int MCU_height; /* number of blocks per MCU, vertically */ 1604 int MCU_height; /* number of blocks per MCU, vertically */
1632 int[][] colorindex; /* Precomputed mapping for speed */ 1632 int[][] colorindex; /* Precomputed mapping for speed */
1633 /* colorindex[i][j] = index of color closest to pixel value j in component i, 1633 /* colorindex[i][j] = index of color closest to pixel value j in component i,
1634 * premultiplied as described above. Since colormap indexes must fit into 1634 * premultiplied as described above. Since colormap indexes must fit into
1635 * JSAMPLEs, the entries of this array will too. 1635 * JSAMPLEs, the entries of this array will too.
1636 */ 1636 */
1637 bool is_padded; /* is the colorindex padded for odither? */ 1637 bool is_padded; /* is the colorindex padded for odither? */
1638 1638
1639 int[MAX_Q_COMPS] Ncolors;// = new int [MAX_Q_COMPS]; /* # of values alloced to each component */ 1639 int[MAX_Q_COMPS] Ncolors;// = new int [MAX_Q_COMPS]; /* # of values alloced to each component */
1640 1640
1641 /* Variables for ordered dithering */ 1641 /* Variables for ordered dithering */
1642 int row_index; /* cur row's vertical index in dither matrix */ 1642 int row_index; /* cur row's vertical index in dither matrix */
1643 // ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */ 1643 // ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */
1644 1644
1645 /* Variables for Floyd-Steinberg dithering */ 1645 /* Variables for Floyd-Steinberg dithering */
1646 // FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */ 1646 // FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */
1647 bool on_odd_row; 1647 bool on_odd_row;
1648 1648
1649 void start_pass (jpeg_decompress_struct cinfo, bool is_pre_scan) { 1649 void start_pass (jpeg_decompress_struct cinfo, bool is_pre_scan) {
1650 error(); 1650 error();
1651 } 1651 }
1652 } 1652 }
1659 // JDIMENSION in_row_groups_avail, 1659 // JDIMENSION in_row_groups_avail,
1660 // JSAMPARRAY output_buf, 1660 // JSAMPARRAY output_buf,
1661 // JDIMENSION *out_row_ctr, 1661 // JDIMENSION *out_row_ctr,
1662 // JDIMENSION out_rows_avail)); 1662 // JDIMENSION out_rows_avail));
1663 1663
1664 bool need_context_rows; /* TRUE if need rows above & below */ 1664 bool need_context_rows; /* TRUE if need rows above & below */
1665 1665
1666 /* Color conversion buffer. When using separate upsampling and color 1666 /* Color conversion buffer. When using separate upsampling and color
1667 * conversion steps, this buffer holds one upsampled row group until it 1667 * conversion steps, this buffer holds one upsampled row group until it
1668 * has been color converted and output. 1668 * has been color converted and output.
1669 * Note: we do not allocate any storage for component(s) which are full-size, 1669 * Note: we do not allocate any storage for component(s) which are full-size,
1704 // jpeg_marker_parser_method read_restart_marker; 1704 // jpeg_marker_parser_method read_restart_marker;
1705 1705
1706 /* State of marker reader --- nominally internal, but applications 1706 /* State of marker reader --- nominally internal, but applications
1707 * supplying COM or APPn handlers might like to know the state. 1707 * supplying COM or APPn handlers might like to know the state.
1708 */ 1708 */
1709 bool saw_SOI; /* found SOI? */ 1709 bool saw_SOI; /* found SOI? */
1710 bool saw_SOF; /* found SOF? */ 1710 bool saw_SOF; /* found SOF? */
1711 int next_restart_num; /* next restart number expected (0-7) */ 1711 int next_restart_num; /* next restart number expected (0-7) */
1712 int discarded_bytes; /* # of bytes skipped looking for a marker */ 1712 int discarded_bytes; /* # of bytes skipped looking for a marker */
1713 1713
1714 /* Application-overridable marker processing methods */ 1714 /* Application-overridable marker processing methods */
1715 // jpeg_marker_parser_method process_COM; 1715 // jpeg_marker_parser_method process_COM;
1732 1732
1733 /* Pointer to allocated workspace (M or M+2 row groups). */ 1733 /* Pointer to allocated workspace (M or M+2 row groups). */
1734 byte[][][MAX_COMPONENTS] buffer;// = new byte[MAX_COMPONENTS][][]; 1734 byte[][][MAX_COMPONENTS] buffer;// = new byte[MAX_COMPONENTS][][];
1735 int[MAX_COMPONENTS] buffer_offset;// = new int[MAX_COMPONENTS]; 1735 int[MAX_COMPONENTS] buffer_offset;// = new int[MAX_COMPONENTS];
1736 1736
1737 bool buffer_full; /* Have we gotten an iMCU row from decoder? */ 1737 bool buffer_full; /* Have we gotten an iMCU row from decoder? */
1738 int[1] rowgroup_ctr;// = new int[1]; /* counts row groups output to postprocessor */ 1738 int[1] rowgroup_ctr;// = new int[1]; /* counts row groups output to postprocessor */
1739 1739
1740 /* Remaining fields are only used in the context case. */ 1740 /* Remaining fields are only used in the context case. */
1741 1741
1742 /* These are the master pointers to the funny-order pointer lists. */ 1742 /* These are the master pointers to the funny-order pointer lists. */
1956 } 1956 }
1957 } 1957 }
1958 1958
1959 static final class jpeg_input_controller { 1959 static final class jpeg_input_controller {
1960 int consume_input; 1960 int consume_input;
1961 bool has_multiple_scans; /* True if file has multiple scans */ 1961 bool has_multiple_scans; /* True if file has multiple scans */
1962 bool eoi_reached; 1962 bool eoi_reached;
1963 1963
1964 bool inheaders; /* true until first SOS is reached */ 1964 bool inheaders; /* true until first SOS is reached */
1965 } 1965 }
1966 1966
1967 static final class jpeg_color_deconverter { 1967 static final class jpeg_color_deconverter {
1968 // JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); 1968 // JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
1969 int color_convert; 1969 int color_convert;
2048 static final class jpeg_decompress_struct { 2048 static final class jpeg_decompress_struct {
2049 // jpeg_error_mgr * err; /* Error handler module */\ 2049 // jpeg_error_mgr * err; /* Error handler module */\
2050 // struct jpeg_memory_mgr * mem; /* Memory manager module */\ 2050 // struct jpeg_memory_mgr * mem; /* Memory manager module */\
2051 // struct jpeg_progress_mgr * progress; /* Progress monitor, or null if none */\ 2051 // struct jpeg_progress_mgr * progress; /* Progress monitor, or null if none */\
2052 // void * client_data; /* Available for use by application */\ 2052 // void * client_data; /* Available for use by application */\
2053 bool is_decompressor; /* So common code can tell which is which */ 2053 bool is_decompressor; /* So common code can tell which is which */
2054 int global_state; /* For checking call sequence validity */ 2054 int global_state; /* For checking call sequence validity */
2055 2055
2056 // /* Source of compressed data */ 2056 // /* Source of compressed data */
2057 // struct jpeg_source_mgr * src; 2057 // struct jpeg_source_mgr * src;
2058 InputStream inputStream; 2058 InputStream inputStream;
2078 2078
2079 int scale_num, scale_denom; /* fraction by which to scale image */ 2079 int scale_num, scale_denom; /* fraction by which to scale image */
2080 2080
2081 double output_gamma; /* image gamma wanted in output */ 2081 double output_gamma; /* image gamma wanted in output */
2082 2082
2083 bool buffered_image; /* true=multiple output passes */ 2083 bool buffered_image; /* true=multiple output passes */
2084 bool raw_data_out; /* true=downsampled data wanted */ 2084 bool raw_data_out; /* true=downsampled data wanted */
2085 2085
2086 int dct_method; /* IDCT algorithm selector */ 2086 int dct_method; /* IDCT algorithm selector */
2087 bool do_fancy_upsampling; /* true=apply fancy upsampling */ 2087 bool do_fancy_upsampling; /* true=apply fancy upsampling */
2088 bool do_block_smoothing; /* true=apply interblock smoothing */ 2088 bool do_block_smoothing; /* true=apply interblock smoothing */
2089 2089
2090 bool quantize_colors; /* true=colormapped output wanted */ 2090 bool quantize_colors; /* true=colormapped output wanted */
2091 /* the following are ignored if not quantize_colors: */ 2091 /* the following are ignored if not quantize_colors: */
2092 int dither_mode; /* type of color dithering to use */ 2092 int dither_mode; /* type of color dithering to use */
2093 bool two_pass_quantize; /* true=use two-pass color quantization */ 2093 bool two_pass_quantize; /* true=use two-pass color quantization */
2094 int desired_number_of_colors; /* max # colors to use in created colormap */ 2094 int desired_number_of_colors; /* max # colors to use in created colormap */
2095 /* these are significant only in buffered-image mode: */ 2095 /* these are significant only in buffered-image mode: */
2096 bool enable_1pass_quant; /* enable future use of 1-pass quantizer */ 2096 bool enable_1pass_quant; /* enable future use of 1-pass quantizer */
2097 bool enable_external_quant;/* enable future use of external colormap */ 2097 bool enable_external_quant;/* enable future use of external colormap */
2098 bool enable_2pass_quant; /* enable future use of 2-pass quantizer */ 2098 bool enable_2pass_quant; /* enable future use of 2-pass quantizer */
2099 2099
2100 /* Description of actual output image that will be returned to application. 2100 /* Description of actual output image that will be returned to application.
2101 * These fields are computed by jpeg_start_decompress(). 2101 * These fields are computed by jpeg_start_decompress().
2102 * You can also use jpeg_calc_output_dimensions() to determine these values 2102 * You can also use jpeg_calc_output_dimensions() to determine these values
2103 * in advance of calling jpeg_start_decompress(). 2103 * in advance of calling jpeg_start_decompress().
2180 int data_precision; /* bits of precision in image data */ 2180 int data_precision; /* bits of precision in image data */
2181 2181
2182 jpeg_component_info[] comp_info; 2182 jpeg_component_info[] comp_info;
2183 /* comp_info[i] describes component that appears i'th in SOF */ 2183 /* comp_info[i] describes component that appears i'th in SOF */
2184 2184
2185 bool progressive_mode; /* true if SOFn specifies progressive mode */ 2185 bool progressive_mode; /* true if SOFn specifies progressive mode */
2186 bool arith_code; /* true=arithmetic coding, false=Huffman */ 2186 bool arith_code; /* true=arithmetic coding, false=Huffman */
2187 2187
2188 byte[NUM_ARITH_TBLS] arith_dc_L;// = new byte[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ 2188 byte[NUM_ARITH_TBLS] arith_dc_L;// = new byte[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
2189 byte[NUM_ARITH_TBLS] arith_dc_U;// = new byte[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ 2189 byte[NUM_ARITH_TBLS] arith_dc_U;// = new byte[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
2190 byte[NUM_ARITH_TBLS] arith_ac_K;// = new byte[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ 2190 byte[NUM_ARITH_TBLS] arith_ac_K;// = new byte[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
2191 2191
2192 int restart_interval; /* MCUs per restart interval, or 0 for no restart */ 2192 int restart_interval; /* MCUs per restart interval, or 0 for no restart */
2193 2193
2194 /* These fields record data obtained from optional markers recognized by 2194 /* These fields record data obtained from optional markers recognized by
2195 * the JPEG library. 2195 * the JPEG library.
2196 */ 2196 */
2197 bool saw_JFIF_marker; /* true iff a JFIF APP0 marker was found */ 2197 bool saw_JFIF_marker; /* true iff a JFIF APP0 marker was found */
2198 /* Data copied from JFIF marker; only valid if saw_JFIF_marker is true: */ 2198 /* Data copied from JFIF marker; only valid if saw_JFIF_marker is true: */
2199 byte JFIF_major_version; /* JFIF version number */ 2199 byte JFIF_major_version; /* JFIF version number */
2200 byte JFIF_minor_version; 2200 byte JFIF_minor_version;
2201 byte density_unit; /* JFIF code for pixel size units */ 2201 byte density_unit; /* JFIF code for pixel size units */
2202 short X_density; /* Horizontal pixel density */ 2202 short X_density; /* Horizontal pixel density */
2203 short Y_density; /* Vertical pixel density */ 2203 short Y_density; /* Vertical pixel density */
2204 bool saw_Adobe_marker; /* true iff an Adobe APP14 marker was found */ 2204 bool saw_Adobe_marker; /* true iff an Adobe APP14 marker was found */
2205 byte Adobe_transform; /* Color transform code from Adobe marker */ 2205 byte Adobe_transform; /* Color transform code from Adobe marker */
2206 2206
2207 bool CCIR601_sampling; /* true=first samples are cosited */ 2207 bool CCIR601_sampling; /* true=first samples are cosited */
2208 2208
2209 /* Aside from the specific data retained from APPn markers known to the 2209 /* Aside from the specific data retained from APPn markers known to the
2210 * library, the uninterpreted contents of any or all APPn and COM markers 2210 * library, the uninterpreted contents of any or all APPn and COM markers
2211 * can be saved in a list for examination by the application. 2211 * can be saved in a list for examination by the application.
2212 */ 2212 */