19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * cdjpeg.h 39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Copyright (C) 1994-1997, Thomas G. Lane. 59f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This file is part of the Independent JPEG Group's software. 69f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * For conditions of distribution and use, see the accompanying README file. 79f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 89f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This file contains common declarations for the sample applications 99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * cjpeg and djpeg. It is NOT used by the core JPEG library. 109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */ 139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */ 149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jinclude.h" 159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jpeglib.h" 169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jerror.h" /* get library error codes too */ 179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "cderror.h" /* get application-specific error codes */ 189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Object interface for cjpeg's source file decoding modules 229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecttypedef struct cjpeg_source_struct * cjpeg_source_ptr; 259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectstruct cjpeg_source_struct { 279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JMETHOD(void, start_input, (j_compress_ptr cinfo, 289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cjpeg_source_ptr sinfo)); 299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, 309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cjpeg_source_ptr sinfo)); 319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JMETHOD(void, finish_input, (j_compress_ptr cinfo, 329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cjpeg_source_ptr sinfo)); 339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project FILE *input_file; 359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JSAMPARRAY buffer; 379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JDIMENSION buffer_height; 389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}; 399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Object interface for djpeg's output file encoding modules 439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecttypedef struct djpeg_dest_struct * djpeg_dest_ptr; 469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectstruct djpeg_dest_struct { 489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* start_output is called after jpeg_start_decompress finishes. 499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The color map will be ready at this time, if one is needed. 509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JMETHOD(void, start_output, (j_decompress_ptr cinfo, 529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project djpeg_dest_ptr dinfo)); 539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Emit the specified number of pixel rows from the buffer. */ 549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JMETHOD(void, put_pixel_rows, (j_decompress_ptr cinfo, 559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project djpeg_dest_ptr dinfo, 569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JDIMENSION rows_supplied)); 579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Finish up at the end of the image. */ 589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JMETHOD(void, finish_output, (j_decompress_ptr cinfo, 599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project djpeg_dest_ptr dinfo)); 609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Target file spec; filled in by djpeg.c after object is created. */ 629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project FILE * output_file; 639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Output pixel-row buffer. Created by module init or start_output. 659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Width is cinfo->output_width * cinfo->output_components; 669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * height is buffer_height. 679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JSAMPARRAY buffer; 699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JDIMENSION buffer_height; 709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}; 719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * cjpeg/djpeg may need to perform extra passes to convert to or from 759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * the source/destination file format. The JPEG library does not know 769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * about these passes, but we'd like them to be counted by the progress 779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * monitor. We use an expanded progress monitor object to hold the 789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * additional pass count. 799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectstruct cdjpeg_progress_mgr { 829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project struct jpeg_progress_mgr pub; /* fields known to JPEG library */ 839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int completed_extra_passes; /* extra passes completed */ 849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int total_extra_passes; /* total extra */ 859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* last printed percentage stored here to avoid multiple printouts */ 869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int percent_done; 879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}; 889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecttypedef struct cdjpeg_progress_mgr * cd_progress_ptr; 909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Short forms of external names for systems with brain-damaged linkers. */ 939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef NEED_SHORT_EXTERNAL_NAMES 959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jinit_read_bmp jIRdBMP 969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jinit_write_bmp jIWrBMP 979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jinit_read_gif jIRdGIF 989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jinit_write_gif jIWrGIF 999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jinit_read_ppm jIRdPPM 1009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jinit_write_ppm jIWrPPM 1019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jinit_read_rle jIRdRLE 1029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jinit_write_rle jIWrRLE 1039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jinit_read_targa jIRdTarga 1049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jinit_write_targa jIWrTarga 1059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define read_quant_tables RdQTables 1069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define read_scan_script RdScnScript 1079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define set_quant_slots SetQSlots 1089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define set_sample_factors SetSFacts 1099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define read_color_map RdCMap 1109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define enable_signal_catcher EnSigCatcher 1119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define start_progress_monitor StProgMon 1129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define end_progress_monitor EnProgMon 1139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define read_stdin RdStdin 1149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define write_stdout WrStdout 1159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif /* NEED_SHORT_EXTERNAL_NAMES */ 1169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Module selection routines for I/O modules. */ 1189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(cjpeg_source_ptr) jinit_read_bmp JPP((j_compress_ptr cinfo)); 1209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(djpeg_dest_ptr) jinit_write_bmp JPP((j_decompress_ptr cinfo, 1219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project boolean is_os2)); 1229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(cjpeg_source_ptr) jinit_read_gif JPP((j_compress_ptr cinfo)); 1239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(djpeg_dest_ptr) jinit_write_gif JPP((j_decompress_ptr cinfo)); 1249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(cjpeg_source_ptr) jinit_read_ppm JPP((j_compress_ptr cinfo)); 1259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(djpeg_dest_ptr) jinit_write_ppm JPP((j_decompress_ptr cinfo)); 1269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(cjpeg_source_ptr) jinit_read_rle JPP((j_compress_ptr cinfo)); 1279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(djpeg_dest_ptr) jinit_write_rle JPP((j_decompress_ptr cinfo)); 1289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(cjpeg_source_ptr) jinit_read_targa JPP((j_compress_ptr cinfo)); 1299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(djpeg_dest_ptr) jinit_write_targa JPP((j_decompress_ptr cinfo)); 1309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* cjpeg support routines (in rdswitch.c) */ 1329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(boolean) read_quant_tables JPP((j_compress_ptr cinfo, char * filename, 1349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int scale_factor, boolean force_baseline)); 1359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(boolean) read_scan_script JPP((j_compress_ptr cinfo, char * filename)); 1369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(boolean) set_quant_slots JPP((j_compress_ptr cinfo, char *arg)); 1379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(boolean) set_sample_factors JPP((j_compress_ptr cinfo, char *arg)); 1389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* djpeg support routines (in rdcolmap.c) */ 1409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(void) read_color_map JPP((j_decompress_ptr cinfo, FILE * infile)); 1429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* common support routines (in cdjpeg.c) */ 1449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(void) enable_signal_catcher JPP((j_common_ptr cinfo)); 1469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(void) start_progress_monitor JPP((j_common_ptr cinfo, 1479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cd_progress_ptr progress)); 1489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(void) end_progress_monitor JPP((j_common_ptr cinfo)); 1499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(boolean) keymatch JPP((char * arg, const char * keyword, int minchars)); 1509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(FILE *) read_stdin JPP((void)); 1519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXTERN(FILE *) write_stdout JPP((void)); 1529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* miscellaneous useful macros */ 1549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ 1569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define READ_BINARY "r" 1579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define WRITE_BINARY "w" 1589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else 1599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef VMS /* VMS is very nonstandard */ 1609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define READ_BINARY "rb", "ctx=stm" 1619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define WRITE_BINARY "wb", "ctx=stm" 1629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else /* standard ANSI-compliant case */ 1639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define READ_BINARY "rb" 1649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define WRITE_BINARY "wb" 1659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 1669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 1679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef EXIT_FAILURE /* define exit() codes if not provided */ 1699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define EXIT_FAILURE 1 1709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 1719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef EXIT_SUCCESS 1729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef VMS 1739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ 1749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else 1759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define EXIT_SUCCESS 0 1769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 1779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 1789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef EXIT_WARNING 1799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef VMS 1809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define EXIT_WARNING 1 /* VMS is very nonstandard */ 1819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else 1829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define EXIT_WARNING 2 1839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 1849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 185