170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine/* 270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * cdjpeg.h 370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * 470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * Copyright (C) 1994-1997, Thomas G. Lane. 570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * This file is part of the Independent JPEG Group's software. 670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * For conditions of distribution and use, see the accompanying README file. 770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * 870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * This file contains common declarations for the sample applications 970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * cjpeg and djpeg. It is NOT used by the core JPEG library. 1070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine */ 1170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 1270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */ 1370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */ 1470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#include "jinclude.h" 1570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#include "jpeglib.h" 1670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#include "jerror.h" /* get library error codes too */ 1770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#include "cderror.h" /* get application-specific error codes */ 1870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 1970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 2070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine/* 2170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * Object interface for cjpeg's source file decoding modules 2270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine */ 2370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 2470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinetypedef struct cjpeg_source_struct * cjpeg_source_ptr; 2570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 2670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinestruct cjpeg_source_struct { 2770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JMETHOD(void, start_input, (j_compress_ptr cinfo, 2870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine cjpeg_source_ptr sinfo)); 2970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, 3070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine cjpeg_source_ptr sinfo)); 3170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JMETHOD(void, finish_input, (j_compress_ptr cinfo, 3270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine cjpeg_source_ptr sinfo)); 3370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 3470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine FILE *input_file; 3570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 3670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JSAMPARRAY buffer; 3770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JDIMENSION buffer_height; 3870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine}; 3970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 4070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 4170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine/* 4270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * Object interface for djpeg's output file encoding modules 4370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine */ 4470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 4570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinetypedef struct djpeg_dest_struct * djpeg_dest_ptr; 4670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 4770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinestruct djpeg_dest_struct { 4870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine /* start_output is called after jpeg_start_decompress finishes. 4970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * The color map will be ready at this time, if one is needed. 5070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine */ 5170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JMETHOD(void, start_output, (j_decompress_ptr cinfo, 5270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine djpeg_dest_ptr dinfo)); 5370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine /* Emit the specified number of pixel rows from the buffer. */ 5470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JMETHOD(void, put_pixel_rows, (j_decompress_ptr cinfo, 5570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine djpeg_dest_ptr dinfo, 5670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JDIMENSION rows_supplied)); 5770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine /* Finish up at the end of the image. */ 5870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JMETHOD(void, finish_output, (j_decompress_ptr cinfo, 5970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine djpeg_dest_ptr dinfo)); 6070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 6170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine /* Target file spec; filled in by djpeg.c after object is created. */ 6270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine FILE * output_file; 6370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 6470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine /* Output pixel-row buffer. Created by module init or start_output. 6570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * Width is cinfo->output_width * cinfo->output_components; 6670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * height is buffer_height. 6770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine */ 6870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JSAMPARRAY buffer; 6970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine JDIMENSION buffer_height; 7070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine}; 7170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 7270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 7370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine/* 7470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * cjpeg/djpeg may need to perform extra passes to convert to or from 7570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * the source/destination file format. The JPEG library does not know 7670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * about these passes, but we'd like them to be counted by the progress 7770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * monitor. We use an expanded progress monitor object to hold the 7870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine * additional pass count. 7970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine */ 8070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 8170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinestruct cdjpeg_progress_mgr { 8270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine struct jpeg_progress_mgr pub; /* fields known to JPEG library */ 8370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine int completed_extra_passes; /* extra passes completed */ 8470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine int total_extra_passes; /* total extra */ 8570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine /* last printed percentage stored here to avoid multiple printouts */ 8670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine int percent_done; 8770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine}; 8870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 8970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinetypedef struct cdjpeg_progress_mgr * cd_progress_ptr; 9070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 9170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 9270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine/* Short forms of external names for systems with brain-damaged linkers. */ 9370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 9470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#ifdef NEED_SHORT_EXTERNAL_NAMES 9570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define jinit_read_bmp jIRdBMP 9670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define jinit_write_bmp jIWrBMP 9770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define jinit_read_gif jIRdGIF 9870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define jinit_write_gif jIWrGIF 9970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define jinit_read_ppm jIRdPPM 10070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define jinit_write_ppm jIWrPPM 10170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define jinit_read_rle jIRdRLE 10270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define jinit_write_rle jIWrRLE 10370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define jinit_read_targa jIRdTarga 10470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define jinit_write_targa jIWrTarga 10570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define read_quant_tables RdQTables 10670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define read_scan_script RdScnScript 10770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define set_quant_slots SetQSlots 10870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define set_sample_factors SetSFacts 10970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define read_color_map RdCMap 11070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define enable_signal_catcher EnSigCatcher 11170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define start_progress_monitor StProgMon 11270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define end_progress_monitor EnProgMon 11370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define read_stdin RdStdin 11470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define write_stdout WrStdout 11570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#endif /* NEED_SHORT_EXTERNAL_NAMES */ 11670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 11770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine/* Module selection routines for I/O modules. */ 11870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 11970a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(cjpeg_source_ptr) jinit_read_bmp JPP((j_compress_ptr cinfo)); 12070a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(djpeg_dest_ptr) jinit_write_bmp JPP((j_decompress_ptr cinfo, 12170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine boolean is_os2)); 12270a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(cjpeg_source_ptr) jinit_read_gif JPP((j_compress_ptr cinfo)); 12370a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(djpeg_dest_ptr) jinit_write_gif JPP((j_decompress_ptr cinfo)); 12470a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(cjpeg_source_ptr) jinit_read_ppm JPP((j_compress_ptr cinfo)); 12570a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(djpeg_dest_ptr) jinit_write_ppm JPP((j_decompress_ptr cinfo)); 12670a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(cjpeg_source_ptr) jinit_read_rle JPP((j_compress_ptr cinfo)); 12770a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(djpeg_dest_ptr) jinit_write_rle JPP((j_decompress_ptr cinfo)); 12870a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(cjpeg_source_ptr) jinit_read_targa JPP((j_compress_ptr cinfo)); 12970a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(djpeg_dest_ptr) jinit_write_targa JPP((j_decompress_ptr cinfo)); 13070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 13170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine/* cjpeg support routines (in rdswitch.c) */ 13270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 13370a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(boolean) read_quant_tables JPP((j_compress_ptr cinfo, char * filename, 13470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine int scale_factor, boolean force_baseline)); 13570a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(boolean) read_scan_script JPP((j_compress_ptr cinfo, char * filename)); 13670a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(boolean) set_quant_slots JPP((j_compress_ptr cinfo, char *arg)); 13770a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(boolean) set_sample_factors JPP((j_compress_ptr cinfo, char *arg)); 13870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 13970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine/* djpeg support routines (in rdcolmap.c) */ 14070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 14170a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(void) read_color_map JPP((j_decompress_ptr cinfo, FILE * infile)); 14270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 14370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine/* common support routines (in cdjpeg.c) */ 14470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 14570a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(void) enable_signal_catcher JPP((j_common_ptr cinfo)); 14670a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(void) start_progress_monitor JPP((j_common_ptr cinfo, 14770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine cd_progress_ptr progress)); 14870a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(void) end_progress_monitor JPP((j_common_ptr cinfo)); 14970a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(boolean) keymatch JPP((char * arg, const char * keyword, int minchars)); 15070a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(FILE *) read_stdin JPP((void)); 15170a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineEXTERN(FILE *) write_stdout JPP((void)); 15270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 15370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine/* miscellaneous useful macros */ 15470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 15570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ 15670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define READ_BINARY "r" 15770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define WRITE_BINARY "w" 15870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#else 15970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#ifdef VMS /* VMS is very nonstandard */ 16070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define READ_BINARY "rb", "ctx=stm" 16170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define WRITE_BINARY "wb", "ctx=stm" 16270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#else /* standard ANSI-compliant case */ 16370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define READ_BINARY "rb" 16470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define WRITE_BINARY "wb" 16570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#endif 16670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#endif 16770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 16870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#ifndef EXIT_FAILURE /* define exit() codes if not provided */ 16970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define EXIT_FAILURE 1 17070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#endif 17170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#ifndef EXIT_SUCCESS 17270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#ifdef VMS 17370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ 17470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#else 17570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define EXIT_SUCCESS 0 17670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#endif 17770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#endif 17870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#ifndef EXIT_WARNING 17970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#ifdef VMS 18070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define EXIT_WARNING 1 /* VMS is very nonstandard */ 18170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#else 18270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#define EXIT_WARNING 2 18370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#endif 18470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#endif 185