17dd7cddfSDavid du Colombier
27dd7cddfSDavid du Colombier /* pngget.c - retrieval of values from info struct
37dd7cddfSDavid du Colombier *
4*593dc095SDavid du Colombier * libpng 1.2.8 - December 3, 2004
57dd7cddfSDavid du Colombier * For conditions of distribution and use, see copyright notice in png.h
6*593dc095SDavid du Colombier * Copyright (c) 1998-2004 Glenn Randers-Pehrson
7*593dc095SDavid du Colombier * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
8*593dc095SDavid du Colombier * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
97dd7cddfSDavid du Colombier */
107dd7cddfSDavid du Colombier
117dd7cddfSDavid du Colombier #define PNG_INTERNAL
127dd7cddfSDavid du Colombier #include "png.h"
137dd7cddfSDavid du Colombier
14*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_valid(png_structp png_ptr,png_infop info_ptr,png_uint_32 flag)157dd7cddfSDavid du Colombier png_get_valid(png_structp png_ptr, png_infop info_ptr, png_uint_32 flag)
167dd7cddfSDavid du Colombier {
17*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
187dd7cddfSDavid du Colombier return(info_ptr->valid & flag);
197dd7cddfSDavid du Colombier else
207dd7cddfSDavid du Colombier return(0);
217dd7cddfSDavid du Colombier }
227dd7cddfSDavid du Colombier
23*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_rowbytes(png_structp png_ptr,png_infop info_ptr)247dd7cddfSDavid du Colombier png_get_rowbytes(png_structp png_ptr, png_infop info_ptr)
257dd7cddfSDavid du Colombier {
26*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
277dd7cddfSDavid du Colombier return(info_ptr->rowbytes);
287dd7cddfSDavid du Colombier else
297dd7cddfSDavid du Colombier return(0);
307dd7cddfSDavid du Colombier }
317dd7cddfSDavid du Colombier
32*593dc095SDavid du Colombier #if defined(PNG_INFO_IMAGE_SUPPORTED)
33*593dc095SDavid du Colombier png_bytepp PNGAPI
png_get_rows(png_structp png_ptr,png_infop info_ptr)34*593dc095SDavid du Colombier png_get_rows(png_structp png_ptr, png_infop info_ptr)
35*593dc095SDavid du Colombier {
36*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
37*593dc095SDavid du Colombier return(info_ptr->row_pointers);
38*593dc095SDavid du Colombier else
39*593dc095SDavid du Colombier return(0);
40*593dc095SDavid du Colombier }
41*593dc095SDavid du Colombier #endif
42*593dc095SDavid du Colombier
437dd7cddfSDavid du Colombier #ifdef PNG_EASY_ACCESS_SUPPORTED
447dd7cddfSDavid du Colombier /* easy access to info, added in libpng-0.99 */
45*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_image_width(png_structp png_ptr,png_infop info_ptr)467dd7cddfSDavid du Colombier png_get_image_width(png_structp png_ptr, png_infop info_ptr)
477dd7cddfSDavid du Colombier {
48*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
497dd7cddfSDavid du Colombier {
507dd7cddfSDavid du Colombier return info_ptr->width;
517dd7cddfSDavid du Colombier }
527dd7cddfSDavid du Colombier return (0);
537dd7cddfSDavid du Colombier }
547dd7cddfSDavid du Colombier
55*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_image_height(png_structp png_ptr,png_infop info_ptr)567dd7cddfSDavid du Colombier png_get_image_height(png_structp png_ptr, png_infop info_ptr)
577dd7cddfSDavid du Colombier {
58*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
597dd7cddfSDavid du Colombier {
607dd7cddfSDavid du Colombier return info_ptr->height;
617dd7cddfSDavid du Colombier }
627dd7cddfSDavid du Colombier return (0);
637dd7cddfSDavid du Colombier }
647dd7cddfSDavid du Colombier
65*593dc095SDavid du Colombier png_byte PNGAPI
png_get_bit_depth(png_structp png_ptr,png_infop info_ptr)667dd7cddfSDavid du Colombier png_get_bit_depth(png_structp png_ptr, png_infop info_ptr)
677dd7cddfSDavid du Colombier {
68*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
697dd7cddfSDavid du Colombier {
707dd7cddfSDavid du Colombier return info_ptr->bit_depth;
717dd7cddfSDavid du Colombier }
727dd7cddfSDavid du Colombier return (0);
737dd7cddfSDavid du Colombier }
747dd7cddfSDavid du Colombier
75*593dc095SDavid du Colombier png_byte PNGAPI
png_get_color_type(png_structp png_ptr,png_infop info_ptr)767dd7cddfSDavid du Colombier png_get_color_type(png_structp png_ptr, png_infop info_ptr)
777dd7cddfSDavid du Colombier {
78*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
797dd7cddfSDavid du Colombier {
807dd7cddfSDavid du Colombier return info_ptr->color_type;
817dd7cddfSDavid du Colombier }
827dd7cddfSDavid du Colombier return (0);
837dd7cddfSDavid du Colombier }
847dd7cddfSDavid du Colombier
85*593dc095SDavid du Colombier png_byte PNGAPI
png_get_filter_type(png_structp png_ptr,png_infop info_ptr)867dd7cddfSDavid du Colombier png_get_filter_type(png_structp png_ptr, png_infop info_ptr)
877dd7cddfSDavid du Colombier {
88*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
897dd7cddfSDavid du Colombier {
907dd7cddfSDavid du Colombier return info_ptr->filter_type;
917dd7cddfSDavid du Colombier }
927dd7cddfSDavid du Colombier return (0);
937dd7cddfSDavid du Colombier }
947dd7cddfSDavid du Colombier
95*593dc095SDavid du Colombier png_byte PNGAPI
png_get_interlace_type(png_structp png_ptr,png_infop info_ptr)967dd7cddfSDavid du Colombier png_get_interlace_type(png_structp png_ptr, png_infop info_ptr)
977dd7cddfSDavid du Colombier {
98*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
997dd7cddfSDavid du Colombier {
1007dd7cddfSDavid du Colombier return info_ptr->interlace_type;
1017dd7cddfSDavid du Colombier }
1027dd7cddfSDavid du Colombier return (0);
1037dd7cddfSDavid du Colombier }
1047dd7cddfSDavid du Colombier
105*593dc095SDavid du Colombier png_byte PNGAPI
png_get_compression_type(png_structp png_ptr,png_infop info_ptr)1067dd7cddfSDavid du Colombier png_get_compression_type(png_structp png_ptr, png_infop info_ptr)
1077dd7cddfSDavid du Colombier {
108*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
1097dd7cddfSDavid du Colombier {
1107dd7cddfSDavid du Colombier return info_ptr->compression_type;
1117dd7cddfSDavid du Colombier }
1127dd7cddfSDavid du Colombier return (0);
1137dd7cddfSDavid du Colombier }
1147dd7cddfSDavid du Colombier
115*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_x_pixels_per_meter(png_structp png_ptr,png_infop info_ptr)116*593dc095SDavid du Colombier png_get_x_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
1177dd7cddfSDavid du Colombier {
118*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
119*593dc095SDavid du Colombier #if defined(PNG_pHYs_SUPPORTED)
120*593dc095SDavid du Colombier if (info_ptr->valid & PNG_INFO_pHYs)
1217dd7cddfSDavid du Colombier {
122*593dc095SDavid du Colombier png_debug1(1, "in %s retrieval function\n", "png_get_x_pixels_per_meter");
1237dd7cddfSDavid du Colombier if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER)
1247dd7cddfSDavid du Colombier return (0);
1257dd7cddfSDavid du Colombier else return (info_ptr->x_pixels_per_unit);
1267dd7cddfSDavid du Colombier }
127*593dc095SDavid du Colombier #else
128*593dc095SDavid du Colombier return (0);
1297dd7cddfSDavid du Colombier #endif
1307dd7cddfSDavid du Colombier return (0);
1317dd7cddfSDavid du Colombier }
1327dd7cddfSDavid du Colombier
133*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_y_pixels_per_meter(png_structp png_ptr,png_infop info_ptr)134*593dc095SDavid du Colombier png_get_y_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
135*593dc095SDavid du Colombier {
136*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
137*593dc095SDavid du Colombier #if defined(PNG_pHYs_SUPPORTED)
138*593dc095SDavid du Colombier if (info_ptr->valid & PNG_INFO_pHYs)
139*593dc095SDavid du Colombier {
140*593dc095SDavid du Colombier png_debug1(1, "in %s retrieval function\n", "png_get_y_pixels_per_meter");
141*593dc095SDavid du Colombier if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER)
142*593dc095SDavid du Colombier return (0);
143*593dc095SDavid du Colombier else return (info_ptr->y_pixels_per_unit);
144*593dc095SDavid du Colombier }
145*593dc095SDavid du Colombier #else
146*593dc095SDavid du Colombier return (0);
147*593dc095SDavid du Colombier #endif
148*593dc095SDavid du Colombier return (0);
149*593dc095SDavid du Colombier }
150*593dc095SDavid du Colombier
151*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_pixels_per_meter(png_structp png_ptr,png_infop info_ptr)152*593dc095SDavid du Colombier png_get_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
153*593dc095SDavid du Colombier {
154*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
155*593dc095SDavid du Colombier #if defined(PNG_pHYs_SUPPORTED)
156*593dc095SDavid du Colombier if (info_ptr->valid & PNG_INFO_pHYs)
157*593dc095SDavid du Colombier {
158*593dc095SDavid du Colombier png_debug1(1, "in %s retrieval function\n", "png_get_pixels_per_meter");
159*593dc095SDavid du Colombier if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER ||
160*593dc095SDavid du Colombier info_ptr->x_pixels_per_unit != info_ptr->y_pixels_per_unit)
161*593dc095SDavid du Colombier return (0);
162*593dc095SDavid du Colombier else return (info_ptr->x_pixels_per_unit);
163*593dc095SDavid du Colombier }
164*593dc095SDavid du Colombier #else
165*593dc095SDavid du Colombier return (0);
166*593dc095SDavid du Colombier #endif
167*593dc095SDavid du Colombier return (0);
168*593dc095SDavid du Colombier }
169*593dc095SDavid du Colombier
170*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED
171*593dc095SDavid du Colombier float PNGAPI
png_get_pixel_aspect_ratio(png_structp png_ptr,png_infop info_ptr)1727dd7cddfSDavid du Colombier png_get_pixel_aspect_ratio(png_structp png_ptr, png_infop info_ptr)
1737dd7cddfSDavid du Colombier {
174*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
175*593dc095SDavid du Colombier #if defined(PNG_pHYs_SUPPORTED)
176*593dc095SDavid du Colombier if (info_ptr->valid & PNG_INFO_pHYs)
1777dd7cddfSDavid du Colombier {
1787dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "png_get_aspect_ratio");
1797dd7cddfSDavid du Colombier if (info_ptr->x_pixels_per_unit == 0)
180*593dc095SDavid du Colombier return ((float)0.0);
1817dd7cddfSDavid du Colombier else
182*593dc095SDavid du Colombier return ((float)((float)info_ptr->y_pixels_per_unit
183*593dc095SDavid du Colombier /(float)info_ptr->x_pixels_per_unit));
1847dd7cddfSDavid du Colombier }
185*593dc095SDavid du Colombier #else
186*593dc095SDavid du Colombier return (0.0);
1877dd7cddfSDavid du Colombier #endif
188*593dc095SDavid du Colombier return ((float)0.0);
1897dd7cddfSDavid du Colombier }
190*593dc095SDavid du Colombier #endif
1917dd7cddfSDavid du Colombier
192*593dc095SDavid du Colombier png_int_32 PNGAPI
png_get_x_offset_microns(png_structp png_ptr,png_infop info_ptr)1937dd7cddfSDavid du Colombier png_get_x_offset_microns(png_structp png_ptr, png_infop info_ptr)
1947dd7cddfSDavid du Colombier {
195*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
196*593dc095SDavid du Colombier #if defined(PNG_oFFs_SUPPORTED)
197*593dc095SDavid du Colombier if (info_ptr->valid & PNG_INFO_oFFs)
1987dd7cddfSDavid du Colombier {
1997dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns");
2007dd7cddfSDavid du Colombier if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER)
2017dd7cddfSDavid du Colombier return (0);
2027dd7cddfSDavid du Colombier else return (info_ptr->x_offset);
2037dd7cddfSDavid du Colombier }
204*593dc095SDavid du Colombier #else
205*593dc095SDavid du Colombier return (0);
2067dd7cddfSDavid du Colombier #endif
2077dd7cddfSDavid du Colombier return (0);
2087dd7cddfSDavid du Colombier }
2097dd7cddfSDavid du Colombier
210*593dc095SDavid du Colombier png_int_32 PNGAPI
png_get_y_offset_microns(png_structp png_ptr,png_infop info_ptr)2117dd7cddfSDavid du Colombier png_get_y_offset_microns(png_structp png_ptr, png_infop info_ptr)
2127dd7cddfSDavid du Colombier {
213*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
214*593dc095SDavid du Colombier #if defined(PNG_oFFs_SUPPORTED)
215*593dc095SDavid du Colombier if (info_ptr->valid & PNG_INFO_oFFs)
2167dd7cddfSDavid du Colombier {
2177dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns");
2187dd7cddfSDavid du Colombier if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER)
2197dd7cddfSDavid du Colombier return (0);
2207dd7cddfSDavid du Colombier else return (info_ptr->y_offset);
2217dd7cddfSDavid du Colombier }
222*593dc095SDavid du Colombier #else
223*593dc095SDavid du Colombier return (0);
2247dd7cddfSDavid du Colombier #endif
2257dd7cddfSDavid du Colombier return (0);
2267dd7cddfSDavid du Colombier }
2277dd7cddfSDavid du Colombier
228*593dc095SDavid du Colombier png_int_32 PNGAPI
png_get_x_offset_pixels(png_structp png_ptr,png_infop info_ptr)2297dd7cddfSDavid du Colombier png_get_x_offset_pixels(png_structp png_ptr, png_infop info_ptr)
2307dd7cddfSDavid du Colombier {
231*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
232*593dc095SDavid du Colombier #if defined(PNG_oFFs_SUPPORTED)
233*593dc095SDavid du Colombier if (info_ptr->valid & PNG_INFO_oFFs)
2347dd7cddfSDavid du Colombier {
2357dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns");
2367dd7cddfSDavid du Colombier if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL)
2377dd7cddfSDavid du Colombier return (0);
2387dd7cddfSDavid du Colombier else return (info_ptr->x_offset);
2397dd7cddfSDavid du Colombier }
240*593dc095SDavid du Colombier #else
241*593dc095SDavid du Colombier return (0);
2427dd7cddfSDavid du Colombier #endif
2437dd7cddfSDavid du Colombier return (0);
2447dd7cddfSDavid du Colombier }
2457dd7cddfSDavid du Colombier
246*593dc095SDavid du Colombier png_int_32 PNGAPI
png_get_y_offset_pixels(png_structp png_ptr,png_infop info_ptr)2477dd7cddfSDavid du Colombier png_get_y_offset_pixels(png_structp png_ptr, png_infop info_ptr)
2487dd7cddfSDavid du Colombier {
249*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
250*593dc095SDavid du Colombier #if defined(PNG_oFFs_SUPPORTED)
251*593dc095SDavid du Colombier if (info_ptr->valid & PNG_INFO_oFFs)
2527dd7cddfSDavid du Colombier {
2537dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns");
2547dd7cddfSDavid du Colombier if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL)
2557dd7cddfSDavid du Colombier return (0);
2567dd7cddfSDavid du Colombier else return (info_ptr->y_offset);
2577dd7cddfSDavid du Colombier }
258*593dc095SDavid du Colombier #else
259*593dc095SDavid du Colombier return (0);
2607dd7cddfSDavid du Colombier #endif
2617dd7cddfSDavid du Colombier return (0);
2627dd7cddfSDavid du Colombier }
2637dd7cddfSDavid du Colombier
264*593dc095SDavid du Colombier #if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED)
265*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_pixels_per_inch(png_structp png_ptr,png_infop info_ptr)266*593dc095SDavid du Colombier png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
267*593dc095SDavid du Colombier {
268*593dc095SDavid du Colombier return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr)
269*593dc095SDavid du Colombier *.0254 +.5));
270*593dc095SDavid du Colombier }
2717dd7cddfSDavid du Colombier
272*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_x_pixels_per_inch(png_structp png_ptr,png_infop info_ptr)273*593dc095SDavid du Colombier png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
274*593dc095SDavid du Colombier {
275*593dc095SDavid du Colombier return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr)
276*593dc095SDavid du Colombier *.0254 +.5));
277*593dc095SDavid du Colombier }
278*593dc095SDavid du Colombier
279*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_y_pixels_per_inch(png_structp png_ptr,png_infop info_ptr)280*593dc095SDavid du Colombier png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
281*593dc095SDavid du Colombier {
282*593dc095SDavid du Colombier return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr)
283*593dc095SDavid du Colombier *.0254 +.5));
284*593dc095SDavid du Colombier }
285*593dc095SDavid du Colombier
286*593dc095SDavid du Colombier float PNGAPI
png_get_x_offset_inches(png_structp png_ptr,png_infop info_ptr)287*593dc095SDavid du Colombier png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr)
288*593dc095SDavid du Colombier {
289*593dc095SDavid du Colombier return ((float)png_get_x_offset_microns(png_ptr, info_ptr)
290*593dc095SDavid du Colombier *.00003937);
291*593dc095SDavid du Colombier }
292*593dc095SDavid du Colombier
293*593dc095SDavid du Colombier float PNGAPI
png_get_y_offset_inches(png_structp png_ptr,png_infop info_ptr)294*593dc095SDavid du Colombier png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
295*593dc095SDavid du Colombier {
296*593dc095SDavid du Colombier return ((float)png_get_y_offset_microns(png_ptr, info_ptr)
297*593dc095SDavid du Colombier *.00003937);
298*593dc095SDavid du Colombier }
299*593dc095SDavid du Colombier
300*593dc095SDavid du Colombier #if defined(PNG_pHYs_SUPPORTED)
301*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_pHYs_dpi(png_structp png_ptr,png_infop info_ptr,png_uint_32 * res_x,png_uint_32 * res_y,int * unit_type)302*593dc095SDavid du Colombier png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr,
303*593dc095SDavid du Colombier png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
304*593dc095SDavid du Colombier {
305*593dc095SDavid du Colombier png_uint_32 retval = 0;
306*593dc095SDavid du Colombier
307*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
308*593dc095SDavid du Colombier {
309*593dc095SDavid du Colombier png_debug1(1, "in %s retrieval function\n", "pHYs");
310*593dc095SDavid du Colombier if (res_x != NULL)
311*593dc095SDavid du Colombier {
312*593dc095SDavid du Colombier *res_x = info_ptr->x_pixels_per_unit;
313*593dc095SDavid du Colombier retval |= PNG_INFO_pHYs;
314*593dc095SDavid du Colombier }
315*593dc095SDavid du Colombier if (res_y != NULL)
316*593dc095SDavid du Colombier {
317*593dc095SDavid du Colombier *res_y = info_ptr->y_pixels_per_unit;
318*593dc095SDavid du Colombier retval |= PNG_INFO_pHYs;
319*593dc095SDavid du Colombier }
320*593dc095SDavid du Colombier if (unit_type != NULL)
321*593dc095SDavid du Colombier {
322*593dc095SDavid du Colombier *unit_type = (int)info_ptr->phys_unit_type;
323*593dc095SDavid du Colombier retval |= PNG_INFO_pHYs;
324*593dc095SDavid du Colombier if(*unit_type == 1)
325*593dc095SDavid du Colombier {
326*593dc095SDavid du Colombier if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50);
327*593dc095SDavid du Colombier if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50);
328*593dc095SDavid du Colombier }
329*593dc095SDavid du Colombier }
330*593dc095SDavid du Colombier }
331*593dc095SDavid du Colombier return (retval);
332*593dc095SDavid du Colombier }
333*593dc095SDavid du Colombier #endif /* PNG_pHYs_SUPPORTED */
334*593dc095SDavid du Colombier #endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
335*593dc095SDavid du Colombier
336*593dc095SDavid du Colombier /* png_get_channels really belongs in here, too, but it's been around longer */
337*593dc095SDavid du Colombier
338*593dc095SDavid du Colombier #endif /* PNG_EASY_ACCESS_SUPPORTED */
339*593dc095SDavid du Colombier
340*593dc095SDavid du Colombier png_byte PNGAPI
png_get_channels(png_structp png_ptr,png_infop info_ptr)3417dd7cddfSDavid du Colombier png_get_channels(png_structp png_ptr, png_infop info_ptr)
3427dd7cddfSDavid du Colombier {
343*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
3447dd7cddfSDavid du Colombier return(info_ptr->channels);
3457dd7cddfSDavid du Colombier else
3467dd7cddfSDavid du Colombier return (0);
3477dd7cddfSDavid du Colombier }
3487dd7cddfSDavid du Colombier
349*593dc095SDavid du Colombier png_bytep PNGAPI
png_get_signature(png_structp png_ptr,png_infop info_ptr)3507dd7cddfSDavid du Colombier png_get_signature(png_structp png_ptr, png_infop info_ptr)
3517dd7cddfSDavid du Colombier {
352*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL)
3537dd7cddfSDavid du Colombier return(info_ptr->signature);
3547dd7cddfSDavid du Colombier else
3557dd7cddfSDavid du Colombier return (NULL);
3567dd7cddfSDavid du Colombier }
3577dd7cddfSDavid du Colombier
358*593dc095SDavid du Colombier #if defined(PNG_bKGD_SUPPORTED)
359*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_bKGD(png_structp png_ptr,png_infop info_ptr,png_color_16p * background)3607dd7cddfSDavid du Colombier png_get_bKGD(png_structp png_ptr, png_infop info_ptr,
3617dd7cddfSDavid du Colombier png_color_16p *background)
3627dd7cddfSDavid du Colombier {
363*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD)
364*593dc095SDavid du Colombier && background != NULL)
3657dd7cddfSDavid du Colombier {
3667dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "bKGD");
3677dd7cddfSDavid du Colombier *background = &(info_ptr->background);
3687dd7cddfSDavid du Colombier return (PNG_INFO_bKGD);
3697dd7cddfSDavid du Colombier }
3707dd7cddfSDavid du Colombier return (0);
3717dd7cddfSDavid du Colombier }
3727dd7cddfSDavid du Colombier #endif
3737dd7cddfSDavid du Colombier
374*593dc095SDavid du Colombier #if defined(PNG_cHRM_SUPPORTED)
375*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED
376*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_cHRM(png_structp png_ptr,png_infop info_ptr,double * white_x,double * white_y,double * red_x,double * red_y,double * green_x,double * green_y,double * blue_x,double * blue_y)3777dd7cddfSDavid du Colombier png_get_cHRM(png_structp png_ptr, png_infop info_ptr,
3787dd7cddfSDavid du Colombier double *white_x, double *white_y, double *red_x, double *red_y,
3797dd7cddfSDavid du Colombier double *green_x, double *green_y, double *blue_x, double *blue_y)
3807dd7cddfSDavid du Colombier {
381*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM))
3827dd7cddfSDavid du Colombier {
3837dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "cHRM");
3847dd7cddfSDavid du Colombier if (white_x != NULL)
3857dd7cddfSDavid du Colombier *white_x = (double)info_ptr->x_white;
3867dd7cddfSDavid du Colombier if (white_y != NULL)
3877dd7cddfSDavid du Colombier *white_y = (double)info_ptr->y_white;
3887dd7cddfSDavid du Colombier if (red_x != NULL)
3897dd7cddfSDavid du Colombier *red_x = (double)info_ptr->x_red;
3907dd7cddfSDavid du Colombier if (red_y != NULL)
3917dd7cddfSDavid du Colombier *red_y = (double)info_ptr->y_red;
3927dd7cddfSDavid du Colombier if (green_x != NULL)
3937dd7cddfSDavid du Colombier *green_x = (double)info_ptr->x_green;
3947dd7cddfSDavid du Colombier if (green_y != NULL)
3957dd7cddfSDavid du Colombier *green_y = (double)info_ptr->y_green;
3967dd7cddfSDavid du Colombier if (blue_x != NULL)
3977dd7cddfSDavid du Colombier *blue_x = (double)info_ptr->x_blue;
3987dd7cddfSDavid du Colombier if (blue_y != NULL)
3997dd7cddfSDavid du Colombier *blue_y = (double)info_ptr->y_blue;
4007dd7cddfSDavid du Colombier return (PNG_INFO_cHRM);
4017dd7cddfSDavid du Colombier }
4027dd7cddfSDavid du Colombier return (0);
4037dd7cddfSDavid du Colombier }
4047dd7cddfSDavid du Colombier #endif
405*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED
406*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_cHRM_fixed(png_structp png_ptr,png_infop info_ptr,png_fixed_point * white_x,png_fixed_point * white_y,png_fixed_point * red_x,png_fixed_point * red_y,png_fixed_point * green_x,png_fixed_point * green_y,png_fixed_point * blue_x,png_fixed_point * blue_y)407*593dc095SDavid du Colombier png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
408*593dc095SDavid du Colombier png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x,
409*593dc095SDavid du Colombier png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y,
410*593dc095SDavid du Colombier png_fixed_point *blue_x, png_fixed_point *blue_y)
411*593dc095SDavid du Colombier {
412*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM))
413*593dc095SDavid du Colombier {
414*593dc095SDavid du Colombier png_debug1(1, "in %s retrieval function\n", "cHRM");
415*593dc095SDavid du Colombier if (white_x != NULL)
416*593dc095SDavid du Colombier *white_x = info_ptr->int_x_white;
417*593dc095SDavid du Colombier if (white_y != NULL)
418*593dc095SDavid du Colombier *white_y = info_ptr->int_y_white;
419*593dc095SDavid du Colombier if (red_x != NULL)
420*593dc095SDavid du Colombier *red_x = info_ptr->int_x_red;
421*593dc095SDavid du Colombier if (red_y != NULL)
422*593dc095SDavid du Colombier *red_y = info_ptr->int_y_red;
423*593dc095SDavid du Colombier if (green_x != NULL)
424*593dc095SDavid du Colombier *green_x = info_ptr->int_x_green;
425*593dc095SDavid du Colombier if (green_y != NULL)
426*593dc095SDavid du Colombier *green_y = info_ptr->int_y_green;
427*593dc095SDavid du Colombier if (blue_x != NULL)
428*593dc095SDavid du Colombier *blue_x = info_ptr->int_x_blue;
429*593dc095SDavid du Colombier if (blue_y != NULL)
430*593dc095SDavid du Colombier *blue_y = info_ptr->int_y_blue;
431*593dc095SDavid du Colombier return (PNG_INFO_cHRM);
432*593dc095SDavid du Colombier }
433*593dc095SDavid du Colombier return (0);
434*593dc095SDavid du Colombier }
435*593dc095SDavid du Colombier #endif
436*593dc095SDavid du Colombier #endif
4377dd7cddfSDavid du Colombier
438*593dc095SDavid du Colombier #if defined(PNG_gAMA_SUPPORTED)
439*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED
440*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_gAMA(png_structp png_ptr,png_infop info_ptr,double * file_gamma)4417dd7cddfSDavid du Colombier png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma)
4427dd7cddfSDavid du Colombier {
443*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA)
444*593dc095SDavid du Colombier && file_gamma != NULL)
4457dd7cddfSDavid du Colombier {
4467dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "gAMA");
4477dd7cddfSDavid du Colombier *file_gamma = (double)info_ptr->gamma;
4487dd7cddfSDavid du Colombier return (PNG_INFO_gAMA);
4497dd7cddfSDavid du Colombier }
4507dd7cddfSDavid du Colombier return (0);
4517dd7cddfSDavid du Colombier }
4527dd7cddfSDavid du Colombier #endif
453*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED
454*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_gAMA_fixed(png_structp png_ptr,png_infop info_ptr,png_fixed_point * int_file_gamma)455*593dc095SDavid du Colombier png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr,
456*593dc095SDavid du Colombier png_fixed_point *int_file_gamma)
457*593dc095SDavid du Colombier {
458*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA)
459*593dc095SDavid du Colombier && int_file_gamma != NULL)
460*593dc095SDavid du Colombier {
461*593dc095SDavid du Colombier png_debug1(1, "in %s retrieval function\n", "gAMA");
462*593dc095SDavid du Colombier *int_file_gamma = info_ptr->int_gamma;
463*593dc095SDavid du Colombier return (PNG_INFO_gAMA);
464*593dc095SDavid du Colombier }
465*593dc095SDavid du Colombier return (0);
466*593dc095SDavid du Colombier }
467*593dc095SDavid du Colombier #endif
468*593dc095SDavid du Colombier #endif
4697dd7cddfSDavid du Colombier
470*593dc095SDavid du Colombier #if defined(PNG_sRGB_SUPPORTED)
471*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_sRGB(png_structp png_ptr,png_infop info_ptr,int * file_srgb_intent)4727dd7cddfSDavid du Colombier png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent)
4737dd7cddfSDavid du Colombier {
474*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB)
475*593dc095SDavid du Colombier && file_srgb_intent != NULL)
4767dd7cddfSDavid du Colombier {
4777dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "sRGB");
4787dd7cddfSDavid du Colombier *file_srgb_intent = (int)info_ptr->srgb_intent;
4797dd7cddfSDavid du Colombier return (PNG_INFO_sRGB);
4807dd7cddfSDavid du Colombier }
4817dd7cddfSDavid du Colombier return (0);
4827dd7cddfSDavid du Colombier }
4837dd7cddfSDavid du Colombier #endif
4847dd7cddfSDavid du Colombier
485*593dc095SDavid du Colombier #if defined(PNG_iCCP_SUPPORTED)
486*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_iCCP(png_structp png_ptr,png_infop info_ptr,png_charpp name,int * compression_type,png_charpp profile,png_uint_32 * proflen)487*593dc095SDavid du Colombier png_get_iCCP(png_structp png_ptr, png_infop info_ptr,
488*593dc095SDavid du Colombier png_charpp name, int *compression_type,
489*593dc095SDavid du Colombier png_charpp profile, png_uint_32 *proflen)
490*593dc095SDavid du Colombier {
491*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP)
492*593dc095SDavid du Colombier && name != NULL && profile != NULL && proflen != NULL)
493*593dc095SDavid du Colombier {
494*593dc095SDavid du Colombier png_debug1(1, "in %s retrieval function\n", "iCCP");
495*593dc095SDavid du Colombier *name = info_ptr->iccp_name;
496*593dc095SDavid du Colombier *profile = info_ptr->iccp_profile;
497*593dc095SDavid du Colombier /* compression_type is a dummy so the API won't have to change
498*593dc095SDavid du Colombier if we introduce multiple compression types later. */
499*593dc095SDavid du Colombier *proflen = (int)info_ptr->iccp_proflen;
500*593dc095SDavid du Colombier *compression_type = (int)info_ptr->iccp_compression;
501*593dc095SDavid du Colombier return (PNG_INFO_iCCP);
502*593dc095SDavid du Colombier }
503*593dc095SDavid du Colombier return (0);
504*593dc095SDavid du Colombier }
505*593dc095SDavid du Colombier #endif
506*593dc095SDavid du Colombier
507*593dc095SDavid du Colombier #if defined(PNG_sPLT_SUPPORTED)
508*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_sPLT(png_structp png_ptr,png_infop info_ptr,png_sPLT_tpp spalettes)509*593dc095SDavid du Colombier png_get_sPLT(png_structp png_ptr, png_infop info_ptr,
510*593dc095SDavid du Colombier png_sPLT_tpp spalettes)
511*593dc095SDavid du Colombier {
512*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
513*593dc095SDavid du Colombier *spalettes = info_ptr->splt_palettes;
514*593dc095SDavid du Colombier return ((png_uint_32)info_ptr->splt_palettes_num);
515*593dc095SDavid du Colombier }
516*593dc095SDavid du Colombier #endif
517*593dc095SDavid du Colombier
518*593dc095SDavid du Colombier #if defined(PNG_hIST_SUPPORTED)
519*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_hIST(png_structp png_ptr,png_infop info_ptr,png_uint_16p * hist)5207dd7cddfSDavid du Colombier png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist)
5217dd7cddfSDavid du Colombier {
522*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST)
523*593dc095SDavid du Colombier && hist != NULL)
5247dd7cddfSDavid du Colombier {
5257dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "hIST");
5267dd7cddfSDavid du Colombier *hist = info_ptr->hist;
5277dd7cddfSDavid du Colombier return (PNG_INFO_hIST);
5287dd7cddfSDavid du Colombier }
5297dd7cddfSDavid du Colombier return (0);
5307dd7cddfSDavid du Colombier }
5317dd7cddfSDavid du Colombier #endif
5327dd7cddfSDavid du Colombier
533*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_IHDR(png_structp png_ptr,png_infop info_ptr,png_uint_32 * width,png_uint_32 * height,int * bit_depth,int * color_type,int * interlace_type,int * compression_type,int * filter_type)5347dd7cddfSDavid du Colombier png_get_IHDR(png_structp png_ptr, png_infop info_ptr,
5357dd7cddfSDavid du Colombier png_uint_32 *width, png_uint_32 *height, int *bit_depth,
5367dd7cddfSDavid du Colombier int *color_type, int *interlace_type, int *compression_type,
5377dd7cddfSDavid du Colombier int *filter_type)
5387dd7cddfSDavid du Colombier
5397dd7cddfSDavid du Colombier {
540*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && width != NULL && height != NULL &&
5417dd7cddfSDavid du Colombier bit_depth != NULL && color_type != NULL)
5427dd7cddfSDavid du Colombier {
5437dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "IHDR");
5447dd7cddfSDavid du Colombier *width = info_ptr->width;
5457dd7cddfSDavid du Colombier *height = info_ptr->height;
5467dd7cddfSDavid du Colombier *bit_depth = info_ptr->bit_depth;
547*593dc095SDavid du Colombier if (info_ptr->bit_depth < 1 || info_ptr->bit_depth > 16)
548*593dc095SDavid du Colombier png_error(png_ptr, "Invalid bit depth");
5497dd7cddfSDavid du Colombier *color_type = info_ptr->color_type;
550*593dc095SDavid du Colombier if (info_ptr->color_type > 6)
551*593dc095SDavid du Colombier png_error(png_ptr, "Invalid color type");
5527dd7cddfSDavid du Colombier if (compression_type != NULL)
5537dd7cddfSDavid du Colombier *compression_type = info_ptr->compression_type;
5547dd7cddfSDavid du Colombier if (filter_type != NULL)
5557dd7cddfSDavid du Colombier *filter_type = info_ptr->filter_type;
5567dd7cddfSDavid du Colombier if (interlace_type != NULL)
5577dd7cddfSDavid du Colombier *interlace_type = info_ptr->interlace_type;
5587dd7cddfSDavid du Colombier
5597dd7cddfSDavid du Colombier /* check for potential overflow of rowbytes */
560*593dc095SDavid du Colombier if (*width == 0 || *width > PNG_UINT_31_MAX)
561*593dc095SDavid du Colombier png_error(png_ptr, "Invalid image width");
562*593dc095SDavid du Colombier if (*height == 0 || *height > PNG_UINT_31_MAX)
563*593dc095SDavid du Colombier png_error(png_ptr, "Invalid image height");
564*593dc095SDavid du Colombier if (info_ptr->width > (PNG_UINT_32_MAX
565*593dc095SDavid du Colombier >> 3) /* 8-byte RGBA pixels */
566*593dc095SDavid du Colombier - 64 /* bigrowbuf hack */
567*593dc095SDavid du Colombier - 1 /* filter byte */
568*593dc095SDavid du Colombier - 7*8 /* rounding of width to multiple of 8 pixels */
569*593dc095SDavid du Colombier - 8) /* extra max_pixel_depth pad */
5707dd7cddfSDavid du Colombier {
5717dd7cddfSDavid du Colombier png_warning(png_ptr,
5727dd7cddfSDavid du Colombier "Width too large for libpng to process image data.");
5737dd7cddfSDavid du Colombier }
5747dd7cddfSDavid du Colombier return (1);
5757dd7cddfSDavid du Colombier }
5767dd7cddfSDavid du Colombier return (0);
5777dd7cddfSDavid du Colombier }
5787dd7cddfSDavid du Colombier
579*593dc095SDavid du Colombier #if defined(PNG_oFFs_SUPPORTED)
580*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_oFFs(png_structp png_ptr,png_infop info_ptr,png_int_32 * offset_x,png_int_32 * offset_y,int * unit_type)5817dd7cddfSDavid du Colombier png_get_oFFs(png_structp png_ptr, png_infop info_ptr,
582*593dc095SDavid du Colombier png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)
5837dd7cddfSDavid du Colombier {
584*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)
585*593dc095SDavid du Colombier && offset_x != NULL && offset_y != NULL && unit_type != NULL)
5867dd7cddfSDavid du Colombier {
5877dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "oFFs");
5887dd7cddfSDavid du Colombier *offset_x = info_ptr->x_offset;
5897dd7cddfSDavid du Colombier *offset_y = info_ptr->y_offset;
5907dd7cddfSDavid du Colombier *unit_type = (int)info_ptr->offset_unit_type;
5917dd7cddfSDavid du Colombier return (PNG_INFO_oFFs);
5927dd7cddfSDavid du Colombier }
5937dd7cddfSDavid du Colombier return (0);
5947dd7cddfSDavid du Colombier }
5957dd7cddfSDavid du Colombier #endif
5967dd7cddfSDavid du Colombier
597*593dc095SDavid du Colombier #if defined(PNG_pCAL_SUPPORTED)
598*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_pCAL(png_structp png_ptr,png_infop info_ptr,png_charp * purpose,png_int_32 * X0,png_int_32 * X1,int * type,int * nparams,png_charp * units,png_charpp * params)5997dd7cddfSDavid du Colombier png_get_pCAL(png_structp png_ptr, png_infop info_ptr,
6007dd7cddfSDavid du Colombier png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
6017dd7cddfSDavid du Colombier png_charp *units, png_charpp *params)
6027dd7cddfSDavid du Colombier {
603*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL)
604*593dc095SDavid du Colombier && purpose != NULL && X0 != NULL && X1 != NULL && type != NULL &&
6057dd7cddfSDavid du Colombier nparams != NULL && units != NULL && params != NULL)
6067dd7cddfSDavid du Colombier {
6077dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "pCAL");
6087dd7cddfSDavid du Colombier *purpose = info_ptr->pcal_purpose;
6097dd7cddfSDavid du Colombier *X0 = info_ptr->pcal_X0;
6107dd7cddfSDavid du Colombier *X1 = info_ptr->pcal_X1;
6117dd7cddfSDavid du Colombier *type = (int)info_ptr->pcal_type;
6127dd7cddfSDavid du Colombier *nparams = (int)info_ptr->pcal_nparams;
6137dd7cddfSDavid du Colombier *units = info_ptr->pcal_units;
6147dd7cddfSDavid du Colombier *params = info_ptr->pcal_params;
6157dd7cddfSDavid du Colombier return (PNG_INFO_pCAL);
6167dd7cddfSDavid du Colombier }
6177dd7cddfSDavid du Colombier return (0);
6187dd7cddfSDavid du Colombier }
6197dd7cddfSDavid du Colombier #endif
6207dd7cddfSDavid du Colombier
621*593dc095SDavid du Colombier #if defined(PNG_sCAL_SUPPORTED)
622*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED
623*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_sCAL(png_structp png_ptr,png_infop info_ptr,int * unit,double * width,double * height)624*593dc095SDavid du Colombier png_get_sCAL(png_structp png_ptr, png_infop info_ptr,
625*593dc095SDavid du Colombier int *unit, double *width, double *height)
626*593dc095SDavid du Colombier {
627*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL &&
628*593dc095SDavid du Colombier (info_ptr->valid & PNG_INFO_sCAL))
629*593dc095SDavid du Colombier {
630*593dc095SDavid du Colombier *unit = info_ptr->scal_unit;
631*593dc095SDavid du Colombier *width = info_ptr->scal_pixel_width;
632*593dc095SDavid du Colombier *height = info_ptr->scal_pixel_height;
633*593dc095SDavid du Colombier return (PNG_INFO_sCAL);
634*593dc095SDavid du Colombier }
635*593dc095SDavid du Colombier return(0);
636*593dc095SDavid du Colombier }
637*593dc095SDavid du Colombier #else
638*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED
639*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_sCAL_s(png_structp png_ptr,png_infop info_ptr,int * unit,png_charpp width,png_charpp height)640*593dc095SDavid du Colombier png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr,
641*593dc095SDavid du Colombier int *unit, png_charpp width, png_charpp height)
642*593dc095SDavid du Colombier {
643*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL &&
644*593dc095SDavid du Colombier (info_ptr->valid & PNG_INFO_sCAL))
645*593dc095SDavid du Colombier {
646*593dc095SDavid du Colombier *unit = info_ptr->scal_unit;
647*593dc095SDavid du Colombier *width = info_ptr->scal_s_width;
648*593dc095SDavid du Colombier *height = info_ptr->scal_s_height;
649*593dc095SDavid du Colombier return (PNG_INFO_sCAL);
650*593dc095SDavid du Colombier }
651*593dc095SDavid du Colombier return(0);
652*593dc095SDavid du Colombier }
653*593dc095SDavid du Colombier #endif
654*593dc095SDavid du Colombier #endif
655*593dc095SDavid du Colombier #endif
656*593dc095SDavid du Colombier
657*593dc095SDavid du Colombier #if defined(PNG_pHYs_SUPPORTED)
658*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_pHYs(png_structp png_ptr,png_infop info_ptr,png_uint_32 * res_x,png_uint_32 * res_y,int * unit_type)6597dd7cddfSDavid du Colombier png_get_pHYs(png_structp png_ptr, png_infop info_ptr,
6607dd7cddfSDavid du Colombier png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
6617dd7cddfSDavid du Colombier {
6627dd7cddfSDavid du Colombier png_uint_32 retval = 0;
6637dd7cddfSDavid du Colombier
664*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL &&
665*593dc095SDavid du Colombier (info_ptr->valid & PNG_INFO_pHYs))
6667dd7cddfSDavid du Colombier {
6677dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "pHYs");
668*593dc095SDavid du Colombier if (res_x != NULL)
6697dd7cddfSDavid du Colombier {
6707dd7cddfSDavid du Colombier *res_x = info_ptr->x_pixels_per_unit;
671*593dc095SDavid du Colombier retval |= PNG_INFO_pHYs;
672*593dc095SDavid du Colombier }
673*593dc095SDavid du Colombier if (res_y != NULL)
674*593dc095SDavid du Colombier {
6757dd7cddfSDavid du Colombier *res_y = info_ptr->y_pixels_per_unit;
6767dd7cddfSDavid du Colombier retval |= PNG_INFO_pHYs;
6777dd7cddfSDavid du Colombier }
6787dd7cddfSDavid du Colombier if (unit_type != NULL)
6797dd7cddfSDavid du Colombier {
6807dd7cddfSDavid du Colombier *unit_type = (int)info_ptr->phys_unit_type;
6817dd7cddfSDavid du Colombier retval |= PNG_INFO_pHYs;
6827dd7cddfSDavid du Colombier }
6837dd7cddfSDavid du Colombier }
684*593dc095SDavid du Colombier return (retval);
6857dd7cddfSDavid du Colombier }
6867dd7cddfSDavid du Colombier #endif
6877dd7cddfSDavid du Colombier
688*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_PLTE(png_structp png_ptr,png_infop info_ptr,png_colorp * palette,int * num_palette)6897dd7cddfSDavid du Colombier png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette,
6907dd7cddfSDavid du Colombier int *num_palette)
6917dd7cddfSDavid du Colombier {
692*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE)
693*593dc095SDavid du Colombier && palette != NULL)
6947dd7cddfSDavid du Colombier {
6957dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "PLTE");
6967dd7cddfSDavid du Colombier *palette = info_ptr->palette;
6977dd7cddfSDavid du Colombier *num_palette = info_ptr->num_palette;
6987dd7cddfSDavid du Colombier png_debug1(3, "num_palette = %d\n", *num_palette);
6997dd7cddfSDavid du Colombier return (PNG_INFO_PLTE);
7007dd7cddfSDavid du Colombier }
7017dd7cddfSDavid du Colombier return (0);
7027dd7cddfSDavid du Colombier }
7037dd7cddfSDavid du Colombier
704*593dc095SDavid du Colombier #if defined(PNG_sBIT_SUPPORTED)
705*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_sBIT(png_structp png_ptr,png_infop info_ptr,png_color_8p * sig_bit)7067dd7cddfSDavid du Colombier png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)
7077dd7cddfSDavid du Colombier {
708*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT)
709*593dc095SDavid du Colombier && sig_bit != NULL)
7107dd7cddfSDavid du Colombier {
7117dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "sBIT");
7127dd7cddfSDavid du Colombier *sig_bit = &(info_ptr->sig_bit);
7137dd7cddfSDavid du Colombier return (PNG_INFO_sBIT);
7147dd7cddfSDavid du Colombier }
7157dd7cddfSDavid du Colombier return (0);
7167dd7cddfSDavid du Colombier }
7177dd7cddfSDavid du Colombier #endif
7187dd7cddfSDavid du Colombier
719*593dc095SDavid du Colombier #if defined(PNG_TEXT_SUPPORTED)
720*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_text(png_structp png_ptr,png_infop info_ptr,png_textp * text_ptr,int * num_text)7217dd7cddfSDavid du Colombier png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr,
7227dd7cddfSDavid du Colombier int *num_text)
7237dd7cddfSDavid du Colombier {
724*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0)
7257dd7cddfSDavid du Colombier {
7267dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n",
7277dd7cddfSDavid du Colombier (png_ptr->chunk_name[0] == '\0' ? "text"
7287dd7cddfSDavid du Colombier : (png_const_charp)png_ptr->chunk_name));
7297dd7cddfSDavid du Colombier if (text_ptr != NULL)
7307dd7cddfSDavid du Colombier *text_ptr = info_ptr->text;
7317dd7cddfSDavid du Colombier if (num_text != NULL)
7327dd7cddfSDavid du Colombier *num_text = info_ptr->num_text;
7337dd7cddfSDavid du Colombier return ((png_uint_32)info_ptr->num_text);
7347dd7cddfSDavid du Colombier }
735*593dc095SDavid du Colombier if (num_text != NULL)
736*593dc095SDavid du Colombier *num_text = 0;
7377dd7cddfSDavid du Colombier return(0);
7387dd7cddfSDavid du Colombier }
7397dd7cddfSDavid du Colombier #endif
7407dd7cddfSDavid du Colombier
741*593dc095SDavid du Colombier #if defined(PNG_tIME_SUPPORTED)
742*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_tIME(png_structp png_ptr,png_infop info_ptr,png_timep * mod_time)7437dd7cddfSDavid du Colombier png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)
7447dd7cddfSDavid du Colombier {
745*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME)
746*593dc095SDavid du Colombier && mod_time != NULL)
7477dd7cddfSDavid du Colombier {
7487dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "tIME");
7497dd7cddfSDavid du Colombier *mod_time = &(info_ptr->mod_time);
7507dd7cddfSDavid du Colombier return (PNG_INFO_tIME);
7517dd7cddfSDavid du Colombier }
7527dd7cddfSDavid du Colombier return (0);
7537dd7cddfSDavid du Colombier }
7547dd7cddfSDavid du Colombier #endif
7557dd7cddfSDavid du Colombier
756*593dc095SDavid du Colombier #if defined(PNG_tRNS_SUPPORTED)
757*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_tRNS(png_structp png_ptr,png_infop info_ptr,png_bytep * trans,int * num_trans,png_color_16p * trans_values)7587dd7cddfSDavid du Colombier png_get_tRNS(png_structp png_ptr, png_infop info_ptr,
7597dd7cddfSDavid du Colombier png_bytep *trans, int *num_trans, png_color_16p *trans_values)
7607dd7cddfSDavid du Colombier {
761*593dc095SDavid du Colombier png_uint_32 retval = 0;
762*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS))
7637dd7cddfSDavid du Colombier {
7647dd7cddfSDavid du Colombier png_debug1(1, "in %s retrieval function\n", "tRNS");
765*593dc095SDavid du Colombier if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
766*593dc095SDavid du Colombier {
767*593dc095SDavid du Colombier if (trans != NULL)
7687dd7cddfSDavid du Colombier {
7697dd7cddfSDavid du Colombier *trans = info_ptr->trans;
770*593dc095SDavid du Colombier retval |= PNG_INFO_tRNS;
7717dd7cddfSDavid du Colombier }
772*593dc095SDavid du Colombier if (trans_values != NULL)
7737dd7cddfSDavid du Colombier *trans_values = &(info_ptr->trans_values);
7747dd7cddfSDavid du Colombier }
775*593dc095SDavid du Colombier else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */
7767dd7cddfSDavid du Colombier {
777*593dc095SDavid du Colombier if (trans_values != NULL)
778*593dc095SDavid du Colombier {
779*593dc095SDavid du Colombier *trans_values = &(info_ptr->trans_values);
780*593dc095SDavid du Colombier retval |= PNG_INFO_tRNS;
7817dd7cddfSDavid du Colombier }
782*593dc095SDavid du Colombier if(trans != NULL)
783*593dc095SDavid du Colombier *trans = NULL;
784*593dc095SDavid du Colombier }
785*593dc095SDavid du Colombier if(num_trans != NULL)
786*593dc095SDavid du Colombier {
7877dd7cddfSDavid du Colombier *num_trans = info_ptr->num_trans;
788*593dc095SDavid du Colombier retval |= PNG_INFO_tRNS;
7897dd7cddfSDavid du Colombier }
790*593dc095SDavid du Colombier }
791*593dc095SDavid du Colombier return (retval);
7927dd7cddfSDavid du Colombier }
7937dd7cddfSDavid du Colombier #endif
7947dd7cddfSDavid du Colombier
795*593dc095SDavid du Colombier #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
796*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_unknown_chunks(png_structp png_ptr,png_infop info_ptr,png_unknown_chunkpp unknowns)797*593dc095SDavid du Colombier png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
798*593dc095SDavid du Colombier png_unknown_chunkpp unknowns)
799*593dc095SDavid du Colombier {
800*593dc095SDavid du Colombier if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL)
801*593dc095SDavid du Colombier *unknowns = info_ptr->unknown_chunks;
802*593dc095SDavid du Colombier return ((png_uint_32)info_ptr->unknown_chunks_num);
803*593dc095SDavid du Colombier }
804*593dc095SDavid du Colombier #endif
805*593dc095SDavid du Colombier
806*593dc095SDavid du Colombier #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
807*593dc095SDavid du Colombier png_byte PNGAPI
png_get_rgb_to_gray_status(png_structp png_ptr)808*593dc095SDavid du Colombier png_get_rgb_to_gray_status (png_structp png_ptr)
809*593dc095SDavid du Colombier {
810*593dc095SDavid du Colombier return (png_byte)(png_ptr? png_ptr->rgb_to_gray_status : 0);
811*593dc095SDavid du Colombier }
812*593dc095SDavid du Colombier #endif
813*593dc095SDavid du Colombier
814*593dc095SDavid du Colombier #if defined(PNG_USER_CHUNKS_SUPPORTED)
815*593dc095SDavid du Colombier png_voidp PNGAPI
png_get_user_chunk_ptr(png_structp png_ptr)816*593dc095SDavid du Colombier png_get_user_chunk_ptr(png_structp png_ptr)
817*593dc095SDavid du Colombier {
818*593dc095SDavid du Colombier return (png_ptr? png_ptr->user_chunk_ptr : NULL);
819*593dc095SDavid du Colombier }
820*593dc095SDavid du Colombier #endif
821*593dc095SDavid du Colombier
822*593dc095SDavid du Colombier #ifdef PNG_WRITE_SUPPORTED
823*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_compression_buffer_size(png_structp png_ptr)824*593dc095SDavid du Colombier png_get_compression_buffer_size(png_structp png_ptr)
825*593dc095SDavid du Colombier {
826*593dc095SDavid du Colombier return (png_uint_32)(png_ptr? png_ptr->zbuf_size : 0L);
827*593dc095SDavid du Colombier }
828*593dc095SDavid du Colombier #endif
829*593dc095SDavid du Colombier
830*593dc095SDavid du Colombier #ifndef PNG_1_0_X
831*593dc095SDavid du Colombier #ifdef PNG_ASSEMBLER_CODE_SUPPORTED
832*593dc095SDavid du Colombier /* this function was added to libpng 1.2.0 and should exist by default */
833*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_asm_flags(png_structp png_ptr)834*593dc095SDavid du Colombier png_get_asm_flags (png_structp png_ptr)
835*593dc095SDavid du Colombier {
836*593dc095SDavid du Colombier return (png_uint_32)(png_ptr? png_ptr->asm_flags : 0L);
837*593dc095SDavid du Colombier }
838*593dc095SDavid du Colombier
839*593dc095SDavid du Colombier /* this function was added to libpng 1.2.0 and should exist by default */
840*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_asm_flagmask(int flag_select)841*593dc095SDavid du Colombier png_get_asm_flagmask (int flag_select)
842*593dc095SDavid du Colombier {
843*593dc095SDavid du Colombier png_uint_32 settable_asm_flags = 0;
844*593dc095SDavid du Colombier
845*593dc095SDavid du Colombier if (flag_select & PNG_SELECT_READ)
846*593dc095SDavid du Colombier settable_asm_flags |=
847*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_COMBINE_ROW |
848*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_INTERLACE |
849*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_FILTER_SUB |
850*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_FILTER_UP |
851*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_FILTER_AVG |
852*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ;
853*593dc095SDavid du Colombier /* no non-MMX flags yet */
854*593dc095SDavid du Colombier
855*593dc095SDavid du Colombier #if 0
856*593dc095SDavid du Colombier /* GRR: no write-flags yet, either, but someday... */
857*593dc095SDavid du Colombier if (flag_select & PNG_SELECT_WRITE)
858*593dc095SDavid du Colombier settable_asm_flags |=
859*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_WRITE_ [whatever] ;
860*593dc095SDavid du Colombier #endif /* 0 */
861*593dc095SDavid du Colombier
862*593dc095SDavid du Colombier return settable_asm_flags; /* _theoretically_ settable capabilities only */
863*593dc095SDavid du Colombier }
864*593dc095SDavid du Colombier #endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
865*593dc095SDavid du Colombier
866*593dc095SDavid du Colombier
867*593dc095SDavid du Colombier #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
868*593dc095SDavid du Colombier /* GRR: could add this: && defined(PNG_MMX_CODE_SUPPORTED) */
869*593dc095SDavid du Colombier /* this function was added to libpng 1.2.0 */
870*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_mmx_flagmask(int flag_select,int * compilerID)871*593dc095SDavid du Colombier png_get_mmx_flagmask (int flag_select, int *compilerID)
872*593dc095SDavid du Colombier {
873*593dc095SDavid du Colombier png_uint_32 settable_mmx_flags = 0;
874*593dc095SDavid du Colombier
875*593dc095SDavid du Colombier if (flag_select & PNG_SELECT_READ)
876*593dc095SDavid du Colombier settable_mmx_flags |=
877*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_COMBINE_ROW |
878*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_INTERLACE |
879*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_FILTER_SUB |
880*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_FILTER_UP |
881*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_FILTER_AVG |
882*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ;
883*593dc095SDavid du Colombier #if 0
884*593dc095SDavid du Colombier /* GRR: no MMX write support yet, but someday... */
885*593dc095SDavid du Colombier if (flag_select & PNG_SELECT_WRITE)
886*593dc095SDavid du Colombier settable_mmx_flags |=
887*593dc095SDavid du Colombier PNG_ASM_FLAG_MMX_WRITE_ [whatever] ;
888*593dc095SDavid du Colombier #endif /* 0 */
889*593dc095SDavid du Colombier
890*593dc095SDavid du Colombier if (compilerID != NULL) {
891*593dc095SDavid du Colombier #ifdef PNG_USE_PNGVCRD
892*593dc095SDavid du Colombier *compilerID = 1; /* MSVC */
893*593dc095SDavid du Colombier #else
894*593dc095SDavid du Colombier #ifdef PNG_USE_PNGGCCRD
895*593dc095SDavid du Colombier *compilerID = 2; /* gcc/gas */
896*593dc095SDavid du Colombier #else
897*593dc095SDavid du Colombier *compilerID = -1; /* unknown (i.e., no asm/MMX code compiled) */
898*593dc095SDavid du Colombier #endif
899*593dc095SDavid du Colombier #endif
900*593dc095SDavid du Colombier }
901*593dc095SDavid du Colombier
902*593dc095SDavid du Colombier return settable_mmx_flags; /* _theoretically_ settable capabilities only */
903*593dc095SDavid du Colombier }
904*593dc095SDavid du Colombier
905*593dc095SDavid du Colombier /* this function was added to libpng 1.2.0 */
906*593dc095SDavid du Colombier png_byte PNGAPI
png_get_mmx_bitdepth_threshold(png_structp png_ptr)907*593dc095SDavid du Colombier png_get_mmx_bitdepth_threshold (png_structp png_ptr)
908*593dc095SDavid du Colombier {
909*593dc095SDavid du Colombier return (png_byte)(png_ptr? png_ptr->mmx_bitdepth_threshold : 0);
910*593dc095SDavid du Colombier }
911*593dc095SDavid du Colombier
912*593dc095SDavid du Colombier /* this function was added to libpng 1.2.0 */
913*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_mmx_rowbytes_threshold(png_structp png_ptr)914*593dc095SDavid du Colombier png_get_mmx_rowbytes_threshold (png_structp png_ptr)
915*593dc095SDavid du Colombier {
916*593dc095SDavid du Colombier return (png_uint_32)(png_ptr? png_ptr->mmx_rowbytes_threshold : 0L);
917*593dc095SDavid du Colombier }
918*593dc095SDavid du Colombier #endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */
919*593dc095SDavid du Colombier
920*593dc095SDavid du Colombier #ifdef PNG_SET_USER_LIMITS_SUPPORTED
921*593dc095SDavid du Colombier /* these functions were added to libpng 1.2.6 */
922*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_user_width_max(png_structp png_ptr)923*593dc095SDavid du Colombier png_get_user_width_max (png_structp png_ptr)
924*593dc095SDavid du Colombier {
925*593dc095SDavid du Colombier return (png_ptr? png_ptr->user_width_max : 0);
926*593dc095SDavid du Colombier }
927*593dc095SDavid du Colombier png_uint_32 PNGAPI
png_get_user_height_max(png_structp png_ptr)928*593dc095SDavid du Colombier png_get_user_height_max (png_structp png_ptr)
929*593dc095SDavid du Colombier {
930*593dc095SDavid du Colombier return (png_ptr? png_ptr->user_height_max : 0);
931*593dc095SDavid du Colombier }
932*593dc095SDavid du Colombier #endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */
933*593dc095SDavid du Colombier
934*593dc095SDavid du Colombier #endif /* ?PNG_1_0_X */
935