1*7dd7cddfSDavid du Colombier /* 2*7dd7cddfSDavid du Colombier * jpegint.h 3*7dd7cddfSDavid du Colombier * 4*7dd7cddfSDavid du Colombier * Copyright (C) 1991-1996, Thomas G. Lane. 5*7dd7cddfSDavid du Colombier * This file is part of the Independent JPEG Group's software. 6*7dd7cddfSDavid du Colombier * For conditions of distribution and use, see the accompanying README file. 7*7dd7cddfSDavid du Colombier * 8*7dd7cddfSDavid du Colombier * This file provides common declarations for the various JPEG modules. 9*7dd7cddfSDavid du Colombier * These declarations are considered internal to the JPEG library; most 10*7dd7cddfSDavid du Colombier * applications using the library shouldn't need to include this file. 11*7dd7cddfSDavid du Colombier */ 12*7dd7cddfSDavid du Colombier 13*7dd7cddfSDavid du Colombier 14*7dd7cddfSDavid du Colombier /* Declarations for both compression & decompression */ 15*7dd7cddfSDavid du Colombier 16*7dd7cddfSDavid du Colombier typedef enum { /* Operating modes for buffer controllers */ 17*7dd7cddfSDavid du Colombier JBUF_PASS_THRU, /* Plain stripwise operation */ 18*7dd7cddfSDavid du Colombier /* Remaining modes require a full-image buffer to have been created */ 19*7dd7cddfSDavid du Colombier JBUF_SAVE_SOURCE, /* Run source subobject only, save output */ 20*7dd7cddfSDavid du Colombier JBUF_CRANK_DEST, /* Run dest subobject only, using saved data */ 21*7dd7cddfSDavid du Colombier JBUF_SAVE_AND_PASS /* Run both subobjects, save output */ 22*7dd7cddfSDavid du Colombier } J_BUF_MODE; 23*7dd7cddfSDavid du Colombier 24*7dd7cddfSDavid du Colombier /* Values of global_state field (jdapi.c has some dependencies on ordering!) */ 25*7dd7cddfSDavid du Colombier #define CSTATE_START 100 /* after create_compress */ 26*7dd7cddfSDavid du Colombier #define CSTATE_SCANNING 101 /* start_compress done, write_scanlines OK */ 27*7dd7cddfSDavid du Colombier #define CSTATE_RAW_OK 102 /* start_compress done, write_raw_data OK */ 28*7dd7cddfSDavid du Colombier #define CSTATE_WRCOEFS 103 /* jpeg_write_coefficients done */ 29*7dd7cddfSDavid du Colombier #define DSTATE_START 200 /* after create_decompress */ 30*7dd7cddfSDavid du Colombier #define DSTATE_INHEADER 201 /* reading header markers, no SOS yet */ 31*7dd7cddfSDavid du Colombier #define DSTATE_READY 202 /* found SOS, ready for start_decompress */ 32*7dd7cddfSDavid du Colombier #define DSTATE_PRELOAD 203 /* reading multiscan file in start_decompress*/ 33*7dd7cddfSDavid du Colombier #define DSTATE_PRESCAN 204 /* performing dummy pass for 2-pass quant */ 34*7dd7cddfSDavid du Colombier #define DSTATE_SCANNING 205 /* start_decompress done, read_scanlines OK */ 35*7dd7cddfSDavid du Colombier #define DSTATE_RAW_OK 206 /* start_decompress done, read_raw_data OK */ 36*7dd7cddfSDavid du Colombier #define DSTATE_BUFIMAGE 207 /* expecting jpeg_start_output */ 37*7dd7cddfSDavid du Colombier #define DSTATE_BUFPOST 208 /* looking for SOS/EOI in jpeg_finish_output */ 38*7dd7cddfSDavid du Colombier #define DSTATE_RDCOEFS 209 /* reading file in jpeg_read_coefficients */ 39*7dd7cddfSDavid du Colombier #define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */ 40*7dd7cddfSDavid du Colombier 41*7dd7cddfSDavid du Colombier 42*7dd7cddfSDavid du Colombier /* Declarations for compression modules */ 43*7dd7cddfSDavid du Colombier 44*7dd7cddfSDavid du Colombier /* Master control module */ 45*7dd7cddfSDavid du Colombier struct jpeg_comp_master { 46*7dd7cddfSDavid du Colombier JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo)); 47*7dd7cddfSDavid du Colombier JMETHOD(void, pass_startup, (j_compress_ptr cinfo)); 48*7dd7cddfSDavid du Colombier JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); 49*7dd7cddfSDavid du Colombier 50*7dd7cddfSDavid du Colombier /* State variables made visible to other modules */ 51*7dd7cddfSDavid du Colombier boolean call_pass_startup; /* True if pass_startup must be called */ 52*7dd7cddfSDavid du Colombier boolean is_last_pass; /* True during last pass */ 53*7dd7cddfSDavid du Colombier }; 54*7dd7cddfSDavid du Colombier 55*7dd7cddfSDavid du Colombier /* Main buffer control (downsampled-data buffer) */ 56*7dd7cddfSDavid du Colombier struct jpeg_c_main_controller { 57*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); 58*7dd7cddfSDavid du Colombier JMETHOD(void, process_data, (j_compress_ptr cinfo, 59*7dd7cddfSDavid du Colombier JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, 60*7dd7cddfSDavid du Colombier JDIMENSION in_rows_avail)); 61*7dd7cddfSDavid du Colombier }; 62*7dd7cddfSDavid du Colombier 63*7dd7cddfSDavid du Colombier /* Compression preprocessing (downsampling input buffer control) */ 64*7dd7cddfSDavid du Colombier struct jpeg_c_prep_controller { 65*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); 66*7dd7cddfSDavid du Colombier JMETHOD(void, pre_process_data, (j_compress_ptr cinfo, 67*7dd7cddfSDavid du Colombier JSAMPARRAY input_buf, 68*7dd7cddfSDavid du Colombier JDIMENSION *in_row_ctr, 69*7dd7cddfSDavid du Colombier JDIMENSION in_rows_avail, 70*7dd7cddfSDavid du Colombier JSAMPIMAGE output_buf, 71*7dd7cddfSDavid du Colombier JDIMENSION *out_row_group_ctr, 72*7dd7cddfSDavid du Colombier JDIMENSION out_row_groups_avail)); 73*7dd7cddfSDavid du Colombier }; 74*7dd7cddfSDavid du Colombier 75*7dd7cddfSDavid du Colombier /* Coefficient buffer control */ 76*7dd7cddfSDavid du Colombier struct jpeg_c_coef_controller { 77*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); 78*7dd7cddfSDavid du Colombier JMETHOD(boolean, compress_data, (j_compress_ptr cinfo, 79*7dd7cddfSDavid du Colombier JSAMPIMAGE input_buf)); 80*7dd7cddfSDavid du Colombier }; 81*7dd7cddfSDavid du Colombier 82*7dd7cddfSDavid du Colombier /* Colorspace conversion */ 83*7dd7cddfSDavid du Colombier struct jpeg_color_converter { 84*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo)); 85*7dd7cddfSDavid du Colombier JMETHOD(void, color_convert, (j_compress_ptr cinfo, 86*7dd7cddfSDavid du Colombier JSAMPARRAY input_buf, JSAMPIMAGE output_buf, 87*7dd7cddfSDavid du Colombier JDIMENSION output_row, int num_rows)); 88*7dd7cddfSDavid du Colombier }; 89*7dd7cddfSDavid du Colombier 90*7dd7cddfSDavid du Colombier /* Downsampling */ 91*7dd7cddfSDavid du Colombier struct jpeg_downsampler { 92*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo)); 93*7dd7cddfSDavid du Colombier JMETHOD(void, downsample, (j_compress_ptr cinfo, 94*7dd7cddfSDavid du Colombier JSAMPIMAGE input_buf, JDIMENSION in_row_index, 95*7dd7cddfSDavid du Colombier JSAMPIMAGE output_buf, 96*7dd7cddfSDavid du Colombier JDIMENSION out_row_group_index)); 97*7dd7cddfSDavid du Colombier 98*7dd7cddfSDavid du Colombier boolean need_context_rows; /* TRUE if need rows above & below */ 99*7dd7cddfSDavid du Colombier }; 100*7dd7cddfSDavid du Colombier 101*7dd7cddfSDavid du Colombier /* Forward DCT (also controls coefficient quantization) */ 102*7dd7cddfSDavid du Colombier struct jpeg_forward_dct { 103*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo)); 104*7dd7cddfSDavid du Colombier /* perhaps this should be an array??? */ 105*7dd7cddfSDavid du Colombier JMETHOD(void, forward_DCT, (j_compress_ptr cinfo, 106*7dd7cddfSDavid du Colombier jpeg_component_info * compptr, 107*7dd7cddfSDavid du Colombier JSAMPARRAY sample_data, JBLOCKROW coef_blocks, 108*7dd7cddfSDavid du Colombier JDIMENSION start_row, JDIMENSION start_col, 109*7dd7cddfSDavid du Colombier JDIMENSION num_blocks)); 110*7dd7cddfSDavid du Colombier }; 111*7dd7cddfSDavid du Colombier 112*7dd7cddfSDavid du Colombier /* Entropy encoding */ 113*7dd7cddfSDavid du Colombier struct jpeg_entropy_encoder { 114*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics)); 115*7dd7cddfSDavid du Colombier JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data)); 116*7dd7cddfSDavid du Colombier JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); 117*7dd7cddfSDavid du Colombier }; 118*7dd7cddfSDavid du Colombier 119*7dd7cddfSDavid du Colombier /* Marker writing */ 120*7dd7cddfSDavid du Colombier struct jpeg_marker_writer { 121*7dd7cddfSDavid du Colombier /* write_any_marker is exported for use by applications */ 122*7dd7cddfSDavid du Colombier /* Probably only COM and APPn markers should be written */ 123*7dd7cddfSDavid du Colombier JMETHOD(void, write_any_marker, (j_compress_ptr cinfo, int marker, 124*7dd7cddfSDavid du Colombier const JOCTET *dataptr, unsigned int datalen)); 125*7dd7cddfSDavid du Colombier JMETHOD(void, write_file_header, (j_compress_ptr cinfo)); 126*7dd7cddfSDavid du Colombier JMETHOD(void, write_frame_header, (j_compress_ptr cinfo)); 127*7dd7cddfSDavid du Colombier JMETHOD(void, write_scan_header, (j_compress_ptr cinfo)); 128*7dd7cddfSDavid du Colombier JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo)); 129*7dd7cddfSDavid du Colombier JMETHOD(void, write_tables_only, (j_compress_ptr cinfo)); 130*7dd7cddfSDavid du Colombier }; 131*7dd7cddfSDavid du Colombier 132*7dd7cddfSDavid du Colombier 133*7dd7cddfSDavid du Colombier /* Declarations for decompression modules */ 134*7dd7cddfSDavid du Colombier 135*7dd7cddfSDavid du Colombier /* Master control module */ 136*7dd7cddfSDavid du Colombier struct jpeg_decomp_master { 137*7dd7cddfSDavid du Colombier JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo)); 138*7dd7cddfSDavid du Colombier JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo)); 139*7dd7cddfSDavid du Colombier 140*7dd7cddfSDavid du Colombier /* State variables made visible to other modules */ 141*7dd7cddfSDavid du Colombier boolean is_dummy_pass; /* True during 1st pass for 2-pass quant */ 142*7dd7cddfSDavid du Colombier }; 143*7dd7cddfSDavid du Colombier 144*7dd7cddfSDavid du Colombier /* Input control module */ 145*7dd7cddfSDavid du Colombier struct jpeg_input_controller { 146*7dd7cddfSDavid du Colombier JMETHOD(int, consume_input, (j_decompress_ptr cinfo)); 147*7dd7cddfSDavid du Colombier JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo)); 148*7dd7cddfSDavid du Colombier JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); 149*7dd7cddfSDavid du Colombier JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo)); 150*7dd7cddfSDavid du Colombier 151*7dd7cddfSDavid du Colombier /* State variables made visible to other modules */ 152*7dd7cddfSDavid du Colombier boolean has_multiple_scans; /* True if file has multiple scans */ 153*7dd7cddfSDavid du Colombier boolean eoi_reached; /* True when EOI has been consumed */ 154*7dd7cddfSDavid du Colombier }; 155*7dd7cddfSDavid du Colombier 156*7dd7cddfSDavid du Colombier /* Main buffer control (downsampled-data buffer) */ 157*7dd7cddfSDavid du Colombier struct jpeg_d_main_controller { 158*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); 159*7dd7cddfSDavid du Colombier JMETHOD(void, process_data, (j_decompress_ptr cinfo, 160*7dd7cddfSDavid du Colombier JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, 161*7dd7cddfSDavid du Colombier JDIMENSION out_rows_avail)); 162*7dd7cddfSDavid du Colombier }; 163*7dd7cddfSDavid du Colombier 164*7dd7cddfSDavid du Colombier /* Coefficient buffer control */ 165*7dd7cddfSDavid du Colombier struct jpeg_d_coef_controller { 166*7dd7cddfSDavid du Colombier JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); 167*7dd7cddfSDavid du Colombier JMETHOD(int, consume_data, (j_decompress_ptr cinfo)); 168*7dd7cddfSDavid du Colombier JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo)); 169*7dd7cddfSDavid du Colombier JMETHOD(int, decompress_data, (j_decompress_ptr cinfo, 170*7dd7cddfSDavid du Colombier JSAMPIMAGE output_buf)); 171*7dd7cddfSDavid du Colombier /* Pointer to array of coefficient virtual arrays, or NULL if none */ 172*7dd7cddfSDavid du Colombier jvirt_barray_ptr *coef_arrays; 173*7dd7cddfSDavid du Colombier }; 174*7dd7cddfSDavid du Colombier 175*7dd7cddfSDavid du Colombier /* Decompression postprocessing (color quantization buffer control) */ 176*7dd7cddfSDavid du Colombier struct jpeg_d_post_controller { 177*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); 178*7dd7cddfSDavid du Colombier JMETHOD(void, post_process_data, (j_decompress_ptr cinfo, 179*7dd7cddfSDavid du Colombier JSAMPIMAGE input_buf, 180*7dd7cddfSDavid du Colombier JDIMENSION *in_row_group_ctr, 181*7dd7cddfSDavid du Colombier JDIMENSION in_row_groups_avail, 182*7dd7cddfSDavid du Colombier JSAMPARRAY output_buf, 183*7dd7cddfSDavid du Colombier JDIMENSION *out_row_ctr, 184*7dd7cddfSDavid du Colombier JDIMENSION out_rows_avail)); 185*7dd7cddfSDavid du Colombier }; 186*7dd7cddfSDavid du Colombier 187*7dd7cddfSDavid du Colombier /* Marker reading & parsing */ 188*7dd7cddfSDavid du Colombier struct jpeg_marker_reader { 189*7dd7cddfSDavid du Colombier JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo)); 190*7dd7cddfSDavid du Colombier /* Read markers until SOS or EOI. 191*7dd7cddfSDavid du Colombier * Returns same codes as are defined for jpeg_consume_input: 192*7dd7cddfSDavid du Colombier * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. 193*7dd7cddfSDavid du Colombier */ 194*7dd7cddfSDavid du Colombier JMETHOD(int, read_markers, (j_decompress_ptr cinfo)); 195*7dd7cddfSDavid du Colombier /* Read a restart marker --- exported for use by entropy decoder only */ 196*7dd7cddfSDavid du Colombier jpeg_marker_parser_method read_restart_marker; 197*7dd7cddfSDavid du Colombier /* Application-overridable marker processing methods */ 198*7dd7cddfSDavid du Colombier jpeg_marker_parser_method process_COM; 199*7dd7cddfSDavid du Colombier jpeg_marker_parser_method process_APPn[16]; 200*7dd7cddfSDavid du Colombier 201*7dd7cddfSDavid du Colombier /* State of marker reader --- nominally internal, but applications 202*7dd7cddfSDavid du Colombier * supplying COM or APPn handlers might like to know the state. 203*7dd7cddfSDavid du Colombier */ 204*7dd7cddfSDavid du Colombier boolean saw_SOI; /* found SOI? */ 205*7dd7cddfSDavid du Colombier boolean saw_SOF; /* found SOF? */ 206*7dd7cddfSDavid du Colombier int next_restart_num; /* next restart number expected (0-7) */ 207*7dd7cddfSDavid du Colombier unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */ 208*7dd7cddfSDavid du Colombier }; 209*7dd7cddfSDavid du Colombier 210*7dd7cddfSDavid du Colombier /* Entropy decoding */ 211*7dd7cddfSDavid du Colombier struct jpeg_entropy_decoder { 212*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); 213*7dd7cddfSDavid du Colombier JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, 214*7dd7cddfSDavid du Colombier JBLOCKROW *MCU_data)); 215*7dd7cddfSDavid du Colombier }; 216*7dd7cddfSDavid du Colombier 217*7dd7cddfSDavid du Colombier /* Inverse DCT (also performs dequantization) */ 218*7dd7cddfSDavid du Colombier typedef JMETHOD(void, inverse_DCT_method_ptr, 219*7dd7cddfSDavid du Colombier (j_decompress_ptr cinfo, jpeg_component_info * compptr, 220*7dd7cddfSDavid du Colombier JCOEFPTR coef_block, 221*7dd7cddfSDavid du Colombier JSAMPARRAY output_buf, JDIMENSION output_col)); 222*7dd7cddfSDavid du Colombier 223*7dd7cddfSDavid du Colombier struct jpeg_inverse_dct { 224*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); 225*7dd7cddfSDavid du Colombier /* It is useful to allow each component to have a separate IDCT method. */ 226*7dd7cddfSDavid du Colombier inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS]; 227*7dd7cddfSDavid du Colombier }; 228*7dd7cddfSDavid du Colombier 229*7dd7cddfSDavid du Colombier /* Upsampling (note that upsampler must also call color converter) */ 230*7dd7cddfSDavid du Colombier struct jpeg_upsampler { 231*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); 232*7dd7cddfSDavid du Colombier JMETHOD(void, upsample, (j_decompress_ptr cinfo, 233*7dd7cddfSDavid du Colombier JSAMPIMAGE input_buf, 234*7dd7cddfSDavid du Colombier JDIMENSION *in_row_group_ctr, 235*7dd7cddfSDavid du Colombier JDIMENSION in_row_groups_avail, 236*7dd7cddfSDavid du Colombier JSAMPARRAY output_buf, 237*7dd7cddfSDavid du Colombier JDIMENSION *out_row_ctr, 238*7dd7cddfSDavid du Colombier JDIMENSION out_rows_avail)); 239*7dd7cddfSDavid du Colombier 240*7dd7cddfSDavid du Colombier boolean need_context_rows; /* TRUE if need rows above & below */ 241*7dd7cddfSDavid du Colombier }; 242*7dd7cddfSDavid du Colombier 243*7dd7cddfSDavid du Colombier /* Colorspace conversion */ 244*7dd7cddfSDavid du Colombier struct jpeg_color_deconverter { 245*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); 246*7dd7cddfSDavid du Colombier JMETHOD(void, color_convert, (j_decompress_ptr cinfo, 247*7dd7cddfSDavid du Colombier JSAMPIMAGE input_buf, JDIMENSION input_row, 248*7dd7cddfSDavid du Colombier JSAMPARRAY output_buf, int num_rows)); 249*7dd7cddfSDavid du Colombier }; 250*7dd7cddfSDavid du Colombier 251*7dd7cddfSDavid du Colombier /* Color quantization or color precision reduction */ 252*7dd7cddfSDavid du Colombier struct jpeg_color_quantizer { 253*7dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan)); 254*7dd7cddfSDavid du Colombier JMETHOD(void, color_quantize, (j_decompress_ptr cinfo, 255*7dd7cddfSDavid du Colombier JSAMPARRAY input_buf, JSAMPARRAY output_buf, 256*7dd7cddfSDavid du Colombier int num_rows)); 257*7dd7cddfSDavid du Colombier JMETHOD(void, finish_pass, (j_decompress_ptr cinfo)); 258*7dd7cddfSDavid du Colombier JMETHOD(void, new_color_map, (j_decompress_ptr cinfo)); 259*7dd7cddfSDavid du Colombier }; 260*7dd7cddfSDavid du Colombier 261*7dd7cddfSDavid du Colombier 262*7dd7cddfSDavid du Colombier /* Miscellaneous useful macros */ 263*7dd7cddfSDavid du Colombier 264*7dd7cddfSDavid du Colombier #undef MAX 265*7dd7cddfSDavid du Colombier #define MAX(a,b) ((a) > (b) ? (a) : (b)) 266*7dd7cddfSDavid du Colombier #undef MIN 267*7dd7cddfSDavid du Colombier #define MIN(a,b) ((a) < (b) ? (a) : (b)) 268*7dd7cddfSDavid du Colombier 269*7dd7cddfSDavid du Colombier 270*7dd7cddfSDavid du Colombier /* We assume that right shift corresponds to signed division by 2 with 271*7dd7cddfSDavid du Colombier * rounding towards minus infinity. This is correct for typical "arithmetic 272*7dd7cddfSDavid du Colombier * shift" instructions that shift in copies of the sign bit. But some 273*7dd7cddfSDavid du Colombier * C compilers implement >> with an unsigned shift. For these machines you 274*7dd7cddfSDavid du Colombier * must define RIGHT_SHIFT_IS_UNSIGNED. 275*7dd7cddfSDavid du Colombier * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. 276*7dd7cddfSDavid du Colombier * It is only applied with constant shift counts. SHIFT_TEMPS must be 277*7dd7cddfSDavid du Colombier * included in the variables of any routine using RIGHT_SHIFT. 278*7dd7cddfSDavid du Colombier */ 279*7dd7cddfSDavid du Colombier 280*7dd7cddfSDavid du Colombier #ifdef RIGHT_SHIFT_IS_UNSIGNED 281*7dd7cddfSDavid du Colombier #define SHIFT_TEMPS INT32 shift_temp; 282*7dd7cddfSDavid du Colombier #define RIGHT_SHIFT(x,shft) \ 283*7dd7cddfSDavid du Colombier ((shift_temp = (x)) < 0 ? \ 284*7dd7cddfSDavid du Colombier (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ 285*7dd7cddfSDavid du Colombier (shift_temp >> (shft))) 286*7dd7cddfSDavid du Colombier #else 287*7dd7cddfSDavid du Colombier #define SHIFT_TEMPS 288*7dd7cddfSDavid du Colombier #define RIGHT_SHIFT(x,shft) ((x) >> (shft)) 289*7dd7cddfSDavid du Colombier #endif 290*7dd7cddfSDavid du Colombier 291*7dd7cddfSDavid du Colombier 292*7dd7cddfSDavid du Colombier /* Short forms of external names for systems with brain-damaged linkers. */ 293*7dd7cddfSDavid du Colombier 294*7dd7cddfSDavid du Colombier #ifdef NEED_SHORT_EXTERNAL_NAMES 295*7dd7cddfSDavid du Colombier #define jinit_compress_master jICompress 296*7dd7cddfSDavid du Colombier #define jinit_c_master_control jICMaster 297*7dd7cddfSDavid du Colombier #define jinit_c_main_controller jICMainC 298*7dd7cddfSDavid du Colombier #define jinit_c_prep_controller jICPrepC 299*7dd7cddfSDavid du Colombier #define jinit_c_coef_controller jICCoefC 300*7dd7cddfSDavid du Colombier #define jinit_color_converter jICColor 301*7dd7cddfSDavid du Colombier #define jinit_downsampler jIDownsampler 302*7dd7cddfSDavid du Colombier #define jinit_forward_dct jIFDCT 303*7dd7cddfSDavid du Colombier #define jinit_huff_encoder jIHEncoder 304*7dd7cddfSDavid du Colombier #define jinit_phuff_encoder jIPHEncoder 305*7dd7cddfSDavid du Colombier #define jinit_marker_writer jIMWriter 306*7dd7cddfSDavid du Colombier #define jinit_master_decompress jIDMaster 307*7dd7cddfSDavid du Colombier #define jinit_d_main_controller jIDMainC 308*7dd7cddfSDavid du Colombier #define jinit_d_coef_controller jIDCoefC 309*7dd7cddfSDavid du Colombier #define jinit_d_post_controller jIDPostC 310*7dd7cddfSDavid du Colombier #define jinit_input_controller jIInCtlr 311*7dd7cddfSDavid du Colombier #define jinit_marker_reader jIMReader 312*7dd7cddfSDavid du Colombier #define jinit_huff_decoder jIHDecoder 313*7dd7cddfSDavid du Colombier #define jinit_phuff_decoder jIPHDecoder 314*7dd7cddfSDavid du Colombier #define jinit_inverse_dct jIIDCT 315*7dd7cddfSDavid du Colombier #define jinit_upsampler jIUpsampler 316*7dd7cddfSDavid du Colombier #define jinit_color_deconverter jIDColor 317*7dd7cddfSDavid du Colombier #define jinit_1pass_quantizer jI1Quant 318*7dd7cddfSDavid du Colombier #define jinit_2pass_quantizer jI2Quant 319*7dd7cddfSDavid du Colombier #define jinit_merged_upsampler jIMUpsampler 320*7dd7cddfSDavid du Colombier #define jinit_memory_mgr jIMemMgr 321*7dd7cddfSDavid du Colombier #define jdiv_round_up jDivRound 322*7dd7cddfSDavid du Colombier #define jround_up jRound 323*7dd7cddfSDavid du Colombier #define jcopy_sample_rows jCopySamples 324*7dd7cddfSDavid du Colombier #define jcopy_block_row jCopyBlocks 325*7dd7cddfSDavid du Colombier #define jzero_far jZeroFar 326*7dd7cddfSDavid du Colombier #define jpeg_zigzag_order jZIGTable 327*7dd7cddfSDavid du Colombier #define jpeg_natural_order jZAGTable 328*7dd7cddfSDavid du Colombier #endif /* NEED_SHORT_EXTERNAL_NAMES */ 329*7dd7cddfSDavid du Colombier 330*7dd7cddfSDavid du Colombier 331*7dd7cddfSDavid du Colombier /* Compression module initialization routines */ 332*7dd7cddfSDavid du Colombier EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo)); 333*7dd7cddfSDavid du Colombier EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo, 334*7dd7cddfSDavid du Colombier boolean transcode_only)); 335*7dd7cddfSDavid du Colombier EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo, 336*7dd7cddfSDavid du Colombier boolean need_full_buffer)); 337*7dd7cddfSDavid du Colombier EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo, 338*7dd7cddfSDavid du Colombier boolean need_full_buffer)); 339*7dd7cddfSDavid du Colombier EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo, 340*7dd7cddfSDavid du Colombier boolean need_full_buffer)); 341*7dd7cddfSDavid du Colombier EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo)); 342*7dd7cddfSDavid du Colombier EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo)); 343*7dd7cddfSDavid du Colombier EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo)); 344*7dd7cddfSDavid du Colombier EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo)); 345*7dd7cddfSDavid du Colombier EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo)); 346*7dd7cddfSDavid du Colombier EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo)); 347*7dd7cddfSDavid du Colombier /* Decompression module initialization routines */ 348*7dd7cddfSDavid du Colombier EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo)); 349*7dd7cddfSDavid du Colombier EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo, 350*7dd7cddfSDavid du Colombier boolean need_full_buffer)); 351*7dd7cddfSDavid du Colombier EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo, 352*7dd7cddfSDavid du Colombier boolean need_full_buffer)); 353*7dd7cddfSDavid du Colombier EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo, 354*7dd7cddfSDavid du Colombier boolean need_full_buffer)); 355*7dd7cddfSDavid du Colombier EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo)); 356*7dd7cddfSDavid du Colombier EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo)); 357*7dd7cddfSDavid du Colombier EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo)); 358*7dd7cddfSDavid du Colombier EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo)); 359*7dd7cddfSDavid du Colombier EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo)); 360*7dd7cddfSDavid du Colombier EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo)); 361*7dd7cddfSDavid du Colombier EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo)); 362*7dd7cddfSDavid du Colombier EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo)); 363*7dd7cddfSDavid du Colombier EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo)); 364*7dd7cddfSDavid du Colombier EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo)); 365*7dd7cddfSDavid du Colombier /* Memory manager initialization */ 366*7dd7cddfSDavid du Colombier EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo)); 367*7dd7cddfSDavid du Colombier 368*7dd7cddfSDavid du Colombier /* Utility routines in jutils.c */ 369*7dd7cddfSDavid du Colombier EXTERN(long) jdiv_round_up JPP((long a, long b)); 370*7dd7cddfSDavid du Colombier EXTERN(long) jround_up JPP((long a, long b)); 371*7dd7cddfSDavid du Colombier EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row, 372*7dd7cddfSDavid du Colombier JSAMPARRAY output_array, int dest_row, 373*7dd7cddfSDavid du Colombier int num_rows, JDIMENSION num_cols)); 374*7dd7cddfSDavid du Colombier EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row, 375*7dd7cddfSDavid du Colombier JDIMENSION num_blocks)); 376*7dd7cddfSDavid du Colombier EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero)); 377*7dd7cddfSDavid du Colombier /* Constant tables in jutils.c */ 378*7dd7cddfSDavid du Colombier extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */ 379*7dd7cddfSDavid du Colombier extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */ 380*7dd7cddfSDavid du Colombier 381*7dd7cddfSDavid du Colombier /* Suppress undefined-structure complaints if necessary. */ 382*7dd7cddfSDavid du Colombier 383*7dd7cddfSDavid du Colombier #ifdef INCOMPLETE_TYPES_BROKEN 384*7dd7cddfSDavid du Colombier #ifndef AM_MEMORY_MANAGER /* only jmemmgr.c defines these */ 385*7dd7cddfSDavid du Colombier struct jvirt_sarray_control { long dummy; }; 386*7dd7cddfSDavid du Colombier struct jvirt_barray_control { long dummy; }; 387*7dd7cddfSDavid du Colombier #endif 388*7dd7cddfSDavid du Colombier #endif /* INCOMPLETE_TYPES_BROKEN */ 389