1893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
2893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* pngget.c - retrieval of values from info struct
3893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *
4ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * Last changed in libpng 1.6.1 [March 28, 2013]
5ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * Copyright (c) 1998-2013 Glenn Randers-Pehrson
6893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
7893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
8a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott *
9a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott * This code is released under the libpng license.
10a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott * For conditions of distribution and use, see the disclaimer
11a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott * and license in png.h
12a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott *
13893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project */
14893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
15ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#include "pngpriv.h"
16ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
17893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
18893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
19893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
20ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_valid(png_const_structrp png_ptr, png_const_inforp info_ptr,
21ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_uint_32 flag)
22893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
23893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
24893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return(info_ptr->valid & flag);
25a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
26ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return(0);
27893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
28893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
29ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_size_t PNGAPI
30ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_rowbytes(png_const_structrp png_ptr, png_const_inforp info_ptr)
31893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
32893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
33893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return(info_ptr->rowbytes);
34a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
35ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return(0);
36893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
37893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
385f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_INFO_IMAGE_SUPPORTED
39893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_bytepp PNGAPI
40ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_rows(png_const_structrp png_ptr, png_const_inforp info_ptr)
41893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
42893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
43893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return(info_ptr->row_pointers);
44a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
45ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return(0);
46893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
47893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
48893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
49893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#ifdef PNG_EASY_ACCESS_SUPPORTED
50a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott/* Easy access to info, added in libpng-0.99 */
51893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
52ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_image_width(png_const_structrp png_ptr, png_const_inforp info_ptr)
53893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
54893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
55893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return info_ptr->width;
56a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
57893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
58893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
59893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
60893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
61ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_image_height(png_const_structrp png_ptr, png_const_inforp info_ptr)
62893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
63893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
64893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return info_ptr->height;
65a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
66893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
67893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
68893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
69893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_byte PNGAPI
70ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_bit_depth(png_const_structrp png_ptr, png_const_inforp info_ptr)
71893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
72893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
73893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return info_ptr->bit_depth;
74a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
75893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
76893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
77893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
78893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_byte PNGAPI
79ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_color_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
80893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
81893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
82893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return info_ptr->color_type;
83a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
84893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
85893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
86893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
87893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_byte PNGAPI
88ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_filter_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
89893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
90893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
91893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return info_ptr->filter_type;
92a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
93893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
94893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
95893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
96893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_byte PNGAPI
97ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_interlace_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
98893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
99893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
100893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return info_ptr->interlace_type;
101a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
102893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
103893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
104893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
105893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_byte PNGAPI
106ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_compression_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
107893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
108893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
109893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return info_ptr->compression_type;
110a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
111893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
112893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
113893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
114893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
115ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_x_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp
116ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   info_ptr)
117893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1185f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_pHYs_SUPPORTED
119ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
120ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      {
121ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         png_debug1(1, "in %s retrieval function",
122ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik             "png_get_x_pixels_per_meter");
123a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
124ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
125ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            return (info_ptr->x_pixels_per_unit);
126ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      }
127893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
128ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
129893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
130893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
131893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
132893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
133ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_y_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp
134ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    info_ptr)
135893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1365f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_pHYs_SUPPORTED
137ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
138893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
139ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      png_debug1(1, "in %s retrieval function",
140ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik          "png_get_y_pixels_per_meter");
141a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
142ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
143ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         return (info_ptr->y_pixels_per_unit);
144893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
145893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
146ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
147893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
148893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
149893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
150893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
151ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp info_ptr)
152893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1535f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_pHYs_SUPPORTED
154ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
155893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
1564215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project      png_debug1(1, "in %s retrieval function", "png_get_pixels_per_meter");
157a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
158ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER &&
159ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik          info_ptr->x_pixels_per_unit == info_ptr->y_pixels_per_unit)
160ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         return (info_ptr->x_pixels_per_unit);
161893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
162893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
163ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
164893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
165893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
166893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
167893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#ifdef PNG_FLOATING_POINT_SUPPORTED
168893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectfloat PNGAPI
169ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_pixel_aspect_ratio(png_const_structrp png_ptr, png_const_inforp
170ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   info_ptr)
171ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{
172ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_pHYs_SUPPORTED
173ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
174893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
1754215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project      png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio");
1765f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
177ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (info_ptr->x_pixels_per_unit != 0)
178893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         return ((float)((float)info_ptr->y_pixels_per_unit
179ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik             /(float)info_ptr->x_pixels_per_unit));
180893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
181893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#else
182ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   PNG_UNUSED(png_ptr)
183ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   PNG_UNUSED(info_ptr)
184893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
185ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
186893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return ((float)0.0);
187893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
188893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
189893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
190ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_FIXED_POINT_SUPPORTED
191ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_fixed_point PNGAPI
192ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_pixel_aspect_ratio_fixed(png_const_structrp png_ptr,
193ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_const_inforp info_ptr)
194ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{
195ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_pHYs_SUPPORTED
196ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)
197ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       && info_ptr->x_pixels_per_unit > 0 && info_ptr->y_pixels_per_unit > 0
198ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       && info_ptr->x_pixels_per_unit <= PNG_UINT_31_MAX
199ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       && info_ptr->y_pixels_per_unit <= PNG_UINT_31_MAX)
200ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   {
201ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      png_fixed_point res;
202ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
203ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio_fixed");
204ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
205ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      /* The following casts work because a PNG 4 byte integer only has a valid
206ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       * range of 0..2^31-1; otherwise the cast might overflow.
207ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       */
208ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (png_muldiv(&res, (png_int_32)info_ptr->y_pixels_per_unit, PNG_FP_1,
209ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik          (png_int_32)info_ptr->x_pixels_per_unit))
210ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         return res;
211ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   }
212ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#else
213ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   PNG_UNUSED(png_ptr)
214ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   PNG_UNUSED(info_ptr)
215ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif
216ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
217ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return 0;
218ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
219ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif
220ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
221893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_int_32 PNGAPI
222ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_x_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr)
223893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
2245f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_oFFs_SUPPORTED
225ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
226893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
2274215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project      png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns");
228a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
229ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER)
230ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         return (info_ptr->x_offset);
231893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
232893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
233ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
234893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
235893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
236893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
237893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_int_32 PNGAPI
238ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_y_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr)
239893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
2405f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_oFFs_SUPPORTED
241ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
242893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
2434215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project      png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns");
244a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
245ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER)
246ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         return (info_ptr->y_offset);
247893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
248893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
249ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
250893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
251893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
252893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
253893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_int_32 PNGAPI
254ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_x_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
255893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
2565f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_oFFs_SUPPORTED
257ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
258893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
259ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      png_debug1(1, "in %s retrieval function", "png_get_x_offset_pixels");
260a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
261ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL)
262ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         return (info_ptr->x_offset);
263893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
264893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
265ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
266893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
267893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
268893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
269893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_int_32 PNGAPI
270ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_y_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
271893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
2725f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_oFFs_SUPPORTED
273ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
274893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
275ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      png_debug1(1, "in %s retrieval function", "png_get_y_offset_pixels");
276a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
277ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL)
278ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         return (info_ptr->y_offset);
279893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
280893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
281ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
282893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
283893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
284893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
285ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_INCH_CONVERSIONS_SUPPORTED
286ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikstatic png_uint_32
287ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikppi_from_ppm(png_uint_32 ppm)
288ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{
289ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if 0
290ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   /* The conversion is *(2.54/100), in binary (32 digits):
291ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * .00000110100000001001110101001001
292ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    */
293ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   png_uint_32 t1001, t1101;
294ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   ppm >>= 1;                  /* .1 */
295ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   t1001 = ppm + (ppm >> 3);   /* .1001 */
296ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   t1101 = t1001 + (ppm >> 1); /* .1101 */
297ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   ppm >>= 20;                 /* .000000000000000000001 */
298ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   t1101 += t1101 >> 15;       /* .1101000000000001101 */
299ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   t1001 >>= 11;               /* .000000000001001 */
300ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   t1001 += t1001 >> 12;       /* .000000000001001000000001001 */
301ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   ppm += t1001;               /* .000000000001001000001001001 */
302ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   ppm += t1101;               /* .110100000001001110101001001 */
303ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (ppm + 16) >> 5;/* .00000110100000001001110101001001 */
304ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#else
305ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   /* The argument is a PNG unsigned integer, so it is not permitted
306ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * to be bigger than 2^31.
307ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    */
308ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   png_fixed_point result;
309ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (ppm <= PNG_UINT_31_MAX && png_muldiv(&result, (png_int_32)ppm, 127,
310ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       5000))
311ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return result;
312ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
313ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   /* Overflow. */
314ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return 0;
315ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif
316ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
317ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
318893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
319ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
320893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
321ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return ppi_from_ppm(png_get_pixels_per_meter(png_ptr, info_ptr));
322893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
323893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
324893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
325ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_x_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
326893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
327ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return ppi_from_ppm(png_get_x_pixels_per_meter(png_ptr, info_ptr));
328893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
329893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
330893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
331ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_y_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
332893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
333ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return ppi_from_ppm(png_get_y_pixels_per_meter(png_ptr, info_ptr));
334893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
335893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
336ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_FIXED_POINT_SUPPORTED
337ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikstatic png_fixed_point
338ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_fixed_inches_from_microns(png_const_structrp png_ptr, png_int_32 microns)
339ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{
340ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   /* Convert from metres * 1,000,000 to inches * 100,000, meters to
341ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * inches is simply *(100/2.54), so we want *(10/2.54) == 500/127.
342ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * Notice that this can overflow - a warning is output and 0 is
343ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * returned.
344ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    */
345ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return png_muldiv_warn(png_ptr, microns, 500, 127);
346ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
347ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
348ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_fixed_point PNGAPI
349ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_x_offset_inches_fixed(png_const_structrp png_ptr,
350ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_const_inforp info_ptr)
351ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{
352ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return png_fixed_inches_from_microns(png_ptr,
353ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       png_get_x_offset_microns(png_ptr, info_ptr));
354ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
355ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif
356ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
357ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_FIXED_POINT_SUPPORTED
358ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_fixed_point PNGAPI
359ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_y_offset_inches_fixed(png_const_structrp png_ptr,
360ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_const_inforp info_ptr)
361ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{
362ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return png_fixed_inches_from_microns(png_ptr,
363ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       png_get_y_offset_microns(png_ptr, info_ptr));
364ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
365ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif
366ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
367ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_FLOATING_POINT_SUPPORTED
368893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectfloat PNGAPI
369ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_x_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr)
370893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
371ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   /* To avoid the overflow do the conversion directly in floating
372ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * point.
373ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    */
374ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (float)(png_get_x_offset_microns(png_ptr, info_ptr) * .00003937);
375893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
376ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif
377893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
378ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_FLOATING_POINT_SUPPORTED
379893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectfloat PNGAPI
380ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_y_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr)
381893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
382ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   /* To avoid the overflow do the conversion directly in floating
383ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * point.
384ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    */
385ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (float)(png_get_y_offset_microns(png_ptr, info_ptr) * .00003937);
386893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
387ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif
388893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
3895f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_pHYs_SUPPORTED
390893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
391ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_pHYs_dpi(png_const_structrp png_ptr, png_const_inforp info_ptr,
392ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
393893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
394893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   png_uint_32 retval = 0;
395893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
396893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
397893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
3984215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project      png_debug1(1, "in %s retrieval function", "pHYs");
3995f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
400893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (res_x != NULL)
401893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      {
402893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         *res_x = info_ptr->x_pixels_per_unit;
403893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         retval |= PNG_INFO_pHYs;
404893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      }
405ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
406893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (res_y != NULL)
407893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      {
408893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         *res_y = info_ptr->y_pixels_per_unit;
409893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         retval |= PNG_INFO_pHYs;
410893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      }
411ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
412893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (unit_type != NULL)
413893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      {
414893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         *unit_type = (int)info_ptr->phys_unit_type;
415893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         retval |= PNG_INFO_pHYs;
416ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
4174215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project         if (*unit_type == 1)
418893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         {
419893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project            if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50);
420893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project            if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50);
421893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         }
422893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      }
423893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
424ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
425893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (retval);
426893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
427893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif /* PNG_pHYs_SUPPORTED */
428ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif  /* PNG_INCH_CONVERSIONS_SUPPORTED */
429893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
430893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* png_get_channels really belongs in here, too, but it's been around longer */
431893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
432893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif  /* PNG_EASY_ACCESS_SUPPORTED */
433893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
434ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
435893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_byte PNGAPI
436ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_channels(png_const_structrp png_ptr, png_const_inforp info_ptr)
437893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
438893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
439893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return(info_ptr->channels);
440ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
441ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (0);
442893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
443893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
444ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_SUPPORTED
445ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_const_bytep PNGAPI
446ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_signature(png_const_structrp png_ptr, png_const_inforp info_ptr)
447893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
448893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL)
449893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return(info_ptr->signature);
450ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
451ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (NULL);
452893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
453ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif
454893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
4555f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_bKGD_SUPPORTED
456893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
457ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_bKGD(png_const_structrp png_ptr, png_inforp info_ptr,
458893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   png_color_16p *background)
459893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
460893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD)
461ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       && background != NULL)
462893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
4634215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project      png_debug1(1, "in %s retrieval function", "bKGD");
4645f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
465893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *background = &(info_ptr->background);
466893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_bKGD);
467893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
468ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
469893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
470893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
471893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
472893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
4735f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_cHRM_SUPPORTED
474ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* The XYZ APIs were added in 1.5.5 to take advantage of the code added at the
475ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * same time to correct the rgb grayscale coefficient defaults obtained from the
476ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * cHRM chunk in 1.5.4
477ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */
478ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  ifdef PNG_FLOATING_POINT_SUPPORTED
479893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
480ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr,
481ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    double *white_x, double *white_y, double *red_x, double *red_y,
482ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    double *green_x, double *green_y, double *blue_x, double *blue_y)
483893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
484ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   /* Quiet API change: this code used to only return the end points if a cHRM
485ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * chunk was present, but the end points can also come from iCCP or sRGB
486ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * chunks, so in 1.6.0 the png_get_ APIs return the end points regardless and
487ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * the png_set_ APIs merely check that set end points are mutually
488ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    * consistent.
489ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    */
490ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL &&
491ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS))
492893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
4934215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project      png_debug1(1, "in %s retrieval function", "cHRM");
4945f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
495893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (white_x != NULL)
496ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *white_x = png_float(png_ptr,
497ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            info_ptr->colorspace.end_points_xy.whitex, "cHRM white X");
498893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (white_y != NULL)
499ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *white_y = png_float(png_ptr,
500ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            info_ptr->colorspace.end_points_xy.whitey, "cHRM white Y");
501893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (red_x != NULL)
502ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *red_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redx,
503ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            "cHRM red X");
504893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (red_y != NULL)
505ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *red_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redy,
506ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            "cHRM red Y");
507893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (green_x != NULL)
508ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *green_x = png_float(png_ptr,
509ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            info_ptr->colorspace.end_points_xy.greenx, "cHRM green X");
510893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (green_y != NULL)
511ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *green_y = png_float(png_ptr,
512ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            info_ptr->colorspace.end_points_xy.greeny, "cHRM green Y");
513893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (blue_x != NULL)
514ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *blue_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluex,
515ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            "cHRM blue X");
516893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (blue_y != NULL)
517ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *blue_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluey,
518ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            "cHRM blue Y");
519893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_cHRM);
520893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
521ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
522893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
523893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
524ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
525ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_uint_32 PNGAPI
526ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr,
527ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   double *red_X, double *red_Y, double *red_Z, double *green_X,
528ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   double *green_Y, double *green_Z, double *blue_X, double *blue_Y,
529ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   double *blue_Z)
530ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{
531ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL &&
532ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS))
533ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   {
534ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      png_debug1(1, "in %s retrieval function", "cHRM_XYZ(float)");
535ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
536ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (red_X != NULL)
537ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *red_X = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_X,
538ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            "cHRM red X");
539ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (red_Y != NULL)
540ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *red_Y = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Y,
541ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            "cHRM red Y");
542ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (red_Z != NULL)
543ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *red_Z = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Z,
544ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            "cHRM red Z");
545ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (green_X != NULL)
546ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *green_X = png_float(png_ptr,
547ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            info_ptr->colorspace.end_points_XYZ.green_X, "cHRM green X");
548ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (green_Y != NULL)
549ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *green_Y = png_float(png_ptr,
550ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            info_ptr->colorspace.end_points_XYZ.green_Y, "cHRM green Y");
551ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (green_Z != NULL)
552ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *green_Z = png_float(png_ptr,
553ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            info_ptr->colorspace.end_points_XYZ.green_Z, "cHRM green Z");
554ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (blue_X != NULL)
555ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *blue_X = png_float(png_ptr,
556ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            info_ptr->colorspace.end_points_XYZ.blue_X, "cHRM blue X");
557ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (blue_Y != NULL)
558ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *blue_Y = png_float(png_ptr,
559ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            info_ptr->colorspace.end_points_XYZ.blue_Y, "cHRM blue Y");
560ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (blue_Z != NULL)
561ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *blue_Z = png_float(png_ptr,
562ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            info_ptr->colorspace.end_points_XYZ.blue_Z, "cHRM blue Z");
563ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return (PNG_INFO_cHRM);
564ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   }
565ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
566ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (0);
567ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
568ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  endif
569ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
570ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  ifdef PNG_FIXED_POINT_SUPPORTED
571ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_uint_32 PNGAPI
572ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_cHRM_XYZ_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
573ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_fixed_point *int_red_X, png_fixed_point *int_red_Y,
574ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_fixed_point *int_red_Z, png_fixed_point *int_green_X,
575ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_fixed_point *int_green_Y, png_fixed_point *int_green_Z,
576ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y,
577ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_fixed_point *int_blue_Z)
578ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{
579ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL &&
580ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS))
581ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   {
582ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      png_debug1(1, "in %s retrieval function", "cHRM_XYZ");
583ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
584ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (int_red_X != NULL)
585ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *int_red_X = info_ptr->colorspace.end_points_XYZ.red_X;
586ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (int_red_Y != NULL)
587ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *int_red_Y = info_ptr->colorspace.end_points_XYZ.red_Y;
588ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (int_red_Z != NULL)
589ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *int_red_Z = info_ptr->colorspace.end_points_XYZ.red_Z;
590ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (int_green_X != NULL)
591ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *int_green_X = info_ptr->colorspace.end_points_XYZ.green_X;
592ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (int_green_Y != NULL)
593ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *int_green_Y = info_ptr->colorspace.end_points_XYZ.green_Y;
594ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (int_green_Z != NULL)
595ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *int_green_Z = info_ptr->colorspace.end_points_XYZ.green_Z;
596ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (int_blue_X != NULL)
597ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *int_blue_X = info_ptr->colorspace.end_points_XYZ.blue_X;
598ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (int_blue_Y != NULL)
599ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *int_blue_Y = info_ptr->colorspace.end_points_XYZ.blue_Y;
600ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (int_blue_Z != NULL)
601ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *int_blue_Z = info_ptr->colorspace.end_points_XYZ.blue_Z;
602ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return (PNG_INFO_cHRM);
603ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   }
604ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
605ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (0);
606ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
607ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
608893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
609ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_cHRM_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
610ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x,
611ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y,
612ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_fixed_point *blue_x, png_fixed_point *blue_y)
613893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
6145f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "cHRM");
6155f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
616ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL &&
617ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS))
618893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
619893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (white_x != NULL)
620ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *white_x = info_ptr->colorspace.end_points_xy.whitex;
621893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (white_y != NULL)
622ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *white_y = info_ptr->colorspace.end_points_xy.whitey;
623893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (red_x != NULL)
624ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *red_x = info_ptr->colorspace.end_points_xy.redx;
625893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (red_y != NULL)
626ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *red_y = info_ptr->colorspace.end_points_xy.redy;
627893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (green_x != NULL)
628ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *green_x = info_ptr->colorspace.end_points_xy.greenx;
629893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (green_y != NULL)
630ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *green_y = info_ptr->colorspace.end_points_xy.greeny;
631893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (blue_x != NULL)
632ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *blue_x = info_ptr->colorspace.end_points_xy.bluex;
633893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (blue_y != NULL)
634ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         *blue_y = info_ptr->colorspace.end_points_xy.bluey;
635893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_cHRM);
636893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
637ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
638893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
639893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
640ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  endif
641893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
642893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
6435f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_gAMA_SUPPORTED
644ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  ifdef PNG_FIXED_POINT_SUPPORTED
645893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
646ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_gAMA_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
647ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_fixed_point *file_gamma)
648893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
6495f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "gAMA");
6505f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
651ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL &&
652ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) &&
653ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      file_gamma != NULL)
654893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
655ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *file_gamma = info_ptr->colorspace.gamma;
656893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_gAMA);
657893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
658ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
659893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
660893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
661ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  endif
662ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
663ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  ifdef PNG_FLOATING_POINT_SUPPORTED
664893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
665ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_gAMA(png_const_structrp png_ptr, png_const_inforp info_ptr,
666ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    double *file_gamma)
667893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
668ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   png_debug1(1, "in %s retrieval function", "gAMA(float)");
6695f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
670ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL &&
671ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) &&
672ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      file_gamma != NULL)
673893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
674ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *file_gamma = png_float(png_ptr, info_ptr->colorspace.gamma,
675ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         "png_get_gAMA");
676893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_gAMA);
677893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
678ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
679893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
680893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
681ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  endif
682893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
683893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
6845f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_sRGB_SUPPORTED
685893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
686ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_sRGB(png_const_structrp png_ptr, png_const_inforp info_ptr,
687ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    int *file_srgb_intent)
688893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
6895f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "sRGB");
6905f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
691893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB)
692ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       && file_srgb_intent != NULL)
693893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
694ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *file_srgb_intent = info_ptr->colorspace.rendering_intent;
695893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_sRGB);
696893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
697ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
698893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
699893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
700893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
701893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
7025f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_iCCP_SUPPORTED
703893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
704ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
705ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_charpp name, int *compression_type,
706ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_bytepp profile, png_uint_32 *proflen)
707893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
7085f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "iCCP");
7095f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
710893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP)
711ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       && name != NULL && compression_type != NULL && profile != NULL &&
712ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik		 proflen != NULL)
713893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
714893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *name = info_ptr->iccp_name;
715893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *profile = info_ptr->iccp_profile;
716ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *proflen = png_get_uint_32(info_ptr->iccp_profile);
717ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      /* This is somewhat irrelevant since the profile data returned has
718ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       * actually been uncompressed.
719a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott       */
720ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *compression_type = PNG_COMPRESSION_TYPE_BASE;
721893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_iCCP);
722893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
723ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
724893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
725893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
726893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
727893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
7285f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_sPLT_SUPPORTED
729ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikint PNGAPI
730ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_sPLT(png_const_structrp png_ptr, png_inforp info_ptr,
731ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_sPLT_tpp spalettes)
732893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
733893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
734893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
735ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *spalettes = info_ptr->splt_palettes;
736ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return info_ptr->splt_palettes_num;
737893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
738ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
739893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
740893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
741893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
742893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
7435f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_hIST_SUPPORTED
744893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
745ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_hIST(png_const_structrp png_ptr, png_inforp info_ptr,
746ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_uint_16p *hist)
747893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
7485f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "hIST");
7495f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
750893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST)
751ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       && hist != NULL)
752893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
753893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *hist = info_ptr->hist;
754893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_hIST);
755893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
756ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
757893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
758893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
759893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
760893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
761893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
762ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_IHDR(png_const_structrp png_ptr, png_const_inforp info_ptr,
763ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_uint_32 *width, png_uint_32 *height, int *bit_depth,
764ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    int *color_type, int *interlace_type, int *compression_type,
765ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    int *filter_type)
766893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
7675f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "IHDR");
768a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
7695f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   if (png_ptr == NULL || info_ptr == NULL || width == NULL ||
7705f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott       height == NULL || bit_depth == NULL || color_type == NULL)
7715f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott      return (0);
772a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
7735f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   *width = info_ptr->width;
7745f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   *height = info_ptr->height;
7755f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   *bit_depth = info_ptr->bit_depth;
7765f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   *color_type = info_ptr->color_type;
777a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
7785f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   if (compression_type != NULL)
7795f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott      *compression_type = info_ptr->compression_type;
780a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
7815f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   if (filter_type != NULL)
7825f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott      *filter_type = info_ptr->filter_type;
783893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
7845f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   if (interlace_type != NULL)
7855f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott      *interlace_type = info_ptr->interlace_type;
786a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
7875f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   /* This is redundant if we can be sure that the info_ptr values were all
7885f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott    * assigned in png_set_IHDR().  We do the check anyhow in case an
7895f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott    * application has ignored our advice not to mess with the members
7905f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott    * of info_ptr directly.
7915f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott    */
792ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   png_check_IHDR(png_ptr, info_ptr->width, info_ptr->height,
7935f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott       info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type,
7945f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott       info_ptr->compression_type, info_ptr->filter_type);
795a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
7965f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   return (1);
797893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
798893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
7995f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_oFFs_SUPPORTED
800893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
801ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_oFFs(png_const_structrp png_ptr, png_const_inforp info_ptr,
802ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)
803893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
8045f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "oFFs");
8055f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
806893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)
807ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       && offset_x != NULL && offset_y != NULL && unit_type != NULL)
808893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
809893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *offset_x = info_ptr->x_offset;
810893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *offset_y = info_ptr->y_offset;
811893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *unit_type = (int)info_ptr->offset_unit_type;
812893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_oFFs);
813893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
814ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
815893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
816893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
817893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
818893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
8195f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_pCAL_SUPPORTED
820893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
821ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
822ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
823ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_charp *units, png_charpp *params)
824893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
8255f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "pCAL");
8265f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
827893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL)
828a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott       && purpose != NULL && X0 != NULL && X1 != NULL && type != NULL &&
829a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott       nparams != NULL && units != NULL && params != NULL)
830893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
831893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *purpose = info_ptr->pcal_purpose;
832893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *X0 = info_ptr->pcal_X0;
833893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *X1 = info_ptr->pcal_X1;
834893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *type = (int)info_ptr->pcal_type;
835893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *nparams = (int)info_ptr->pcal_nparams;
836893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *units = info_ptr->pcal_units;
837893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *params = info_ptr->pcal_params;
838893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_pCAL);
839893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
840ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
841893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
842893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
843893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
844893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
8455f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_sCAL_SUPPORTED
846ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  ifdef PNG_FIXED_POINT_SUPPORTED
847ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#    if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
848ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         defined(PNG_FLOATING_POINT_SUPPORTED)
849ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_uint_32 PNGAPI
850ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
851ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    int *unit, png_fixed_point *width, png_fixed_point *height)
852ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{
853ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL &&
854ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       (info_ptr->valid & PNG_INFO_sCAL))
855ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   {
856ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *unit = info_ptr->scal_unit;
857ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      /*TODO: make this work without FP support; the API is currently eliminated
858ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       * if neither floating point APIs nor internal floating point arithmetic
859ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       * are enabled.
860ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       */
861ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *width = png_fixed(png_ptr, atof(info_ptr->scal_s_width), "sCAL width");
862ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *height = png_fixed(png_ptr, atof(info_ptr->scal_s_height),
863ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         "sCAL height");
864ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return (PNG_INFO_sCAL);
865ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   }
866ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
867ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return(0);
868ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}
869ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#    endif /* FLOATING_ARITHMETIC */
870ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  endif /* FIXED_POINT */
871ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  ifdef PNG_FLOATING_POINT_SUPPORTED
872893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
873ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_sCAL(png_const_structrp png_ptr, png_const_inforp info_ptr,
874ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    int *unit, double *width, double *height)
875893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
876ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL &&
877ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       (info_ptr->valid & PNG_INFO_sCAL))
878ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   {
879ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *unit = info_ptr->scal_unit;
880ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *width = atof(info_ptr->scal_s_width);
881ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *height = atof(info_ptr->scal_s_height);
882ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return (PNG_INFO_sCAL);
883ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   }
884ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
885ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return(0);
886893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
887ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  endif /* FLOATING POINT */
888893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
889ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_sCAL_s(png_const_structrp png_ptr, png_const_inforp info_ptr,
890ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    int *unit, png_charpp width, png_charpp height)
891893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
892ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL &&
893ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       (info_ptr->valid & PNG_INFO_sCAL))
894ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   {
895ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *unit = info_ptr->scal_unit;
896ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *width = info_ptr->scal_s_width;
897ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *height = info_ptr->scal_s_height;
898ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return (PNG_INFO_sCAL);
899ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   }
900ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
901ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return(0);
902893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
903ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif /* sCAL */
904893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
9055f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_pHYs_SUPPORTED
906893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
907ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_pHYs(png_const_structrp png_ptr, png_const_inforp info_ptr,
908ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
909893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
910893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   png_uint_32 retval = 0;
911893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
9125f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "pHYs");
9135f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
914893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL &&
915ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       (info_ptr->valid & PNG_INFO_pHYs))
916893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
917893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (res_x != NULL)
918893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      {
919893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         *res_x = info_ptr->x_pixels_per_unit;
920893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         retval |= PNG_INFO_pHYs;
921893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      }
922a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
923893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (res_y != NULL)
924893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      {
925893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         *res_y = info_ptr->y_pixels_per_unit;
926893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         retval |= PNG_INFO_pHYs;
927893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      }
928a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
929893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (unit_type != NULL)
930893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      {
931893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         *unit_type = (int)info_ptr->phys_unit_type;
932893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         retval |= PNG_INFO_pHYs;
933893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      }
934893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
935ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
936893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (retval);
937893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
938ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif /* pHYs */
939893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
940893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
941ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_PLTE(png_const_structrp png_ptr, png_inforp info_ptr,
942ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_colorp *palette, int *num_palette)
943893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
9445f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "PLTE");
9455f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
946893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE)
947893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project       && palette != NULL)
948893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
949893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *palette = info_ptr->palette;
950893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *num_palette = info_ptr->num_palette;
9514215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project      png_debug1(3, "num_palette = %d", *num_palette);
952893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_PLTE);
953893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
954ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
955893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
956893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
957893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
9585f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_sBIT_SUPPORTED
959893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
960ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_sBIT(png_const_structrp png_ptr, png_inforp info_ptr,
961ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_color_8p *sig_bit)
962893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
9635f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "sBIT");
9645f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
965893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT)
966ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik       && sig_bit != NULL)
967893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
968893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *sig_bit = &(info_ptr->sig_bit);
969893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_sBIT);
970893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
971ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
972893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
973893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
974893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
975893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
9765f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_TEXT_SUPPORTED
977ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikint PNGAPI
978ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_text(png_const_structrp png_ptr, png_inforp info_ptr,
979ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_textp *text_ptr, int *num_text)
980893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
981893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0)
982893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
983ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      png_debug1(1, "in 0x%lx retrieval function",
984ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         (unsigned long)png_ptr->chunk_name);
985a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
986893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (text_ptr != NULL)
987893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         *text_ptr = info_ptr->text;
988a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
989893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (num_text != NULL)
990893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         *num_text = info_ptr->num_text;
991a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
992ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return info_ptr->num_text;
993893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
994ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
995893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (num_text != NULL)
996ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *num_text = 0;
997ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
998893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return(0);
999893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1000893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
1001893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
10025f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_tIME_SUPPORTED
1003893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
1004ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_tIME(png_const_structrp png_ptr, png_inforp info_ptr,
1005ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_timep *mod_time)
1006893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
10075f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott   png_debug1(1, "in %s retrieval function", "tIME");
10085f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
1009893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME)
1010893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project       && mod_time != NULL)
1011893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
1012893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      *mod_time = &(info_ptr->mod_time);
1013893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      return (PNG_INFO_tIME);
1014893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
1015ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
1016893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
1017893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1018893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
1019893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
10205f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_tRNS_SUPPORTED
1021893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
1022ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_tRNS(png_const_structrp png_ptr, png_inforp info_ptr,
1023ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color)
1024893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1025893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   png_uint_32 retval = 0;
1026893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS))
1027893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
10284215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project      png_debug1(1, "in %s retrieval function", "tRNS");
10295f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott
1030893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
1031893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      {
1032ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         if (trans_alpha != NULL)
1033ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         {
1034ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            *trans_alpha = info_ptr->trans_alpha;
1035ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            retval |= PNG_INFO_tRNS;
1036ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         }
1037ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
1038ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         if (trans_color != NULL)
1039ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            *trans_color = &(info_ptr->trans_color);
1040893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      }
1041ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
1042893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */
1043893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      {
1044ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         if (trans_color != NULL)
1045ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         {
1046ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            *trans_color = &(info_ptr->trans_color);
1047ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            retval |= PNG_INFO_tRNS;
1048ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         }
1049ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
1050ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         if (trans_alpha != NULL)
1051ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik            *trans_alpha = NULL;
1052893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      }
1053ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
10544215dd1533c56e1a89ae6f1d6ea68677fac27fdaThe Android Open Source Project      if (num_trans != NULL)
1055893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      {
1056893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         *num_trans = info_ptr->num_trans;
1057893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project         retval |= PNG_INFO_tRNS;
1058893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project      }
1059893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
1060ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
1061893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (retval);
1062893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1063893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
1064893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
1065ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
1066ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikint PNGAPI
1067ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_unknown_chunks(png_const_structrp png_ptr, png_inforp info_ptr,
1068ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik    png_unknown_chunkpp unknowns)
1069893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1070893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL)
1071893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   {
1072ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      *unknowns = info_ptr->unknown_chunks;
1073ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return info_ptr->unknown_chunks_num;
1074893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   }
1075ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
1076893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project   return (0);
1077893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1078893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
1079893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
10805f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
1081893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_byte PNGAPI
1082ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_rgb_to_gray_status (png_const_structrp png_ptr)
1083893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1084ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (png_byte)(png_ptr ? png_ptr->rgb_to_gray_status : 0);
1085893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1086893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
1087893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
10885f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott#ifdef PNG_USER_CHUNKS_SUPPORTED
1089893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_voidp PNGAPI
1090ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_user_chunk_ptr(png_const_structrp png_ptr)
1091893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1092ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (png_ptr ? png_ptr->user_chunk_ptr : NULL);
1093893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1094893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif
1095893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
1096ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_size_t PNGAPI
1097ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_compression_buffer_size(png_const_structrp png_ptr)
1098893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1099ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr == NULL)
1100ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return 0;
1101ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
1102ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  ifdef PNG_WRITE_SUPPORTED
1103ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      if (png_ptr->mode & PNG_IS_READ_STRUCT)
1104ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  endif
1105ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   {
1106ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#     ifdef PNG_SEQUENTIAL_READ_SUPPORTED
1107ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         return png_ptr->IDAT_read_size;
1108ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#     else
1109ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         return PNG_IDAT_READ_SIZE;
1110ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#     endif
1111ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   }
1112ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
1113ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  ifdef PNG_WRITE_SUPPORTED
1114ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      else
1115ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik         return png_ptr->zbuffer_size;
1116ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  endif
1117893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1118893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
1119ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_SET_USER_LIMITS_SUPPORTED
1120ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* These functions were added to libpng 1.2.6 and were enabled
1121ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * by default in libpng-1.4.0 */
1122893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
1123ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_user_width_max (png_const_structrp png_ptr)
1124893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1125ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (png_ptr ? png_ptr->user_width_max : 0);
1126893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1127893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
1128893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
1129ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_user_height_max (png_const_structrp png_ptr)
1130893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1131ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (png_ptr ? png_ptr->user_height_max : 0);
1132893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1133893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
1134ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* This function was added to libpng 1.4.0 */
1135893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
1136ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_chunk_cache_max (png_const_structrp png_ptr)
1137893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1138ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (png_ptr ? png_ptr->user_chunk_cache_max : 0);
1139893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1140893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
1141ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* This function was added to libpng 1.4.1 */
1142ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_alloc_size_t PNGAPI
1143ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_chunk_malloc_max (png_const_structrp png_ptr)
1144893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1145ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (png_ptr ? png_ptr->user_chunk_malloc_max : 0);
1146893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1147ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */
1148893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
1149ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* These functions were added to libpng 1.4.0 */
1150ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_IO_STATE_SUPPORTED
1151893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
1152ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_io_state (png_const_structrp png_ptr)
1153893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1154ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return png_ptr->io_state;
1155893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1156893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project
1157893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_uint_32 PNGAPI
1158ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_io_chunk_type (png_const_structrp png_ptr)
1159893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1160ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return png_ptr->chunk_name;
1161893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1162ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif /* ?PNG_IO_STATE_SUPPORTED */
1163ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
1164ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
1165ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  ifdef PNG_GET_PALETTE_MAX_SUPPORTED
1166ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikint PNGAPI
1167ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikpng_get_palette_max(png_const_structp png_ptr, png_const_infop info_ptr)
1168893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{
1169ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   if (png_ptr != NULL && info_ptr != NULL)
1170ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik      return png_ptr->num_palette_max;
1171ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik
1172ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik   return (-1);
1173893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}
1174ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#  endif
1175ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif
1176a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott
1177893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
1178