00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 typedef enum {
00017 JBUF_PASS_THRU,
00018
00019 JBUF_SAVE_SOURCE,
00020 JBUF_CRANK_DEST,
00021 JBUF_SAVE_AND_PASS
00022 } J_BUF_MODE;
00023
00024
00025 #define CSTATE_START 100
00026 #define CSTATE_SCANNING 101
00027 #define CSTATE_RAW_OK 102
00028 #define CSTATE_WRCOEFS 103
00029 #define DSTATE_START 200
00030 #define DSTATE_INHEADER 201
00031 #define DSTATE_READY 202
00032 #define DSTATE_PRELOAD 203
00033 #define DSTATE_PRESCAN 204
00034 #define DSTATE_SCANNING 205
00035 #define DSTATE_RAW_OK 206
00036 #define DSTATE_BUFIMAGE 207
00037 #define DSTATE_BUFPOST 208
00038 #define DSTATE_RDCOEFS 209
00039 #define DSTATE_STOPPING 210
00040
00041
00042
00043
00044
00045 struct jpeg_comp_master {
00046 JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo));
00047 JMETHOD(void, pass_startup, (j_compress_ptr cinfo));
00048 JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
00049
00050
00051 boolean call_pass_startup;
00052 boolean is_last_pass;
00053 };
00054
00055
00056 struct jpeg_c_main_controller {
00057 JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
00058 JMETHOD(void, process_data, (j_compress_ptr cinfo,
00059 JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
00060 JDIMENSION in_rows_avail));
00061 };
00062
00063
00064 struct jpeg_c_prep_controller {
00065 JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
00066 JMETHOD(void, pre_process_data, (j_compress_ptr cinfo,
00067 JSAMPARRAY input_buf,
00068 JDIMENSION *in_row_ctr,
00069 JDIMENSION in_rows_avail,
00070 JSAMPIMAGE output_buf,
00071 JDIMENSION *out_row_group_ctr,
00072 JDIMENSION out_row_groups_avail));
00073 };
00074
00075
00076 struct jpeg_c_coef_controller {
00077 JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
00078 JMETHOD(boolean, compress_data, (j_compress_ptr cinfo,
00079 JSAMPIMAGE input_buf));
00080 };
00081
00082
00083 struct jpeg_color_converter {
00084 JMETHOD(void, start_pass, (j_compress_ptr cinfo));
00085 JMETHOD(void, color_convert, (j_compress_ptr cinfo,
00086 JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
00087 JDIMENSION output_row, int num_rows));
00088 };
00089
00090
00091 struct jpeg_downsampler {
00092 JMETHOD(void, start_pass, (j_compress_ptr cinfo));
00093 JMETHOD(void, downsample, (j_compress_ptr cinfo,
00094 JSAMPIMAGE input_buf, JDIMENSION in_row_index,
00095 JSAMPIMAGE output_buf,
00096 JDIMENSION out_row_group_index));
00097
00098 boolean need_context_rows;
00099 };
00100
00101
00102 struct jpeg_forward_dct {
00103 JMETHOD(void, start_pass, (j_compress_ptr cinfo));
00104
00105 JMETHOD(void, forward_DCT, (j_compress_ptr cinfo,
00106 jpeg_component_info * compptr,
00107 JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
00108 JDIMENSION start_row, JDIMENSION start_col,
00109 JDIMENSION num_blocks));
00110 };
00111
00112
00113 struct jpeg_entropy_encoder {
00114 JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics));
00115 JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data));
00116 JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
00117 };
00118
00119
00120 struct jpeg_marker_writer {
00121
00122
00123 JMETHOD(void, write_any_marker, (j_compress_ptr cinfo, int marker,
00124 const JOCTET *dataptr, unsigned int datalen));
00125 JMETHOD(void, write_file_header, (j_compress_ptr cinfo));
00126 JMETHOD(void, write_frame_header, (j_compress_ptr cinfo));
00127 JMETHOD(void, write_scan_header, (j_compress_ptr cinfo));
00128 JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo));
00129 JMETHOD(void, write_tables_only, (j_compress_ptr cinfo));
00130 };
00131
00132
00133
00134
00135
00136 struct jpeg_decomp_master {
00137 JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo));
00138 JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo));
00139
00140
00141 boolean is_dummy_pass;
00142 };
00143
00144
00145 struct jpeg_input_controller {
00146 JMETHOD(int, consume_input, (j_decompress_ptr cinfo));
00147 JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo));
00148 JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
00149 JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo));
00150
00151
00152 boolean has_multiple_scans;
00153 boolean eoi_reached;
00154 };
00155
00156
00157 struct jpeg_d_main_controller {
00158 JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
00159 JMETHOD(void, process_data, (j_decompress_ptr cinfo,
00160 JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
00161 JDIMENSION out_rows_avail));
00162 };
00163
00164
00165 struct jpeg_d_coef_controller {
00166 JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
00167 JMETHOD(int, consume_data, (j_decompress_ptr cinfo));
00168 JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo));
00169 JMETHOD(int, decompress_data, (j_decompress_ptr cinfo,
00170 JSAMPIMAGE output_buf));
00171
00172 jvirt_barray_ptr *coef_arrays;
00173 };
00174
00175
00176 struct jpeg_d_post_controller {
00177 JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
00178 JMETHOD(void, post_process_data, (j_decompress_ptr cinfo,
00179 JSAMPIMAGE input_buf,
00180 JDIMENSION *in_row_group_ctr,
00181 JDIMENSION in_row_groups_avail,
00182 JSAMPARRAY output_buf,
00183 JDIMENSION *out_row_ctr,
00184 JDIMENSION out_rows_avail));
00185 };
00186
00187
00188 struct jpeg_marker_reader {
00189 JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo));
00190
00191
00192
00193
00194 JMETHOD(int, read_markers, (j_decompress_ptr cinfo));
00195
00196 jpeg_marker_parser_method read_restart_marker;
00197
00198 jpeg_marker_parser_method process_COM;
00199 jpeg_marker_parser_method process_APPn[16];
00200
00201
00202
00203
00204 boolean saw_SOI;
00205 boolean saw_SOF;
00206 int next_restart_num;
00207 unsigned int discarded_bytes;
00208 };
00209
00210
00211 struct jpeg_entropy_decoder {
00212 JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
00213 JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo,
00214 JBLOCKROW *MCU_data));
00215 };
00216
00217
00218 typedef JMETHOD(void, inverse_DCT_method_ptr,
00219 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
00220 JCOEFPTR coef_block,
00221 JSAMPARRAY output_buf, JDIMENSION output_col));
00222
00223 struct jpeg_inverse_dct {
00224 JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
00225
00226 inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS];
00227 };
00228
00229
00230 struct jpeg_upsampler {
00231 JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
00232 JMETHOD(void, upsample, (j_decompress_ptr cinfo,
00233 JSAMPIMAGE input_buf,
00234 JDIMENSION *in_row_group_ctr,
00235 JDIMENSION in_row_groups_avail,
00236 JSAMPARRAY output_buf,
00237 JDIMENSION *out_row_ctr,
00238 JDIMENSION out_rows_avail));
00239
00240 boolean need_context_rows;
00241 };
00242
00243
00244 struct jpeg_color_deconverter {
00245 JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
00246 JMETHOD(void, color_convert, (j_decompress_ptr cinfo,
00247 JSAMPIMAGE input_buf, JDIMENSION input_row,
00248 JSAMPARRAY output_buf, int num_rows));
00249 };
00250
00251
00252 struct jpeg_color_quantizer {
00253 JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan));
00254 JMETHOD(void, color_quantize, (j_decompress_ptr cinfo,
00255 JSAMPARRAY input_buf, JSAMPARRAY output_buf,
00256 int num_rows));
00257 JMETHOD(void, finish_pass, (j_decompress_ptr cinfo));
00258 JMETHOD(void, new_color_map, (j_decompress_ptr cinfo));
00259 };
00260
00261
00262
00263
00264 #undef MAX
00265 #define MAX(a,b) ((a) > (b) ? (a) : (b))
00266 #undef MIN
00267 #define MIN(a,b) ((a) < (b) ? (a) : (b))
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280 #ifdef RIGHT_SHIFT_IS_UNSIGNED
00281 #define SHIFT_TEMPS INT32 shift_temp;
00282 #define RIGHT_SHIFT(x,shft) \
00283 ((shift_temp = (x)) < 0 ? \
00284 (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \
00285 (shift_temp >> (shft)))
00286 #else
00287 #define SHIFT_TEMPS
00288 #define RIGHT_SHIFT(x,shft) ((x) >> (shft))
00289 #endif
00290
00291
00292
00293
00294 #ifdef NEED_SHORT_EXTERNAL_NAMES
00295 #define jinit_compress_master jICompress
00296 #define jinit_c_master_control jICMaster
00297 #define jinit_c_main_controller jICMainC
00298 #define jinit_c_prep_controller jICPrepC
00299 #define jinit_c_coef_controller jICCoefC
00300 #define jinit_color_converter jICColor
00301 #define jinit_downsampler jIDownsampler
00302 #define jinit_forward_dct jIFDCT
00303 #define jinit_huff_encoder jIHEncoder
00304 #define jinit_phuff_encoder jIPHEncoder
00305 #define jinit_marker_writer jIMWriter
00306 #define jinit_master_decompress jIDMaster
00307 #define jinit_d_main_controller jIDMainC
00308 #define jinit_d_coef_controller jIDCoefC
00309 #define jinit_d_post_controller jIDPostC
00310 #define jinit_input_controller jIInCtlr
00311 #define jinit_marker_reader jIMReader
00312 #define jinit_huff_decoder jIHDecoder
00313 #define jinit_phuff_decoder jIPHDecoder
00314 #define jinit_inverse_dct jIIDCT
00315 #define jinit_upsampler jIUpsampler
00316 #define jinit_color_deconverter jIDColor
00317 #define jinit_1pass_quantizer jI1Quant
00318 #define jinit_2pass_quantizer jI2Quant
00319 #define jinit_merged_upsampler jIMUpsampler
00320 #define jinit_memory_mgr jIMemMgr
00321 #define jdiv_round_up jDivRound
00322 #define jround_up jRound
00323 #define jcopy_sample_rows jCopySamples
00324 #define jcopy_block_row jCopyBlocks
00325 #define jzero_far jZeroFar
00326 #define jpeg_zigzag_order jZIGTable
00327 #define jpeg_natural_order jZAGTable
00328 #endif
00329
00330
00331
00332 EXTERN void jinit_compress_master JPP((j_compress_ptr cinfo));
00333 EXTERN void jinit_c_master_control JPP((j_compress_ptr cinfo,
00334 boolean transcode_only));
00335 EXTERN void jinit_c_main_controller JPP((j_compress_ptr cinfo,
00336 boolean need_full_buffer));
00337 EXTERN void jinit_c_prep_controller JPP((j_compress_ptr cinfo,
00338 boolean need_full_buffer));
00339 EXTERN void jinit_c_coef_controller JPP((j_compress_ptr cinfo,
00340 boolean need_full_buffer));
00341 EXTERN void jinit_color_converter JPP((j_compress_ptr cinfo));
00342 EXTERN void jinit_downsampler JPP((j_compress_ptr cinfo));
00343 EXTERN void jinit_forward_dct JPP((j_compress_ptr cinfo));
00344 EXTERN void jinit_huff_encoder JPP((j_compress_ptr cinfo));
00345 EXTERN void jinit_phuff_encoder JPP((j_compress_ptr cinfo));
00346 EXTERN void jinit_marker_writer JPP((j_compress_ptr cinfo));
00347
00348 EXTERN void jinit_master_decompress JPP((j_decompress_ptr cinfo));
00349 EXTERN void jinit_d_main_controller JPP((j_decompress_ptr cinfo,
00350 boolean need_full_buffer));
00351 EXTERN void jinit_d_coef_controller JPP((j_decompress_ptr cinfo,
00352 boolean need_full_buffer));
00353 EXTERN void jinit_d_post_controller JPP((j_decompress_ptr cinfo,
00354 boolean need_full_buffer));
00355 EXTERN void jinit_input_controller JPP((j_decompress_ptr cinfo));
00356 EXTERN void jinit_marker_reader JPP((j_decompress_ptr cinfo));
00357 EXTERN void jinit_huff_decoder JPP((j_decompress_ptr cinfo));
00358 EXTERN void jinit_phuff_decoder JPP((j_decompress_ptr cinfo));
00359 EXTERN void jinit_inverse_dct JPP((j_decompress_ptr cinfo));
00360 EXTERN void jinit_upsampler JPP((j_decompress_ptr cinfo));
00361 EXTERN void jinit_color_deconverter JPP((j_decompress_ptr cinfo));
00362 EXTERN void jinit_1pass_quantizer JPP((j_decompress_ptr cinfo));
00363 EXTERN void jinit_2pass_quantizer JPP((j_decompress_ptr cinfo));
00364 EXTERN void jinit_merged_upsampler JPP((j_decompress_ptr cinfo));
00365
00366 EXTERN void jinit_memory_mgr JPP((j_common_ptr cinfo));
00367
00368
00369 EXTERN long jdiv_round_up JPP((long a, long b));
00370 EXTERN long jround_up JPP((long a, long b));
00371 EXTERN void jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row,
00372 JSAMPARRAY output_array, int dest_row,
00373 int num_rows, JDIMENSION num_cols));
00374 EXTERN void jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row,
00375 JDIMENSION num_blocks));
00376 EXTERN void jzero_far JPP((void FAR * target, size_t bytestozero));
00377
00378 extern const int jpeg_zigzag_order[];
00379 extern const int jpeg_natural_order[];
00380
00381
00382
00383 #ifdef INCOMPLETE_TYPES_BROKEN
00384 #ifndef AM_MEMORY_MANAGER
00385 struct jvirt_sarray_control { long dummy; };
00386 struct jvirt_barray_control { long dummy; };
00387 #endif
00388 #endif