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