diff options
Diffstat (limited to 'libraries/irrlicht-1.8/source/Irrlicht/jpeglib/transupp.h')
-rw-r--r-- | libraries/irrlicht-1.8/source/Irrlicht/jpeglib/transupp.h | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/libraries/irrlicht-1.8/source/Irrlicht/jpeglib/transupp.h b/libraries/irrlicht-1.8/source/Irrlicht/jpeglib/transupp.h new file mode 100644 index 0000000..6e4d65a --- /dev/null +++ b/libraries/irrlicht-1.8/source/Irrlicht/jpeglib/transupp.h | |||
@@ -0,0 +1,213 @@ | |||
1 | /* | ||
2 | * transupp.h | ||
3 | * | ||
4 | * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding. | ||
5 | * This file is part of the Independent JPEG Group's software. | ||
6 | * For conditions of distribution and use, see the accompanying README file. | ||
7 | * | ||
8 | * This file contains declarations for image transformation routines and | ||
9 | * other utility code used by the jpegtran sample application. These are | ||
10 | * NOT part of the core JPEG library. But we keep these routines separate | ||
11 | * from jpegtran.c to ease the task of maintaining jpegtran-like programs | ||
12 | * that have other user interfaces. | ||
13 | * | ||
14 | * NOTE: all the routines declared here have very specific requirements | ||
15 | * about when they are to be executed during the reading and writing of the | ||
16 | * source and destination files. See the comments in transupp.c, or see | ||
17 | * jpegtran.c for an example of correct usage. | ||
18 | */ | ||
19 | |||
20 | /* If you happen not to want the image transform support, disable it here */ | ||
21 | #ifndef TRANSFORMS_SUPPORTED | ||
22 | #define TRANSFORMS_SUPPORTED 1 /* 0 disables transform code */ | ||
23 | #endif | ||
24 | |||
25 | /* | ||
26 | * Although rotating and flipping data expressed as DCT coefficients is not | ||
27 | * hard, there is an asymmetry in the JPEG format specification for images | ||
28 | * whose dimensions aren't multiples of the iMCU size. The right and bottom | ||
29 | * image edges are padded out to the next iMCU boundary with junk data; but | ||
30 | * no padding is possible at the top and left edges. If we were to flip | ||
31 | * the whole image including the pad data, then pad garbage would become | ||
32 | * visible at the top and/or left, and real pixels would disappear into the | ||
33 | * pad margins --- perhaps permanently, since encoders & decoders may not | ||
34 | * bother to preserve DCT blocks that appear to be completely outside the | ||
35 | * nominal image area. So, we have to exclude any partial iMCUs from the | ||
36 | * basic transformation. | ||
37 | * | ||
38 | * Transpose is the only transformation that can handle partial iMCUs at the | ||
39 | * right and bottom edges completely cleanly. flip_h can flip partial iMCUs | ||
40 | * at the bottom, but leaves any partial iMCUs at the right edge untouched. | ||
41 | * Similarly flip_v leaves any partial iMCUs at the bottom edge untouched. | ||
42 | * The other transforms are defined as combinations of these basic transforms | ||
43 | * and process edge blocks in a way that preserves the equivalence. | ||
44 | * | ||
45 | * The "trim" option causes untransformable partial iMCUs to be dropped; | ||
46 | * this is not strictly lossless, but it usually gives the best-looking | ||
47 | * result for odd-size images. Note that when this option is active, | ||
48 | * the expected mathematical equivalences between the transforms may not hold. | ||
49 | * (For example, -rot 270 -trim trims only the bottom edge, but -rot 90 -trim | ||
50 | * followed by -rot 180 -trim trims both edges.) | ||
51 | * | ||
52 | * We also offer a lossless-crop option, which discards data outside a given | ||
53 | * image region but losslessly preserves what is inside. Like the rotate and | ||
54 | * flip transforms, lossless crop is restricted by the JPEG format: the upper | ||
55 | * left corner of the selected region must fall on an iMCU boundary. If this | ||
56 | * does not hold for the given crop parameters, we silently move the upper left | ||
57 | * corner up and/or left to make it so, simultaneously increasing the region | ||
58 | * dimensions to keep the lower right crop corner unchanged. (Thus, the | ||
59 | * output image covers at least the requested region, but may cover more.) | ||
60 | * The adjustment of the region dimensions may be optionally disabled. | ||
61 | * | ||
62 | * We also provide a lossless-resize option, which is kind of a lossless-crop | ||
63 | * operation in the DCT coefficient block domain - it discards higher-order | ||
64 | * coefficients and losslessly preserves lower-order coefficients of a | ||
65 | * sub-block. | ||
66 | * | ||
67 | * Rotate/flip transform, resize, and crop can be requested together in a | ||
68 | * single invocation. The crop is applied last --- that is, the crop region | ||
69 | * is specified in terms of the destination image after transform/resize. | ||
70 | * | ||
71 | * We also offer a "force to grayscale" option, which simply discards the | ||
72 | * chrominance channels of a YCbCr image. This is lossless in the sense that | ||
73 | * the luminance channel is preserved exactly. It's not the same kind of | ||
74 | * thing as the rotate/flip transformations, but it's convenient to handle it | ||
75 | * as part of this package, mainly because the transformation routines have to | ||
76 | * be aware of the option to know how many components to work on. | ||
77 | */ | ||
78 | |||
79 | |||
80 | /* Short forms of external names for systems with brain-damaged linkers. */ | ||
81 | |||
82 | #ifdef NEED_SHORT_EXTERNAL_NAMES | ||
83 | #define jtransform_parse_crop_spec jTrParCrop | ||
84 | #define jtransform_request_workspace jTrRequest | ||
85 | #define jtransform_adjust_parameters jTrAdjust | ||
86 | #define jtransform_execute_transform jTrExec | ||
87 | #define jtransform_perfect_transform jTrPerfect | ||
88 | #define jcopy_markers_setup jCMrkSetup | ||
89 | #define jcopy_markers_execute jCMrkExec | ||
90 | #endif /* NEED_SHORT_EXTERNAL_NAMES */ | ||
91 | |||
92 | |||
93 | /* | ||
94 | * Codes for supported types of image transformations. | ||
95 | */ | ||
96 | |||
97 | typedef enum { | ||
98 | JXFORM_NONE, /* no transformation */ | ||
99 | JXFORM_FLIP_H, /* horizontal flip */ | ||
100 | JXFORM_FLIP_V, /* vertical flip */ | ||
101 | JXFORM_TRANSPOSE, /* transpose across UL-to-LR axis */ | ||
102 | JXFORM_TRANSVERSE, /* transpose across UR-to-LL axis */ | ||
103 | JXFORM_ROT_90, /* 90-degree clockwise rotation */ | ||
104 | JXFORM_ROT_180, /* 180-degree rotation */ | ||
105 | JXFORM_ROT_270 /* 270-degree clockwise (or 90 ccw) */ | ||
106 | } JXFORM_CODE; | ||
107 | |||
108 | /* | ||
109 | * Codes for crop parameters, which can individually be unspecified, | ||
110 | * positive or negative for xoffset or yoffset, | ||
111 | * positive or forced for width or height. | ||
112 | */ | ||
113 | |||
114 | typedef enum { | ||
115 | JCROP_UNSET, | ||
116 | JCROP_POS, | ||
117 | JCROP_NEG, | ||
118 | JCROP_FORCE | ||
119 | } JCROP_CODE; | ||
120 | |||
121 | /* | ||
122 | * Transform parameters struct. | ||
123 | * NB: application must not change any elements of this struct after | ||
124 | * calling jtransform_request_workspace. | ||
125 | */ | ||
126 | |||
127 | typedef struct { | ||
128 | /* Options: set by caller */ | ||
129 | JXFORM_CODE transform; /* image transform operator */ | ||
130 | boolean perfect; /* if TRUE, fail if partial MCUs are requested */ | ||
131 | boolean trim; /* if TRUE, trim partial MCUs as needed */ | ||
132 | boolean force_grayscale; /* if TRUE, convert color image to grayscale */ | ||
133 | boolean crop; /* if TRUE, crop source image */ | ||
134 | |||
135 | /* Crop parameters: application need not set these unless crop is TRUE. | ||
136 | * These can be filled in by jtransform_parse_crop_spec(). | ||
137 | */ | ||
138 | JDIMENSION crop_width; /* Width of selected region */ | ||
139 | JCROP_CODE crop_width_set; /* (forced disables adjustment) */ | ||
140 | JDIMENSION crop_height; /* Height of selected region */ | ||
141 | JCROP_CODE crop_height_set; /* (forced disables adjustment) */ | ||
142 | JDIMENSION crop_xoffset; /* X offset of selected region */ | ||
143 | JCROP_CODE crop_xoffset_set; /* (negative measures from right edge) */ | ||
144 | JDIMENSION crop_yoffset; /* Y offset of selected region */ | ||
145 | JCROP_CODE crop_yoffset_set; /* (negative measures from bottom edge) */ | ||
146 | |||
147 | /* Internal workspace: caller should not touch these */ | ||
148 | int num_components; /* # of components in workspace */ | ||
149 | jvirt_barray_ptr * workspace_coef_arrays; /* workspace for transformations */ | ||
150 | JDIMENSION output_width; /* cropped destination dimensions */ | ||
151 | JDIMENSION output_height; | ||
152 | JDIMENSION x_crop_offset; /* destination crop offsets measured in iMCUs */ | ||
153 | JDIMENSION y_crop_offset; | ||
154 | int iMCU_sample_width; /* destination iMCU size */ | ||
155 | int iMCU_sample_height; | ||
156 | } jpeg_transform_info; | ||
157 | |||
158 | |||
159 | #if TRANSFORMS_SUPPORTED | ||
160 | |||
161 | /* Parse a crop specification (written in X11 geometry style) */ | ||
162 | EXTERN(boolean) jtransform_parse_crop_spec | ||
163 | JPP((jpeg_transform_info *info, const char *spec)); | ||
164 | /* Request any required workspace */ | ||
165 | EXTERN(boolean) jtransform_request_workspace | ||
166 | JPP((j_decompress_ptr srcinfo, jpeg_transform_info *info)); | ||
167 | /* Adjust output image parameters */ | ||
168 | EXTERN(jvirt_barray_ptr *) jtransform_adjust_parameters | ||
169 | JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, | ||
170 | jvirt_barray_ptr *src_coef_arrays, | ||
171 | jpeg_transform_info *info)); | ||
172 | /* Execute the actual transformation, if any */ | ||
173 | EXTERN(void) jtransform_execute_transform | ||
174 | JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, | ||
175 | jvirt_barray_ptr *src_coef_arrays, | ||
176 | jpeg_transform_info *info)); | ||
177 | /* Determine whether lossless transformation is perfectly | ||
178 | * possible for a specified image and transformation. | ||
179 | */ | ||
180 | EXTERN(boolean) jtransform_perfect_transform | ||
181 | JPP((JDIMENSION image_width, JDIMENSION image_height, | ||
182 | int MCU_width, int MCU_height, | ||
183 | JXFORM_CODE transform)); | ||
184 | |||
185 | /* jtransform_execute_transform used to be called | ||
186 | * jtransform_execute_transformation, but some compilers complain about | ||
187 | * routine names that long. This macro is here to avoid breaking any | ||
188 | * old source code that uses the original name... | ||
189 | */ | ||
190 | #define jtransform_execute_transformation jtransform_execute_transform | ||
191 | |||
192 | #endif /* TRANSFORMS_SUPPORTED */ | ||
193 | |||
194 | |||
195 | /* | ||
196 | * Support for copying optional markers from source to destination file. | ||
197 | */ | ||
198 | |||
199 | typedef enum { | ||
200 | JCOPYOPT_NONE, /* copy no optional markers */ | ||
201 | JCOPYOPT_COMMENTS, /* copy only comment (COM) markers */ | ||
202 | JCOPYOPT_ALL /* copy all optional markers */ | ||
203 | } JCOPY_OPTION; | ||
204 | |||
205 | #define JCOPYOPT_DEFAULT JCOPYOPT_COMMENTS /* recommended default */ | ||
206 | |||
207 | /* Setup decompression object to save desired markers in memory */ | ||
208 | EXTERN(void) jcopy_markers_setup | ||
209 | JPP((j_decompress_ptr srcinfo, JCOPY_OPTION option)); | ||
210 | /* Copy markers saved in the given source object to the destination object */ | ||
211 | EXTERN(void) jcopy_markers_execute | ||
212 | JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, | ||
213 | JCOPY_OPTION option)); | ||