OLD | NEW |
1 | 1 |
2 /* pngget.c - retrieval of values from info struct | 2 /* pngget.c - retrieval of values from info struct |
3 * | 3 * |
4 * Last changed in libpng 1.6.1 [March 28, 2013] | 4 * Last changed in libpng 1.2.43 [February 25, 2010] |
5 * Copyright (c) 1998-2013 Glenn Randers-Pehrson | 5 * Copyright (c) 1998-2010 Glenn Randers-Pehrson |
6 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) | 6 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) |
7 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) | 7 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) |
8 * | 8 * |
9 * This code is released under the libpng license. | 9 * This code is released under the libpng license. |
10 * For conditions of distribution and use, see the disclaimer | 10 * For conditions of distribution and use, see the disclaimer |
11 * and license in png.h | 11 * and license in png.h |
12 * | 12 * |
13 */ | 13 */ |
14 | 14 |
15 #include "pngpriv.h" | 15 #define PNG_INTERNAL |
16 | 16 #define PNG_NO_PEDANTIC_WARNINGS |
| 17 #include "png.h" |
17 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) | 18 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) |
18 | 19 |
19 png_uint_32 PNGAPI | 20 png_uint_32 PNGAPI |
20 png_get_valid(png_const_structrp png_ptr, png_const_inforp info_ptr, | 21 png_get_valid(png_structp png_ptr, png_infop info_ptr, png_uint_32 flag) |
21 png_uint_32 flag) | |
22 { | 22 { |
23 if (png_ptr != NULL && info_ptr != NULL) | 23 if (png_ptr != NULL && info_ptr != NULL) |
24 return(info_ptr->valid & flag); | 24 return(info_ptr->valid & flag); |
25 | 25 |
26 return(0); | 26 else |
| 27 return(0); |
27 } | 28 } |
28 | 29 |
29 png_size_t PNGAPI | 30 png_uint_32 PNGAPI |
30 png_get_rowbytes(png_const_structrp png_ptr, png_const_inforp info_ptr) | 31 png_get_rowbytes(png_structp png_ptr, png_infop info_ptr) |
31 { | 32 { |
32 if (png_ptr != NULL && info_ptr != NULL) | 33 if (png_ptr != NULL && info_ptr != NULL) |
33 return(info_ptr->rowbytes); | 34 return(info_ptr->rowbytes); |
34 | 35 |
35 return(0); | 36 else |
| 37 return(0); |
36 } | 38 } |
37 | 39 |
38 #ifdef PNG_INFO_IMAGE_SUPPORTED | 40 #ifdef PNG_INFO_IMAGE_SUPPORTED |
39 png_bytepp PNGAPI | 41 png_bytepp PNGAPI |
40 png_get_rows(png_const_structrp png_ptr, png_const_inforp info_ptr) | 42 png_get_rows(png_structp png_ptr, png_infop info_ptr) |
41 { | 43 { |
42 if (png_ptr != NULL && info_ptr != NULL) | 44 if (png_ptr != NULL && info_ptr != NULL) |
43 return(info_ptr->row_pointers); | 45 return(info_ptr->row_pointers); |
44 | 46 |
45 return(0); | 47 else |
| 48 return(0); |
46 } | 49 } |
47 #endif | 50 #endif |
48 | 51 |
49 #ifdef PNG_EASY_ACCESS_SUPPORTED | 52 #ifdef PNG_EASY_ACCESS_SUPPORTED |
50 /* Easy access to info, added in libpng-0.99 */ | 53 /* Easy access to info, added in libpng-0.99 */ |
51 png_uint_32 PNGAPI | 54 png_uint_32 PNGAPI |
52 png_get_image_width(png_const_structrp png_ptr, png_const_inforp info_ptr) | 55 png_get_image_width(png_structp png_ptr, png_infop info_ptr) |
53 { | 56 { |
54 if (png_ptr != NULL && info_ptr != NULL) | 57 if (png_ptr != NULL && info_ptr != NULL) |
55 return info_ptr->width; | 58 return info_ptr->width; |
56 | 59 |
57 return (0); | 60 return (0); |
58 } | 61 } |
59 | 62 |
60 png_uint_32 PNGAPI | 63 png_uint_32 PNGAPI |
61 png_get_image_height(png_const_structrp png_ptr, png_const_inforp info_ptr) | 64 png_get_image_height(png_structp png_ptr, png_infop info_ptr) |
62 { | 65 { |
63 if (png_ptr != NULL && info_ptr != NULL) | 66 if (png_ptr != NULL && info_ptr != NULL) |
64 return info_ptr->height; | 67 return info_ptr->height; |
65 | 68 |
66 return (0); | 69 return (0); |
67 } | 70 } |
68 | 71 |
69 png_byte PNGAPI | 72 png_byte PNGAPI |
70 png_get_bit_depth(png_const_structrp png_ptr, png_const_inforp info_ptr) | 73 png_get_bit_depth(png_structp png_ptr, png_infop info_ptr) |
71 { | 74 { |
72 if (png_ptr != NULL && info_ptr != NULL) | 75 if (png_ptr != NULL && info_ptr != NULL) |
73 return info_ptr->bit_depth; | 76 return info_ptr->bit_depth; |
74 | 77 |
75 return (0); | 78 return (0); |
76 } | 79 } |
77 | 80 |
78 png_byte PNGAPI | 81 png_byte PNGAPI |
79 png_get_color_type(png_const_structrp png_ptr, png_const_inforp info_ptr) | 82 png_get_color_type(png_structp png_ptr, png_infop info_ptr) |
80 { | 83 { |
81 if (png_ptr != NULL && info_ptr != NULL) | 84 if (png_ptr != NULL && info_ptr != NULL) |
82 return info_ptr->color_type; | 85 return info_ptr->color_type; |
83 | 86 |
84 return (0); | 87 return (0); |
85 } | 88 } |
86 | 89 |
87 png_byte PNGAPI | 90 png_byte PNGAPI |
88 png_get_filter_type(png_const_structrp png_ptr, png_const_inforp info_ptr) | 91 png_get_filter_type(png_structp png_ptr, png_infop info_ptr) |
89 { | 92 { |
90 if (png_ptr != NULL && info_ptr != NULL) | 93 if (png_ptr != NULL && info_ptr != NULL) |
91 return info_ptr->filter_type; | 94 return info_ptr->filter_type; |
92 | 95 |
93 return (0); | 96 return (0); |
94 } | 97 } |
95 | 98 |
96 png_byte PNGAPI | 99 png_byte PNGAPI |
97 png_get_interlace_type(png_const_structrp png_ptr, png_const_inforp info_ptr) | 100 png_get_interlace_type(png_structp png_ptr, png_infop info_ptr) |
98 { | 101 { |
99 if (png_ptr != NULL && info_ptr != NULL) | 102 if (png_ptr != NULL && info_ptr != NULL) |
100 return info_ptr->interlace_type; | 103 return info_ptr->interlace_type; |
101 | 104 |
102 return (0); | 105 return (0); |
103 } | 106 } |
104 | 107 |
105 png_byte PNGAPI | 108 png_byte PNGAPI |
106 png_get_compression_type(png_const_structrp png_ptr, png_const_inforp info_ptr) | 109 png_get_compression_type(png_structp png_ptr, png_infop info_ptr) |
107 { | 110 { |
108 if (png_ptr != NULL && info_ptr != NULL) | 111 if (png_ptr != NULL && info_ptr != NULL) |
109 return info_ptr->compression_type; | 112 return info_ptr->compression_type; |
110 | 113 |
111 return (0); | 114 return (0); |
112 } | 115 } |
113 | 116 |
114 png_uint_32 PNGAPI | 117 png_uint_32 PNGAPI |
115 png_get_x_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp | 118 png_get_x_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) |
116 info_ptr) | 119 { |
117 { | 120 if (png_ptr != NULL && info_ptr != NULL) |
118 #ifdef PNG_pHYs_SUPPORTED | 121 #ifdef PNG_pHYs_SUPPORTED |
119 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) | 122 if (info_ptr->valid & PNG_INFO_pHYs) |
120 { | 123 { |
121 png_debug1(1, "in %s retrieval function", | 124 png_debug1(1, "in %s retrieval function", "png_get_x_pixels_per_meter"); |
122 "png_get_x_pixels_per_meter"); | 125 |
123 | 126 if (info_ptr->phys_unit_type != PNG_RESOLUTION_METER) |
124 if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER) | 127 return (0); |
125 return (info_ptr->x_pixels_per_unit); | 128 |
126 } | 129 else |
127 #endif | 130 return (info_ptr->x_pixels_per_unit); |
128 | 131 } |
129 return (0); | 132 #else |
130 } | 133 return (0); |
131 | 134 #endif |
132 png_uint_32 PNGAPI | 135 return (0); |
133 png_get_y_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp | 136 } |
134 info_ptr) | 137 |
135 { | 138 png_uint_32 PNGAPI |
136 #ifdef PNG_pHYs_SUPPORTED | 139 png_get_y_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) |
137 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) | 140 { |
138 { | 141 if (png_ptr != NULL && info_ptr != NULL) |
139 png_debug1(1, "in %s retrieval function", | 142 #ifdef PNG_pHYs_SUPPORTED |
140 "png_get_y_pixels_per_meter"); | 143 if (info_ptr->valid & PNG_INFO_pHYs) |
141 | 144 { |
142 if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER) | 145 png_debug1(1, "in %s retrieval function", "png_get_y_pixels_per_meter"); |
143 return (info_ptr->y_pixels_per_unit); | 146 |
144 } | 147 if (info_ptr->phys_unit_type != PNG_RESOLUTION_METER) |
145 #endif | 148 return (0); |
146 | 149 |
147 return (0); | 150 else |
148 } | 151 return (info_ptr->y_pixels_per_unit); |
149 | 152 } |
150 png_uint_32 PNGAPI | 153 #else |
151 png_get_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp info_ptr) | 154 return (0); |
152 { | 155 #endif |
153 #ifdef PNG_pHYs_SUPPORTED | 156 return (0); |
154 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) | 157 } |
| 158 |
| 159 png_uint_32 PNGAPI |
| 160 png_get_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) |
| 161 { |
| 162 if (png_ptr != NULL && info_ptr != NULL) |
| 163 #ifdef PNG_pHYs_SUPPORTED |
| 164 if (info_ptr->valid & PNG_INFO_pHYs) |
155 { | 165 { |
156 png_debug1(1, "in %s retrieval function", "png_get_pixels_per_meter"); | 166 png_debug1(1, "in %s retrieval function", "png_get_pixels_per_meter"); |
157 | 167 |
158 if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER && | 168 if (info_ptr->phys_unit_type != PNG_RESOLUTION_METER || |
159 info_ptr->x_pixels_per_unit == info_ptr->y_pixels_per_unit) | 169 info_ptr->x_pixels_per_unit != info_ptr->y_pixels_per_unit) |
160 return (info_ptr->x_pixels_per_unit); | 170 return (0); |
161 } | 171 |
162 #endif | 172 else |
163 | 173 return (info_ptr->x_pixels_per_unit); |
| 174 } |
| 175 #else |
| 176 return (0); |
| 177 #endif |
164 return (0); | 178 return (0); |
165 } | 179 } |
166 | 180 |
167 #ifdef PNG_FLOATING_POINT_SUPPORTED | 181 #ifdef PNG_FLOATING_POINT_SUPPORTED |
168 float PNGAPI | 182 float PNGAPI |
169 png_get_pixel_aspect_ratio(png_const_structrp png_ptr, png_const_inforp | 183 png_get_pixel_aspect_ratio(png_structp png_ptr, png_infop info_ptr) |
170 info_ptr) | 184 { |
171 { | 185 if (png_ptr != NULL && info_ptr != NULL) |
172 #ifdef PNG_READ_pHYs_SUPPORTED | 186 #ifdef PNG_pHYs_SUPPORTED |
173 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) | 187 |
| 188 if (info_ptr->valid & PNG_INFO_pHYs) |
174 { | 189 { |
175 png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio"); | 190 png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio"); |
176 | 191 |
177 if (info_ptr->x_pixels_per_unit != 0) | 192 if (info_ptr->x_pixels_per_unit == 0) |
| 193 return ((float)0.0); |
| 194 |
| 195 else |
178 return ((float)((float)info_ptr->y_pixels_per_unit | 196 return ((float)((float)info_ptr->y_pixels_per_unit |
179 /(float)info_ptr->x_pixels_per_unit)); | 197 /(float)info_ptr->x_pixels_per_unit)); |
180 } | 198 } |
181 #else | 199 #else |
182 PNG_UNUSED(png_ptr) | 200 return (0.0); |
183 PNG_UNUSED(info_ptr) | 201 #endif |
184 #endif | |
185 | |
186 return ((float)0.0); | 202 return ((float)0.0); |
187 } | 203 } |
188 #endif | 204 #endif |
189 | 205 |
190 #ifdef PNG_FIXED_POINT_SUPPORTED | 206 png_int_32 PNGAPI |
191 png_fixed_point PNGAPI | 207 png_get_x_offset_microns(png_structp png_ptr, png_infop info_ptr) |
192 png_get_pixel_aspect_ratio_fixed(png_const_structrp png_ptr, | 208 { |
193 png_const_inforp info_ptr) | 209 if (png_ptr != NULL && info_ptr != NULL) |
194 { | 210 #ifdef PNG_oFFs_SUPPORTED |
195 #ifdef PNG_READ_pHYs_SUPPORTED | 211 |
196 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs) | 212 if (info_ptr->valid & PNG_INFO_oFFs) |
197 && info_ptr->x_pixels_per_unit > 0 && info_ptr->y_pixels_per_unit > 0 | |
198 && info_ptr->x_pixels_per_unit <= PNG_UINT_31_MAX | |
199 && info_ptr->y_pixels_per_unit <= PNG_UINT_31_MAX) | |
200 { | |
201 png_fixed_point res; | |
202 | |
203 png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio_fixed"); | |
204 | |
205 /* The following casts work because a PNG 4 byte integer only has a valid | |
206 * range of 0..2^31-1; otherwise the cast might overflow. | |
207 */ | |
208 if (png_muldiv(&res, (png_int_32)info_ptr->y_pixels_per_unit, PNG_FP_1, | |
209 (png_int_32)info_ptr->x_pixels_per_unit)) | |
210 return res; | |
211 } | |
212 #else | |
213 PNG_UNUSED(png_ptr) | |
214 PNG_UNUSED(info_ptr) | |
215 #endif | |
216 | |
217 return 0; | |
218 } | |
219 #endif | |
220 | |
221 png_int_32 PNGAPI | |
222 png_get_x_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr) | |
223 { | |
224 #ifdef PNG_oFFs_SUPPORTED | |
225 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)) | |
226 { | 213 { |
227 png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns"); | 214 png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns"); |
228 | 215 |
229 if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER) | 216 if (info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER) |
230 return (info_ptr->x_offset); | 217 return (0); |
231 } | 218 |
232 #endif | 219 else |
233 | 220 return (info_ptr->x_offset); |
234 return (0); | 221 } |
235 } | 222 #else |
236 | 223 return (0); |
237 png_int_32 PNGAPI | 224 #endif |
238 png_get_y_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr) | 225 return (0); |
239 { | 226 } |
240 #ifdef PNG_oFFs_SUPPORTED | 227 |
241 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)) | 228 png_int_32 PNGAPI |
| 229 png_get_y_offset_microns(png_structp png_ptr, png_infop info_ptr) |
| 230 { |
| 231 if (png_ptr != NULL && info_ptr != NULL) |
| 232 |
| 233 #ifdef PNG_oFFs_SUPPORTED |
| 234 if (info_ptr->valid & PNG_INFO_oFFs) |
242 { | 235 { |
243 png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns"); | 236 png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns"); |
244 | 237 |
245 if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER) | 238 if (info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER) |
246 return (info_ptr->y_offset); | 239 return (0); |
247 } | 240 |
248 #endif | 241 else |
249 | 242 return (info_ptr->y_offset); |
250 return (0); | 243 } |
251 } | 244 #else |
252 | 245 return (0); |
253 png_int_32 PNGAPI | 246 #endif |
254 png_get_x_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr) | 247 return (0); |
255 { | 248 } |
256 #ifdef PNG_oFFs_SUPPORTED | 249 |
257 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)) | 250 png_int_32 PNGAPI |
258 { | 251 png_get_x_offset_pixels(png_structp png_ptr, png_infop info_ptr) |
259 png_debug1(1, "in %s retrieval function", "png_get_x_offset_pixels"); | 252 { |
260 | 253 if (png_ptr != NULL && info_ptr != NULL) |
261 if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL) | 254 |
262 return (info_ptr->x_offset); | 255 #ifdef PNG_oFFs_SUPPORTED |
263 } | 256 if (info_ptr->valid & PNG_INFO_oFFs) |
264 #endif | 257 { |
265 | 258 png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns"); |
266 return (0); | 259 |
267 } | 260 if (info_ptr->offset_unit_type != PNG_OFFSET_PIXEL) |
268 | 261 return (0); |
269 png_int_32 PNGAPI | 262 |
270 png_get_y_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr) | 263 else |
271 { | 264 return (info_ptr->x_offset); |
272 #ifdef PNG_oFFs_SUPPORTED | 265 } |
273 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)) | 266 #else |
274 { | 267 return (0); |
275 png_debug1(1, "in %s retrieval function", "png_get_y_offset_pixels"); | 268 #endif |
276 | 269 return (0); |
277 if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL) | 270 } |
278 return (info_ptr->y_offset); | 271 |
279 } | 272 png_int_32 PNGAPI |
280 #endif | 273 png_get_y_offset_pixels(png_structp png_ptr, png_infop info_ptr) |
281 | 274 { |
282 return (0); | 275 if (png_ptr != NULL && info_ptr != NULL) |
283 } | 276 |
284 | 277 #ifdef PNG_oFFs_SUPPORTED |
285 #ifdef PNG_INCH_CONVERSIONS_SUPPORTED | 278 if (info_ptr->valid & PNG_INFO_oFFs) |
286 static png_uint_32 | 279 { |
287 ppi_from_ppm(png_uint_32 ppm) | 280 png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns"); |
288 { | 281 |
289 #if 0 | 282 if (info_ptr->offset_unit_type != PNG_OFFSET_PIXEL) |
290 /* The conversion is *(2.54/100), in binary (32 digits): | 283 return (0); |
291 * .00000110100000001001110101001001 | 284 |
292 */ | 285 else |
293 png_uint_32 t1001, t1101; | 286 return (info_ptr->y_offset); |
294 ppm >>= 1; /* .1 */ | 287 } |
295 t1001 = ppm + (ppm >> 3); /* .1001 */ | 288 #else |
296 t1101 = t1001 + (ppm >> 1); /* .1101 */ | 289 return (0); |
297 ppm >>= 20; /* .000000000000000000001 */ | 290 #endif |
298 t1101 += t1101 >> 15; /* .1101000000000001101 */ | 291 return (0); |
299 t1001 >>= 11; /* .000000000001001 */ | 292 } |
300 t1001 += t1001 >> 12; /* .000000000001001000000001001 */ | 293 |
301 ppm += t1001; /* .000000000001001000001001001 */ | 294 #if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED) |
302 ppm += t1101; /* .110100000001001110101001001 */ | 295 png_uint_32 PNGAPI |
303 return (ppm + 16) >> 5;/* .00000110100000001001110101001001 */ | 296 png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) |
304 #else | 297 { |
305 /* The argument is a PNG unsigned integer, so it is not permitted | 298 return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr) |
306 * to be bigger than 2^31. | 299 *.0254 +.5)); |
307 */ | 300 } |
308 png_fixed_point result; | 301 |
309 if (ppm <= PNG_UINT_31_MAX && png_muldiv(&result, (png_int_32)ppm, 127, | 302 png_uint_32 PNGAPI |
310 5000)) | 303 png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) |
311 return result; | 304 { |
312 | 305 return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr) |
313 /* Overflow. */ | 306 *.0254 +.5)); |
314 return 0; | 307 } |
315 #endif | 308 |
316 } | 309 png_uint_32 PNGAPI |
317 | 310 png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) |
318 png_uint_32 PNGAPI | 311 { |
319 png_get_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr) | 312 return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr) |
320 { | 313 *.0254 +.5)); |
321 return ppi_from_ppm(png_get_pixels_per_meter(png_ptr, info_ptr)); | 314 } |
322 } | 315 |
323 | |
324 png_uint_32 PNGAPI | |
325 png_get_x_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr) | |
326 { | |
327 return ppi_from_ppm(png_get_x_pixels_per_meter(png_ptr, info_ptr)); | |
328 } | |
329 | |
330 png_uint_32 PNGAPI | |
331 png_get_y_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr) | |
332 { | |
333 return ppi_from_ppm(png_get_y_pixels_per_meter(png_ptr, info_ptr)); | |
334 } | |
335 | |
336 #ifdef PNG_FIXED_POINT_SUPPORTED | |
337 static png_fixed_point | |
338 png_fixed_inches_from_microns(png_const_structrp png_ptr, png_int_32 microns) | |
339 { | |
340 /* Convert from metres * 1,000,000 to inches * 100,000, meters to | |
341 * inches is simply *(100/2.54), so we want *(10/2.54) == 500/127. | |
342 * Notice that this can overflow - a warning is output and 0 is | |
343 * returned. | |
344 */ | |
345 return png_muldiv_warn(png_ptr, microns, 500, 127); | |
346 } | |
347 | |
348 png_fixed_point PNGAPI | |
349 png_get_x_offset_inches_fixed(png_const_structrp png_ptr, | |
350 png_const_inforp info_ptr) | |
351 { | |
352 return png_fixed_inches_from_microns(png_ptr, | |
353 png_get_x_offset_microns(png_ptr, info_ptr)); | |
354 } | |
355 #endif | |
356 | |
357 #ifdef PNG_FIXED_POINT_SUPPORTED | |
358 png_fixed_point PNGAPI | |
359 png_get_y_offset_inches_fixed(png_const_structrp png_ptr, | |
360 png_const_inforp info_ptr) | |
361 { | |
362 return png_fixed_inches_from_microns(png_ptr, | |
363 png_get_y_offset_microns(png_ptr, info_ptr)); | |
364 } | |
365 #endif | |
366 | |
367 #ifdef PNG_FLOATING_POINT_SUPPORTED | |
368 float PNGAPI | 316 float PNGAPI |
369 png_get_x_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr) | 317 png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr) |
370 { | 318 { |
371 /* To avoid the overflow do the conversion directly in floating | 319 return ((float)png_get_x_offset_microns(png_ptr, info_ptr) |
372 * point. | 320 *.00003937); |
373 */ | 321 } |
374 return (float)(png_get_x_offset_microns(png_ptr, info_ptr) * .00003937); | 322 |
375 } | |
376 #endif | |
377 | |
378 #ifdef PNG_FLOATING_POINT_SUPPORTED | |
379 float PNGAPI | 323 float PNGAPI |
380 png_get_y_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr) | 324 png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr) |
381 { | 325 { |
382 /* To avoid the overflow do the conversion directly in floating | 326 return ((float)png_get_y_offset_microns(png_ptr, info_ptr) |
383 * point. | 327 *.00003937); |
384 */ | 328 } |
385 return (float)(png_get_y_offset_microns(png_ptr, info_ptr) * .00003937); | 329 |
386 } | 330 #ifdef PNG_pHYs_SUPPORTED |
387 #endif | 331 png_uint_32 PNGAPI |
388 | 332 png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr, |
389 #ifdef PNG_pHYs_SUPPORTED | 333 png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) |
390 png_uint_32 PNGAPI | |
391 png_get_pHYs_dpi(png_const_structrp png_ptr, png_const_inforp info_ptr, | |
392 png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) | |
393 { | 334 { |
394 png_uint_32 retval = 0; | 335 png_uint_32 retval = 0; |
395 | 336 |
396 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) | 337 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) |
397 { | 338 { |
398 png_debug1(1, "in %s retrieval function", "pHYs"); | 339 png_debug1(1, "in %s retrieval function", "pHYs"); |
399 | 340 |
400 if (res_x != NULL) | 341 if (res_x != NULL) |
401 { | 342 { |
402 *res_x = info_ptr->x_pixels_per_unit; | 343 *res_x = info_ptr->x_pixels_per_unit; |
403 retval |= PNG_INFO_pHYs; | 344 retval |= PNG_INFO_pHYs; |
404 } | 345 } |
405 | |
406 if (res_y != NULL) | 346 if (res_y != NULL) |
407 { | 347 { |
408 *res_y = info_ptr->y_pixels_per_unit; | 348 *res_y = info_ptr->y_pixels_per_unit; |
409 retval |= PNG_INFO_pHYs; | 349 retval |= PNG_INFO_pHYs; |
410 } | 350 } |
411 | |
412 if (unit_type != NULL) | 351 if (unit_type != NULL) |
413 { | 352 { |
414 *unit_type = (int)info_ptr->phys_unit_type; | 353 *unit_type = (int)info_ptr->phys_unit_type; |
415 retval |= PNG_INFO_pHYs; | 354 retval |= PNG_INFO_pHYs; |
416 | |
417 if (*unit_type == 1) | 355 if (*unit_type == 1) |
418 { | 356 { |
419 if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50); | 357 if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50); |
420 if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50); | 358 if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50); |
421 } | 359 } |
422 } | 360 } |
423 } | 361 } |
424 | |
425 return (retval); | 362 return (retval); |
426 } | 363 } |
427 #endif /* PNG_pHYs_SUPPORTED */ | 364 #endif /* PNG_pHYs_SUPPORTED */ |
428 #endif /* PNG_INCH_CONVERSIONS_SUPPORTED */ | 365 #endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */ |
429 | 366 |
430 /* png_get_channels really belongs in here, too, but it's been around longer */ | 367 /* png_get_channels really belongs in here, too, but it's been around longer */ |
431 | 368 |
432 #endif /* PNG_EASY_ACCESS_SUPPORTED */ | 369 #endif /* PNG_EASY_ACCESS_SUPPORTED */ |
433 | 370 |
434 | |
435 png_byte PNGAPI | 371 png_byte PNGAPI |
436 png_get_channels(png_const_structrp png_ptr, png_const_inforp info_ptr) | 372 png_get_channels(png_structp png_ptr, png_infop info_ptr) |
437 { | 373 { |
438 if (png_ptr != NULL && info_ptr != NULL) | 374 if (png_ptr != NULL && info_ptr != NULL) |
439 return(info_ptr->channels); | 375 return(info_ptr->channels); |
440 | 376 else |
441 return (0); | 377 return (0); |
442 } | 378 } |
443 | 379 |
444 #ifdef PNG_READ_SUPPORTED | 380 png_bytep PNGAPI |
445 png_const_bytep PNGAPI | 381 png_get_signature(png_structp png_ptr, png_infop info_ptr) |
446 png_get_signature(png_const_structrp png_ptr, png_const_inforp info_ptr) | |
447 { | 382 { |
448 if (png_ptr != NULL && info_ptr != NULL) | 383 if (png_ptr != NULL && info_ptr != NULL) |
449 return(info_ptr->signature); | 384 return(info_ptr->signature); |
450 | 385 else |
451 return (NULL); | 386 return (NULL); |
452 } | 387 } |
453 #endif | |
454 | 388 |
455 #ifdef PNG_bKGD_SUPPORTED | 389 #ifdef PNG_bKGD_SUPPORTED |
456 png_uint_32 PNGAPI | 390 png_uint_32 PNGAPI |
457 png_get_bKGD(png_const_structrp png_ptr, png_inforp info_ptr, | 391 png_get_bKGD(png_structp png_ptr, png_infop info_ptr, |
458 png_color_16p *background) | 392 png_color_16p *background) |
459 { | 393 { |
460 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD) | 394 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD) |
461 && background != NULL) | 395 && background != NULL) |
462 { | 396 { |
463 png_debug1(1, "in %s retrieval function", "bKGD"); | 397 png_debug1(1, "in %s retrieval function", "bKGD"); |
464 | 398 |
465 *background = &(info_ptr->background); | 399 *background = &(info_ptr->background); |
466 return (PNG_INFO_bKGD); | 400 return (PNG_INFO_bKGD); |
467 } | 401 } |
468 | |
469 return (0); | 402 return (0); |
470 } | 403 } |
471 #endif | 404 #endif |
472 | 405 |
473 #ifdef PNG_cHRM_SUPPORTED | 406 #ifdef PNG_cHRM_SUPPORTED |
474 /* The XYZ APIs were added in 1.5.5 to take advantage of the code added at the | 407 #ifdef PNG_FLOATING_POINT_SUPPORTED |
475 * same time to correct the rgb grayscale coefficient defaults obtained from the | 408 png_uint_32 PNGAPI |
476 * cHRM chunk in 1.5.4 | 409 png_get_cHRM(png_structp png_ptr, png_infop info_ptr, |
477 */ | 410 double *white_x, double *white_y, double *red_x, double *red_y, |
478 # ifdef PNG_FLOATING_POINT_SUPPORTED | 411 double *green_x, double *green_y, double *blue_x, double *blue_y) |
479 png_uint_32 PNGAPI | 412 { |
480 png_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr, | 413 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM)) |
481 double *white_x, double *white_y, double *red_x, double *red_y, | |
482 double *green_x, double *green_y, double *blue_x, double *blue_y) | |
483 { | |
484 /* Quiet API change: this code used to only return the end points if a cHRM | |
485 * chunk was present, but the end points can also come from iCCP or sRGB | |
486 * chunks, so in 1.6.0 the png_get_ APIs return the end points regardless and | |
487 * the png_set_ APIs merely check that set end points are mutually | |
488 * consistent. | |
489 */ | |
490 if (png_ptr != NULL && info_ptr != NULL && | |
491 (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS)) | |
492 { | 414 { |
493 png_debug1(1, "in %s retrieval function", "cHRM"); | 415 png_debug1(1, "in %s retrieval function", "cHRM"); |
494 | 416 |
495 if (white_x != NULL) | 417 if (white_x != NULL) |
496 *white_x = png_float(png_ptr, | 418 *white_x = (double)info_ptr->x_white; |
497 info_ptr->colorspace.end_points_xy.whitex, "cHRM white X"); | |
498 if (white_y != NULL) | 419 if (white_y != NULL) |
499 *white_y = png_float(png_ptr, | 420 *white_y = (double)info_ptr->y_white; |
500 info_ptr->colorspace.end_points_xy.whitey, "cHRM white Y"); | |
501 if (red_x != NULL) | 421 if (red_x != NULL) |
502 *red_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redx, | 422 *red_x = (double)info_ptr->x_red; |
503 "cHRM red X"); | |
504 if (red_y != NULL) | 423 if (red_y != NULL) |
505 *red_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redy, | 424 *red_y = (double)info_ptr->y_red; |
506 "cHRM red Y"); | |
507 if (green_x != NULL) | 425 if (green_x != NULL) |
508 *green_x = png_float(png_ptr, | 426 *green_x = (double)info_ptr->x_green; |
509 info_ptr->colorspace.end_points_xy.greenx, "cHRM green X"); | |
510 if (green_y != NULL) | 427 if (green_y != NULL) |
511 *green_y = png_float(png_ptr, | 428 *green_y = (double)info_ptr->y_green; |
512 info_ptr->colorspace.end_points_xy.greeny, "cHRM green Y"); | |
513 if (blue_x != NULL) | 429 if (blue_x != NULL) |
514 *blue_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluex, | 430 *blue_x = (double)info_ptr->x_blue; |
515 "cHRM blue X"); | |
516 if (blue_y != NULL) | 431 if (blue_y != NULL) |
517 *blue_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluey, | 432 *blue_y = (double)info_ptr->y_blue; |
518 "cHRM blue Y"); | |
519 return (PNG_INFO_cHRM); | 433 return (PNG_INFO_cHRM); |
520 } | 434 } |
521 | 435 return (0); |
522 return (0); | 436 } |
523 } | 437 #endif |
524 | 438 #ifdef PNG_FIXED_POINT_SUPPORTED |
525 png_uint_32 PNGAPI | 439 png_uint_32 PNGAPI |
526 png_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr, | 440 png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr, |
527 double *red_X, double *red_Y, double *red_Z, double *green_X, | 441 png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x, |
528 double *green_Y, double *green_Z, double *blue_X, double *blue_Y, | 442 png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y, |
529 double *blue_Z) | 443 png_fixed_point *blue_x, png_fixed_point *blue_y) |
530 { | 444 { |
531 if (png_ptr != NULL && info_ptr != NULL && | 445 png_debug1(1, "in %s retrieval function", "cHRM"); |
532 (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS)) | 446 |
533 { | 447 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM)) |
534 png_debug1(1, "in %s retrieval function", "cHRM_XYZ(float)"); | 448 { |
535 | 449 if (white_x != NULL) |
536 if (red_X != NULL) | 450 *white_x = info_ptr->int_x_white; |
537 *red_X = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_X, | 451 if (white_y != NULL) |
538 "cHRM red X"); | 452 *white_y = info_ptr->int_y_white; |
539 if (red_Y != NULL) | 453 if (red_x != NULL) |
540 *red_Y = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Y, | 454 *red_x = info_ptr->int_x_red; |
541 "cHRM red Y"); | 455 if (red_y != NULL) |
542 if (red_Z != NULL) | 456 *red_y = info_ptr->int_y_red; |
543 *red_Z = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Z, | 457 if (green_x != NULL) |
544 "cHRM red Z"); | 458 *green_x = info_ptr->int_x_green; |
545 if (green_X != NULL) | 459 if (green_y != NULL) |
546 *green_X = png_float(png_ptr, | 460 *green_y = info_ptr->int_y_green; |
547 info_ptr->colorspace.end_points_XYZ.green_X, "cHRM green X"); | 461 if (blue_x != NULL) |
548 if (green_Y != NULL) | 462 *blue_x = info_ptr->int_x_blue; |
549 *green_Y = png_float(png_ptr, | 463 if (blue_y != NULL) |
550 info_ptr->colorspace.end_points_XYZ.green_Y, "cHRM green Y"); | 464 *blue_y = info_ptr->int_y_blue; |
551 if (green_Z != NULL) | |
552 *green_Z = png_float(png_ptr, | |
553 info_ptr->colorspace.end_points_XYZ.green_Z, "cHRM green Z"); | |
554 if (blue_X != NULL) | |
555 *blue_X = png_float(png_ptr, | |
556 info_ptr->colorspace.end_points_XYZ.blue_X, "cHRM blue X"); | |
557 if (blue_Y != NULL) | |
558 *blue_Y = png_float(png_ptr, | |
559 info_ptr->colorspace.end_points_XYZ.blue_Y, "cHRM blue Y"); | |
560 if (blue_Z != NULL) | |
561 *blue_Z = png_float(png_ptr, | |
562 info_ptr->colorspace.end_points_XYZ.blue_Z, "cHRM blue Z"); | |
563 return (PNG_INFO_cHRM); | 465 return (PNG_INFO_cHRM); |
564 } | 466 } |
565 | 467 return (0); |
566 return (0); | 468 } |
567 } | 469 #endif |
568 # endif | |
569 | |
570 # ifdef PNG_FIXED_POINT_SUPPORTED | |
571 png_uint_32 PNGAPI | |
572 png_get_cHRM_XYZ_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr, | |
573 png_fixed_point *int_red_X, png_fixed_point *int_red_Y, | |
574 png_fixed_point *int_red_Z, png_fixed_point *int_green_X, | |
575 png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, | |
576 png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, | |
577 png_fixed_point *int_blue_Z) | |
578 { | |
579 if (png_ptr != NULL && info_ptr != NULL && | |
580 (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS)) | |
581 { | |
582 png_debug1(1, "in %s retrieval function", "cHRM_XYZ"); | |
583 | |
584 if (int_red_X != NULL) | |
585 *int_red_X = info_ptr->colorspace.end_points_XYZ.red_X; | |
586 if (int_red_Y != NULL) | |
587 *int_red_Y = info_ptr->colorspace.end_points_XYZ.red_Y; | |
588 if (int_red_Z != NULL) | |
589 *int_red_Z = info_ptr->colorspace.end_points_XYZ.red_Z; | |
590 if (int_green_X != NULL) | |
591 *int_green_X = info_ptr->colorspace.end_points_XYZ.green_X; | |
592 if (int_green_Y != NULL) | |
593 *int_green_Y = info_ptr->colorspace.end_points_XYZ.green_Y; | |
594 if (int_green_Z != NULL) | |
595 *int_green_Z = info_ptr->colorspace.end_points_XYZ.green_Z; | |
596 if (int_blue_X != NULL) | |
597 *int_blue_X = info_ptr->colorspace.end_points_XYZ.blue_X; | |
598 if (int_blue_Y != NULL) | |
599 *int_blue_Y = info_ptr->colorspace.end_points_XYZ.blue_Y; | |
600 if (int_blue_Z != NULL) | |
601 *int_blue_Z = info_ptr->colorspace.end_points_XYZ.blue_Z; | |
602 return (PNG_INFO_cHRM); | |
603 } | |
604 | |
605 return (0); | |
606 } | |
607 | |
608 png_uint_32 PNGAPI | |
609 png_get_cHRM_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr, | |
610 png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x, | |
611 png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y, | |
612 png_fixed_point *blue_x, png_fixed_point *blue_y) | |
613 { | |
614 png_debug1(1, "in %s retrieval function", "cHRM"); | |
615 | |
616 if (png_ptr != NULL && info_ptr != NULL && | |
617 (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS)) | |
618 { | |
619 if (white_x != NULL) | |
620 *white_x = info_ptr->colorspace.end_points_xy.whitex; | |
621 if (white_y != NULL) | |
622 *white_y = info_ptr->colorspace.end_points_xy.whitey; | |
623 if (red_x != NULL) | |
624 *red_x = info_ptr->colorspace.end_points_xy.redx; | |
625 if (red_y != NULL) | |
626 *red_y = info_ptr->colorspace.end_points_xy.redy; | |
627 if (green_x != NULL) | |
628 *green_x = info_ptr->colorspace.end_points_xy.greenx; | |
629 if (green_y != NULL) | |
630 *green_y = info_ptr->colorspace.end_points_xy.greeny; | |
631 if (blue_x != NULL) | |
632 *blue_x = info_ptr->colorspace.end_points_xy.bluex; | |
633 if (blue_y != NULL) | |
634 *blue_y = info_ptr->colorspace.end_points_xy.bluey; | |
635 return (PNG_INFO_cHRM); | |
636 } | |
637 | |
638 return (0); | |
639 } | |
640 # endif | |
641 #endif | 470 #endif |
642 | 471 |
643 #ifdef PNG_gAMA_SUPPORTED | 472 #ifdef PNG_gAMA_SUPPORTED |
644 # ifdef PNG_FIXED_POINT_SUPPORTED | 473 #ifdef PNG_FLOATING_POINT_SUPPORTED |
645 png_uint_32 PNGAPI | 474 png_uint_32 PNGAPI |
646 png_get_gAMA_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr, | 475 png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma) |
647 png_fixed_point *file_gamma) | |
648 { | 476 { |
649 png_debug1(1, "in %s retrieval function", "gAMA"); | 477 png_debug1(1, "in %s retrieval function", "gAMA"); |
650 | 478 |
651 if (png_ptr != NULL && info_ptr != NULL && | 479 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) |
652 (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) && | 480 && file_gamma != NULL) |
653 file_gamma != NULL) | 481 { |
654 { | 482 *file_gamma = (double)info_ptr->gamma; |
655 *file_gamma = info_ptr->colorspace.gamma; | |
656 return (PNG_INFO_gAMA); | 483 return (PNG_INFO_gAMA); |
657 } | 484 } |
658 | 485 return (0); |
659 return (0); | 486 } |
660 } | 487 #endif |
661 # endif | 488 #ifdef PNG_FIXED_POINT_SUPPORTED |
662 | 489 png_uint_32 PNGAPI |
663 # ifdef PNG_FLOATING_POINT_SUPPORTED | 490 png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, |
664 png_uint_32 PNGAPI | 491 png_fixed_point *int_file_gamma) |
665 png_get_gAMA(png_const_structrp png_ptr, png_const_inforp info_ptr, | 492 { |
666 double *file_gamma) | 493 png_debug1(1, "in %s retrieval function", "gAMA"); |
667 { | 494 |
668 png_debug1(1, "in %s retrieval function", "gAMA(float)"); | 495 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) |
669 | 496 && int_file_gamma != NULL) |
670 if (png_ptr != NULL && info_ptr != NULL && | 497 { |
671 (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) && | 498 *int_file_gamma = info_ptr->int_gamma; |
672 file_gamma != NULL) | |
673 { | |
674 *file_gamma = png_float(png_ptr, info_ptr->colorspace.gamma, | |
675 "png_get_gAMA"); | |
676 return (PNG_INFO_gAMA); | 499 return (PNG_INFO_gAMA); |
677 } | 500 } |
678 | 501 return (0); |
679 return (0); | 502 } |
680 } | 503 #endif |
681 # endif | |
682 #endif | 504 #endif |
683 | 505 |
684 #ifdef PNG_sRGB_SUPPORTED | 506 #ifdef PNG_sRGB_SUPPORTED |
685 png_uint_32 PNGAPI | 507 png_uint_32 PNGAPI |
686 png_get_sRGB(png_const_structrp png_ptr, png_const_inforp info_ptr, | 508 png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent) |
687 int *file_srgb_intent) | |
688 { | 509 { |
689 png_debug1(1, "in %s retrieval function", "sRGB"); | 510 png_debug1(1, "in %s retrieval function", "sRGB"); |
690 | 511 |
691 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB) | 512 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB) |
692 && file_srgb_intent != NULL) | 513 && file_srgb_intent != NULL) |
693 { | 514 { |
694 *file_srgb_intent = info_ptr->colorspace.rendering_intent; | 515 *file_srgb_intent = (int)info_ptr->srgb_intent; |
695 return (PNG_INFO_sRGB); | 516 return (PNG_INFO_sRGB); |
696 } | 517 } |
697 | |
698 return (0); | 518 return (0); |
699 } | 519 } |
700 #endif | 520 #endif |
701 | 521 |
702 #ifdef PNG_iCCP_SUPPORTED | 522 #ifdef PNG_iCCP_SUPPORTED |
703 png_uint_32 PNGAPI | 523 png_uint_32 PNGAPI |
704 png_get_iCCP(png_const_structrp png_ptr, png_inforp info_ptr, | 524 png_get_iCCP(png_structp png_ptr, png_infop info_ptr, |
705 png_charpp name, int *compression_type, | 525 png_charpp name, int *compression_type, |
706 png_bytepp profile, png_uint_32 *proflen) | 526 png_charpp profile, png_uint_32 *proflen) |
707 { | 527 { |
708 png_debug1(1, "in %s retrieval function", "iCCP"); | 528 png_debug1(1, "in %s retrieval function", "iCCP"); |
709 | 529 |
710 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP) | 530 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP) |
711 && name != NULL && compression_type != NULL && profile != NULL && | 531 && name != NULL && profile != NULL && proflen != NULL) |
712 » » proflen != NULL) | |
713 { | 532 { |
714 *name = info_ptr->iccp_name; | 533 *name = info_ptr->iccp_name; |
715 *profile = info_ptr->iccp_profile; | 534 *profile = info_ptr->iccp_profile; |
716 *proflen = png_get_uint_32(info_ptr->iccp_profile); | 535 /* Compression_type is a dummy so the API won't have to change |
717 /* This is somewhat irrelevant since the profile data returned has | 536 * if we introduce multiple compression types later. |
718 * actually been uncompressed. | |
719 */ | 537 */ |
720 *compression_type = PNG_COMPRESSION_TYPE_BASE; | 538 *proflen = (int)info_ptr->iccp_proflen; |
| 539 *compression_type = (int)info_ptr->iccp_compression; |
721 return (PNG_INFO_iCCP); | 540 return (PNG_INFO_iCCP); |
722 } | 541 } |
723 | |
724 return (0); | 542 return (0); |
725 } | 543 } |
726 #endif | 544 #endif |
727 | 545 |
728 #ifdef PNG_sPLT_SUPPORTED | 546 #ifdef PNG_sPLT_SUPPORTED |
729 int PNGAPI | 547 png_uint_32 PNGAPI |
730 png_get_sPLT(png_const_structrp png_ptr, png_inforp info_ptr, | 548 png_get_sPLT(png_structp png_ptr, png_infop info_ptr, |
731 png_sPLT_tpp spalettes) | 549 png_sPLT_tpp spalettes) |
732 { | 550 { |
733 if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL) | 551 if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL) |
734 { | 552 { |
735 *spalettes = info_ptr->splt_palettes; | 553 *spalettes = info_ptr->splt_palettes; |
736 return info_ptr->splt_palettes_num; | 554 return ((png_uint_32)info_ptr->splt_palettes_num); |
737 } | 555 } |
738 | |
739 return (0); | 556 return (0); |
740 } | 557 } |
741 #endif | 558 #endif |
742 | 559 |
743 #ifdef PNG_hIST_SUPPORTED | 560 #ifdef PNG_hIST_SUPPORTED |
744 png_uint_32 PNGAPI | 561 png_uint_32 PNGAPI |
745 png_get_hIST(png_const_structrp png_ptr, png_inforp info_ptr, | 562 png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist) |
746 png_uint_16p *hist) | |
747 { | 563 { |
748 png_debug1(1, "in %s retrieval function", "hIST"); | 564 png_debug1(1, "in %s retrieval function", "hIST"); |
749 | 565 |
750 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST) | 566 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST) |
751 && hist != NULL) | 567 && hist != NULL) |
752 { | 568 { |
753 *hist = info_ptr->hist; | 569 *hist = info_ptr->hist; |
754 return (PNG_INFO_hIST); | 570 return (PNG_INFO_hIST); |
755 } | 571 } |
756 | 572 return (0); |
757 return (0); | 573 } |
758 } | 574 #endif |
759 #endif | 575 |
760 | 576 png_uint_32 PNGAPI |
761 png_uint_32 PNGAPI | 577 png_get_IHDR(png_structp png_ptr, png_infop info_ptr, |
762 png_get_IHDR(png_const_structrp png_ptr, png_const_inforp info_ptr, | 578 png_uint_32 *width, png_uint_32 *height, int *bit_depth, |
763 png_uint_32 *width, png_uint_32 *height, int *bit_depth, | 579 int *color_type, int *interlace_type, int *compression_type, |
764 int *color_type, int *interlace_type, int *compression_type, | 580 int *filter_type) |
765 int *filter_type) | 581 |
766 { | 582 { |
767 png_debug1(1, "in %s retrieval function", "IHDR"); | 583 png_debug1(1, "in %s retrieval function", "IHDR"); |
768 | 584 |
769 if (png_ptr == NULL || info_ptr == NULL || width == NULL || | 585 if (png_ptr == NULL || info_ptr == NULL || width == NULL || |
770 height == NULL || bit_depth == NULL || color_type == NULL) | 586 height == NULL || bit_depth == NULL || color_type == NULL) |
771 return (0); | 587 return (0); |
772 | 588 |
773 *width = info_ptr->width; | 589 *width = info_ptr->width; |
774 *height = info_ptr->height; | 590 *height = info_ptr->height; |
775 *bit_depth = info_ptr->bit_depth; | 591 *bit_depth = info_ptr->bit_depth; |
776 *color_type = info_ptr->color_type; | 592 *color_type = info_ptr->color_type; |
777 | 593 |
778 if (compression_type != NULL) | 594 if (compression_type != NULL) |
779 *compression_type = info_ptr->compression_type; | 595 *compression_type = info_ptr->compression_type; |
780 | 596 |
781 if (filter_type != NULL) | 597 if (filter_type != NULL) |
782 *filter_type = info_ptr->filter_type; | 598 *filter_type = info_ptr->filter_type; |
783 | 599 |
784 if (interlace_type != NULL) | 600 if (interlace_type != NULL) |
785 *interlace_type = info_ptr->interlace_type; | 601 *interlace_type = info_ptr->interlace_type; |
786 | 602 |
787 /* This is redundant if we can be sure that the info_ptr values were all | 603 /* This is redundant if we can be sure that the info_ptr values were all |
788 * assigned in png_set_IHDR(). We do the check anyhow in case an | 604 * assigned in png_set_IHDR(). We do the check anyhow in case an |
789 * application has ignored our advice not to mess with the members | 605 * application has ignored our advice not to mess with the members |
790 * of info_ptr directly. | 606 * of info_ptr directly. |
791 */ | 607 */ |
792 png_check_IHDR(png_ptr, info_ptr->width, info_ptr->height, | 608 png_check_IHDR (png_ptr, info_ptr->width, info_ptr->height, |
793 info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type, | 609 info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type, |
794 info_ptr->compression_type, info_ptr->filter_type); | 610 info_ptr->compression_type, info_ptr->filter_type); |
795 | 611 |
796 return (1); | 612 return (1); |
797 } | 613 } |
798 | 614 |
799 #ifdef PNG_oFFs_SUPPORTED | 615 #ifdef PNG_oFFs_SUPPORTED |
800 png_uint_32 PNGAPI | 616 png_uint_32 PNGAPI |
801 png_get_oFFs(png_const_structrp png_ptr, png_const_inforp info_ptr, | 617 png_get_oFFs(png_structp png_ptr, png_infop info_ptr, |
802 png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type) | 618 png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type) |
803 { | 619 { |
804 png_debug1(1, "in %s retrieval function", "oFFs"); | 620 png_debug1(1, "in %s retrieval function", "oFFs"); |
805 | 621 |
806 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs) | 622 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs) |
807 && offset_x != NULL && offset_y != NULL && unit_type != NULL) | 623 && offset_x != NULL && offset_y != NULL && unit_type != NULL) |
808 { | 624 { |
809 *offset_x = info_ptr->x_offset; | 625 *offset_x = info_ptr->x_offset; |
810 *offset_y = info_ptr->y_offset; | 626 *offset_y = info_ptr->y_offset; |
811 *unit_type = (int)info_ptr->offset_unit_type; | 627 *unit_type = (int)info_ptr->offset_unit_type; |
812 return (PNG_INFO_oFFs); | 628 return (PNG_INFO_oFFs); |
813 } | 629 } |
814 | |
815 return (0); | 630 return (0); |
816 } | 631 } |
817 #endif | 632 #endif |
818 | 633 |
819 #ifdef PNG_pCAL_SUPPORTED | 634 #ifdef PNG_pCAL_SUPPORTED |
820 png_uint_32 PNGAPI | 635 png_uint_32 PNGAPI |
821 png_get_pCAL(png_const_structrp png_ptr, png_inforp info_ptr, | 636 png_get_pCAL(png_structp png_ptr, png_infop info_ptr, |
822 png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams, | 637 png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams, |
823 png_charp *units, png_charpp *params) | 638 png_charp *units, png_charpp *params) |
824 { | 639 { |
825 png_debug1(1, "in %s retrieval function", "pCAL"); | 640 png_debug1(1, "in %s retrieval function", "pCAL"); |
826 | 641 |
827 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL) | 642 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL) |
828 && purpose != NULL && X0 != NULL && X1 != NULL && type != NULL && | 643 && purpose != NULL && X0 != NULL && X1 != NULL && type != NULL && |
829 nparams != NULL && units != NULL && params != NULL) | 644 nparams != NULL && units != NULL && params != NULL) |
830 { | 645 { |
831 *purpose = info_ptr->pcal_purpose; | 646 *purpose = info_ptr->pcal_purpose; |
832 *X0 = info_ptr->pcal_X0; | 647 *X0 = info_ptr->pcal_X0; |
833 *X1 = info_ptr->pcal_X1; | 648 *X1 = info_ptr->pcal_X1; |
834 *type = (int)info_ptr->pcal_type; | 649 *type = (int)info_ptr->pcal_type; |
835 *nparams = (int)info_ptr->pcal_nparams; | 650 *nparams = (int)info_ptr->pcal_nparams; |
836 *units = info_ptr->pcal_units; | 651 *units = info_ptr->pcal_units; |
837 *params = info_ptr->pcal_params; | 652 *params = info_ptr->pcal_params; |
838 return (PNG_INFO_pCAL); | 653 return (PNG_INFO_pCAL); |
839 } | 654 } |
840 | |
841 return (0); | 655 return (0); |
842 } | 656 } |
843 #endif | 657 #endif |
844 | 658 |
845 #ifdef PNG_sCAL_SUPPORTED | 659 #ifdef PNG_sCAL_SUPPORTED |
846 # ifdef PNG_FIXED_POINT_SUPPORTED | 660 #ifdef PNG_FLOATING_POINT_SUPPORTED |
847 # if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \ | |
848 defined(PNG_FLOATING_POINT_SUPPORTED) | |
849 png_uint_32 PNGAPI | 661 png_uint_32 PNGAPI |
850 png_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr, | 662 png_get_sCAL(png_structp png_ptr, png_infop info_ptr, |
851 int *unit, png_fixed_point *width, png_fixed_point *height) | 663 int *unit, double *width, double *height) |
852 { | 664 { |
853 if (png_ptr != NULL && info_ptr != NULL && | 665 if (png_ptr != NULL && info_ptr != NULL && |
854 (info_ptr->valid & PNG_INFO_sCAL)) | 666 (info_ptr->valid & PNG_INFO_sCAL)) |
855 { | 667 { |
856 *unit = info_ptr->scal_unit; | 668 *unit = info_ptr->scal_unit; |
857 /*TODO: make this work without FP support; the API is currently eliminated | 669 *width = info_ptr->scal_pixel_width; |
858 * if neither floating point APIs nor internal floating point arithmetic | 670 *height = info_ptr->scal_pixel_height; |
859 * are enabled. | 671 return (PNG_INFO_sCAL); |
860 */ | 672 } |
861 *width = png_fixed(png_ptr, atof(info_ptr->scal_s_width), "sCAL width"); | 673 return(0); |
862 *height = png_fixed(png_ptr, atof(info_ptr->scal_s_height), | |
863 "sCAL height"); | |
864 return (PNG_INFO_sCAL); | |
865 } | |
866 | |
867 return(0); | |
868 } | 674 } |
869 # endif /* FLOATING_ARITHMETIC */ | 675 #else |
870 # endif /* FIXED_POINT */ | 676 #ifdef PNG_FIXED_POINT_SUPPORTED |
871 # ifdef PNG_FLOATING_POINT_SUPPORTED | |
872 png_uint_32 PNGAPI | 677 png_uint_32 PNGAPI |
873 png_get_sCAL(png_const_structrp png_ptr, png_const_inforp info_ptr, | 678 png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr, |
874 int *unit, double *width, double *height) | 679 int *unit, png_charpp width, png_charpp height) |
875 { | 680 { |
876 if (png_ptr != NULL && info_ptr != NULL && | 681 if (png_ptr != NULL && info_ptr != NULL && |
877 (info_ptr->valid & PNG_INFO_sCAL)) | 682 (info_ptr->valid & PNG_INFO_sCAL)) |
878 { | 683 { |
879 *unit = info_ptr->scal_unit; | 684 *unit = info_ptr->scal_unit; |
880 *width = atof(info_ptr->scal_s_width); | 685 *width = info_ptr->scal_s_width; |
881 *height = atof(info_ptr->scal_s_height); | 686 *height = info_ptr->scal_s_height; |
882 return (PNG_INFO_sCAL); | 687 return (PNG_INFO_sCAL); |
883 } | 688 } |
884 | 689 return(0); |
885 return(0); | |
886 } | 690 } |
887 # endif /* FLOATING POINT */ | 691 #endif |
888 png_uint_32 PNGAPI | 692 #endif |
889 png_get_sCAL_s(png_const_structrp png_ptr, png_const_inforp info_ptr, | 693 #endif |
890 int *unit, png_charpp width, png_charpp height) | |
891 { | |
892 if (png_ptr != NULL && info_ptr != NULL && | |
893 (info_ptr->valid & PNG_INFO_sCAL)) | |
894 { | |
895 *unit = info_ptr->scal_unit; | |
896 *width = info_ptr->scal_s_width; | |
897 *height = info_ptr->scal_s_height; | |
898 return (PNG_INFO_sCAL); | |
899 } | |
900 | |
901 return(0); | |
902 } | |
903 #endif /* sCAL */ | |
904 | 694 |
905 #ifdef PNG_pHYs_SUPPORTED | 695 #ifdef PNG_pHYs_SUPPORTED |
906 png_uint_32 PNGAPI | 696 png_uint_32 PNGAPI |
907 png_get_pHYs(png_const_structrp png_ptr, png_const_inforp info_ptr, | 697 png_get_pHYs(png_structp png_ptr, png_infop info_ptr, |
908 png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) | 698 png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) |
909 { | 699 { |
910 png_uint_32 retval = 0; | 700 png_uint_32 retval = 0; |
911 | 701 |
912 png_debug1(1, "in %s retrieval function", "pHYs"); | 702 png_debug1(1, "in %s retrieval function", "pHYs"); |
913 | 703 |
914 if (png_ptr != NULL && info_ptr != NULL && | 704 if (png_ptr != NULL && info_ptr != NULL && |
915 (info_ptr->valid & PNG_INFO_pHYs)) | 705 (info_ptr->valid & PNG_INFO_pHYs)) |
916 { | 706 { |
917 if (res_x != NULL) | 707 if (res_x != NULL) |
918 { | 708 { |
919 *res_x = info_ptr->x_pixels_per_unit; | 709 *res_x = info_ptr->x_pixels_per_unit; |
920 retval |= PNG_INFO_pHYs; | 710 retval |= PNG_INFO_pHYs; |
921 } | 711 } |
922 | 712 |
923 if (res_y != NULL) | 713 if (res_y != NULL) |
924 { | 714 { |
925 *res_y = info_ptr->y_pixels_per_unit; | 715 *res_y = info_ptr->y_pixels_per_unit; |
926 retval |= PNG_INFO_pHYs; | 716 retval |= PNG_INFO_pHYs; |
927 } | 717 } |
928 | 718 |
929 if (unit_type != NULL) | 719 if (unit_type != NULL) |
930 { | 720 { |
931 *unit_type = (int)info_ptr->phys_unit_type; | 721 *unit_type = (int)info_ptr->phys_unit_type; |
932 retval |= PNG_INFO_pHYs; | 722 retval |= PNG_INFO_pHYs; |
933 } | 723 } |
934 } | 724 } |
935 | |
936 return (retval); | 725 return (retval); |
937 } | 726 } |
938 #endif /* pHYs */ | 727 #endif |
939 | 728 |
940 png_uint_32 PNGAPI | 729 png_uint_32 PNGAPI |
941 png_get_PLTE(png_const_structrp png_ptr, png_inforp info_ptr, | 730 png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette, |
942 png_colorp *palette, int *num_palette) | 731 int *num_palette) |
943 { | 732 { |
944 png_debug1(1, "in %s retrieval function", "PLTE"); | 733 png_debug1(1, "in %s retrieval function", "PLTE"); |
945 | 734 |
946 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE) | 735 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE) |
947 && palette != NULL) | 736 && palette != NULL) |
948 { | 737 { |
949 *palette = info_ptr->palette; | 738 *palette = info_ptr->palette; |
950 *num_palette = info_ptr->num_palette; | 739 *num_palette = info_ptr->num_palette; |
951 png_debug1(3, "num_palette = %d", *num_palette); | 740 png_debug1(3, "num_palette = %d", *num_palette); |
952 return (PNG_INFO_PLTE); | 741 return (PNG_INFO_PLTE); |
953 } | 742 } |
954 | |
955 return (0); | 743 return (0); |
956 } | 744 } |
957 | 745 |
958 #ifdef PNG_sBIT_SUPPORTED | 746 #ifdef PNG_sBIT_SUPPORTED |
959 png_uint_32 PNGAPI | 747 png_uint_32 PNGAPI |
960 png_get_sBIT(png_const_structrp png_ptr, png_inforp info_ptr, | 748 png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit) |
961 png_color_8p *sig_bit) | |
962 { | 749 { |
963 png_debug1(1, "in %s retrieval function", "sBIT"); | 750 png_debug1(1, "in %s retrieval function", "sBIT"); |
964 | 751 |
965 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT) | 752 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT) |
966 && sig_bit != NULL) | 753 && sig_bit != NULL) |
967 { | 754 { |
968 *sig_bit = &(info_ptr->sig_bit); | 755 *sig_bit = &(info_ptr->sig_bit); |
969 return (PNG_INFO_sBIT); | 756 return (PNG_INFO_sBIT); |
970 } | 757 } |
971 | |
972 return (0); | 758 return (0); |
973 } | 759 } |
974 #endif | 760 #endif |
975 | 761 |
976 #ifdef PNG_TEXT_SUPPORTED | 762 #ifdef PNG_TEXT_SUPPORTED |
977 int PNGAPI | 763 png_uint_32 PNGAPI |
978 png_get_text(png_const_structrp png_ptr, png_inforp info_ptr, | 764 png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr, |
979 png_textp *text_ptr, int *num_text) | 765 int *num_text) |
980 { | 766 { |
981 if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0) | 767 if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0) |
982 { | 768 { |
983 png_debug1(1, "in 0x%lx retrieval function", | 769 png_debug1(1, "in %s retrieval function", |
984 (unsigned long)png_ptr->chunk_name); | 770 (png_ptr->chunk_name[0] == '\0' ? "text" |
| 771 : (png_const_charp)png_ptr->chunk_name)); |
985 | 772 |
986 if (text_ptr != NULL) | 773 if (text_ptr != NULL) |
987 *text_ptr = info_ptr->text; | 774 *text_ptr = info_ptr->text; |
988 | 775 |
989 if (num_text != NULL) | 776 if (num_text != NULL) |
990 *num_text = info_ptr->num_text; | 777 *num_text = info_ptr->num_text; |
991 | 778 |
992 return info_ptr->num_text; | 779 return ((png_uint_32)info_ptr->num_text); |
993 } | 780 } |
994 | |
995 if (num_text != NULL) | 781 if (num_text != NULL) |
996 *num_text = 0; | 782 *num_text = 0; |
997 | |
998 return(0); | 783 return(0); |
999 } | 784 } |
1000 #endif | 785 #endif |
1001 | 786 |
1002 #ifdef PNG_tIME_SUPPORTED | 787 #ifdef PNG_tIME_SUPPORTED |
1003 png_uint_32 PNGAPI | 788 png_uint_32 PNGAPI |
1004 png_get_tIME(png_const_structrp png_ptr, png_inforp info_ptr, | 789 png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time) |
1005 png_timep *mod_time) | |
1006 { | 790 { |
1007 png_debug1(1, "in %s retrieval function", "tIME"); | 791 png_debug1(1, "in %s retrieval function", "tIME"); |
1008 | 792 |
1009 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME) | 793 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME) |
1010 && mod_time != NULL) | 794 && mod_time != NULL) |
1011 { | 795 { |
1012 *mod_time = &(info_ptr->mod_time); | 796 *mod_time = &(info_ptr->mod_time); |
1013 return (PNG_INFO_tIME); | 797 return (PNG_INFO_tIME); |
1014 } | 798 } |
1015 | |
1016 return (0); | 799 return (0); |
1017 } | 800 } |
1018 #endif | 801 #endif |
1019 | 802 |
1020 #ifdef PNG_tRNS_SUPPORTED | 803 #ifdef PNG_tRNS_SUPPORTED |
1021 png_uint_32 PNGAPI | 804 png_uint_32 PNGAPI |
1022 png_get_tRNS(png_const_structrp png_ptr, png_inforp info_ptr, | 805 png_get_tRNS(png_structp png_ptr, png_infop info_ptr, |
1023 png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color) | 806 png_bytep *trans, int *num_trans, png_color_16p *trans_values) |
1024 { | 807 { |
1025 png_uint_32 retval = 0; | 808 png_uint_32 retval = 0; |
1026 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) | 809 if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) |
1027 { | 810 { |
1028 png_debug1(1, "in %s retrieval function", "tRNS"); | 811 png_debug1(1, "in %s retrieval function", "tRNS"); |
1029 | 812 |
1030 if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) | 813 if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) |
1031 { | 814 { |
1032 if (trans_alpha != NULL) | 815 if (trans != NULL) |
1033 { | 816 { |
1034 *trans_alpha = info_ptr->trans_alpha; | 817 *trans = info_ptr->trans; |
1035 retval |= PNG_INFO_tRNS; | 818 retval |= PNG_INFO_tRNS; |
1036 } | 819 } |
1037 | 820 |
1038 if (trans_color != NULL) | 821 if (trans_values != NULL) |
1039 *trans_color = &(info_ptr->trans_color); | 822 *trans_values = &(info_ptr->trans_values); |
1040 } | 823 } |
1041 | |
1042 else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */ | 824 else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */ |
1043 { | 825 { |
1044 if (trans_color != NULL) | 826 if (trans_values != NULL) |
1045 { | 827 { |
1046 *trans_color = &(info_ptr->trans_color); | 828 *trans_values = &(info_ptr->trans_values); |
1047 retval |= PNG_INFO_tRNS; | 829 retval |= PNG_INFO_tRNS; |
1048 } | 830 } |
1049 | 831 |
1050 if (trans_alpha != NULL) | 832 if (trans != NULL) |
1051 *trans_alpha = NULL; | 833 *trans = NULL; |
1052 } | 834 } |
1053 | |
1054 if (num_trans != NULL) | 835 if (num_trans != NULL) |
1055 { | 836 { |
1056 *num_trans = info_ptr->num_trans; | 837 *num_trans = info_ptr->num_trans; |
1057 retval |= PNG_INFO_tRNS; | 838 retval |= PNG_INFO_tRNS; |
1058 } | 839 } |
1059 } | 840 } |
1060 | |
1061 return (retval); | 841 return (retval); |
1062 } | 842 } |
1063 #endif | 843 #endif |
1064 | 844 |
1065 #ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED | 845 #ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED |
1066 int PNGAPI | 846 png_uint_32 PNGAPI |
1067 png_get_unknown_chunks(png_const_structrp png_ptr, png_inforp info_ptr, | 847 png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr, |
1068 png_unknown_chunkpp unknowns) | 848 png_unknown_chunkpp unknowns) |
1069 { | 849 { |
1070 if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL) | 850 if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL) |
1071 { | 851 { |
1072 *unknowns = info_ptr->unknown_chunks; | 852 *unknowns = info_ptr->unknown_chunks; |
1073 return info_ptr->unknown_chunks_num; | 853 return ((png_uint_32)info_ptr->unknown_chunks_num); |
1074 } | 854 } |
1075 | |
1076 return (0); | 855 return (0); |
1077 } | 856 } |
1078 #endif | 857 #endif |
1079 | 858 |
1080 #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED | 859 #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED |
1081 png_byte PNGAPI | 860 png_byte PNGAPI |
1082 png_get_rgb_to_gray_status (png_const_structrp png_ptr) | 861 png_get_rgb_to_gray_status (png_structp png_ptr) |
1083 { | 862 { |
1084 return (png_byte)(png_ptr ? png_ptr->rgb_to_gray_status : 0); | 863 return (png_byte)(png_ptr? png_ptr->rgb_to_gray_status : 0); |
1085 } | 864 } |
1086 #endif | 865 #endif |
1087 | 866 |
1088 #ifdef PNG_USER_CHUNKS_SUPPORTED | 867 #ifdef PNG_USER_CHUNKS_SUPPORTED |
1089 png_voidp PNGAPI | 868 png_voidp PNGAPI |
1090 png_get_user_chunk_ptr(png_const_structrp png_ptr) | 869 png_get_user_chunk_ptr(png_structp png_ptr) |
1091 { | 870 { |
1092 return (png_ptr ? png_ptr->user_chunk_ptr : NULL); | 871 return (png_ptr? png_ptr->user_chunk_ptr : NULL); |
1093 } | 872 } |
1094 #endif | 873 #endif |
1095 | 874 |
1096 png_size_t PNGAPI | 875 png_uint_32 PNGAPI |
1097 png_get_compression_buffer_size(png_const_structrp png_ptr) | 876 png_get_compression_buffer_size(png_structp png_ptr) |
1098 { | 877 { |
1099 if (png_ptr == NULL) | 878 return (png_uint_32)(png_ptr? png_ptr->zbuf_size : 0L); |
1100 return 0; | |
1101 | |
1102 # ifdef PNG_WRITE_SUPPORTED | |
1103 if (png_ptr->mode & PNG_IS_READ_STRUCT) | |
1104 # endif | |
1105 { | |
1106 # ifdef PNG_SEQUENTIAL_READ_SUPPORTED | |
1107 return png_ptr->IDAT_read_size; | |
1108 # else | |
1109 return PNG_IDAT_READ_SIZE; | |
1110 # endif | |
1111 } | |
1112 | |
1113 # ifdef PNG_WRITE_SUPPORTED | |
1114 else | |
1115 return png_ptr->zbuffer_size; | |
1116 # endif | |
1117 } | 879 } |
1118 | 880 |
1119 #ifdef PNG_SET_USER_LIMITS_SUPPORTED | 881 #ifdef PNG_ASSEMBLER_CODE_SUPPORTED |
1120 /* These functions were added to libpng 1.2.6 and were enabled | 882 #ifndef PNG_1_0_X |
1121 * by default in libpng-1.4.0 */ | 883 /* This function was added to libpng 1.2.0 and should exist by default */ |
1122 png_uint_32 PNGAPI | 884 png_uint_32 PNGAPI |
1123 png_get_user_width_max (png_const_structrp png_ptr) | 885 png_get_asm_flags (png_structp png_ptr) |
1124 { | 886 { |
1125 return (png_ptr ? png_ptr->user_width_max : 0); | 887 /* Obsolete, to be removed from libpng-1.4.0 */ |
| 888 return (png_ptr? 0L: 0L); |
1126 } | 889 } |
1127 | 890 |
| 891 /* This function was added to libpng 1.2.0 and should exist by default */ |
1128 png_uint_32 PNGAPI | 892 png_uint_32 PNGAPI |
1129 png_get_user_height_max (png_const_structrp png_ptr) | 893 png_get_asm_flagmask (int flag_select) |
1130 { | 894 { |
1131 return (png_ptr ? png_ptr->user_height_max : 0); | 895 /* Obsolete, to be removed from libpng-1.4.0 */ |
| 896 flag_select=flag_select; |
| 897 return 0L; |
1132 } | 898 } |
1133 | 899 |
1134 /* This function was added to libpng 1.4.0 */ | 900 /* GRR: could add this: && defined(PNG_MMX_CODE_SUPPORTED) */ |
| 901 /* This function was added to libpng 1.2.0 */ |
1135 png_uint_32 PNGAPI | 902 png_uint_32 PNGAPI |
1136 png_get_chunk_cache_max (png_const_structrp png_ptr) | 903 png_get_mmx_flagmask (int flag_select, int *compilerID) |
1137 { | 904 { |
1138 return (png_ptr ? png_ptr->user_chunk_cache_max : 0); | 905 /* Obsolete, to be removed from libpng-1.4.0 */ |
| 906 flag_select=flag_select; |
| 907 *compilerID = -1; /* unknown (i.e., no asm/MMX code compiled) */ |
| 908 return 0L; |
1139 } | 909 } |
1140 | 910 |
1141 /* This function was added to libpng 1.4.1 */ | 911 /* This function was added to libpng 1.2.0 */ |
1142 png_alloc_size_t PNGAPI | 912 png_byte PNGAPI |
1143 png_get_chunk_malloc_max (png_const_structrp png_ptr) | 913 png_get_mmx_bitdepth_threshold (png_structp png_ptr) |
1144 { | 914 { |
1145 return (png_ptr ? png_ptr->user_chunk_malloc_max : 0); | 915 /* Obsolete, to be removed from libpng-1.4.0 */ |
| 916 return (png_ptr? 0: 0); |
| 917 } |
| 918 |
| 919 /* This function was added to libpng 1.2.0 */ |
| 920 png_uint_32 PNGAPI |
| 921 png_get_mmx_rowbytes_threshold (png_structp png_ptr) |
| 922 { |
| 923 /* Obsolete, to be removed from libpng-1.4.0 */ |
| 924 return (png_ptr? 0L: 0L); |
| 925 } |
| 926 #endif /* ?PNG_1_0_X */ |
| 927 #endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */ |
| 928 |
| 929 #ifdef PNG_SET_USER_LIMITS_SUPPORTED |
| 930 /* These functions were added to libpng 1.2.6 but not enabled |
| 931 * by default. They will be enabled in libpng-1.4.0 */ |
| 932 png_uint_32 PNGAPI |
| 933 png_get_user_width_max (png_structp png_ptr) |
| 934 { |
| 935 return (png_ptr? png_ptr->user_width_max : 0); |
| 936 } |
| 937 png_uint_32 PNGAPI |
| 938 png_get_user_height_max (png_structp png_ptr) |
| 939 { |
| 940 return (png_ptr? png_ptr->user_height_max : 0); |
1146 } | 941 } |
1147 #endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */ | 942 #endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */ |
1148 | 943 |
1149 /* These functions were added to libpng 1.4.0 */ | |
1150 #ifdef PNG_IO_STATE_SUPPORTED | |
1151 png_uint_32 PNGAPI | |
1152 png_get_io_state (png_const_structrp png_ptr) | |
1153 { | |
1154 return png_ptr->io_state; | |
1155 } | |
1156 | |
1157 png_uint_32 PNGAPI | |
1158 png_get_io_chunk_type (png_const_structrp png_ptr) | |
1159 { | |
1160 return png_ptr->chunk_name; | |
1161 } | |
1162 #endif /* ?PNG_IO_STATE_SUPPORTED */ | |
1163 | |
1164 #ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED | |
1165 # ifdef PNG_GET_PALETTE_MAX_SUPPORTED | |
1166 int PNGAPI | |
1167 png_get_palette_max(png_const_structp png_ptr, png_const_infop info_ptr) | |
1168 { | |
1169 if (png_ptr != NULL && info_ptr != NULL) | |
1170 return png_ptr->num_palette_max; | |
1171 | |
1172 return (-1); | |
1173 } | |
1174 # endif | |
1175 #endif | |
1176 | |
1177 #endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */ | 944 #endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */ |
OLD | NEW |