17dd7cddfSDavid du Colombier /* 27dd7cddfSDavid du Colombier * jpegint.h 37dd7cddfSDavid du Colombier * 4*593dc095SDavid du Colombier * Copyright (C) 1991-1997, Thomas G. Lane. 57dd7cddfSDavid du Colombier * This file is part of the Independent JPEG Group's software. 67dd7cddfSDavid du Colombier * For conditions of distribution and use, see the accompanying README file. 77dd7cddfSDavid du Colombier * 87dd7cddfSDavid du Colombier * This file provides common declarations for the various JPEG modules. 97dd7cddfSDavid du Colombier * These declarations are considered internal to the JPEG library; most 107dd7cddfSDavid du Colombier * applications using the library shouldn't need to include this file. 117dd7cddfSDavid du Colombier */ 127dd7cddfSDavid du Colombier 137dd7cddfSDavid du Colombier 147dd7cddfSDavid du Colombier /* Declarations for both compression & decompression */ 157dd7cddfSDavid du Colombier 167dd7cddfSDavid du Colombier typedef enum { /* Operating modes for buffer controllers */ 177dd7cddfSDavid du Colombier JBUF_PASS_THRU, /* Plain stripwise operation */ 187dd7cddfSDavid du Colombier /* Remaining modes require a full-image buffer to have been created */ 197dd7cddfSDavid du Colombier JBUF_SAVE_SOURCE, /* Run source subobject only, save output */ 207dd7cddfSDavid du Colombier JBUF_CRANK_DEST, /* Run dest subobject only, using saved data */ 217dd7cddfSDavid du Colombier JBUF_SAVE_AND_PASS /* Run both subobjects, save output */ 227dd7cddfSDavid du Colombier } J_BUF_MODE; 237dd7cddfSDavid du Colombier 247dd7cddfSDavid du Colombier /* Values of global_state field (jdapi.c has some dependencies on ordering!) */ 257dd7cddfSDavid du Colombier #define CSTATE_START 100 /* after create_compress */ 267dd7cddfSDavid du Colombier #define CSTATE_SCANNING 101 /* start_compress done, write_scanlines OK */ 277dd7cddfSDavid du Colombier #define CSTATE_RAW_OK 102 /* start_compress done, write_raw_data OK */ 287dd7cddfSDavid du Colombier #define CSTATE_WRCOEFS 103 /* jpeg_write_coefficients done */ 297dd7cddfSDavid du Colombier #define DSTATE_START 200 /* after create_decompress */ 307dd7cddfSDavid du Colombier #define DSTATE_INHEADER 201 /* reading header markers, no SOS yet */ 317dd7cddfSDavid du Colombier #define DSTATE_READY 202 /* found SOS, ready for start_decompress */ 327dd7cddfSDavid du Colombier #define DSTATE_PRELOAD 203 /* reading multiscan file in start_decompress*/ 337dd7cddfSDavid du Colombier #define DSTATE_PRESCAN 204 /* performing dummy pass for 2-pass quant */ 347dd7cddfSDavid du Colombier #define DSTATE_SCANNING 205 /* start_decompress done, read_scanlines OK */ 357dd7cddfSDavid du Colombier #define DSTATE_RAW_OK 206 /* start_decompress done, read_raw_data OK */ 367dd7cddfSDavid du Colombier #define DSTATE_BUFIMAGE 207 /* expecting jpeg_start_output */ 377dd7cddfSDavid du Colombier #define DSTATE_BUFPOST 208 /* looking for SOS/EOI in jpeg_finish_output */ 387dd7cddfSDavid du Colombier #define DSTATE_RDCOEFS 209 /* reading file in jpeg_read_coefficients */ 397dd7cddfSDavid du Colombier #define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */ 407dd7cddfSDavid du Colombier 417dd7cddfSDavid du Colombier 427dd7cddfSDavid du Colombier /* Declarations for compression modules */ 437dd7cddfSDavid du Colombier 447dd7cddfSDavid du Colombier /* Master control module */ 457dd7cddfSDavid du Colombier struct jpeg_comp_master { 467dd7cddfSDavid du Colombier JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo)); 477dd7cddfSDavid du Colombier JMETHOD(void, pass_startup, (j_compress_ptr cinfo)); 487dd7cddfSDavid du Colombier JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); 497dd7cddfSDavid du Colombier 507dd7cddfSDavid du Colombier /* State variables made visible to other modules */ 517dd7cddfSDavid du Colombier boolean call_pass_startup; /* True if pass_startup must be called */ 527dd7cddfSDavid du Colombier boolean is_last_pass; /* True during last pass */ 537dd7cddfSDavid du Colombier }; 547dd7cddfSDavid du Colombier 557dd7cddfSDavid du Colombier /* Main buffer control (downsampled-data buffer) */ 567dd7cddfSDavid du Colombier struct jpeg_c_main_controller { 577dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); 587dd7cddfSDavid du Colombier JMETHOD(void, process_data, (j_compress_ptr cinfo, 597dd7cddfSDavid du Colombier JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, 607dd7cddfSDavid du Colombier JDIMENSION in_rows_avail)); 617dd7cddfSDavid du Colombier }; 627dd7cddfSDavid du Colombier 637dd7cddfSDavid du Colombier /* Compression preprocessing (downsampling input buffer control) */ 647dd7cddfSDavid du Colombier struct jpeg_c_prep_controller { 657dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); 667dd7cddfSDavid du Colombier JMETHOD(void, pre_process_data, (j_compress_ptr cinfo, 677dd7cddfSDavid du Colombier JSAMPARRAY input_buf, 687dd7cddfSDavid du Colombier JDIMENSION *in_row_ctr, 697dd7cddfSDavid du Colombier JDIMENSION in_rows_avail, 707dd7cddfSDavid du Colombier JSAMPIMAGE output_buf, 717dd7cddfSDavid du Colombier JDIMENSION *out_row_group_ctr, 727dd7cddfSDavid du Colombier JDIMENSION out_row_groups_avail)); 737dd7cddfSDavid du Colombier }; 747dd7cddfSDavid du Colombier 757dd7cddfSDavid du Colombier /* Coefficient buffer control */ 767dd7cddfSDavid du Colombier struct jpeg_c_coef_controller { 777dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); 787dd7cddfSDavid du Colombier JMETHOD(boolean, compress_data, (j_compress_ptr cinfo, 797dd7cddfSDavid du Colombier JSAMPIMAGE input_buf)); 807dd7cddfSDavid du Colombier }; 817dd7cddfSDavid du Colombier 827dd7cddfSDavid du Colombier /* Colorspace conversion */ 837dd7cddfSDavid du Colombier struct jpeg_color_converter { 847dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo)); 857dd7cddfSDavid du Colombier JMETHOD(void, color_convert, (j_compress_ptr cinfo, 867dd7cddfSDavid du Colombier JSAMPARRAY input_buf, JSAMPIMAGE output_buf, 877dd7cddfSDavid du Colombier JDIMENSION output_row, int num_rows)); 887dd7cddfSDavid du Colombier }; 897dd7cddfSDavid du Colombier 907dd7cddfSDavid du Colombier /* Downsampling */ 917dd7cddfSDavid du Colombier struct jpeg_downsampler { 927dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo)); 937dd7cddfSDavid du Colombier JMETHOD(void, downsample, (j_compress_ptr cinfo, 947dd7cddfSDavid du Colombier JSAMPIMAGE input_buf, JDIMENSION in_row_index, 957dd7cddfSDavid du Colombier JSAMPIMAGE output_buf, 967dd7cddfSDavid du Colombier JDIMENSION out_row_group_index)); 977dd7cddfSDavid du Colombier 987dd7cddfSDavid du Colombier boolean need_context_rows; /* TRUE if need rows above & below */ 997dd7cddfSDavid du Colombier }; 1007dd7cddfSDavid du Colombier 1017dd7cddfSDavid du Colombier /* Forward DCT (also controls coefficient quantization) */ 1027dd7cddfSDavid du Colombier struct jpeg_forward_dct { 1037dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo)); 1047dd7cddfSDavid du Colombier /* perhaps this should be an array??? */ 1057dd7cddfSDavid du Colombier JMETHOD(void, forward_DCT, (j_compress_ptr cinfo, 1067dd7cddfSDavid du Colombier jpeg_component_info * compptr, 1077dd7cddfSDavid du Colombier JSAMPARRAY sample_data, JBLOCKROW coef_blocks, 1087dd7cddfSDavid du Colombier JDIMENSION start_row, JDIMENSION start_col, 1097dd7cddfSDavid du Colombier JDIMENSION num_blocks)); 1107dd7cddfSDavid du Colombier }; 1117dd7cddfSDavid du Colombier 1127dd7cddfSDavid du Colombier /* Entropy encoding */ 1137dd7cddfSDavid du Colombier struct jpeg_entropy_encoder { 1147dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics)); 1157dd7cddfSDavid du Colombier JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data)); 1167dd7cddfSDavid du Colombier JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); 1177dd7cddfSDavid du Colombier }; 1187dd7cddfSDavid du Colombier 1197dd7cddfSDavid du Colombier /* Marker writing */ 1207dd7cddfSDavid du Colombier struct jpeg_marker_writer { 1217dd7cddfSDavid du Colombier JMETHOD(void, write_file_header, (j_compress_ptr cinfo)); 1227dd7cddfSDavid du Colombier JMETHOD(void, write_frame_header, (j_compress_ptr cinfo)); 1237dd7cddfSDavid du Colombier JMETHOD(void, write_scan_header, (j_compress_ptr cinfo)); 1247dd7cddfSDavid du Colombier JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo)); 1257dd7cddfSDavid du Colombier JMETHOD(void, write_tables_only, (j_compress_ptr cinfo)); 126*593dc095SDavid du Colombier /* These routines are exported to allow insertion of extra markers */ 127*593dc095SDavid du Colombier /* Probably only COM and APPn markers should be written this way */ 128*593dc095SDavid du Colombier JMETHOD(void, write_marker_header, (j_compress_ptr cinfo, int marker, 129*593dc095SDavid du Colombier unsigned int datalen)); 130*593dc095SDavid du Colombier JMETHOD(void, write_marker_byte, (j_compress_ptr cinfo, int val)); 1317dd7cddfSDavid du Colombier }; 1327dd7cddfSDavid du Colombier 1337dd7cddfSDavid du Colombier 1347dd7cddfSDavid du Colombier /* Declarations for decompression modules */ 1357dd7cddfSDavid du Colombier 1367dd7cddfSDavid du Colombier /* Master control module */ 1377dd7cddfSDavid du Colombier struct jpeg_decomp_master { 1387dd7cddfSDavid du Colombier JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo)); 1397dd7cddfSDavid du Colombier JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo)); 1407dd7cddfSDavid du Colombier 1417dd7cddfSDavid du Colombier /* State variables made visible to other modules */ 1427dd7cddfSDavid du Colombier boolean is_dummy_pass; /* True during 1st pass for 2-pass quant */ 1437dd7cddfSDavid du Colombier }; 1447dd7cddfSDavid du Colombier 1457dd7cddfSDavid du Colombier /* Input control module */ 1467dd7cddfSDavid du Colombier struct jpeg_input_controller { 1477dd7cddfSDavid du Colombier JMETHOD(int, consume_input, (j_decompress_ptr cinfo)); 1487dd7cddfSDavid du Colombier JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo)); 1497dd7cddfSDavid du Colombier JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); 1507dd7cddfSDavid du Colombier JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo)); 1517dd7cddfSDavid du Colombier 1527dd7cddfSDavid du Colombier /* State variables made visible to other modules */ 1537dd7cddfSDavid du Colombier boolean has_multiple_scans; /* True if file has multiple scans */ 1547dd7cddfSDavid du Colombier boolean eoi_reached; /* True when EOI has been consumed */ 1557dd7cddfSDavid du Colombier }; 1567dd7cddfSDavid du Colombier 1577dd7cddfSDavid du Colombier /* Main buffer control (downsampled-data buffer) */ 1587dd7cddfSDavid du Colombier struct jpeg_d_main_controller { 1597dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); 1607dd7cddfSDavid du Colombier JMETHOD(void, process_data, (j_decompress_ptr cinfo, 1617dd7cddfSDavid du Colombier JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, 1627dd7cddfSDavid du Colombier JDIMENSION out_rows_avail)); 1637dd7cddfSDavid du Colombier }; 1647dd7cddfSDavid du Colombier 1657dd7cddfSDavid du Colombier /* Coefficient buffer control */ 1667dd7cddfSDavid du Colombier struct jpeg_d_coef_controller { 1677dd7cddfSDavid du Colombier JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); 1687dd7cddfSDavid du Colombier JMETHOD(int, consume_data, (j_decompress_ptr cinfo)); 1697dd7cddfSDavid du Colombier JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo)); 1707dd7cddfSDavid du Colombier JMETHOD(int, decompress_data, (j_decompress_ptr cinfo, 1717dd7cddfSDavid du Colombier JSAMPIMAGE output_buf)); 1727dd7cddfSDavid du Colombier /* Pointer to array of coefficient virtual arrays, or NULL if none */ 1737dd7cddfSDavid du Colombier jvirt_barray_ptr *coef_arrays; 1747dd7cddfSDavid du Colombier }; 1757dd7cddfSDavid du Colombier 1767dd7cddfSDavid du Colombier /* Decompression postprocessing (color quantization buffer control) */ 1777dd7cddfSDavid du Colombier struct jpeg_d_post_controller { 1787dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); 1797dd7cddfSDavid du Colombier JMETHOD(void, post_process_data, (j_decompress_ptr cinfo, 1807dd7cddfSDavid du Colombier JSAMPIMAGE input_buf, 1817dd7cddfSDavid du Colombier JDIMENSION *in_row_group_ctr, 1827dd7cddfSDavid du Colombier JDIMENSION in_row_groups_avail, 1837dd7cddfSDavid du Colombier JSAMPARRAY output_buf, 1847dd7cddfSDavid du Colombier JDIMENSION *out_row_ctr, 1857dd7cddfSDavid du Colombier JDIMENSION out_rows_avail)); 1867dd7cddfSDavid du Colombier }; 1877dd7cddfSDavid du Colombier 1887dd7cddfSDavid du Colombier /* Marker reading & parsing */ 1897dd7cddfSDavid du Colombier struct jpeg_marker_reader { 1907dd7cddfSDavid du Colombier JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo)); 1917dd7cddfSDavid du Colombier /* Read markers until SOS or EOI. 1927dd7cddfSDavid du Colombier * Returns same codes as are defined for jpeg_consume_input: 1937dd7cddfSDavid du Colombier * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. 1947dd7cddfSDavid du Colombier */ 1957dd7cddfSDavid du Colombier JMETHOD(int, read_markers, (j_decompress_ptr cinfo)); 1967dd7cddfSDavid du Colombier /* Read a restart marker --- exported for use by entropy decoder only */ 1977dd7cddfSDavid du Colombier jpeg_marker_parser_method read_restart_marker; 1987dd7cddfSDavid du Colombier 1997dd7cddfSDavid du Colombier /* State of marker reader --- nominally internal, but applications 2007dd7cddfSDavid du Colombier * supplying COM or APPn handlers might like to know the state. 2017dd7cddfSDavid du Colombier */ 2027dd7cddfSDavid du Colombier boolean saw_SOI; /* found SOI? */ 2037dd7cddfSDavid du Colombier boolean saw_SOF; /* found SOF? */ 2047dd7cddfSDavid du Colombier int next_restart_num; /* next restart number expected (0-7) */ 2057dd7cddfSDavid du Colombier unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */ 2067dd7cddfSDavid du Colombier }; 2077dd7cddfSDavid du Colombier 2087dd7cddfSDavid du Colombier /* Entropy decoding */ 2097dd7cddfSDavid du Colombier struct jpeg_entropy_decoder { 2107dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); 2117dd7cddfSDavid du Colombier JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, 2127dd7cddfSDavid du Colombier JBLOCKROW *MCU_data)); 213*593dc095SDavid du Colombier 214*593dc095SDavid du Colombier /* This is here to share code between baseline and progressive decoders; */ 215*593dc095SDavid du Colombier /* other modules probably should not use it */ 216*593dc095SDavid du Colombier boolean insufficient_data; /* set TRUE after emitting warning */ 2177dd7cddfSDavid du Colombier }; 2187dd7cddfSDavid du Colombier 2197dd7cddfSDavid du Colombier /* Inverse DCT (also performs dequantization) */ 2207dd7cddfSDavid du Colombier typedef JMETHOD(void, inverse_DCT_method_ptr, 2217dd7cddfSDavid du Colombier (j_decompress_ptr cinfo, jpeg_component_info * compptr, 2227dd7cddfSDavid du Colombier JCOEFPTR coef_block, 2237dd7cddfSDavid du Colombier JSAMPARRAY output_buf, JDIMENSION output_col)); 2247dd7cddfSDavid du Colombier 2257dd7cddfSDavid du Colombier struct jpeg_inverse_dct { 2267dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); 2277dd7cddfSDavid du Colombier /* It is useful to allow each component to have a separate IDCT method. */ 2287dd7cddfSDavid du Colombier inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS]; 2297dd7cddfSDavid du Colombier }; 2307dd7cddfSDavid du Colombier 2317dd7cddfSDavid du Colombier /* Upsampling (note that upsampler must also call color converter) */ 2327dd7cddfSDavid du Colombier struct jpeg_upsampler { 2337dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); 2347dd7cddfSDavid du Colombier JMETHOD(void, upsample, (j_decompress_ptr cinfo, 2357dd7cddfSDavid du Colombier JSAMPIMAGE input_buf, 2367dd7cddfSDavid du Colombier JDIMENSION *in_row_group_ctr, 2377dd7cddfSDavid du Colombier JDIMENSION in_row_groups_avail, 2387dd7cddfSDavid du Colombier JSAMPARRAY output_buf, 2397dd7cddfSDavid du Colombier JDIMENSION *out_row_ctr, 2407dd7cddfSDavid du Colombier JDIMENSION out_rows_avail)); 2417dd7cddfSDavid du Colombier 2427dd7cddfSDavid du Colombier boolean need_context_rows; /* TRUE if need rows above & below */ 2437dd7cddfSDavid du Colombier }; 2447dd7cddfSDavid du Colombier 2457dd7cddfSDavid du Colombier /* Colorspace conversion */ 2467dd7cddfSDavid du Colombier struct jpeg_color_deconverter { 2477dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); 2487dd7cddfSDavid du Colombier JMETHOD(void, color_convert, (j_decompress_ptr cinfo, 2497dd7cddfSDavid du Colombier JSAMPIMAGE input_buf, JDIMENSION input_row, 2507dd7cddfSDavid du Colombier JSAMPARRAY output_buf, int num_rows)); 2517dd7cddfSDavid du Colombier }; 2527dd7cddfSDavid du Colombier 2537dd7cddfSDavid du Colombier /* Color quantization or color precision reduction */ 2547dd7cddfSDavid du Colombier struct jpeg_color_quantizer { 2557dd7cddfSDavid du Colombier JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan)); 2567dd7cddfSDavid du Colombier JMETHOD(void, color_quantize, (j_decompress_ptr cinfo, 2577dd7cddfSDavid du Colombier JSAMPARRAY input_buf, JSAMPARRAY output_buf, 2587dd7cddfSDavid du Colombier int num_rows)); 2597dd7cddfSDavid du Colombier JMETHOD(void, finish_pass, (j_decompress_ptr cinfo)); 2607dd7cddfSDavid du Colombier JMETHOD(void, new_color_map, (j_decompress_ptr cinfo)); 2617dd7cddfSDavid du Colombier }; 2627dd7cddfSDavid du Colombier 2637dd7cddfSDavid du Colombier 2647dd7cddfSDavid du Colombier /* Miscellaneous useful macros */ 2657dd7cddfSDavid du Colombier 2667dd7cddfSDavid du Colombier #undef MAX 2677dd7cddfSDavid du Colombier #define MAX(a,b) ((a) > (b) ? (a) : (b)) 2687dd7cddfSDavid du Colombier #undef MIN 2697dd7cddfSDavid du Colombier #define MIN(a,b) ((a) < (b) ? (a) : (b)) 2707dd7cddfSDavid du Colombier 2717dd7cddfSDavid du Colombier 2727dd7cddfSDavid du Colombier /* We assume that right shift corresponds to signed division by 2 with 2737dd7cddfSDavid du Colombier * rounding towards minus infinity. This is correct for typical "arithmetic 2747dd7cddfSDavid du Colombier * shift" instructions that shift in copies of the sign bit. But some 2757dd7cddfSDavid du Colombier * C compilers implement >> with an unsigned shift. For these machines you 2767dd7cddfSDavid du Colombier * must define RIGHT_SHIFT_IS_UNSIGNED. 2777dd7cddfSDavid du Colombier * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. 2787dd7cddfSDavid du Colombier * It is only applied with constant shift counts. SHIFT_TEMPS must be 2797dd7cddfSDavid du Colombier * included in the variables of any routine using RIGHT_SHIFT. 2807dd7cddfSDavid du Colombier */ 2817dd7cddfSDavid du Colombier 2827dd7cddfSDavid du Colombier #ifdef RIGHT_SHIFT_IS_UNSIGNED 2837dd7cddfSDavid du Colombier #define SHIFT_TEMPS INT32 shift_temp; 2847dd7cddfSDavid du Colombier #define RIGHT_SHIFT(x,shft) \ 2857dd7cddfSDavid du Colombier ((shift_temp = (x)) < 0 ? \ 2867dd7cddfSDavid du Colombier (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ 2877dd7cddfSDavid du Colombier (shift_temp >> (shft))) 2887dd7cddfSDavid du Colombier #else 2897dd7cddfSDavid du Colombier #define SHIFT_TEMPS 2907dd7cddfSDavid du Colombier #define RIGHT_SHIFT(x,shft) ((x) >> (shft)) 2917dd7cddfSDavid du Colombier #endif 2927dd7cddfSDavid du Colombier 2937dd7cddfSDavid du Colombier 2947dd7cddfSDavid du Colombier /* Short forms of external names for systems with brain-damaged linkers. */ 2957dd7cddfSDavid du Colombier 2967dd7cddfSDavid du Colombier #ifdef NEED_SHORT_EXTERNAL_NAMES 2977dd7cddfSDavid du Colombier #define jinit_compress_master jICompress 2987dd7cddfSDavid du Colombier #define jinit_c_master_control jICMaster 2997dd7cddfSDavid du Colombier #define jinit_c_main_controller jICMainC 3007dd7cddfSDavid du Colombier #define jinit_c_prep_controller jICPrepC 3017dd7cddfSDavid du Colombier #define jinit_c_coef_controller jICCoefC 3027dd7cddfSDavid du Colombier #define jinit_color_converter jICColor 3037dd7cddfSDavid du Colombier #define jinit_downsampler jIDownsampler 3047dd7cddfSDavid du Colombier #define jinit_forward_dct jIFDCT 3057dd7cddfSDavid du Colombier #define jinit_huff_encoder jIHEncoder 3067dd7cddfSDavid du Colombier #define jinit_phuff_encoder jIPHEncoder 3077dd7cddfSDavid du Colombier #define jinit_marker_writer jIMWriter 3087dd7cddfSDavid du Colombier #define jinit_master_decompress jIDMaster 3097dd7cddfSDavid du Colombier #define jinit_d_main_controller jIDMainC 3107dd7cddfSDavid du Colombier #define jinit_d_coef_controller jIDCoefC 3117dd7cddfSDavid du Colombier #define jinit_d_post_controller jIDPostC 3127dd7cddfSDavid du Colombier #define jinit_input_controller jIInCtlr 3137dd7cddfSDavid du Colombier #define jinit_marker_reader jIMReader 3147dd7cddfSDavid du Colombier #define jinit_huff_decoder jIHDecoder 3157dd7cddfSDavid du Colombier #define jinit_phuff_decoder jIPHDecoder 3167dd7cddfSDavid du Colombier #define jinit_inverse_dct jIIDCT 3177dd7cddfSDavid du Colombier #define jinit_upsampler jIUpsampler 3187dd7cddfSDavid du Colombier #define jinit_color_deconverter jIDColor 3197dd7cddfSDavid du Colombier #define jinit_1pass_quantizer jI1Quant 3207dd7cddfSDavid du Colombier #define jinit_2pass_quantizer jI2Quant 3217dd7cddfSDavid du Colombier #define jinit_merged_upsampler jIMUpsampler 3227dd7cddfSDavid du Colombier #define jinit_memory_mgr jIMemMgr 3237dd7cddfSDavid du Colombier #define jdiv_round_up jDivRound 3247dd7cddfSDavid du Colombier #define jround_up jRound 3257dd7cddfSDavid du Colombier #define jcopy_sample_rows jCopySamples 3267dd7cddfSDavid du Colombier #define jcopy_block_row jCopyBlocks 3277dd7cddfSDavid du Colombier #define jzero_far jZeroFar 3287dd7cddfSDavid du Colombier #define jpeg_zigzag_order jZIGTable 3297dd7cddfSDavid du Colombier #define jpeg_natural_order jZAGTable 3307dd7cddfSDavid du Colombier #endif /* NEED_SHORT_EXTERNAL_NAMES */ 3317dd7cddfSDavid du Colombier 3327dd7cddfSDavid du Colombier 3337dd7cddfSDavid du Colombier /* Compression module initialization routines */ 3347dd7cddfSDavid du Colombier EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo)); 3357dd7cddfSDavid du Colombier EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo, 3367dd7cddfSDavid du Colombier boolean transcode_only)); 3377dd7cddfSDavid du Colombier EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo, 3387dd7cddfSDavid du Colombier boolean need_full_buffer)); 3397dd7cddfSDavid du Colombier EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo, 3407dd7cddfSDavid du Colombier boolean need_full_buffer)); 3417dd7cddfSDavid du Colombier EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo, 3427dd7cddfSDavid du Colombier boolean need_full_buffer)); 3437dd7cddfSDavid du Colombier EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo)); 3447dd7cddfSDavid du Colombier EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo)); 3457dd7cddfSDavid du Colombier EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo)); 3467dd7cddfSDavid du Colombier EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo)); 3477dd7cddfSDavid du Colombier EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo)); 3487dd7cddfSDavid du Colombier EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo)); 3497dd7cddfSDavid du Colombier /* Decompression module initialization routines */ 3507dd7cddfSDavid du Colombier EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo)); 3517dd7cddfSDavid du Colombier EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo, 3527dd7cddfSDavid du Colombier boolean need_full_buffer)); 3537dd7cddfSDavid du Colombier EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo, 3547dd7cddfSDavid du Colombier boolean need_full_buffer)); 3557dd7cddfSDavid du Colombier EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo, 3567dd7cddfSDavid du Colombier boolean need_full_buffer)); 3577dd7cddfSDavid du Colombier EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo)); 3587dd7cddfSDavid du Colombier EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo)); 3597dd7cddfSDavid du Colombier EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo)); 3607dd7cddfSDavid du Colombier EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo)); 3617dd7cddfSDavid du Colombier EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo)); 3627dd7cddfSDavid du Colombier EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo)); 3637dd7cddfSDavid du Colombier EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo)); 3647dd7cddfSDavid du Colombier EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo)); 3657dd7cddfSDavid du Colombier EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo)); 3667dd7cddfSDavid du Colombier EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo)); 3677dd7cddfSDavid du Colombier /* Memory manager initialization */ 3687dd7cddfSDavid du Colombier EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo)); 3697dd7cddfSDavid du Colombier 3707dd7cddfSDavid du Colombier /* Utility routines in jutils.c */ 3717dd7cddfSDavid du Colombier EXTERN(long) jdiv_round_up JPP((long a, long b)); 3727dd7cddfSDavid du Colombier EXTERN(long) jround_up JPP((long a, long b)); 3737dd7cddfSDavid du Colombier EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row, 3747dd7cddfSDavid du Colombier JSAMPARRAY output_array, int dest_row, 3757dd7cddfSDavid du Colombier int num_rows, JDIMENSION num_cols)); 3767dd7cddfSDavid du Colombier EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row, 3777dd7cddfSDavid du Colombier JDIMENSION num_blocks)); 3787dd7cddfSDavid du Colombier EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero)); 3797dd7cddfSDavid du Colombier /* Constant tables in jutils.c */ 380*593dc095SDavid du Colombier #if 0 /* This table is not actually needed in v6a */ 3817dd7cddfSDavid du Colombier extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */ 382*593dc095SDavid du Colombier #endif 3837dd7cddfSDavid du Colombier extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */ 3847dd7cddfSDavid du Colombier 3857dd7cddfSDavid du Colombier /* Suppress undefined-structure complaints if necessary. */ 3867dd7cddfSDavid du Colombier 3877dd7cddfSDavid du Colombier #ifdef INCOMPLETE_TYPES_BROKEN 3887dd7cddfSDavid du Colombier #ifndef AM_MEMORY_MANAGER /* only jmemmgr.c defines these */ 3897dd7cddfSDavid du Colombier struct jvirt_sarray_control { long dummy; }; 3907dd7cddfSDavid du Colombier struct jvirt_barray_control { long dummy; }; 3917dd7cddfSDavid du Colombier #endif 3927dd7cddfSDavid du Colombier #endif /* INCOMPLETE_TYPES_BROKEN */ 393