00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 typedef enum {
00018 JBUF_PASS_THRU,
00019
00020 JBUF_SAVE_SOURCE,
00021 JBUF_CRANK_DEST,
00022 JBUF_SAVE_AND_PASS
00023 } J_BUF_MODE;
00024
00025
00026 #define CSTATE_START 100
00027 #define CSTATE_SCANNING 101
00028 #define CSTATE_RAW_OK 102
00029 #define CSTATE_WRCOEFS 103
00030 #define DSTATE_START 200
00031 #define DSTATE_INHEADER 201
00032 #define DSTATE_READY 202
00033 #define DSTATE_PRELOAD 203
00034 #define DSTATE_PRESCAN 204
00035 #define DSTATE_SCANNING 205
00036 #define DSTATE_RAW_OK 206
00037 #define DSTATE_BUFIMAGE 207
00038 #define DSTATE_BUFPOST 208
00039 #define DSTATE_RDCOEFS 209
00040 #define DSTATE_STOPPING 210
00041
00042
00043
00044
00045
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
00052 boolean call_pass_startup;
00053 boolean is_last_pass;
00054 };
00055
00056
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
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
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
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
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;
00100 };
00101
00102
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
00112 forward_DCT_ptr forward_DCT[MAX_COMPONENTS];
00113 };
00114
00115
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
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
00130
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
00138
00139
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
00145 boolean is_dummy_pass;
00146 };
00147
00148
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
00156 boolean has_multiple_scans;
00157 boolean eoi_reached;
00158 };
00159
00160
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
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
00176 jvirt_barray_ptr *coef_arrays;
00177 };
00178
00179
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
00192 struct jpeg_marker_reader {
00193 JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo));
00194
00195
00196
00197
00198 JMETHOD(int, read_markers, (j_decompress_ptr cinfo));
00199
00200 jpeg_marker_parser_method read_restart_marker;
00201
00202
00203
00204
00205 boolean saw_SOI;
00206 boolean saw_SOF;
00207 int next_restart_num;
00208 unsigned int discarded_bytes;
00209 };
00210
00211
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
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
00227 inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS];
00228 };
00229
00230
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;
00242 };
00243
00244
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
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
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
00272
00273
00274
00275
00276
00277
00278
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
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
00337
00338
00339
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
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
00374 EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo));
00375
00376
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
00386 #if 0
00387 extern const int jpeg_zigzag_order[];
00388 #endif
00389 extern const int jpeg_natural_order[];
00390 extern const int jpeg_natural_order7[];
00391 extern const int jpeg_natural_order6[];
00392 extern const int jpeg_natural_order5[];
00393 extern const int jpeg_natural_order4[];
00394 extern const int jpeg_natural_order3[];
00395 extern const int jpeg_natural_order2[];
00396
00397
00398 extern const INT32 jpeg_aritab[];
00399
00400
00401
00402 #ifdef INCOMPLETE_TYPES_BROKEN
00403 #ifndef AM_MEMORY_MANAGER
00404 struct jvirt_sarray_control { long dummy; };
00405 struct jvirt_barray_control { long dummy; };
00406 #endif
00407 #endif