www.pudn.com > ±ÏÒµÁôÄî²á.rar > JPEGLIB.H


#ifndef JPEGLIB_H 
#define JPEGLIB_H 
 
#ifndef JCONFIG_INCLUDED	 
#include "jconfig.h"		 
#endif 
#include "jmorecfg.h"	 
 
#define JPEG_LIB_VERSION  61	/* Version 6a */ 
 
 
#define DCTSIZE		    8	 
#define DCTSIZE2	    64	 
#define NUM_QUANT_TBLS      4	 
#define NUM_HUFF_TBLS       4	 
#define NUM_ARITH_TBLS      16 
#define MAX_COMPS_IN_SCAN   4	 
#define MAX_SAMP_FACTOR     4 
 
#define C_MAX_BLOCKS_IN_MCU   10  
#ifndef D_MAX_BLOCKS_IN_MCU 
#define D_MAX_BLOCKS_IN_MCU   10  
#endif 
 
typedef JSAMPLE FAR *JSAMPROW;	 
typedef JSAMPROW *JSAMPARRAY;	 
typedef JSAMPARRAY *JSAMPIMAGE;	 
 
typedef JCOEF JBLOCK[DCTSIZE2];	 
typedef JBLOCK FAR *JBLOCKROW;	 
typedef JBLOCKROW *JBLOCKARRAY;		 
typedef JBLOCKARRAY *JBLOCKIMAGE;	 
 
typedef JCOEF FAR *JCOEFPTR; 
 
typedef struct { 
  UINT16 quantval[DCTSIZE2];	 
  boolean sent_table;		 
} JQUANT_TBL; 
 
typedef struct { 
  /* These two fields directly represent the contents of a JPEG DHT marker */ 
  UINT8 bits[17];		 
  UINT8 huffval[256];		 
  boolean sent_table;		/* TRUE when table has been output */ 
} JHUFF_TBL; 
 
typedef struct { 
  int component_id;		 
  int component_index;		 
  int h_samp_factor;		 
  int v_samp_factor;	 
  int quant_tbl_no;		 
  int dc_tbl_no;	 
  int ac_tbl_no;	 
   
  JDIMENSION width_in_blocks; 
  JDIMENSION height_in_blocks; 
 
  int DCT_scaled_size; 
 
  JDIMENSION downsampled_width;	  
  JDIMENSION downsampled_height;  
  boolean component_needed;	 
  int MCU_width;	 
  int MCU_height;	 
  int MCU_blocks;		 
  int MCU_sample_width;	 
  int last_col_width;		 
  int last_row_height;		 
 
  JQUANT_TBL * quant_table; 
 
  /* Private per-component storage for DCT or IDCT subsystem. */ 
  void * dct_table; 
} jpeg_component_info; 
 
 
/* The script for encoding a multiple-scan file is an array of these: */ 
 
typedef struct { 
  int comps_in_scan;		/* number of components encoded in this scan */ 
  int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ 
  int Ss, Se;			/* progressive JPEG spectral selection parms */ 
  int Ah, Al;			/* progressive JPEG successive approx. parms */ 
} jpeg_scan_info; 
 
 
/* Known color spaces. */ 
 
typedef enum { 
	JCS_UNKNOWN,		 
	JCS_GRAYSCALE,	 
	JCS_RGB,		 
	JCS_YCbCr,	 
	JCS_CMYK,		 
	JCS_YCCK		 
} J_COLOR_SPACE; 
 
typedef enum { 
	JDCT_ISLOW,		 
	JDCT_IFAST,	 
	JDCT_FLOAT	 
} J_DCT_METHOD; 
 
#ifndef JDCT_DEFAULT		/* may be overridden in jconfig.h */ 
#define JDCT_DEFAULT  JDCT_ISLOW 
#endif 
#ifndef JDCT_FASTEST		/* may be overridden in jconfig.h */ 
#define JDCT_FASTEST  JDCT_IFAST 
#endif 
 
typedef enum { 
	JDITHER_NONE,		 
	JDITHER_ORDERED, 
	JDITHER_FS	 
} J_DITHER_MODE; 
 
#define jpeg_common_fields \ 
  struct jpeg_error_mgr * err;	\ 
  struct jpeg_memory_mgr * mem;	\ 
  struct jpeg_progress_mgr * progress; \ 
  boolean is_decompressor;	\ 
  int global_state	 
 
struct jpeg_common_struct { 
  jpeg_common_fields;		 
}; 
 
typedef struct jpeg_common_struct * j_common_ptr; 
typedef struct jpeg_compress_struct * j_compress_ptr; 
typedef struct jpeg_decompress_struct * j_decompress_ptr; 
 
struct jpeg_compress_struct { 
  jpeg_common_fields;		 
  struct jpeg_destination_mgr * dest; 
 
  JDIMENSION image_width;	 
  JDIMENSION image_height;	 
  int input_components;		 
  J_COLOR_SPACE in_color_space;	 
 
  double input_gamma;	 
 
 
  int data_precision;		/* bits of precision in image data */ 
 
  int num_components;		/* # of color components in JPEG image */ 
  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ 
 
  jpeg_component_info * comp_info; 
 
  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; 
  
  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; 
  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; 
  /* ptrs to Huffman coding tables, or NULL if not defined */ 
   
  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ 
  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ 
  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ 
 
  int num_scans;	 
  const jpeg_scan_info * scan_info;  
 
  boolean raw_data_in;		/* TRUE=caller supplies downsampled data */ 
  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */ 
  boolean optimize_coding;	/* TRUE=optimize entropy encoding parms */ 
  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */ 
  int smoothing_factor;		/* 1..100, or 0 for no input smoothing */ 
  J_DCT_METHOD dct_method;	/* DCT algorithm selector */ 
 
  unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ 
  int restart_in_rows;		/* if > 0, MCU rows per restart interval */ 
 
  boolean write_JFIF_header;	/* should a JFIF marker be written? */ 
  UINT8 density_unit;		/* JFIF code for pixel size units */ 
  UINT16 X_density;		/* Horizontal pixel density */ 
  UINT16 Y_density;		/* Vertical pixel density */ 
  boolean write_Adobe_marker;	/* should an Adobe marker be written? */ 
  JDIMENSION next_scanline;	/* 0 .. image_height-1  */ 
 
  boolean progressive_mode;	/* TRUE if scan script uses progressive mode */ 
  int max_h_samp_factor;	/* largest h_samp_factor */ 
  int max_v_samp_factor;	/* largest v_samp_factor */ 
 
  JDIMENSION total_iMCU_rows;	/* # of iMCU rows to be input to coef ctlr */ 
 
  int comps_in_scan;		/* # of JPEG components in this scan */ 
  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; 
 
  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */ 
  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */ 
   
  int blocks_in_MCU;		/* # of DCT blocks per MCU */ 
  int MCU_membership[C_MAX_BLOCKS_IN_MCU]; 
 
  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */ 
  struct jpeg_comp_master * master; 
  struct jpeg_c_main_controller * main; 
  struct jpeg_c_prep_controller * prep; 
  struct jpeg_c_coef_controller * coef; 
  struct jpeg_marker_writer * marker; 
  struct jpeg_color_converter * cconvert; 
  struct jpeg_downsampler * downsample; 
  struct jpeg_forward_dct * fdct; 
  struct jpeg_entropy_encoder * entropy; 
}; 
 
 
/* Master record for a decompression instance */ 
 
struct jpeg_decompress_struct { 
  jpeg_common_fields;		/* Fields shared with jpeg_compress_struct */ 
 
  struct jpeg_source_mgr * src; 
 
  JDIMENSION image_width;	/* nominal image width (from SOF marker) */ 
  JDIMENSION image_height;	/* nominal image height */ 
  int num_components;		/* # of color components in JPEG image */ 
  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ 
 
  J_COLOR_SPACE out_color_space; /* colorspace for output */ 
 
  unsigned int scale_num, scale_denom; /* fraction by which to scale image */ 
 
  double output_gamma;		/* image gamma wanted in output */ 
 
  boolean buffered_image;	/* TRUE=multiple output passes */ 
  boolean raw_data_out;		/* TRUE=downsampled data wanted */ 
 
  J_DCT_METHOD dct_method;	/* IDCT algorithm selector */ 
  boolean do_fancy_upsampling;	/* TRUE=apply fancy upsampling */ 
  boolean do_block_smoothing;	/* TRUE=apply interblock smoothing */ 
 
  boolean quantize_colors;	/* TRUE=colormapped output wanted */ 
  J_DITHER_MODE dither_mode;	/* type of color dithering to use */ 
  boolean two_pass_quantize;	/* TRUE=use two-pass color quantization */ 
  int desired_number_of_colors;	/* max # colors to use in created colormap */ 
  /* these are significant only in buffered-image mode: */ 
  boolean enable_1pass_quant;	/* enable future use of 1-pass quantizer */ 
  boolean enable_external_quant;/* enable future use of external colormap */ 
  boolean enable_2pass_quant;	/* enable future use of 2-pass quantizer */ 
 
  JDIMENSION output_width;	/* scaled image width */ 
  JDIMENSION output_height;	/* scaled image height */ 
  int out_color_components;	/* # of color components in out_color_space */ 
  int output_components;	/* # of color components returned */ 
 
  int rec_outbuf_height;	/* min recommended height of scanline buffer */ 
 
  int actual_number_of_colors;	/* number of entries in use */ 
  JSAMPARRAY colormap;		/* The color map as a 2-D pixel array */ 
 
  JDIMENSION output_scanline;	/* 0 .. output_height-1  */ 
 
  int input_scan_number;	/* Number of SOS markers seen so far */ 
  JDIMENSION input_iMCU_row;	/* Number of iMCU rows completed */ 
 
  int output_scan_number;	/* Nominal scan number being displayed */ 
  JDIMENSION output_iMCU_row;	/* Number of iMCU rows read */ 
 
  int (*coef_bits)[DCTSIZE2];	/* -1 or current Al value for each coef */ 
 
  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; 
 
  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; 
  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; 
 
  int data_precision;		/* bits of precision in image data */ 
 
  jpeg_component_info * comp_info; 
 
  boolean progressive_mode;	/* TRUE if SOFn specifies progressive mode */ 
  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */ 
 
  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ 
  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ 
  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ 
 
  unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ 
 
  boolean saw_JFIF_marker;	 
  UINT8 density_unit;		/* JFIF code for pixel size units */ 
  UINT16 X_density;		/* Horizontal pixel density */ 
  UINT16 Y_density;		/* Vertical pixel density */ 
  boolean saw_Adobe_marker;	/* TRUE iff an Adobe APP14 marker was found */ 
  UINT8 Adobe_transform;	/* Color transform code from Adobe marker */ 
 
  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */ 
 
  int max_h_samp_factor;	/* largest h_samp_factor */ 
  int max_v_samp_factor;	/* largest v_samp_factor */ 
 
  int min_DCT_scaled_size;	/* smallest DCT_scaled_size of any component */ 
 
  JDIMENSION total_iMCU_rows;	 
 
  JSAMPLE * sample_range_limit; /* table for fast range-limiting */ 
 
  int comps_in_scan;		/* # of JPEG components in this scan */ 
  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; 
 
  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */ 
  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */ 
 
  int blocks_in_MCU;		/* # of DCT blocks per MCU */ 
  int MCU_membership[D_MAX_BLOCKS_IN_MCU]; 
 
  int Ss, Se, Ah, Al;		 
  int unread_marker; 
 
  /* 
   * Links to decompression subobjects (methods, private variables of modules) 
   */ 
  struct jpeg_decomp_master * master; 
  struct jpeg_d_main_controller * main; 
  struct jpeg_d_coef_controller * coef; 
  struct jpeg_d_post_controller * post; 
  struct jpeg_input_controller * inputctl; 
  struct jpeg_marker_reader * marker; 
  struct jpeg_entropy_decoder * entropy; 
  struct jpeg_inverse_dct * idct; 
  struct jpeg_upsampler * upsample; 
  struct jpeg_color_deconverter * cconvert; 
  struct jpeg_color_quantizer * cquantize; 
}; 
 
struct jpeg_error_mgr { 
  /* Error exit handler: does not return to caller */ 
  JMETHOD(void, error_exit, (j_common_ptr cinfo)); 
  /* Conditionally emit a trace or warning message */ 
  JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); 
  /* Routine that actually outputs a trace or error message */ 
  JMETHOD(void, output_message, (j_common_ptr cinfo)); 
  /* Format a message string for the most recent JPEG error or message */ 
  JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); 
#define JMSG_LENGTH_MAX  200	/* recommended size of format_message buffer */ 
  /* Reset error state variables at start of a new image */ 
  JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); 
  
  int msg_code; 
#define JMSG_STR_PARM_MAX  80 
  union { 
    int i[8]; 
    char s[JMSG_STR_PARM_MAX]; 
  } msg_parm; 
   
  int trace_level;		/* max msg_level that will be displayed */ 
 
  long num_warnings;		/* number of corrupt-data warnings */ 
 
  const char * const * jpeg_message_table; /* Library errors */ 
  int last_jpeg_message;     
  const char * const * addon_message_table; /* Non-library errors */ 
  int first_addon_message;	/* code for first string in addon table */ 
  int last_addon_message;	/* code for last string in addon table */ 
}; 
 
struct jpeg_progress_mgr { 
  JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); 
 
  long pass_counter;		/* work units completed in this pass */ 
  long pass_limit;		/* total number of work units in this pass */ 
  int completed_passes;		/* passes completed so far */ 
  int total_passes;		/* total number of passes expected */ 
}; 
 
struct jpeg_destination_mgr { 
  JOCTET * next_output_byte;	/* => next byte to write in buffer */ 
  size_t free_in_buffer;	/* # of byte spaces remaining in buffer */ 
 
  JMETHOD(void, init_destination, (j_compress_ptr cinfo)); 
  JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); 
  JMETHOD(void, term_destination, (j_compress_ptr cinfo)); 
}; 
 
struct jpeg_source_mgr { 
  const JOCTET * next_input_byte; /* => next byte to read from buffer */ 
  size_t bytes_in_buffer;	/* # of bytes remaining in buffer */ 
 
  JMETHOD(void, init_source, (j_decompress_ptr cinfo)); 
  JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); 
  JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); 
  JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); 
  JMETHOD(void, term_source, (j_decompress_ptr cinfo)); 
}; 
 
#define JPOOL_PERMANENT	0	/* lasts until master record is destroyed */ 
#define JPOOL_IMAGE	1	/* lasts until done with image/datastream */ 
#define JPOOL_NUMPOOLS	2 
 
typedef struct jvirt_sarray_control * jvirt_sarray_ptr; 
typedef struct jvirt_barray_control * jvirt_barray_ptr; 
 
 
struct jpeg_memory_mgr { 
  /* Method pointers */ 
  JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, 
				size_t sizeofobject)); 
  JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, 
				     size_t sizeofobject)); 
  JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, 
				     JDIMENSION samplesperrow, 
				     JDIMENSION numrows)); 
  JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, 
				      JDIMENSION blocksperrow, 
				      JDIMENSION numrows)); 
  JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, 
						  int pool_id, 
						  boolean pre_zero, 
						  JDIMENSION samplesperrow, 
						  JDIMENSION numrows, 
						  JDIMENSION maxaccess)); 
  JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, 
						  int pool_id, 
						  boolean pre_zero, 
						  JDIMENSION blocksperrow, 
						  JDIMENSION numrows, 
						  JDIMENSION maxaccess)); 
  JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); 
  JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, 
					   jvirt_sarray_ptr ptr, 
					   JDIMENSION start_row, 
					   JDIMENSION num_rows, 
					   boolean writable)); 
  JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, 
					    jvirt_barray_ptr ptr, 
					    JDIMENSION start_row, 
					    JDIMENSION num_rows, 
					    boolean writable)); 
  JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); 
  JMETHOD(void, self_destruct, (j_common_ptr cinfo)); 
 
  long max_memory_to_use; 
}; 
 
typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); 
 
#ifdef HAVE_PROTOTYPES 
#define JPP(arglist)	arglist 
#else 
#define JPP(arglist)	() 
#endif 
 
#ifdef NEED_SHORT_EXTERNAL_NAMES 
#define jpeg_std_error		jStdError 
#define jpeg_CreateCompress	jCreaCompress 
#define jpeg_CreateDecompress	jCreaDecompress 
#define jpeg_destroy_compress	jDestCompress 
#define jpeg_destroy_decompress	jDestDecompress 
#define jpeg_stdio_dest		jStdDest 
#define jpeg_stdio_src		jStdSrc 
#define jpeg_set_defaults	jSetDefaults 
#define jpeg_set_colorspace	jSetColorspace 
#define jpeg_default_colorspace	jDefColorspace 
#define jpeg_set_quality	jSetQuality 
#define jpeg_set_linear_quality	jSetLQuality 
#define jpeg_add_quant_table	jAddQuantTable 
#define jpeg_quality_scaling	jQualityScaling 
#define jpeg_simple_progression	jSimProgress 
#define jpeg_suppress_tables	jSuppressTables 
#define jpeg_alloc_quant_table	jAlcQTable 
#define jpeg_alloc_huff_table	jAlcHTable 
#define jpeg_start_compress	jStrtCompress 
#define jpeg_write_scanlines	jWrtScanlines 
#define jpeg_finish_compress	jFinCompress 
#define jpeg_write_raw_data	jWrtRawData 
#define jpeg_write_marker	jWrtMarker 
#define jpeg_write_tables	jWrtTables 
#define jpeg_read_header	jReadHeader 
#define jpeg_start_decompress	jStrtDecompress 
#define jpeg_read_scanlines	jReadScanlines 
#define jpeg_finish_decompress	jFinDecompress 
#define jpeg_read_raw_data	jReadRawData 
#define jpeg_has_multiple_scans	jHasMultScn 
#define jpeg_start_output	jStrtOutput 
#define jpeg_finish_output	jFinOutput 
#define jpeg_input_complete	jInComplete 
#define jpeg_new_colormap	jNewCMap 
#define jpeg_consume_input	jConsumeInput 
#define jpeg_calc_output_dimensions	jCalcDimensions 
#define jpeg_set_marker_processor	jSetMarker 
#define jpeg_read_coefficients	jReadCoefs 
#define jpeg_write_coefficients	jWrtCoefs 
#define jpeg_copy_critical_parameters	jCopyCrit 
#define jpeg_abort_compress	jAbrtCompress 
#define jpeg_abort_decompress	jAbrtDecompress 
#define jpeg_abort		jAbort 
#define jpeg_destroy		jDestroy 
#define jpeg_resync_to_restart	jResyncRestart 
#endif /* NEED_SHORT_EXTERNAL_NAMES */ 
 
 
/* Default error-management setup */ 
EXTERN(struct jpeg_error_mgr *) jpeg_std_error 
	JPP((struct jpeg_error_mgr * err)); 
 
#define jpeg_create_compress(cinfo) \ 
    jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ 
			(size_t) sizeof(struct jpeg_compress_struct)) 
#define jpeg_create_decompress(cinfo) \ 
    jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ 
			  (size_t) sizeof(struct jpeg_decompress_struct)) 
EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, 
				      int version, size_t structsize)); 
EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, 
					int version, size_t structsize)); 
/* Destruction of JPEG compression objects */ 
EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); 
EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); 
 
EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); 
EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); 
 
EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); 
 
EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, 
				      J_COLOR_SPACE colorspace)); 
EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); 
EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, 
				   boolean force_baseline)); 
EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, 
					  int scale_factor, 
					  boolean force_baseline)); 
EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, 
				       const unsigned int *basic_table, 
				       int scale_factor, 
				       boolean force_baseline)); 
EXTERN(int) jpeg_quality_scaling JPP((int quality)); 
EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); 
EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, 
				       boolean suppress)); 
EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); 
EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); 
 
EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, 
				      boolean write_all_tables)); 
EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, 
					     JSAMPARRAY scanlines, 
					     JDIMENSION num_lines)); 
EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); 
 
EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, 
					    JSAMPIMAGE data, 
					    JDIMENSION num_lines)); 
 
 
EXTERN(void) jpeg_write_marker 
	JPP((j_compress_ptr cinfo, int marker, 
	     const JOCTET * dataptr, unsigned int datalen)); 
 
 
EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); 
 
 
EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, 
				  boolean require_image)); 
 
#define JPEG_SUSPENDED		0  
#define JPEG_HEADER_OK		1  
#define JPEG_HEADER_TABLES_ONLY	2  
 
EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); 
EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, 
					    JSAMPARRAY scanlines, 
					    JDIMENSION max_lines)); 
EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); 
 
/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ 
EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, 
					   JSAMPIMAGE data, 
					   JDIMENSION max_lines)); 
 
/* Additional entry points for buffered-image mode. */ 
EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); 
EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, 
				       int scan_number)); 
EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); 
EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); 
EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); 
EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); 
 
#define JPEG_REACHED_SOS	1 /* Reached start of new scan */ 
#define JPEG_REACHED_EOI	2 /* Reached end of image */ 
#define JPEG_ROW_COMPLETED	3 /* Completed one iMCU row */ 
#define JPEG_SCAN_COMPLETED	4 /* Completed last iMCU row of a scan */ 
 
EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); 
 
EXTERN(void) jpeg_set_marker_processor 
	JPP((j_decompress_ptr cinfo, int marker_code, 
	     jpeg_marker_parser_method routine)); 
 
EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); 
EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, 
					  jvirt_barray_ptr * coef_arrays)); 
EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, 
						j_compress_ptr dstinfo)); 
 
EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); 
EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); 
 
EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); 
EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); 
 
EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, 
					    int desired)); 
 
#define JPEG_RST0	0xD0	 
#define JPEG_EOI	0xD9	 
#define JPEG_APP0	0xE0	 
#define JPEG_COM	0xFE	 
 
#ifdef INCOMPLETE_TYPES_BROKEN 
#ifndef JPEG_INTERNALS		 
struct jvirt_sarray_control { long dummy; }; 
struct jvirt_barray_control { long dummy; }; 
struct jpeg_comp_master { long dummy; }; 
struct jpeg_c_main_controller { long dummy; }; 
struct jpeg_c_prep_controller { long dummy; }; 
struct jpeg_c_coef_controller { long dummy; }; 
struct jpeg_marker_writer { long dummy; }; 
struct jpeg_color_converter { long dummy; }; 
struct jpeg_downsampler { long dummy; }; 
struct jpeg_forward_dct { long dummy; }; 
struct jpeg_entropy_encoder { long dummy; }; 
struct jpeg_decomp_master { long dummy; }; 
struct jpeg_d_main_controller { long dummy; }; 
struct jpeg_d_coef_controller { long dummy; }; 
struct jpeg_d_post_controller { long dummy; }; 
struct jpeg_input_controller { long dummy; }; 
struct jpeg_marker_reader { long dummy; }; 
struct jpeg_entropy_decoder { long dummy; }; 
struct jpeg_inverse_dct { long dummy; }; 
struct jpeg_upsampler { long dummy; }; 
struct jpeg_color_deconverter { long dummy; }; 
struct jpeg_color_quantizer { long dummy; }; 
#endif  
#endif  
 
#ifdef JPEG_INTERNALS 
#include "jpegint.h"	 
#include "jerror.h"	 
#endif 
 
#endif