blob: c633f3f88fd06568abdace226635e1d626a6d465 [file] [log] [blame]
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +00001/*
2 * cdjpeg.h
3 *
DRC5033f3e2014-05-18 18:33:44 +00004 * This file was part of the Independent JPEG Group's software:
Thomas G. Lane5ead57a1998-03-27 00:00:00 +00005 * Copyright (C) 1994-1997, Thomas G. Lane.
DRC5033f3e2014-05-18 18:33:44 +00006 * It was modified by The libjpeg-turbo Project to include only code relevant
7 * to libjpeg-turbo.
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +00008 * For conditions of distribution and use, see the accompanying README file.
9 *
10 * This file contains common declarations for the sample applications
11 * cjpeg and djpeg. It is NOT used by the core JPEG library.
12 */
13
DRCe5eaf372014-05-09 18:00:32 +000014#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */
15#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +000016#include "jinclude.h"
17#include "jpeglib.h"
DRCe5eaf372014-05-09 18:00:32 +000018#include "jerror.h" /* get library error codes too */
19#include "cderror.h" /* get application-specific error codes */
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +000020
21
22/*
23 * Object interface for cjpeg's source file decoding modules
24 */
25
26typedef struct cjpeg_source_struct * cjpeg_source_ptr;
27
28struct cjpeg_source_struct {
DRCbc56b752014-05-16 10:43:44 +000029 void (*start_input) (j_compress_ptr cinfo, cjpeg_source_ptr sinfo);
30 JDIMENSION (*get_pixel_rows) (j_compress_ptr cinfo, cjpeg_source_ptr sinfo);
31 void (*finish_input) (j_compress_ptr cinfo, cjpeg_source_ptr sinfo);
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +000032
33 FILE *input_file;
34
35 JSAMPARRAY buffer;
36 JDIMENSION buffer_height;
37};
38
39
40/*
41 * Object interface for djpeg's output file encoding modules
42 */
43
44typedef struct djpeg_dest_struct * djpeg_dest_ptr;
45
46struct djpeg_dest_struct {
47 /* start_output is called after jpeg_start_decompress finishes.
48 * The color map will be ready at this time, if one is needed.
49 */
DRCbc56b752014-05-16 10:43:44 +000050 void (*start_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +000051 /* Emit the specified number of pixel rows from the buffer. */
DRCbc56b752014-05-16 10:43:44 +000052 void (*put_pixel_rows) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo,
53 JDIMENSION rows_supplied);
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +000054 /* Finish up at the end of the image. */
DRCbc56b752014-05-16 10:43:44 +000055 void (*finish_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +000056
57 /* Target file spec; filled in by djpeg.c after object is created. */
58 FILE * output_file;
59
60 /* Output pixel-row buffer. Created by module init or start_output.
61 * Width is cinfo->output_width * cinfo->output_components;
62 * height is buffer_height.
63 */
64 JSAMPARRAY buffer;
65 JDIMENSION buffer_height;
66};
67
68
69/*
70 * cjpeg/djpeg may need to perform extra passes to convert to or from
71 * the source/destination file format. The JPEG library does not know
72 * about these passes, but we'd like them to be counted by the progress
73 * monitor. We use an expanded progress monitor object to hold the
74 * additional pass count.
75 */
76
77struct cdjpeg_progress_mgr {
DRCe5eaf372014-05-09 18:00:32 +000078 struct jpeg_progress_mgr pub; /* fields known to JPEG library */
79 int completed_extra_passes; /* extra passes completed */
80 int total_extra_passes; /* total extra */
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +000081 /* last printed percentage stored here to avoid multiple printouts */
82 int percent_done;
83};
84
85typedef struct cdjpeg_progress_mgr * cd_progress_ptr;
86
87
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +000088/* Module selection routines for I/O modules. */
89
DRCbc56b752014-05-16 10:43:44 +000090EXTERN(cjpeg_source_ptr) jinit_read_bmp (j_compress_ptr cinfo);
91EXTERN(djpeg_dest_ptr) jinit_write_bmp (j_decompress_ptr cinfo,
92 boolean is_os2);
93EXTERN(cjpeg_source_ptr) jinit_read_gif (j_compress_ptr cinfo);
94EXTERN(djpeg_dest_ptr) jinit_write_gif (j_decompress_ptr cinfo);
95EXTERN(cjpeg_source_ptr) jinit_read_ppm (j_compress_ptr cinfo);
96EXTERN(djpeg_dest_ptr) jinit_write_ppm (j_decompress_ptr cinfo);
97EXTERN(cjpeg_source_ptr) jinit_read_rle (j_compress_ptr cinfo);
98EXTERN(djpeg_dest_ptr) jinit_write_rle (j_decompress_ptr cinfo);
99EXTERN(cjpeg_source_ptr) jinit_read_targa (j_compress_ptr cinfo);
100EXTERN(djpeg_dest_ptr) jinit_write_targa (j_decompress_ptr cinfo);
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000101
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000102/* cjpeg support routines (in rdswitch.c) */
103
DRCbc56b752014-05-16 10:43:44 +0000104EXTERN(boolean) read_quant_tables (j_compress_ptr cinfo, char * filename,
105 boolean force_baseline);
106EXTERN(boolean) read_scan_script (j_compress_ptr cinfo, char * filename);
107EXTERN(boolean) set_quality_ratings (j_compress_ptr cinfo, char *arg,
108 boolean force_baseline);
109EXTERN(boolean) set_quant_slots (j_compress_ptr cinfo, char *arg);
110EXTERN(boolean) set_sample_factors (j_compress_ptr cinfo, char *arg);
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000111
112/* djpeg support routines (in rdcolmap.c) */
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000113
DRCbc56b752014-05-16 10:43:44 +0000114EXTERN(void) read_color_map (j_decompress_ptr cinfo, FILE * infile);
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000115
116/* common support routines (in cdjpeg.c) */
117
DRCbc56b752014-05-16 10:43:44 +0000118EXTERN(void) enable_signal_catcher (j_common_ptr cinfo);
119EXTERN(void) start_progress_monitor (j_common_ptr cinfo,
120 cd_progress_ptr progress);
121EXTERN(void) end_progress_monitor (j_common_ptr cinfo);
122EXTERN(boolean) keymatch (char * arg, const char * keyword, int minchars);
123EXTERN(FILE *) read_stdin (void);
124EXTERN(FILE *) write_stdout (void);
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000125
126/* miscellaneous useful macros */
127
DRCe5eaf372014-05-09 18:00:32 +0000128#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */
129#define READ_BINARY "r"
130#define WRITE_BINARY "w"
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000131#else
DRCe5eaf372014-05-09 18:00:32 +0000132#ifdef VMS /* VMS is very nonstandard */
133#define READ_BINARY "rb", "ctx=stm"
134#define WRITE_BINARY "wb", "ctx=stm"
135#else /* standard ANSI-compliant case */
136#define READ_BINARY "rb"
137#define WRITE_BINARY "wb"
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000138#endif
Thomas G. Lane5ead57a1998-03-27 00:00:00 +0000139#endif
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000140
DRCe5eaf372014-05-09 18:00:32 +0000141#ifndef EXIT_FAILURE /* define exit() codes if not provided */
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000142#define EXIT_FAILURE 1
143#endif
144#ifndef EXIT_SUCCESS
145#ifdef VMS
DRCe5eaf372014-05-09 18:00:32 +0000146#define EXIT_SUCCESS 1 /* VMS is very nonstandard */
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000147#else
148#define EXIT_SUCCESS 0
149#endif
150#endif
151#ifndef EXIT_WARNING
152#ifdef VMS
DRCe5eaf372014-05-09 18:00:32 +0000153#define EXIT_WARNING 1 /* VMS is very nonstandard */
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000154#else
155#define EXIT_WARNING 2
156#endif
157#endif