1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * cdjpeg.h 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (C) 1994-1997, Thomas G. Lane. 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * This file is part of the Independent JPEG Group's software. 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * For conditions of distribution and use, see the accompanying README file. 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * This file contains common declarations for the sample applications 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * cjpeg and djpeg. It is NOT used by the core JPEG library. 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "jinclude.h" 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "jpeglib.h" 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "jerror.h" /* get library error codes too */ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "cderror.h" /* get application-specific error codes */ 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Object interface for cjpeg's source file decoding modules 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct cjpeg_source_struct * cjpeg_source_ptr; 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct cjpeg_source_struct { 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JMETHOD(void, start_input, (j_compress_ptr cinfo, 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cjpeg_source_ptr sinfo)); 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cjpeg_source_ptr sinfo)); 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JMETHOD(void, finish_input, (j_compress_ptr cinfo, 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cjpeg_source_ptr sinfo)); 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXSYS_FILE *input_file; 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JSAMPARRAY buffer; 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JDIMENSION buffer_height; 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Object interface for djpeg's output file encoding modules 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct djpeg_dest_struct * djpeg_dest_ptr; 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct djpeg_dest_struct { 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* start_output is called after jpeg_start_decompress finishes. 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The color map will be ready at this time, if one is needed. 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JMETHOD(void, start_output, (j_decompress_ptr cinfo, 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov djpeg_dest_ptr dinfo)); 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Emit the specified number of pixel rows from the buffer. */ 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JMETHOD(void, put_pixel_rows, (j_decompress_ptr cinfo, 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov djpeg_dest_ptr dinfo, 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JDIMENSION rows_supplied)); 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Finish up at the end of the image. */ 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JMETHOD(void, finish_output, (j_decompress_ptr cinfo, 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov djpeg_dest_ptr dinfo)); 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Target file spec; filled in by djpeg.c after object is created. */ 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXSYS_FILE * output_file; 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Output pixel-row buffer. Created by module init or start_output. 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Width is cinfo->output_width * cinfo->output_components; 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * height is buffer_height. 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JSAMPARRAY buffer; 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JDIMENSION buffer_height; 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * cjpeg/djpeg may need to perform extra passes to convert to or from 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * the source/destination file format. The JPEG library does not know 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * about these passes, but we'd like them to be counted by the progress 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * monitor. We use an expanded progress monitor object to hold the 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * additional pass count. 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct cdjpeg_progress_mgr { 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct jpeg_progress_mgr pub; /* fields known to JPEG library */ 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int completed_extra_passes; /* extra passes completed */ 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int total_extra_passes; /* total extra */ 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* last printed percentage stored here to avoid multiple printouts */ 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int percent_done; 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct cdjpeg_progress_mgr * cd_progress_ptr; 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Short forms of external names for systems with brain-damaged linkers. */ 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef NEED_SHORT_EXTERNAL_NAMES 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define jinit_read_bmp jIRdBMP 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define jinit_write_bmp jIWrBMP 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define jinit_read_gif jIRdGIF 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define jinit_write_gif jIWrGIF 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define jinit_read_ppm jIRdPPM 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define jinit_write_ppm jIWrPPM 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define jinit_read_rle jIRdRLE 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define jinit_write_rle jIWrRLE 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define jinit_read_targa jIRdTarga 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define jinit_write_targa jIWrTarga 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define read_quant_tables RdQTables 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define read_scan_script RdScnScript 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define set_quant_slots SetQSlots 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define set_sample_factors SetSFacts 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define read_color_map RdCMap 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define enable_signal_catcher EnSigCatcher 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define start_progress_monitor StProgMon 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define end_progress_monitor EnProgMon 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define read_stdin RdStdin 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define write_stdout WrStdout 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* NEED_SHORT_EXTERNAL_NAMES */ 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Module selection routines for I/O modules. */ 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(cjpeg_source_ptr) jinit_read_bmp JPP((j_compress_ptr cinfo)); 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(djpeg_dest_ptr) jinit_write_bmp JPP((j_decompress_ptr cinfo, 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov boolean is_os2)); 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(cjpeg_source_ptr) jinit_read_gif JPP((j_compress_ptr cinfo)); 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(djpeg_dest_ptr) jinit_write_gif JPP((j_decompress_ptr cinfo)); 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(cjpeg_source_ptr) jinit_read_ppm JPP((j_compress_ptr cinfo)); 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(djpeg_dest_ptr) jinit_write_ppm JPP((j_decompress_ptr cinfo)); 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(cjpeg_source_ptr) jinit_read_rle JPP((j_compress_ptr cinfo)); 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(djpeg_dest_ptr) jinit_write_rle JPP((j_decompress_ptr cinfo)); 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(cjpeg_source_ptr) jinit_read_targa JPP((j_compress_ptr cinfo)); 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(djpeg_dest_ptr) jinit_write_targa JPP((j_decompress_ptr cinfo)); 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* cjpeg support routines (in rdswitch.c) */ 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(boolean) read_quant_tables JPP((j_compress_ptr cinfo, char * filename, 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int scale_factor, boolean force_baseline)); 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(boolean) read_scan_script JPP((j_compress_ptr cinfo, char * filename)); 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(boolean) set_quant_slots JPP((j_compress_ptr cinfo, char *arg)); 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(boolean) set_sample_factors JPP((j_compress_ptr cinfo, char *arg)); 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* djpeg support routines (in rdcolmap.c) */ 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(void) read_color_map JPP((j_decompress_ptr cinfo, FXSYS_FILE * infile)); 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* common support routines (in cdjpeg.c) */ 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(void) enable_signal_catcher JPP((j_common_ptr cinfo)); 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(void) start_progress_monitor JPP((j_common_ptr cinfo, 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cd_progress_ptr progress)); 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(void) end_progress_monitor JPP((j_common_ptr cinfo)); 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(boolean) keymatch JPP((char * arg, const char * keyword, int minchars)); 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(FXSYS_FILE *) read_stdin JPP((void)); 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEXTERN(FXSYS_FILE *) write_stdout JPP((void)); 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* miscellaneous useful macros */ 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define READ_BINARY "r" 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WRITE_BINARY "w" 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef VMS /* VMS is very nonstandard */ 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define READ_BINARY "rb", "ctx=stm" 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WRITE_BINARY "wb", "ctx=stm" 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* standard ANSI-compliant case */ 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define READ_BINARY "rb" 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WRITE_BINARY "wb" 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef EXIT_FAILURE /* define exit() codes if not provided */ 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXIT_FAILURE 1 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef EXIT_SUCCESS 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef VMS 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXIT_SUCCESS 0 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef EXIT_WARNING 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef VMS 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXIT_WARNING 1 /* VMS is very nonstandard */ 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXIT_WARNING 2 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 185