ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

jpegint.h
Go to the documentation of this file.
00001 /*
00002  * jpegint.h
00003  *
00004  * Copyright (C) 1991-1997, Thomas G. Lane.
00005  * Modified 1997-2009 by Guido Vollbeding.
00006  * This file is part of the Independent JPEG Group's software.
00007  * For conditions of distribution and use, see the accompanying README file.
00008  *
00009  * This file provides common declarations for the various JPEG modules.
00010  * These declarations are considered internal to the JPEG library; most
00011  * applications using the library shouldn't need to include this file.
00012  */
00013 
00014 
00015 /* Declarations for both compression & decompression */
00016 
00017 typedef enum {          /* Operating modes for buffer controllers */
00018     JBUF_PASS_THRU,     /* Plain stripwise operation */
00019     /* Remaining modes require a full-image buffer to have been created */
00020     JBUF_SAVE_SOURCE,   /* Run source subobject only, save output */
00021     JBUF_CRANK_DEST,    /* Run dest subobject only, using saved data */
00022     JBUF_SAVE_AND_PASS  /* Run both subobjects, save output */
00023 } J_BUF_MODE;
00024 
00025 /* Values of global_state field (jdapi.c has some dependencies on ordering!) */
00026 #define CSTATE_START    100 /* after create_compress */
00027 #define CSTATE_SCANNING 101 /* start_compress done, write_scanlines OK */
00028 #define CSTATE_RAW_OK   102 /* start_compress done, write_raw_data OK */
00029 #define CSTATE_WRCOEFS  103 /* jpeg_write_coefficients done */
00030 #define DSTATE_START    200 /* after create_decompress */
00031 #define DSTATE_INHEADER 201 /* reading header markers, no SOS yet */
00032 #define DSTATE_READY    202 /* found SOS, ready for start_decompress */
00033 #define DSTATE_PRELOAD  203 /* reading multiscan file in start_decompress*/
00034 #define DSTATE_PRESCAN  204 /* performing dummy pass for 2-pass quant */
00035 #define DSTATE_SCANNING 205 /* start_decompress done, read_scanlines OK */
00036 #define DSTATE_RAW_OK   206 /* start_decompress done, read_raw_data OK */
00037 #define DSTATE_BUFIMAGE 207 /* expecting jpeg_start_output */
00038 #define DSTATE_BUFPOST  208 /* looking for SOS/EOI in jpeg_finish_output */
00039 #define DSTATE_RDCOEFS  209 /* reading file in jpeg_read_coefficients */
00040 #define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */
00041 
00042 
00043 /* Declarations for compression modules */
00044 
00045 /* Master control module */
00046 struct jpeg_comp_master {
00047   JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo));
00048   JMETHOD(void, pass_startup, (j_compress_ptr cinfo));
00049   JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
00050 
00051   /* State variables made visible to other modules */
00052   boolean call_pass_startup;    /* True if pass_startup must be called */
00053   boolean is_last_pass;     /* True during last pass */
00054 };
00055 
00056 /* Main buffer control (downsampled-data buffer) */
00057 struct jpeg_c_main_controller {
00058   JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
00059   JMETHOD(void, process_data, (j_compress_ptr cinfo,
00060                    JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
00061                    JDIMENSION in_rows_avail));
00062 };
00063 
00064 /* Compression preprocessing (downsampling input buffer control) */
00065 struct jpeg_c_prep_controller {
00066   JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
00067   JMETHOD(void, pre_process_data, (j_compress_ptr cinfo,
00068                    JSAMPARRAY input_buf,
00069                    JDIMENSION *in_row_ctr,
00070                    JDIMENSION in_rows_avail,
00071                    JSAMPIMAGE output_buf,
00072                    JDIMENSION *out_row_group_ctr,
00073                    JDIMENSION out_row_groups_avail));
00074 };
00075 
00076 /* Coefficient buffer control */
00077 struct jpeg_c_coef_controller {
00078   JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
00079   JMETHOD(boolean, compress_data, (j_compress_ptr cinfo,
00080                    JSAMPIMAGE input_buf));
00081 };
00082 
00083 /* Colorspace conversion */
00084 struct jpeg_color_converter {
00085   JMETHOD(void, start_pass, (j_compress_ptr cinfo));
00086   JMETHOD(void, color_convert, (j_compress_ptr cinfo,
00087                 JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
00088                 JDIMENSION output_row, int num_rows));
00089 };
00090 
00091 /* Downsampling */
00092 struct jpeg_downsampler {
00093   JMETHOD(void, start_pass, (j_compress_ptr cinfo));
00094   JMETHOD(void, downsample, (j_compress_ptr cinfo,
00095                  JSAMPIMAGE input_buf, JDIMENSION in_row_index,
00096                  JSAMPIMAGE output_buf,
00097                  JDIMENSION out_row_group_index));
00098 
00099   boolean need_context_rows;    /* TRUE if need rows above & below */
00100 };
00101 
00102 /* Forward DCT (also controls coefficient quantization) */
00103 typedef JMETHOD(void, forward_DCT_ptr,
00104         (j_compress_ptr cinfo, jpeg_component_info * compptr,
00105          JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
00106          JDIMENSION start_row, JDIMENSION start_col,
00107          JDIMENSION num_blocks));
00108 
00109 struct jpeg_forward_dct {
00110   JMETHOD(void, start_pass, (j_compress_ptr cinfo));
00111   /* It is useful to allow each component to have a separate FDCT method. */
00112   forward_DCT_ptr forward_DCT[MAX_COMPONENTS];
00113 };
00114 
00115 /* Entropy encoding */
00116 struct jpeg_entropy_encoder {
00117   JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics));
00118   JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data));
00119   JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
00120 };
00121 
00122 /* Marker writing */
00123 struct jpeg_marker_writer {
00124   JMETHOD(void, write_file_header, (j_compress_ptr cinfo));
00125   JMETHOD(void, write_frame_header, (j_compress_ptr cinfo));
00126   JMETHOD(void, write_scan_header, (j_compress_ptr cinfo));
00127   JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo));
00128   JMETHOD(void, write_tables_only, (j_compress_ptr cinfo));
00129   /* These routines are exported to allow insertion of extra markers */
00130   /* Probably only COM and APPn markers should be written this way */
00131   JMETHOD(void, write_marker_header, (j_compress_ptr cinfo, int marker,
00132                       unsigned int datalen));
00133   JMETHOD(void, write_marker_byte, (j_compress_ptr cinfo, int val));
00134 };
00135 
00136 
00137 /* Declarations for decompression modules */
00138 
00139 /* Master control module */
00140 struct jpeg_decomp_master {
00141   JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo));
00142   JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo));
00143 
00144   /* State variables made visible to other modules */
00145   boolean is_dummy_pass;    /* True during 1st pass for 2-pass quant */
00146 };
00147 
00148 /* Input control module */
00149 struct jpeg_input_controller {
00150   JMETHOD(int, consume_input, (j_decompress_ptr cinfo));
00151   JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo));
00152   JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
00153   JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo));
00154 
00155   /* State variables made visible to other modules */
00156   boolean has_multiple_scans;   /* True if file has multiple scans */
00157   boolean eoi_reached;      /* True when EOI has been consumed */
00158 };
00159 
00160 /* Main buffer control (downsampled-data buffer) */
00161 struct jpeg_d_main_controller {
00162   JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
00163   JMETHOD(void, process_data, (j_decompress_ptr cinfo,
00164                    JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
00165                    JDIMENSION out_rows_avail));
00166 };
00167 
00168 /* Coefficient buffer control */
00169 struct jpeg_d_coef_controller {
00170   JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
00171   JMETHOD(int, consume_data, (j_decompress_ptr cinfo));
00172   JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo));
00173   JMETHOD(int, decompress_data, (j_decompress_ptr cinfo,
00174                  JSAMPIMAGE output_buf));
00175   /* Pointer to array of coefficient virtual arrays, or NULL if none */
00176   jvirt_barray_ptr *coef_arrays;
00177 };
00178 
00179 /* Decompression postprocessing (color quantization buffer control) */
00180 struct jpeg_d_post_controller {
00181   JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
00182   JMETHOD(void, post_process_data, (j_decompress_ptr cinfo,
00183                     JSAMPIMAGE input_buf,
00184                     JDIMENSION *in_row_group_ctr,
00185                     JDIMENSION in_row_groups_avail,
00186                     JSAMPARRAY output_buf,
00187                     JDIMENSION *out_row_ctr,
00188                     JDIMENSION out_rows_avail));
00189 };
00190 
00191 /* Marker reading & parsing */
00192 struct jpeg_marker_reader {
00193   JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo));
00194   /* Read markers until SOS or EOI.
00195    * Returns same codes as are defined for jpeg_consume_input:
00196    * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
00197    */
00198   JMETHOD(int, read_markers, (j_decompress_ptr cinfo));
00199   /* Read a restart marker --- exported for use by entropy decoder only */
00200   jpeg_marker_parser_method read_restart_marker;
00201 
00202   /* State of marker reader --- nominally internal, but applications
00203    * supplying COM or APPn handlers might like to know the state.
00204    */
00205   boolean saw_SOI;      /* found SOI? */
00206   boolean saw_SOF;      /* found SOF? */
00207   int next_restart_num;     /* next restart number expected (0-7) */
00208   unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */
00209 };
00210 
00211 /* Entropy decoding */
00212 struct jpeg_entropy_decoder {
00213   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
00214   JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo,
00215                 JBLOCKROW *MCU_data));
00216 };
00217 
00218 /* Inverse DCT (also performs dequantization) */
00219 typedef JMETHOD(void, inverse_DCT_method_ptr,
00220         (j_decompress_ptr cinfo, jpeg_component_info * compptr,
00221          JCOEFPTR coef_block,
00222          JSAMPARRAY output_buf, JDIMENSION output_col));
00223 
00224 struct jpeg_inverse_dct {
00225   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
00226   /* It is useful to allow each component to have a separate IDCT method. */
00227   inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS];
00228 };
00229 
00230 /* Upsampling (note that upsampler must also call color converter) */
00231 struct jpeg_upsampler {
00232   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
00233   JMETHOD(void, upsample, (j_decompress_ptr cinfo,
00234                JSAMPIMAGE input_buf,
00235                JDIMENSION *in_row_group_ctr,
00236                JDIMENSION in_row_groups_avail,
00237                JSAMPARRAY output_buf,
00238                JDIMENSION *out_row_ctr,
00239                JDIMENSION out_rows_avail));
00240 
00241   boolean need_context_rows;    /* TRUE if need rows above & below */
00242 };
00243 
00244 /* Colorspace conversion */
00245 struct jpeg_color_deconverter {
00246   JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
00247   JMETHOD(void, color_convert, (j_decompress_ptr cinfo,
00248                 JSAMPIMAGE input_buf, JDIMENSION input_row,
00249                 JSAMPARRAY output_buf, int num_rows));
00250 };
00251 
00252 /* Color quantization or color precision reduction */
00253 struct jpeg_color_quantizer {
00254   JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan));
00255   JMETHOD(void, color_quantize, (j_decompress_ptr cinfo,
00256                  JSAMPARRAY input_buf, JSAMPARRAY output_buf,
00257                  int num_rows));
00258   JMETHOD(void, finish_pass, (j_decompress_ptr cinfo));
00259   JMETHOD(void, new_color_map, (j_decompress_ptr cinfo));
00260 };
00261 
00262 
00263 /* Miscellaneous useful macros */
00264 
00265 #undef MAX
00266 #define MAX(a,b)    ((a) > (b) ? (a) : (b))
00267 #undef MIN
00268 #define MIN(a,b)    ((a) < (b) ? (a) : (b))
00269 
00270 
00271 /* We assume that right shift corresponds to signed division by 2 with
00272  * rounding towards minus infinity.  This is correct for typical "arithmetic
00273  * shift" instructions that shift in copies of the sign bit.  But some
00274  * C compilers implement >> with an unsigned shift.  For these machines you
00275  * must define RIGHT_SHIFT_IS_UNSIGNED.
00276  * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.
00277  * It is only applied with constant shift counts.  SHIFT_TEMPS must be
00278  * included in the variables of any routine using RIGHT_SHIFT.
00279  */
00280 
00281 #ifdef RIGHT_SHIFT_IS_UNSIGNED
00282 #define SHIFT_TEMPS INT32 shift_temp;
00283 #define RIGHT_SHIFT(x,shft)  \
00284     ((shift_temp = (x)) < 0 ? \
00285      (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \
00286      (shift_temp >> (shft)))
00287 #else
00288 #define SHIFT_TEMPS
00289 #define RIGHT_SHIFT(x,shft) ((x) >> (shft))
00290 #endif
00291 
00292 
00293 /* Short forms of external names for systems with brain-damaged linkers. */
00294 
00295 #ifdef NEED_SHORT_EXTERNAL_NAMES
00296 #define jinit_compress_master   jICompress
00297 #define jinit_c_master_control  jICMaster
00298 #define jinit_c_main_controller jICMainC
00299 #define jinit_c_prep_controller jICPrepC
00300 #define jinit_c_coef_controller jICCoefC
00301 #define jinit_color_converter   jICColor
00302 #define jinit_downsampler   jIDownsampler
00303 #define jinit_forward_dct   jIFDCT
00304 #define jinit_huff_encoder  jIHEncoder
00305 #define jinit_arith_encoder jIAEncoder
00306 #define jinit_marker_writer jIMWriter
00307 #define jinit_master_decompress jIDMaster
00308 #define jinit_d_main_controller jIDMainC
00309 #define jinit_d_coef_controller jIDCoefC
00310 #define jinit_d_post_controller jIDPostC
00311 #define jinit_input_controller  jIInCtlr
00312 #define jinit_marker_reader jIMReader
00313 #define jinit_huff_decoder  jIHDecoder
00314 #define jinit_arith_decoder jIADecoder
00315 #define jinit_inverse_dct   jIIDCT
00316 #define jinit_upsampler     jIUpsampler
00317 #define jinit_color_deconverter jIDColor
00318 #define jinit_1pass_quantizer   jI1Quant
00319 #define jinit_2pass_quantizer   jI2Quant
00320 #define jinit_merged_upsampler  jIMUpsampler
00321 #define jinit_memory_mgr    jIMemMgr
00322 #define jdiv_round_up       jDivRound
00323 #define jround_up       jRound
00324 #define jcopy_sample_rows   jCopySamples
00325 #define jcopy_block_row     jCopyBlocks
00326 #define jzero_far       jZeroFar
00327 #define jpeg_zigzag_order   jZIGTable
00328 #define jpeg_natural_order  jZAGTable
00329 #define jpeg_natural_order7 jZAGTable7
00330 #define jpeg_natural_order6 jZAGTable6
00331 #define jpeg_natural_order5 jZAGTable5
00332 #define jpeg_natural_order4 jZAGTable4
00333 #define jpeg_natural_order3 jZAGTable3
00334 #define jpeg_natural_order2 jZAGTable2
00335 #define jpeg_aritab     jAriTab
00336 #endif /* NEED_SHORT_EXTERNAL_NAMES */
00337 
00338 
00339 /* Compression module initialization routines */
00340 EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo));
00341 EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo,
00342                      boolean transcode_only));
00343 EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo,
00344                       boolean need_full_buffer));
00345 EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo,
00346                       boolean need_full_buffer));
00347 EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo,
00348                       boolean need_full_buffer));
00349 EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo));
00350 EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo));
00351 EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo));
00352 EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo));
00353 EXTERN(void) jinit_arith_encoder JPP((j_compress_ptr cinfo));
00354 EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo));
00355 /* Decompression module initialization routines */
00356 EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo));
00357 EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo,
00358                       boolean need_full_buffer));
00359 EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo,
00360                       boolean need_full_buffer));
00361 EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo,
00362                       boolean need_full_buffer));
00363 EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo));
00364 EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo));
00365 EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo));
00366 EXTERN(void) jinit_arith_decoder JPP((j_decompress_ptr cinfo));
00367 EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo));
00368 EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo));
00369 EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo));
00370 EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo));
00371 EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo));
00372 EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo));
00373 /* Memory manager initialization */
00374 EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo));
00375 
00376 /* Utility routines in jutils.c */
00377 EXTERN(long) jdiv_round_up JPP((long a, long b));
00378 EXTERN(long) jround_up JPP((long a, long b));
00379 EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row,
00380                     JSAMPARRAY output_array, int dest_row,
00381                     int num_rows, JDIMENSION num_cols));
00382 EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row,
00383                   JDIMENSION num_blocks));
00384 EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero));
00385 /* Constant tables in jutils.c */
00386 #if 0               /* This table is not actually needed in v6a */
00387 extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */
00388 #endif
00389 extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */
00390 extern const int jpeg_natural_order7[]; /* zz to natural order for 7x7 block */
00391 extern const int jpeg_natural_order6[]; /* zz to natural order for 6x6 block */
00392 extern const int jpeg_natural_order5[]; /* zz to natural order for 5x5 block */
00393 extern const int jpeg_natural_order4[]; /* zz to natural order for 4x4 block */
00394 extern const int jpeg_natural_order3[]; /* zz to natural order for 3x3 block */
00395 extern const int jpeg_natural_order2[]; /* zz to natural order for 2x2 block */
00396 
00397 /* Arithmetic coding probability estimation tables in jaricom.c */
00398 extern const INT32 jpeg_aritab[];
00399 
00400 /* Suppress undefined-structure complaints if necessary. */
00401 
00402 #ifdef INCOMPLETE_TYPES_BROKEN
00403 #ifndef AM_MEMORY_MANAGER   /* only jmemmgr.c defines these */
00404 struct jvirt_sarray_control { long dummy; };
00405 struct jvirt_barray_control { long dummy; };
00406 #endif
00407 #endif /* INCOMPLETE_TYPES_BROKEN */

Generated on Sun May 27 2012 04:33:12 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.