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