13965825b97a5809454f5810f7e603cbd02daa036scroggo
23965825b97a5809454f5810f7e603cbd02daa036scroggo/* pngget.c - retrieval of values from info struct
33965825b97a5809454f5810f7e603cbd02daa036scroggo *
43965825b97a5809454f5810f7e603cbd02daa036scroggo * Last changed in libpng 1.6.17 [March 26, 2015]
53965825b97a5809454f5810f7e603cbd02daa036scroggo * Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
63965825b97a5809454f5810f7e603cbd02daa036scroggo * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
73965825b97a5809454f5810f7e603cbd02daa036scroggo * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
83965825b97a5809454f5810f7e603cbd02daa036scroggo *
93965825b97a5809454f5810f7e603cbd02daa036scroggo * This code is released under the libpng license.
103965825b97a5809454f5810f7e603cbd02daa036scroggo * For conditions of distribution and use, see the disclaimer
113965825b97a5809454f5810f7e603cbd02daa036scroggo * and license in png.h
123965825b97a5809454f5810f7e603cbd02daa036scroggo *
133965825b97a5809454f5810f7e603cbd02daa036scroggo */
143965825b97a5809454f5810f7e603cbd02daa036scroggo
153965825b97a5809454f5810f7e603cbd02daa036scroggo#include "pngpriv.h"
163965825b97a5809454f5810f7e603cbd02daa036scroggo
173965825b97a5809454f5810f7e603cbd02daa036scroggo#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
183965825b97a5809454f5810f7e603cbd02daa036scroggo
193965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
203965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_valid(png_const_structrp png_ptr, png_const_inforp info_ptr,
213965825b97a5809454f5810f7e603cbd02daa036scroggo    png_uint_32 flag)
223965825b97a5809454f5810f7e603cbd02daa036scroggo{
233965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
243965825b97a5809454f5810f7e603cbd02daa036scroggo      return(info_ptr->valid & flag);
253965825b97a5809454f5810f7e603cbd02daa036scroggo
263965825b97a5809454f5810f7e603cbd02daa036scroggo   return(0);
273965825b97a5809454f5810f7e603cbd02daa036scroggo}
283965825b97a5809454f5810f7e603cbd02daa036scroggo
293965825b97a5809454f5810f7e603cbd02daa036scroggopng_size_t PNGAPI
303965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_rowbytes(png_const_structrp png_ptr, png_const_inforp info_ptr)
313965825b97a5809454f5810f7e603cbd02daa036scroggo{
323965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
333965825b97a5809454f5810f7e603cbd02daa036scroggo      return(info_ptr->rowbytes);
343965825b97a5809454f5810f7e603cbd02daa036scroggo
353965825b97a5809454f5810f7e603cbd02daa036scroggo   return(0);
363965825b97a5809454f5810f7e603cbd02daa036scroggo}
373965825b97a5809454f5810f7e603cbd02daa036scroggo
383965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_INFO_IMAGE_SUPPORTED
393965825b97a5809454f5810f7e603cbd02daa036scroggopng_bytepp PNGAPI
403965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_rows(png_const_structrp png_ptr, png_const_inforp info_ptr)
413965825b97a5809454f5810f7e603cbd02daa036scroggo{
423965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
433965825b97a5809454f5810f7e603cbd02daa036scroggo      return(info_ptr->row_pointers);
443965825b97a5809454f5810f7e603cbd02daa036scroggo
453965825b97a5809454f5810f7e603cbd02daa036scroggo   return(0);
463965825b97a5809454f5810f7e603cbd02daa036scroggo}
473965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
483965825b97a5809454f5810f7e603cbd02daa036scroggo
493965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_EASY_ACCESS_SUPPORTED
503965825b97a5809454f5810f7e603cbd02daa036scroggo/* Easy access to info, added in libpng-0.99 */
513965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
523965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_image_width(png_const_structrp png_ptr, png_const_inforp info_ptr)
533965825b97a5809454f5810f7e603cbd02daa036scroggo{
543965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
553965825b97a5809454f5810f7e603cbd02daa036scroggo      return info_ptr->width;
563965825b97a5809454f5810f7e603cbd02daa036scroggo
573965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
583965825b97a5809454f5810f7e603cbd02daa036scroggo}
593965825b97a5809454f5810f7e603cbd02daa036scroggo
603965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
613965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_image_height(png_const_structrp png_ptr, png_const_inforp info_ptr)
623965825b97a5809454f5810f7e603cbd02daa036scroggo{
633965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
643965825b97a5809454f5810f7e603cbd02daa036scroggo      return info_ptr->height;
653965825b97a5809454f5810f7e603cbd02daa036scroggo
663965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
673965825b97a5809454f5810f7e603cbd02daa036scroggo}
683965825b97a5809454f5810f7e603cbd02daa036scroggo
693965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI
703965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_bit_depth(png_const_structrp png_ptr, png_const_inforp info_ptr)
713965825b97a5809454f5810f7e603cbd02daa036scroggo{
723965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
733965825b97a5809454f5810f7e603cbd02daa036scroggo      return info_ptr->bit_depth;
743965825b97a5809454f5810f7e603cbd02daa036scroggo
753965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
763965825b97a5809454f5810f7e603cbd02daa036scroggo}
773965825b97a5809454f5810f7e603cbd02daa036scroggo
783965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI
793965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_color_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
803965825b97a5809454f5810f7e603cbd02daa036scroggo{
813965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
823965825b97a5809454f5810f7e603cbd02daa036scroggo      return info_ptr->color_type;
833965825b97a5809454f5810f7e603cbd02daa036scroggo
843965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
853965825b97a5809454f5810f7e603cbd02daa036scroggo}
863965825b97a5809454f5810f7e603cbd02daa036scroggo
873965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI
883965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_filter_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
893965825b97a5809454f5810f7e603cbd02daa036scroggo{
903965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
913965825b97a5809454f5810f7e603cbd02daa036scroggo      return info_ptr->filter_type;
923965825b97a5809454f5810f7e603cbd02daa036scroggo
933965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
943965825b97a5809454f5810f7e603cbd02daa036scroggo}
953965825b97a5809454f5810f7e603cbd02daa036scroggo
963965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI
973965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_interlace_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
983965825b97a5809454f5810f7e603cbd02daa036scroggo{
993965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
1003965825b97a5809454f5810f7e603cbd02daa036scroggo      return info_ptr->interlace_type;
1013965825b97a5809454f5810f7e603cbd02daa036scroggo
1023965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
1033965825b97a5809454f5810f7e603cbd02daa036scroggo}
1043965825b97a5809454f5810f7e603cbd02daa036scroggo
1053965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI
1063965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_compression_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
1073965825b97a5809454f5810f7e603cbd02daa036scroggo{
1083965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
1093965825b97a5809454f5810f7e603cbd02daa036scroggo      return info_ptr->compression_type;
1103965825b97a5809454f5810f7e603cbd02daa036scroggo
1113965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
1123965825b97a5809454f5810f7e603cbd02daa036scroggo}
1133965825b97a5809454f5810f7e603cbd02daa036scroggo
1143965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
1153965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp
1163965825b97a5809454f5810f7e603cbd02daa036scroggo   info_ptr)
1173965825b97a5809454f5810f7e603cbd02daa036scroggo{
1183965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pHYs_SUPPORTED
1193965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
1203965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_pHYs) != 0)
1213965825b97a5809454f5810f7e603cbd02daa036scroggo      {
1223965825b97a5809454f5810f7e603cbd02daa036scroggo         png_debug1(1, "in %s retrieval function",
1233965825b97a5809454f5810f7e603cbd02daa036scroggo             "png_get_x_pixels_per_meter");
1243965825b97a5809454f5810f7e603cbd02daa036scroggo
1253965825b97a5809454f5810f7e603cbd02daa036scroggo         if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
1263965825b97a5809454f5810f7e603cbd02daa036scroggo            return (info_ptr->x_pixels_per_unit);
1273965825b97a5809454f5810f7e603cbd02daa036scroggo      }
1283965825b97a5809454f5810f7e603cbd02daa036scroggo#else
1293965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(png_ptr)
1303965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(info_ptr)
1313965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
1323965825b97a5809454f5810f7e603cbd02daa036scroggo
1333965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
1343965825b97a5809454f5810f7e603cbd02daa036scroggo}
1353965825b97a5809454f5810f7e603cbd02daa036scroggo
1363965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
1373965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp
1383965825b97a5809454f5810f7e603cbd02daa036scroggo    info_ptr)
1393965825b97a5809454f5810f7e603cbd02daa036scroggo{
1403965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pHYs_SUPPORTED
1413965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
1423965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_pHYs) != 0)
1433965825b97a5809454f5810f7e603cbd02daa036scroggo   {
1443965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function",
1453965825b97a5809454f5810f7e603cbd02daa036scroggo          "png_get_y_pixels_per_meter");
1463965825b97a5809454f5810f7e603cbd02daa036scroggo
1473965825b97a5809454f5810f7e603cbd02daa036scroggo      if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
1483965825b97a5809454f5810f7e603cbd02daa036scroggo         return (info_ptr->y_pixels_per_unit);
1493965825b97a5809454f5810f7e603cbd02daa036scroggo   }
1503965825b97a5809454f5810f7e603cbd02daa036scroggo#else
1513965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(png_ptr)
1523965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(info_ptr)
1533965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
1543965825b97a5809454f5810f7e603cbd02daa036scroggo
1553965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
1563965825b97a5809454f5810f7e603cbd02daa036scroggo}
1573965825b97a5809454f5810f7e603cbd02daa036scroggo
1583965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
1593965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp info_ptr)
1603965825b97a5809454f5810f7e603cbd02daa036scroggo{
1613965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pHYs_SUPPORTED
1623965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
1633965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_pHYs) != 0)
1643965825b97a5809454f5810f7e603cbd02daa036scroggo   {
1653965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "png_get_pixels_per_meter");
1663965825b97a5809454f5810f7e603cbd02daa036scroggo
1673965825b97a5809454f5810f7e603cbd02daa036scroggo      if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER &&
1683965825b97a5809454f5810f7e603cbd02daa036scroggo          info_ptr->x_pixels_per_unit == info_ptr->y_pixels_per_unit)
1693965825b97a5809454f5810f7e603cbd02daa036scroggo         return (info_ptr->x_pixels_per_unit);
1703965825b97a5809454f5810f7e603cbd02daa036scroggo   }
1713965825b97a5809454f5810f7e603cbd02daa036scroggo#else
1723965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(png_ptr)
1733965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(info_ptr)
1743965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
1753965825b97a5809454f5810f7e603cbd02daa036scroggo
1763965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
1773965825b97a5809454f5810f7e603cbd02daa036scroggo}
1783965825b97a5809454f5810f7e603cbd02daa036scroggo
1793965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FLOATING_POINT_SUPPORTED
1803965825b97a5809454f5810f7e603cbd02daa036scroggofloat PNGAPI
1813965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pixel_aspect_ratio(png_const_structrp png_ptr, png_const_inforp
1823965825b97a5809454f5810f7e603cbd02daa036scroggo   info_ptr)
1833965825b97a5809454f5810f7e603cbd02daa036scroggo{
1843965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_READ_pHYs_SUPPORTED
1853965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
1863965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_pHYs) != 0)
1873965825b97a5809454f5810f7e603cbd02daa036scroggo   {
1883965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio");
1893965825b97a5809454f5810f7e603cbd02daa036scroggo
1903965825b97a5809454f5810f7e603cbd02daa036scroggo      if (info_ptr->x_pixels_per_unit != 0)
1913965825b97a5809454f5810f7e603cbd02daa036scroggo         return ((float)((float)info_ptr->y_pixels_per_unit
1923965825b97a5809454f5810f7e603cbd02daa036scroggo             /(float)info_ptr->x_pixels_per_unit));
1933965825b97a5809454f5810f7e603cbd02daa036scroggo   }
1943965825b97a5809454f5810f7e603cbd02daa036scroggo#else
1953965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(png_ptr)
1963965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(info_ptr)
1973965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
1983965825b97a5809454f5810f7e603cbd02daa036scroggo
1993965825b97a5809454f5810f7e603cbd02daa036scroggo   return ((float)0.0);
2003965825b97a5809454f5810f7e603cbd02daa036scroggo}
2013965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
2023965825b97a5809454f5810f7e603cbd02daa036scroggo
2033965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FIXED_POINT_SUPPORTED
2043965825b97a5809454f5810f7e603cbd02daa036scroggopng_fixed_point PNGAPI
2053965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pixel_aspect_ratio_fixed(png_const_structrp png_ptr,
2063965825b97a5809454f5810f7e603cbd02daa036scroggo    png_const_inforp info_ptr)
2073965825b97a5809454f5810f7e603cbd02daa036scroggo{
2083965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_READ_pHYs_SUPPORTED
2093965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
2103965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_pHYs) != 0 &&
2113965825b97a5809454f5810f7e603cbd02daa036scroggo       info_ptr->x_pixels_per_unit > 0 && info_ptr->y_pixels_per_unit > 0 &&
2123965825b97a5809454f5810f7e603cbd02daa036scroggo       info_ptr->x_pixels_per_unit <= PNG_UINT_31_MAX &&
2133965825b97a5809454f5810f7e603cbd02daa036scroggo       info_ptr->y_pixels_per_unit <= PNG_UINT_31_MAX)
2143965825b97a5809454f5810f7e603cbd02daa036scroggo   {
2153965825b97a5809454f5810f7e603cbd02daa036scroggo      png_fixed_point res;
2163965825b97a5809454f5810f7e603cbd02daa036scroggo
2173965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio_fixed");
2183965825b97a5809454f5810f7e603cbd02daa036scroggo
2193965825b97a5809454f5810f7e603cbd02daa036scroggo      /* The following casts work because a PNG 4 byte integer only has a valid
2203965825b97a5809454f5810f7e603cbd02daa036scroggo       * range of 0..2^31-1; otherwise the cast might overflow.
2213965825b97a5809454f5810f7e603cbd02daa036scroggo       */
2223965825b97a5809454f5810f7e603cbd02daa036scroggo      if (png_muldiv(&res, (png_int_32)info_ptr->y_pixels_per_unit, PNG_FP_1,
2233965825b97a5809454f5810f7e603cbd02daa036scroggo          (png_int_32)info_ptr->x_pixels_per_unit) != 0)
2243965825b97a5809454f5810f7e603cbd02daa036scroggo         return res;
2253965825b97a5809454f5810f7e603cbd02daa036scroggo   }
2263965825b97a5809454f5810f7e603cbd02daa036scroggo#else
2273965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(png_ptr)
2283965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(info_ptr)
2293965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
2303965825b97a5809454f5810f7e603cbd02daa036scroggo
2313965825b97a5809454f5810f7e603cbd02daa036scroggo   return 0;
2323965825b97a5809454f5810f7e603cbd02daa036scroggo}
2333965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
2343965825b97a5809454f5810f7e603cbd02daa036scroggo
2353965825b97a5809454f5810f7e603cbd02daa036scroggopng_int_32 PNGAPI
2363965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr)
2373965825b97a5809454f5810f7e603cbd02daa036scroggo{
2383965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_oFFs_SUPPORTED
2393965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
2403965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_oFFs) != 0)
2413965825b97a5809454f5810f7e603cbd02daa036scroggo   {
2423965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns");
2433965825b97a5809454f5810f7e603cbd02daa036scroggo
2443965825b97a5809454f5810f7e603cbd02daa036scroggo      if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER)
2453965825b97a5809454f5810f7e603cbd02daa036scroggo         return (info_ptr->x_offset);
2463965825b97a5809454f5810f7e603cbd02daa036scroggo   }
2473965825b97a5809454f5810f7e603cbd02daa036scroggo#else
2483965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(png_ptr)
2493965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(info_ptr)
2503965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
2513965825b97a5809454f5810f7e603cbd02daa036scroggo
2523965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
2533965825b97a5809454f5810f7e603cbd02daa036scroggo}
2543965825b97a5809454f5810f7e603cbd02daa036scroggo
2553965825b97a5809454f5810f7e603cbd02daa036scroggopng_int_32 PNGAPI
2563965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr)
2573965825b97a5809454f5810f7e603cbd02daa036scroggo{
2583965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_oFFs_SUPPORTED
2593965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
2603965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_oFFs) != 0)
2613965825b97a5809454f5810f7e603cbd02daa036scroggo   {
2623965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns");
2633965825b97a5809454f5810f7e603cbd02daa036scroggo
2643965825b97a5809454f5810f7e603cbd02daa036scroggo      if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER)
2653965825b97a5809454f5810f7e603cbd02daa036scroggo         return (info_ptr->y_offset);
2663965825b97a5809454f5810f7e603cbd02daa036scroggo   }
2673965825b97a5809454f5810f7e603cbd02daa036scroggo#else
2683965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(png_ptr)
2693965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(info_ptr)
2703965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
2713965825b97a5809454f5810f7e603cbd02daa036scroggo
2723965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
2733965825b97a5809454f5810f7e603cbd02daa036scroggo}
2743965825b97a5809454f5810f7e603cbd02daa036scroggo
2753965825b97a5809454f5810f7e603cbd02daa036scroggopng_int_32 PNGAPI
2763965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
2773965825b97a5809454f5810f7e603cbd02daa036scroggo{
2783965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_oFFs_SUPPORTED
2793965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
2803965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_oFFs) != 0)
2813965825b97a5809454f5810f7e603cbd02daa036scroggo   {
2823965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "png_get_x_offset_pixels");
2833965825b97a5809454f5810f7e603cbd02daa036scroggo
2843965825b97a5809454f5810f7e603cbd02daa036scroggo      if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL)
2853965825b97a5809454f5810f7e603cbd02daa036scroggo         return (info_ptr->x_offset);
2863965825b97a5809454f5810f7e603cbd02daa036scroggo   }
2873965825b97a5809454f5810f7e603cbd02daa036scroggo#else
2883965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(png_ptr)
2893965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(info_ptr)
2903965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
2913965825b97a5809454f5810f7e603cbd02daa036scroggo
2923965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
2933965825b97a5809454f5810f7e603cbd02daa036scroggo}
2943965825b97a5809454f5810f7e603cbd02daa036scroggo
2953965825b97a5809454f5810f7e603cbd02daa036scroggopng_int_32 PNGAPI
2963965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
2973965825b97a5809454f5810f7e603cbd02daa036scroggo{
2983965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_oFFs_SUPPORTED
2993965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
3003965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_oFFs) != 0)
3013965825b97a5809454f5810f7e603cbd02daa036scroggo   {
3023965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "png_get_y_offset_pixels");
3033965825b97a5809454f5810f7e603cbd02daa036scroggo
3043965825b97a5809454f5810f7e603cbd02daa036scroggo      if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL)
3053965825b97a5809454f5810f7e603cbd02daa036scroggo         return (info_ptr->y_offset);
3063965825b97a5809454f5810f7e603cbd02daa036scroggo   }
3073965825b97a5809454f5810f7e603cbd02daa036scroggo#else
3083965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(png_ptr)
3093965825b97a5809454f5810f7e603cbd02daa036scroggo   PNG_UNUSED(info_ptr)
3103965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
3113965825b97a5809454f5810f7e603cbd02daa036scroggo
3123965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
3133965825b97a5809454f5810f7e603cbd02daa036scroggo}
3143965825b97a5809454f5810f7e603cbd02daa036scroggo
3153965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_INCH_CONVERSIONS_SUPPORTED
3163965825b97a5809454f5810f7e603cbd02daa036scroggostatic png_uint_32
3173965825b97a5809454f5810f7e603cbd02daa036scroggoppi_from_ppm(png_uint_32 ppm)
3183965825b97a5809454f5810f7e603cbd02daa036scroggo{
3193965825b97a5809454f5810f7e603cbd02daa036scroggo#if 0
3203965825b97a5809454f5810f7e603cbd02daa036scroggo   /* The conversion is *(2.54/100), in binary (32 digits):
3213965825b97a5809454f5810f7e603cbd02daa036scroggo    * .00000110100000001001110101001001
3223965825b97a5809454f5810f7e603cbd02daa036scroggo    */
3233965825b97a5809454f5810f7e603cbd02daa036scroggo   png_uint_32 t1001, t1101;
3243965825b97a5809454f5810f7e603cbd02daa036scroggo   ppm >>= 1;                  /* .1 */
3253965825b97a5809454f5810f7e603cbd02daa036scroggo   t1001 = ppm + (ppm >> 3);   /* .1001 */
3263965825b97a5809454f5810f7e603cbd02daa036scroggo   t1101 = t1001 + (ppm >> 1); /* .1101 */
3273965825b97a5809454f5810f7e603cbd02daa036scroggo   ppm >>= 20;                 /* .000000000000000000001 */
3283965825b97a5809454f5810f7e603cbd02daa036scroggo   t1101 += t1101 >> 15;       /* .1101000000000001101 */
3293965825b97a5809454f5810f7e603cbd02daa036scroggo   t1001 >>= 11;               /* .000000000001001 */
3303965825b97a5809454f5810f7e603cbd02daa036scroggo   t1001 += t1001 >> 12;       /* .000000000001001000000001001 */
3313965825b97a5809454f5810f7e603cbd02daa036scroggo   ppm += t1001;               /* .000000000001001000001001001 */
3323965825b97a5809454f5810f7e603cbd02daa036scroggo   ppm += t1101;               /* .110100000001001110101001001 */
3333965825b97a5809454f5810f7e603cbd02daa036scroggo   return (ppm + 16) >> 5;/* .00000110100000001001110101001001 */
3343965825b97a5809454f5810f7e603cbd02daa036scroggo#else
3353965825b97a5809454f5810f7e603cbd02daa036scroggo   /* The argument is a PNG unsigned integer, so it is not permitted
3363965825b97a5809454f5810f7e603cbd02daa036scroggo    * to be bigger than 2^31.
3373965825b97a5809454f5810f7e603cbd02daa036scroggo    */
3383965825b97a5809454f5810f7e603cbd02daa036scroggo   png_fixed_point result;
3393965825b97a5809454f5810f7e603cbd02daa036scroggo   if (ppm <= PNG_UINT_31_MAX && png_muldiv(&result, (png_int_32)ppm, 127,
3403965825b97a5809454f5810f7e603cbd02daa036scroggo       5000) != 0)
3413965825b97a5809454f5810f7e603cbd02daa036scroggo      return result;
3423965825b97a5809454f5810f7e603cbd02daa036scroggo
3433965825b97a5809454f5810f7e603cbd02daa036scroggo   /* Overflow. */
3443965825b97a5809454f5810f7e603cbd02daa036scroggo   return 0;
3453965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
3463965825b97a5809454f5810f7e603cbd02daa036scroggo}
3473965825b97a5809454f5810f7e603cbd02daa036scroggo
3483965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
3493965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
3503965825b97a5809454f5810f7e603cbd02daa036scroggo{
3513965825b97a5809454f5810f7e603cbd02daa036scroggo   return ppi_from_ppm(png_get_pixels_per_meter(png_ptr, info_ptr));
3523965825b97a5809454f5810f7e603cbd02daa036scroggo}
3533965825b97a5809454f5810f7e603cbd02daa036scroggo
3543965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
3553965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
3563965825b97a5809454f5810f7e603cbd02daa036scroggo{
3573965825b97a5809454f5810f7e603cbd02daa036scroggo   return ppi_from_ppm(png_get_x_pixels_per_meter(png_ptr, info_ptr));
3583965825b97a5809454f5810f7e603cbd02daa036scroggo}
3593965825b97a5809454f5810f7e603cbd02daa036scroggo
3603965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
3613965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
3623965825b97a5809454f5810f7e603cbd02daa036scroggo{
3633965825b97a5809454f5810f7e603cbd02daa036scroggo   return ppi_from_ppm(png_get_y_pixels_per_meter(png_ptr, info_ptr));
3643965825b97a5809454f5810f7e603cbd02daa036scroggo}
3653965825b97a5809454f5810f7e603cbd02daa036scroggo
3663965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FIXED_POINT_SUPPORTED
3673965825b97a5809454f5810f7e603cbd02daa036scroggostatic png_fixed_point
3683965825b97a5809454f5810f7e603cbd02daa036scroggopng_fixed_inches_from_microns(png_const_structrp png_ptr, png_int_32 microns)
3693965825b97a5809454f5810f7e603cbd02daa036scroggo{
3703965825b97a5809454f5810f7e603cbd02daa036scroggo   /* Convert from metres * 1,000,000 to inches * 100,000, meters to
3713965825b97a5809454f5810f7e603cbd02daa036scroggo    * inches is simply *(100/2.54), so we want *(10/2.54) == 500/127.
3723965825b97a5809454f5810f7e603cbd02daa036scroggo    * Notice that this can overflow - a warning is output and 0 is
3733965825b97a5809454f5810f7e603cbd02daa036scroggo    * returned.
3743965825b97a5809454f5810f7e603cbd02daa036scroggo    */
3753965825b97a5809454f5810f7e603cbd02daa036scroggo   return png_muldiv_warn(png_ptr, microns, 500, 127);
3763965825b97a5809454f5810f7e603cbd02daa036scroggo}
3773965825b97a5809454f5810f7e603cbd02daa036scroggo
3783965825b97a5809454f5810f7e603cbd02daa036scroggopng_fixed_point PNGAPI
3793965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_offset_inches_fixed(png_const_structrp png_ptr,
3803965825b97a5809454f5810f7e603cbd02daa036scroggo    png_const_inforp info_ptr)
3813965825b97a5809454f5810f7e603cbd02daa036scroggo{
3823965825b97a5809454f5810f7e603cbd02daa036scroggo   return png_fixed_inches_from_microns(png_ptr,
3833965825b97a5809454f5810f7e603cbd02daa036scroggo       png_get_x_offset_microns(png_ptr, info_ptr));
3843965825b97a5809454f5810f7e603cbd02daa036scroggo}
3853965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
3863965825b97a5809454f5810f7e603cbd02daa036scroggo
3873965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FIXED_POINT_SUPPORTED
3883965825b97a5809454f5810f7e603cbd02daa036scroggopng_fixed_point PNGAPI
3893965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_offset_inches_fixed(png_const_structrp png_ptr,
3903965825b97a5809454f5810f7e603cbd02daa036scroggo    png_const_inforp info_ptr)
3913965825b97a5809454f5810f7e603cbd02daa036scroggo{
3923965825b97a5809454f5810f7e603cbd02daa036scroggo   return png_fixed_inches_from_microns(png_ptr,
3933965825b97a5809454f5810f7e603cbd02daa036scroggo       png_get_y_offset_microns(png_ptr, info_ptr));
3943965825b97a5809454f5810f7e603cbd02daa036scroggo}
3953965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
3963965825b97a5809454f5810f7e603cbd02daa036scroggo
3973965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FLOATING_POINT_SUPPORTED
3983965825b97a5809454f5810f7e603cbd02daa036scroggofloat PNGAPI
3993965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr)
4003965825b97a5809454f5810f7e603cbd02daa036scroggo{
4013965825b97a5809454f5810f7e603cbd02daa036scroggo   /* To avoid the overflow do the conversion directly in floating
4023965825b97a5809454f5810f7e603cbd02daa036scroggo    * point.
4033965825b97a5809454f5810f7e603cbd02daa036scroggo    */
4043965825b97a5809454f5810f7e603cbd02daa036scroggo   return (float)(png_get_x_offset_microns(png_ptr, info_ptr) * .00003937);
4053965825b97a5809454f5810f7e603cbd02daa036scroggo}
4063965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
4073965825b97a5809454f5810f7e603cbd02daa036scroggo
4083965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FLOATING_POINT_SUPPORTED
4093965825b97a5809454f5810f7e603cbd02daa036scroggofloat PNGAPI
4103965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr)
4113965825b97a5809454f5810f7e603cbd02daa036scroggo{
4123965825b97a5809454f5810f7e603cbd02daa036scroggo   /* To avoid the overflow do the conversion directly in floating
4133965825b97a5809454f5810f7e603cbd02daa036scroggo    * point.
4143965825b97a5809454f5810f7e603cbd02daa036scroggo    */
4153965825b97a5809454f5810f7e603cbd02daa036scroggo   return (float)(png_get_y_offset_microns(png_ptr, info_ptr) * .00003937);
4163965825b97a5809454f5810f7e603cbd02daa036scroggo}
4173965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
4183965825b97a5809454f5810f7e603cbd02daa036scroggo
4193965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pHYs_SUPPORTED
4203965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
4213965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pHYs_dpi(png_const_structrp png_ptr, png_const_inforp info_ptr,
4223965825b97a5809454f5810f7e603cbd02daa036scroggo    png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
4233965825b97a5809454f5810f7e603cbd02daa036scroggo{
4243965825b97a5809454f5810f7e603cbd02daa036scroggo   png_uint_32 retval = 0;
4253965825b97a5809454f5810f7e603cbd02daa036scroggo
4263965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
4273965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_pHYs) != 0)
4283965825b97a5809454f5810f7e603cbd02daa036scroggo   {
4293965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "pHYs");
4303965825b97a5809454f5810f7e603cbd02daa036scroggo
4313965825b97a5809454f5810f7e603cbd02daa036scroggo      if (res_x != NULL)
4323965825b97a5809454f5810f7e603cbd02daa036scroggo      {
4333965825b97a5809454f5810f7e603cbd02daa036scroggo         *res_x = info_ptr->x_pixels_per_unit;
4343965825b97a5809454f5810f7e603cbd02daa036scroggo         retval |= PNG_INFO_pHYs;
4353965825b97a5809454f5810f7e603cbd02daa036scroggo      }
4363965825b97a5809454f5810f7e603cbd02daa036scroggo
4373965825b97a5809454f5810f7e603cbd02daa036scroggo      if (res_y != NULL)
4383965825b97a5809454f5810f7e603cbd02daa036scroggo      {
4393965825b97a5809454f5810f7e603cbd02daa036scroggo         *res_y = info_ptr->y_pixels_per_unit;
4403965825b97a5809454f5810f7e603cbd02daa036scroggo         retval |= PNG_INFO_pHYs;
4413965825b97a5809454f5810f7e603cbd02daa036scroggo      }
4423965825b97a5809454f5810f7e603cbd02daa036scroggo
4433965825b97a5809454f5810f7e603cbd02daa036scroggo      if (unit_type != NULL)
4443965825b97a5809454f5810f7e603cbd02daa036scroggo      {
4453965825b97a5809454f5810f7e603cbd02daa036scroggo         *unit_type = (int)info_ptr->phys_unit_type;
4463965825b97a5809454f5810f7e603cbd02daa036scroggo         retval |= PNG_INFO_pHYs;
4473965825b97a5809454f5810f7e603cbd02daa036scroggo
4483965825b97a5809454f5810f7e603cbd02daa036scroggo         if (*unit_type == 1)
4493965825b97a5809454f5810f7e603cbd02daa036scroggo         {
4503965825b97a5809454f5810f7e603cbd02daa036scroggo            if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50);
4513965825b97a5809454f5810f7e603cbd02daa036scroggo            if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50);
4523965825b97a5809454f5810f7e603cbd02daa036scroggo         }
4533965825b97a5809454f5810f7e603cbd02daa036scroggo      }
4543965825b97a5809454f5810f7e603cbd02daa036scroggo   }
4553965825b97a5809454f5810f7e603cbd02daa036scroggo
4563965825b97a5809454f5810f7e603cbd02daa036scroggo   return (retval);
4573965825b97a5809454f5810f7e603cbd02daa036scroggo}
4583965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* pHYs */
4593965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* INCH_CONVERSIONS */
4603965825b97a5809454f5810f7e603cbd02daa036scroggo
4613965825b97a5809454f5810f7e603cbd02daa036scroggo/* png_get_channels really belongs in here, too, but it's been around longer */
4623965825b97a5809454f5810f7e603cbd02daa036scroggo
4633965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* EASY_ACCESS */
4643965825b97a5809454f5810f7e603cbd02daa036scroggo
4653965825b97a5809454f5810f7e603cbd02daa036scroggo
4663965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI
4673965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_channels(png_const_structrp png_ptr, png_const_inforp info_ptr)
4683965825b97a5809454f5810f7e603cbd02daa036scroggo{
4693965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
4703965825b97a5809454f5810f7e603cbd02daa036scroggo      return(info_ptr->channels);
4713965825b97a5809454f5810f7e603cbd02daa036scroggo
4723965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
4733965825b97a5809454f5810f7e603cbd02daa036scroggo}
4743965825b97a5809454f5810f7e603cbd02daa036scroggo
4753965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_READ_SUPPORTED
4763965825b97a5809454f5810f7e603cbd02daa036scroggopng_const_bytep PNGAPI
4773965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_signature(png_const_structrp png_ptr, png_const_inforp info_ptr)
4783965825b97a5809454f5810f7e603cbd02daa036scroggo{
4793965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
4803965825b97a5809454f5810f7e603cbd02daa036scroggo      return(info_ptr->signature);
4813965825b97a5809454f5810f7e603cbd02daa036scroggo
4823965825b97a5809454f5810f7e603cbd02daa036scroggo   return (NULL);
4833965825b97a5809454f5810f7e603cbd02daa036scroggo}
4843965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
4853965825b97a5809454f5810f7e603cbd02daa036scroggo
4863965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_bKGD_SUPPORTED
4873965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
4883965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_bKGD(png_const_structrp png_ptr, png_inforp info_ptr,
4893965825b97a5809454f5810f7e603cbd02daa036scroggo   png_color_16p *background)
4903965825b97a5809454f5810f7e603cbd02daa036scroggo{
4913965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
4923965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_bKGD) != 0 &&
4933965825b97a5809454f5810f7e603cbd02daa036scroggo       background != NULL)
4943965825b97a5809454f5810f7e603cbd02daa036scroggo   {
4953965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "bKGD");
4963965825b97a5809454f5810f7e603cbd02daa036scroggo
4973965825b97a5809454f5810f7e603cbd02daa036scroggo      *background = &(info_ptr->background);
4983965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_bKGD);
4993965825b97a5809454f5810f7e603cbd02daa036scroggo   }
5003965825b97a5809454f5810f7e603cbd02daa036scroggo
5013965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
5023965825b97a5809454f5810f7e603cbd02daa036scroggo}
5033965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
5043965825b97a5809454f5810f7e603cbd02daa036scroggo
5053965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_cHRM_SUPPORTED
5063965825b97a5809454f5810f7e603cbd02daa036scroggo/* The XYZ APIs were added in 1.5.5 to take advantage of the code added at the
5073965825b97a5809454f5810f7e603cbd02daa036scroggo * same time to correct the rgb grayscale coefficient defaults obtained from the
5083965825b97a5809454f5810f7e603cbd02daa036scroggo * cHRM chunk in 1.5.4
5093965825b97a5809454f5810f7e603cbd02daa036scroggo */
5103965825b97a5809454f5810f7e603cbd02daa036scroggo#  ifdef PNG_FLOATING_POINT_SUPPORTED
5113965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
5123965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr,
5133965825b97a5809454f5810f7e603cbd02daa036scroggo    double *white_x, double *white_y, double *red_x, double *red_y,
5143965825b97a5809454f5810f7e603cbd02daa036scroggo    double *green_x, double *green_y, double *blue_x, double *blue_y)
5153965825b97a5809454f5810f7e603cbd02daa036scroggo{
5163965825b97a5809454f5810f7e603cbd02daa036scroggo   /* Quiet API change: this code used to only return the end points if a cHRM
5173965825b97a5809454f5810f7e603cbd02daa036scroggo    * chunk was present, but the end points can also come from iCCP or sRGB
5183965825b97a5809454f5810f7e603cbd02daa036scroggo    * chunks, so in 1.6.0 the png_get_ APIs return the end points regardless and
5193965825b97a5809454f5810f7e603cbd02daa036scroggo    * the png_set_ APIs merely check that set end points are mutually
5203965825b97a5809454f5810f7e603cbd02daa036scroggo    * consistent.
5213965825b97a5809454f5810f7e603cbd02daa036scroggo    */
5223965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
5233965825b97a5809454f5810f7e603cbd02daa036scroggo      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
5243965825b97a5809454f5810f7e603cbd02daa036scroggo   {
5253965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "cHRM");
5263965825b97a5809454f5810f7e603cbd02daa036scroggo
5273965825b97a5809454f5810f7e603cbd02daa036scroggo      if (white_x != NULL)
5283965825b97a5809454f5810f7e603cbd02daa036scroggo         *white_x = png_float(png_ptr,
5293965825b97a5809454f5810f7e603cbd02daa036scroggo            info_ptr->colorspace.end_points_xy.whitex, "cHRM white X");
5303965825b97a5809454f5810f7e603cbd02daa036scroggo      if (white_y != NULL)
5313965825b97a5809454f5810f7e603cbd02daa036scroggo         *white_y = png_float(png_ptr,
5323965825b97a5809454f5810f7e603cbd02daa036scroggo            info_ptr->colorspace.end_points_xy.whitey, "cHRM white Y");
5333965825b97a5809454f5810f7e603cbd02daa036scroggo      if (red_x != NULL)
5343965825b97a5809454f5810f7e603cbd02daa036scroggo         *red_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redx,
5353965825b97a5809454f5810f7e603cbd02daa036scroggo            "cHRM red X");
5363965825b97a5809454f5810f7e603cbd02daa036scroggo      if (red_y != NULL)
5373965825b97a5809454f5810f7e603cbd02daa036scroggo         *red_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redy,
5383965825b97a5809454f5810f7e603cbd02daa036scroggo            "cHRM red Y");
5393965825b97a5809454f5810f7e603cbd02daa036scroggo      if (green_x != NULL)
5403965825b97a5809454f5810f7e603cbd02daa036scroggo         *green_x = png_float(png_ptr,
5413965825b97a5809454f5810f7e603cbd02daa036scroggo            info_ptr->colorspace.end_points_xy.greenx, "cHRM green X");
5423965825b97a5809454f5810f7e603cbd02daa036scroggo      if (green_y != NULL)
5433965825b97a5809454f5810f7e603cbd02daa036scroggo         *green_y = png_float(png_ptr,
5443965825b97a5809454f5810f7e603cbd02daa036scroggo            info_ptr->colorspace.end_points_xy.greeny, "cHRM green Y");
5453965825b97a5809454f5810f7e603cbd02daa036scroggo      if (blue_x != NULL)
5463965825b97a5809454f5810f7e603cbd02daa036scroggo         *blue_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluex,
5473965825b97a5809454f5810f7e603cbd02daa036scroggo            "cHRM blue X");
5483965825b97a5809454f5810f7e603cbd02daa036scroggo      if (blue_y != NULL)
5493965825b97a5809454f5810f7e603cbd02daa036scroggo         *blue_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluey,
5503965825b97a5809454f5810f7e603cbd02daa036scroggo            "cHRM blue Y");
5513965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_cHRM);
5523965825b97a5809454f5810f7e603cbd02daa036scroggo   }
5533965825b97a5809454f5810f7e603cbd02daa036scroggo
5543965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
5553965825b97a5809454f5810f7e603cbd02daa036scroggo}
5563965825b97a5809454f5810f7e603cbd02daa036scroggo
5573965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
5583965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr,
5593965825b97a5809454f5810f7e603cbd02daa036scroggo   double *red_X, double *red_Y, double *red_Z, double *green_X,
5603965825b97a5809454f5810f7e603cbd02daa036scroggo   double *green_Y, double *green_Z, double *blue_X, double *blue_Y,
5613965825b97a5809454f5810f7e603cbd02daa036scroggo   double *blue_Z)
5623965825b97a5809454f5810f7e603cbd02daa036scroggo{
5633965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
5643965825b97a5809454f5810f7e603cbd02daa036scroggo      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
5653965825b97a5809454f5810f7e603cbd02daa036scroggo   {
5663965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "cHRM_XYZ(float)");
5673965825b97a5809454f5810f7e603cbd02daa036scroggo
5683965825b97a5809454f5810f7e603cbd02daa036scroggo      if (red_X != NULL)
5693965825b97a5809454f5810f7e603cbd02daa036scroggo         *red_X = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_X,
5703965825b97a5809454f5810f7e603cbd02daa036scroggo            "cHRM red X");
5713965825b97a5809454f5810f7e603cbd02daa036scroggo      if (red_Y != NULL)
5723965825b97a5809454f5810f7e603cbd02daa036scroggo         *red_Y = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Y,
5733965825b97a5809454f5810f7e603cbd02daa036scroggo            "cHRM red Y");
5743965825b97a5809454f5810f7e603cbd02daa036scroggo      if (red_Z != NULL)
5753965825b97a5809454f5810f7e603cbd02daa036scroggo         *red_Z = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Z,
5763965825b97a5809454f5810f7e603cbd02daa036scroggo            "cHRM red Z");
5773965825b97a5809454f5810f7e603cbd02daa036scroggo      if (green_X != NULL)
5783965825b97a5809454f5810f7e603cbd02daa036scroggo         *green_X = png_float(png_ptr,
5793965825b97a5809454f5810f7e603cbd02daa036scroggo            info_ptr->colorspace.end_points_XYZ.green_X, "cHRM green X");
5803965825b97a5809454f5810f7e603cbd02daa036scroggo      if (green_Y != NULL)
5813965825b97a5809454f5810f7e603cbd02daa036scroggo         *green_Y = png_float(png_ptr,
5823965825b97a5809454f5810f7e603cbd02daa036scroggo            info_ptr->colorspace.end_points_XYZ.green_Y, "cHRM green Y");
5833965825b97a5809454f5810f7e603cbd02daa036scroggo      if (green_Z != NULL)
5843965825b97a5809454f5810f7e603cbd02daa036scroggo         *green_Z = png_float(png_ptr,
5853965825b97a5809454f5810f7e603cbd02daa036scroggo            info_ptr->colorspace.end_points_XYZ.green_Z, "cHRM green Z");
5863965825b97a5809454f5810f7e603cbd02daa036scroggo      if (blue_X != NULL)
5873965825b97a5809454f5810f7e603cbd02daa036scroggo         *blue_X = png_float(png_ptr,
5883965825b97a5809454f5810f7e603cbd02daa036scroggo            info_ptr->colorspace.end_points_XYZ.blue_X, "cHRM blue X");
5893965825b97a5809454f5810f7e603cbd02daa036scroggo      if (blue_Y != NULL)
5903965825b97a5809454f5810f7e603cbd02daa036scroggo         *blue_Y = png_float(png_ptr,
5913965825b97a5809454f5810f7e603cbd02daa036scroggo            info_ptr->colorspace.end_points_XYZ.blue_Y, "cHRM blue Y");
5923965825b97a5809454f5810f7e603cbd02daa036scroggo      if (blue_Z != NULL)
5933965825b97a5809454f5810f7e603cbd02daa036scroggo         *blue_Z = png_float(png_ptr,
5943965825b97a5809454f5810f7e603cbd02daa036scroggo            info_ptr->colorspace.end_points_XYZ.blue_Z, "cHRM blue Z");
5953965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_cHRM);
5963965825b97a5809454f5810f7e603cbd02daa036scroggo   }
5973965825b97a5809454f5810f7e603cbd02daa036scroggo
5983965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
5993965825b97a5809454f5810f7e603cbd02daa036scroggo}
6003965825b97a5809454f5810f7e603cbd02daa036scroggo#  endif
6013965825b97a5809454f5810f7e603cbd02daa036scroggo
6023965825b97a5809454f5810f7e603cbd02daa036scroggo#  ifdef PNG_FIXED_POINT_SUPPORTED
6033965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
6043965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_cHRM_XYZ_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
6053965825b97a5809454f5810f7e603cbd02daa036scroggo    png_fixed_point *int_red_X, png_fixed_point *int_red_Y,
6063965825b97a5809454f5810f7e603cbd02daa036scroggo    png_fixed_point *int_red_Z, png_fixed_point *int_green_X,
6073965825b97a5809454f5810f7e603cbd02daa036scroggo    png_fixed_point *int_green_Y, png_fixed_point *int_green_Z,
6083965825b97a5809454f5810f7e603cbd02daa036scroggo    png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y,
6093965825b97a5809454f5810f7e603cbd02daa036scroggo    png_fixed_point *int_blue_Z)
6103965825b97a5809454f5810f7e603cbd02daa036scroggo{
6113965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
6123965825b97a5809454f5810f7e603cbd02daa036scroggo      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
6133965825b97a5809454f5810f7e603cbd02daa036scroggo   {
6143965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "cHRM_XYZ");
6153965825b97a5809454f5810f7e603cbd02daa036scroggo
6163965825b97a5809454f5810f7e603cbd02daa036scroggo      if (int_red_X != NULL)
6173965825b97a5809454f5810f7e603cbd02daa036scroggo         *int_red_X = info_ptr->colorspace.end_points_XYZ.red_X;
6183965825b97a5809454f5810f7e603cbd02daa036scroggo      if (int_red_Y != NULL)
6193965825b97a5809454f5810f7e603cbd02daa036scroggo         *int_red_Y = info_ptr->colorspace.end_points_XYZ.red_Y;
6203965825b97a5809454f5810f7e603cbd02daa036scroggo      if (int_red_Z != NULL)
6213965825b97a5809454f5810f7e603cbd02daa036scroggo         *int_red_Z = info_ptr->colorspace.end_points_XYZ.red_Z;
6223965825b97a5809454f5810f7e603cbd02daa036scroggo      if (int_green_X != NULL)
6233965825b97a5809454f5810f7e603cbd02daa036scroggo         *int_green_X = info_ptr->colorspace.end_points_XYZ.green_X;
6243965825b97a5809454f5810f7e603cbd02daa036scroggo      if (int_green_Y != NULL)
6253965825b97a5809454f5810f7e603cbd02daa036scroggo         *int_green_Y = info_ptr->colorspace.end_points_XYZ.green_Y;
6263965825b97a5809454f5810f7e603cbd02daa036scroggo      if (int_green_Z != NULL)
6273965825b97a5809454f5810f7e603cbd02daa036scroggo         *int_green_Z = info_ptr->colorspace.end_points_XYZ.green_Z;
6283965825b97a5809454f5810f7e603cbd02daa036scroggo      if (int_blue_X != NULL)
6293965825b97a5809454f5810f7e603cbd02daa036scroggo         *int_blue_X = info_ptr->colorspace.end_points_XYZ.blue_X;
6303965825b97a5809454f5810f7e603cbd02daa036scroggo      if (int_blue_Y != NULL)
6313965825b97a5809454f5810f7e603cbd02daa036scroggo         *int_blue_Y = info_ptr->colorspace.end_points_XYZ.blue_Y;
6323965825b97a5809454f5810f7e603cbd02daa036scroggo      if (int_blue_Z != NULL)
6333965825b97a5809454f5810f7e603cbd02daa036scroggo         *int_blue_Z = info_ptr->colorspace.end_points_XYZ.blue_Z;
6343965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_cHRM);
6353965825b97a5809454f5810f7e603cbd02daa036scroggo   }
6363965825b97a5809454f5810f7e603cbd02daa036scroggo
6373965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
6383965825b97a5809454f5810f7e603cbd02daa036scroggo}
6393965825b97a5809454f5810f7e603cbd02daa036scroggo
6403965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
6413965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_cHRM_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
6423965825b97a5809454f5810f7e603cbd02daa036scroggo    png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x,
6433965825b97a5809454f5810f7e603cbd02daa036scroggo    png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y,
6443965825b97a5809454f5810f7e603cbd02daa036scroggo    png_fixed_point *blue_x, png_fixed_point *blue_y)
6453965825b97a5809454f5810f7e603cbd02daa036scroggo{
6463965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "cHRM");
6473965825b97a5809454f5810f7e603cbd02daa036scroggo
6483965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
6493965825b97a5809454f5810f7e603cbd02daa036scroggo      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
6503965825b97a5809454f5810f7e603cbd02daa036scroggo   {
6513965825b97a5809454f5810f7e603cbd02daa036scroggo      if (white_x != NULL)
6523965825b97a5809454f5810f7e603cbd02daa036scroggo         *white_x = info_ptr->colorspace.end_points_xy.whitex;
6533965825b97a5809454f5810f7e603cbd02daa036scroggo      if (white_y != NULL)
6543965825b97a5809454f5810f7e603cbd02daa036scroggo         *white_y = info_ptr->colorspace.end_points_xy.whitey;
6553965825b97a5809454f5810f7e603cbd02daa036scroggo      if (red_x != NULL)
6563965825b97a5809454f5810f7e603cbd02daa036scroggo         *red_x = info_ptr->colorspace.end_points_xy.redx;
6573965825b97a5809454f5810f7e603cbd02daa036scroggo      if (red_y != NULL)
6583965825b97a5809454f5810f7e603cbd02daa036scroggo         *red_y = info_ptr->colorspace.end_points_xy.redy;
6593965825b97a5809454f5810f7e603cbd02daa036scroggo      if (green_x != NULL)
6603965825b97a5809454f5810f7e603cbd02daa036scroggo         *green_x = info_ptr->colorspace.end_points_xy.greenx;
6613965825b97a5809454f5810f7e603cbd02daa036scroggo      if (green_y != NULL)
6623965825b97a5809454f5810f7e603cbd02daa036scroggo         *green_y = info_ptr->colorspace.end_points_xy.greeny;
6633965825b97a5809454f5810f7e603cbd02daa036scroggo      if (blue_x != NULL)
6643965825b97a5809454f5810f7e603cbd02daa036scroggo         *blue_x = info_ptr->colorspace.end_points_xy.bluex;
6653965825b97a5809454f5810f7e603cbd02daa036scroggo      if (blue_y != NULL)
6663965825b97a5809454f5810f7e603cbd02daa036scroggo         *blue_y = info_ptr->colorspace.end_points_xy.bluey;
6673965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_cHRM);
6683965825b97a5809454f5810f7e603cbd02daa036scroggo   }
6693965825b97a5809454f5810f7e603cbd02daa036scroggo
6703965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
6713965825b97a5809454f5810f7e603cbd02daa036scroggo}
6723965825b97a5809454f5810f7e603cbd02daa036scroggo#  endif
6733965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
6743965825b97a5809454f5810f7e603cbd02daa036scroggo
6753965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_gAMA_SUPPORTED
6763965825b97a5809454f5810f7e603cbd02daa036scroggo#  ifdef PNG_FIXED_POINT_SUPPORTED
6773965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
6783965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_gAMA_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
6793965825b97a5809454f5810f7e603cbd02daa036scroggo    png_fixed_point *file_gamma)
6803965825b97a5809454f5810f7e603cbd02daa036scroggo{
6813965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "gAMA");
6823965825b97a5809454f5810f7e603cbd02daa036scroggo
6833965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
6843965825b97a5809454f5810f7e603cbd02daa036scroggo      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 &&
6853965825b97a5809454f5810f7e603cbd02daa036scroggo      file_gamma != NULL)
6863965825b97a5809454f5810f7e603cbd02daa036scroggo   {
6873965825b97a5809454f5810f7e603cbd02daa036scroggo      *file_gamma = info_ptr->colorspace.gamma;
6883965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_gAMA);
6893965825b97a5809454f5810f7e603cbd02daa036scroggo   }
6903965825b97a5809454f5810f7e603cbd02daa036scroggo
6913965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
6923965825b97a5809454f5810f7e603cbd02daa036scroggo}
6933965825b97a5809454f5810f7e603cbd02daa036scroggo#  endif
6943965825b97a5809454f5810f7e603cbd02daa036scroggo
6953965825b97a5809454f5810f7e603cbd02daa036scroggo#  ifdef PNG_FLOATING_POINT_SUPPORTED
6963965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
6973965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_gAMA(png_const_structrp png_ptr, png_const_inforp info_ptr,
6983965825b97a5809454f5810f7e603cbd02daa036scroggo    double *file_gamma)
6993965825b97a5809454f5810f7e603cbd02daa036scroggo{
7003965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "gAMA(float)");
7013965825b97a5809454f5810f7e603cbd02daa036scroggo
7023965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
7033965825b97a5809454f5810f7e603cbd02daa036scroggo      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 &&
7043965825b97a5809454f5810f7e603cbd02daa036scroggo      file_gamma != NULL)
7053965825b97a5809454f5810f7e603cbd02daa036scroggo   {
7063965825b97a5809454f5810f7e603cbd02daa036scroggo      *file_gamma = png_float(png_ptr, info_ptr->colorspace.gamma,
7073965825b97a5809454f5810f7e603cbd02daa036scroggo         "png_get_gAMA");
7083965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_gAMA);
7093965825b97a5809454f5810f7e603cbd02daa036scroggo   }
7103965825b97a5809454f5810f7e603cbd02daa036scroggo
7113965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
7123965825b97a5809454f5810f7e603cbd02daa036scroggo}
7133965825b97a5809454f5810f7e603cbd02daa036scroggo#  endif
7143965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
7153965825b97a5809454f5810f7e603cbd02daa036scroggo
7163965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_sRGB_SUPPORTED
7173965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
7183965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sRGB(png_const_structrp png_ptr, png_const_inforp info_ptr,
7193965825b97a5809454f5810f7e603cbd02daa036scroggo    int *file_srgb_intent)
7203965825b97a5809454f5810f7e603cbd02daa036scroggo{
7213965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "sRGB");
7223965825b97a5809454f5810f7e603cbd02daa036scroggo
7233965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
7243965825b97a5809454f5810f7e603cbd02daa036scroggo      (info_ptr->valid & PNG_INFO_sRGB) != 0 && file_srgb_intent != NULL)
7253965825b97a5809454f5810f7e603cbd02daa036scroggo   {
7263965825b97a5809454f5810f7e603cbd02daa036scroggo      *file_srgb_intent = info_ptr->colorspace.rendering_intent;
7273965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_sRGB);
7283965825b97a5809454f5810f7e603cbd02daa036scroggo   }
7293965825b97a5809454f5810f7e603cbd02daa036scroggo
7303965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
7313965825b97a5809454f5810f7e603cbd02daa036scroggo}
7323965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
7333965825b97a5809454f5810f7e603cbd02daa036scroggo
7343965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_iCCP_SUPPORTED
7353965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
7363965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
7373965825b97a5809454f5810f7e603cbd02daa036scroggo    png_charpp name, int *compression_type,
7383965825b97a5809454f5810f7e603cbd02daa036scroggo    png_bytepp profile, png_uint_32 *proflen)
7393965825b97a5809454f5810f7e603cbd02daa036scroggo{
7403965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "iCCP");
7413965825b97a5809454f5810f7e603cbd02daa036scroggo
7423965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
7433965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_iCCP) != 0 &&
7443965825b97a5809454f5810f7e603cbd02daa036scroggo       name != NULL && compression_type != NULL && profile != NULL &&
7453965825b97a5809454f5810f7e603cbd02daa036scroggo           proflen != NULL)
7463965825b97a5809454f5810f7e603cbd02daa036scroggo   {
7473965825b97a5809454f5810f7e603cbd02daa036scroggo      *name = info_ptr->iccp_name;
7483965825b97a5809454f5810f7e603cbd02daa036scroggo      *profile = info_ptr->iccp_profile;
7493965825b97a5809454f5810f7e603cbd02daa036scroggo      *proflen = png_get_uint_32(info_ptr->iccp_profile);
7503965825b97a5809454f5810f7e603cbd02daa036scroggo      /* This is somewhat irrelevant since the profile data returned has
7513965825b97a5809454f5810f7e603cbd02daa036scroggo       * actually been uncompressed.
7523965825b97a5809454f5810f7e603cbd02daa036scroggo       */
7533965825b97a5809454f5810f7e603cbd02daa036scroggo      *compression_type = PNG_COMPRESSION_TYPE_BASE;
7543965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_iCCP);
7553965825b97a5809454f5810f7e603cbd02daa036scroggo   }
7563965825b97a5809454f5810f7e603cbd02daa036scroggo
7573965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
7583965825b97a5809454f5810f7e603cbd02daa036scroggo}
7593965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
7603965825b97a5809454f5810f7e603cbd02daa036scroggo
7613965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_sPLT_SUPPORTED
7623965825b97a5809454f5810f7e603cbd02daa036scroggoint PNGAPI
7633965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sPLT(png_const_structrp png_ptr, png_inforp info_ptr,
7643965825b97a5809454f5810f7e603cbd02daa036scroggo    png_sPLT_tpp spalettes)
7653965825b97a5809454f5810f7e603cbd02daa036scroggo{
7663965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
7673965825b97a5809454f5810f7e603cbd02daa036scroggo   {
7683965825b97a5809454f5810f7e603cbd02daa036scroggo      *spalettes = info_ptr->splt_palettes;
7693965825b97a5809454f5810f7e603cbd02daa036scroggo      return info_ptr->splt_palettes_num;
7703965825b97a5809454f5810f7e603cbd02daa036scroggo   }
7713965825b97a5809454f5810f7e603cbd02daa036scroggo
7723965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
7733965825b97a5809454f5810f7e603cbd02daa036scroggo}
7743965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
7753965825b97a5809454f5810f7e603cbd02daa036scroggo
7763965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_hIST_SUPPORTED
7773965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
7783965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_hIST(png_const_structrp png_ptr, png_inforp info_ptr,
7793965825b97a5809454f5810f7e603cbd02daa036scroggo    png_uint_16p *hist)
7803965825b97a5809454f5810f7e603cbd02daa036scroggo{
7813965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "hIST");
7823965825b97a5809454f5810f7e603cbd02daa036scroggo
7833965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
7843965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_hIST) != 0 && hist != NULL)
7853965825b97a5809454f5810f7e603cbd02daa036scroggo   {
7863965825b97a5809454f5810f7e603cbd02daa036scroggo      *hist = info_ptr->hist;
7873965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_hIST);
7883965825b97a5809454f5810f7e603cbd02daa036scroggo   }
7893965825b97a5809454f5810f7e603cbd02daa036scroggo
7903965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
7913965825b97a5809454f5810f7e603cbd02daa036scroggo}
7923965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
7933965825b97a5809454f5810f7e603cbd02daa036scroggo
7943965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
7953965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_IHDR(png_const_structrp png_ptr, png_const_inforp info_ptr,
7963965825b97a5809454f5810f7e603cbd02daa036scroggo    png_uint_32 *width, png_uint_32 *height, int *bit_depth,
7973965825b97a5809454f5810f7e603cbd02daa036scroggo    int *color_type, int *interlace_type, int *compression_type,
7983965825b97a5809454f5810f7e603cbd02daa036scroggo    int *filter_type)
7993965825b97a5809454f5810f7e603cbd02daa036scroggo{
8003965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "IHDR");
8013965825b97a5809454f5810f7e603cbd02daa036scroggo
8023965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr == NULL || info_ptr == NULL)
8033965825b97a5809454f5810f7e603cbd02daa036scroggo      return (0);
8043965825b97a5809454f5810f7e603cbd02daa036scroggo
8053965825b97a5809454f5810f7e603cbd02daa036scroggo   if (width != NULL)
8063965825b97a5809454f5810f7e603cbd02daa036scroggo       *width = info_ptr->width;
8073965825b97a5809454f5810f7e603cbd02daa036scroggo
8083965825b97a5809454f5810f7e603cbd02daa036scroggo   if (height != NULL)
8093965825b97a5809454f5810f7e603cbd02daa036scroggo       *height = info_ptr->height;
8103965825b97a5809454f5810f7e603cbd02daa036scroggo
8113965825b97a5809454f5810f7e603cbd02daa036scroggo   if (bit_depth != NULL)
8123965825b97a5809454f5810f7e603cbd02daa036scroggo       *bit_depth = info_ptr->bit_depth;
8133965825b97a5809454f5810f7e603cbd02daa036scroggo
8143965825b97a5809454f5810f7e603cbd02daa036scroggo   if (color_type != NULL)
8153965825b97a5809454f5810f7e603cbd02daa036scroggo       *color_type = info_ptr->color_type;
8163965825b97a5809454f5810f7e603cbd02daa036scroggo
8173965825b97a5809454f5810f7e603cbd02daa036scroggo   if (compression_type != NULL)
8183965825b97a5809454f5810f7e603cbd02daa036scroggo      *compression_type = info_ptr->compression_type;
8193965825b97a5809454f5810f7e603cbd02daa036scroggo
8203965825b97a5809454f5810f7e603cbd02daa036scroggo   if (filter_type != NULL)
8213965825b97a5809454f5810f7e603cbd02daa036scroggo      *filter_type = info_ptr->filter_type;
8223965825b97a5809454f5810f7e603cbd02daa036scroggo
8233965825b97a5809454f5810f7e603cbd02daa036scroggo   if (interlace_type != NULL)
8243965825b97a5809454f5810f7e603cbd02daa036scroggo      *interlace_type = info_ptr->interlace_type;
8253965825b97a5809454f5810f7e603cbd02daa036scroggo
8263965825b97a5809454f5810f7e603cbd02daa036scroggo   /* This is redundant if we can be sure that the info_ptr values were all
8273965825b97a5809454f5810f7e603cbd02daa036scroggo    * assigned in png_set_IHDR().  We do the check anyhow in case an
8283965825b97a5809454f5810f7e603cbd02daa036scroggo    * application has ignored our advice not to mess with the members
8293965825b97a5809454f5810f7e603cbd02daa036scroggo    * of info_ptr directly.
8303965825b97a5809454f5810f7e603cbd02daa036scroggo    */
8313965825b97a5809454f5810f7e603cbd02daa036scroggo   png_check_IHDR(png_ptr, info_ptr->width, info_ptr->height,
8323965825b97a5809454f5810f7e603cbd02daa036scroggo       info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type,
8333965825b97a5809454f5810f7e603cbd02daa036scroggo       info_ptr->compression_type, info_ptr->filter_type);
8343965825b97a5809454f5810f7e603cbd02daa036scroggo
8353965825b97a5809454f5810f7e603cbd02daa036scroggo   return (1);
8363965825b97a5809454f5810f7e603cbd02daa036scroggo}
8373965825b97a5809454f5810f7e603cbd02daa036scroggo
8383965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_oFFs_SUPPORTED
8393965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
8403965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_oFFs(png_const_structrp png_ptr, png_const_inforp info_ptr,
8413965825b97a5809454f5810f7e603cbd02daa036scroggo    png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)
8423965825b97a5809454f5810f7e603cbd02daa036scroggo{
8433965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "oFFs");
8443965825b97a5809454f5810f7e603cbd02daa036scroggo
8453965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
8463965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_oFFs) != 0 &&
8473965825b97a5809454f5810f7e603cbd02daa036scroggo       offset_x != NULL && offset_y != NULL && unit_type != NULL)
8483965825b97a5809454f5810f7e603cbd02daa036scroggo   {
8493965825b97a5809454f5810f7e603cbd02daa036scroggo      *offset_x = info_ptr->x_offset;
8503965825b97a5809454f5810f7e603cbd02daa036scroggo      *offset_y = info_ptr->y_offset;
8513965825b97a5809454f5810f7e603cbd02daa036scroggo      *unit_type = (int)info_ptr->offset_unit_type;
8523965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_oFFs);
8533965825b97a5809454f5810f7e603cbd02daa036scroggo   }
8543965825b97a5809454f5810f7e603cbd02daa036scroggo
8553965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
8563965825b97a5809454f5810f7e603cbd02daa036scroggo}
8573965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
8583965825b97a5809454f5810f7e603cbd02daa036scroggo
8593965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pCAL_SUPPORTED
8603965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
8613965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
8623965825b97a5809454f5810f7e603cbd02daa036scroggo    png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
8633965825b97a5809454f5810f7e603cbd02daa036scroggo    png_charp *units, png_charpp *params)
8643965825b97a5809454f5810f7e603cbd02daa036scroggo{
8653965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "pCAL");
8663965825b97a5809454f5810f7e603cbd02daa036scroggo
8673965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
8683965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_pCAL) != 0 &&
8693965825b97a5809454f5810f7e603cbd02daa036scroggo       purpose != NULL && X0 != NULL && X1 != NULL && type != NULL &&
8703965825b97a5809454f5810f7e603cbd02daa036scroggo       nparams != NULL && units != NULL && params != NULL)
8713965825b97a5809454f5810f7e603cbd02daa036scroggo   {
8723965825b97a5809454f5810f7e603cbd02daa036scroggo      *purpose = info_ptr->pcal_purpose;
8733965825b97a5809454f5810f7e603cbd02daa036scroggo      *X0 = info_ptr->pcal_X0;
8743965825b97a5809454f5810f7e603cbd02daa036scroggo      *X1 = info_ptr->pcal_X1;
8753965825b97a5809454f5810f7e603cbd02daa036scroggo      *type = (int)info_ptr->pcal_type;
8763965825b97a5809454f5810f7e603cbd02daa036scroggo      *nparams = (int)info_ptr->pcal_nparams;
8773965825b97a5809454f5810f7e603cbd02daa036scroggo      *units = info_ptr->pcal_units;
8783965825b97a5809454f5810f7e603cbd02daa036scroggo      *params = info_ptr->pcal_params;
8793965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_pCAL);
8803965825b97a5809454f5810f7e603cbd02daa036scroggo   }
8813965825b97a5809454f5810f7e603cbd02daa036scroggo
8823965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
8833965825b97a5809454f5810f7e603cbd02daa036scroggo}
8843965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
8853965825b97a5809454f5810f7e603cbd02daa036scroggo
8863965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_sCAL_SUPPORTED
8873965825b97a5809454f5810f7e603cbd02daa036scroggo#  ifdef PNG_FIXED_POINT_SUPPORTED
8883965825b97a5809454f5810f7e603cbd02daa036scroggo#    if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
8893965825b97a5809454f5810f7e603cbd02daa036scroggo         defined(PNG_FLOATING_POINT_SUPPORTED)
8903965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
8913965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
8923965825b97a5809454f5810f7e603cbd02daa036scroggo    int *unit, png_fixed_point *width, png_fixed_point *height)
8933965825b97a5809454f5810f7e603cbd02daa036scroggo{
8943965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
8953965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_sCAL) != 0)
8963965825b97a5809454f5810f7e603cbd02daa036scroggo   {
8973965825b97a5809454f5810f7e603cbd02daa036scroggo      *unit = info_ptr->scal_unit;
8983965825b97a5809454f5810f7e603cbd02daa036scroggo      /*TODO: make this work without FP support; the API is currently eliminated
8993965825b97a5809454f5810f7e603cbd02daa036scroggo       * if neither floating point APIs nor internal floating point arithmetic
9003965825b97a5809454f5810f7e603cbd02daa036scroggo       * are enabled.
9013965825b97a5809454f5810f7e603cbd02daa036scroggo       */
9023965825b97a5809454f5810f7e603cbd02daa036scroggo      *width = png_fixed(png_ptr, atof(info_ptr->scal_s_width), "sCAL width");
9033965825b97a5809454f5810f7e603cbd02daa036scroggo      *height = png_fixed(png_ptr, atof(info_ptr->scal_s_height),
9043965825b97a5809454f5810f7e603cbd02daa036scroggo         "sCAL height");
9053965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_sCAL);
9063965825b97a5809454f5810f7e603cbd02daa036scroggo   }
9073965825b97a5809454f5810f7e603cbd02daa036scroggo
9083965825b97a5809454f5810f7e603cbd02daa036scroggo   return(0);
9093965825b97a5809454f5810f7e603cbd02daa036scroggo}
9103965825b97a5809454f5810f7e603cbd02daa036scroggo#    endif /* FLOATING_ARITHMETIC */
9113965825b97a5809454f5810f7e603cbd02daa036scroggo#  endif /* FIXED_POINT */
9123965825b97a5809454f5810f7e603cbd02daa036scroggo#  ifdef PNG_FLOATING_POINT_SUPPORTED
9133965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
9143965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sCAL(png_const_structrp png_ptr, png_const_inforp info_ptr,
9153965825b97a5809454f5810f7e603cbd02daa036scroggo    int *unit, double *width, double *height)
9163965825b97a5809454f5810f7e603cbd02daa036scroggo{
9173965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
9183965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_sCAL) != 0)
9193965825b97a5809454f5810f7e603cbd02daa036scroggo   {
9203965825b97a5809454f5810f7e603cbd02daa036scroggo      *unit = info_ptr->scal_unit;
9213965825b97a5809454f5810f7e603cbd02daa036scroggo      *width = atof(info_ptr->scal_s_width);
9223965825b97a5809454f5810f7e603cbd02daa036scroggo      *height = atof(info_ptr->scal_s_height);
9233965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_sCAL);
9243965825b97a5809454f5810f7e603cbd02daa036scroggo   }
9253965825b97a5809454f5810f7e603cbd02daa036scroggo
9263965825b97a5809454f5810f7e603cbd02daa036scroggo   return(0);
9273965825b97a5809454f5810f7e603cbd02daa036scroggo}
9283965825b97a5809454f5810f7e603cbd02daa036scroggo#  endif /* FLOATING POINT */
9293965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
9303965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sCAL_s(png_const_structrp png_ptr, png_const_inforp info_ptr,
9313965825b97a5809454f5810f7e603cbd02daa036scroggo    int *unit, png_charpp width, png_charpp height)
9323965825b97a5809454f5810f7e603cbd02daa036scroggo{
9333965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
9343965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_sCAL) != 0)
9353965825b97a5809454f5810f7e603cbd02daa036scroggo   {
9363965825b97a5809454f5810f7e603cbd02daa036scroggo      *unit = info_ptr->scal_unit;
9373965825b97a5809454f5810f7e603cbd02daa036scroggo      *width = info_ptr->scal_s_width;
9383965825b97a5809454f5810f7e603cbd02daa036scroggo      *height = info_ptr->scal_s_height;
9393965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_sCAL);
9403965825b97a5809454f5810f7e603cbd02daa036scroggo   }
9413965825b97a5809454f5810f7e603cbd02daa036scroggo
9423965825b97a5809454f5810f7e603cbd02daa036scroggo   return(0);
9433965825b97a5809454f5810f7e603cbd02daa036scroggo}
9443965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* sCAL */
9453965825b97a5809454f5810f7e603cbd02daa036scroggo
9463965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pHYs_SUPPORTED
9473965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
9483965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pHYs(png_const_structrp png_ptr, png_const_inforp info_ptr,
9493965825b97a5809454f5810f7e603cbd02daa036scroggo    png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
9503965825b97a5809454f5810f7e603cbd02daa036scroggo{
9513965825b97a5809454f5810f7e603cbd02daa036scroggo   png_uint_32 retval = 0;
9523965825b97a5809454f5810f7e603cbd02daa036scroggo
9533965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "pHYs");
9543965825b97a5809454f5810f7e603cbd02daa036scroggo
9553965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
9563965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_pHYs) != 0)
9573965825b97a5809454f5810f7e603cbd02daa036scroggo   {
9583965825b97a5809454f5810f7e603cbd02daa036scroggo      if (res_x != NULL)
9593965825b97a5809454f5810f7e603cbd02daa036scroggo      {
9603965825b97a5809454f5810f7e603cbd02daa036scroggo         *res_x = info_ptr->x_pixels_per_unit;
9613965825b97a5809454f5810f7e603cbd02daa036scroggo         retval |= PNG_INFO_pHYs;
9623965825b97a5809454f5810f7e603cbd02daa036scroggo      }
9633965825b97a5809454f5810f7e603cbd02daa036scroggo
9643965825b97a5809454f5810f7e603cbd02daa036scroggo      if (res_y != NULL)
9653965825b97a5809454f5810f7e603cbd02daa036scroggo      {
9663965825b97a5809454f5810f7e603cbd02daa036scroggo         *res_y = info_ptr->y_pixels_per_unit;
9673965825b97a5809454f5810f7e603cbd02daa036scroggo         retval |= PNG_INFO_pHYs;
9683965825b97a5809454f5810f7e603cbd02daa036scroggo      }
9693965825b97a5809454f5810f7e603cbd02daa036scroggo
9703965825b97a5809454f5810f7e603cbd02daa036scroggo      if (unit_type != NULL)
9713965825b97a5809454f5810f7e603cbd02daa036scroggo      {
9723965825b97a5809454f5810f7e603cbd02daa036scroggo         *unit_type = (int)info_ptr->phys_unit_type;
9733965825b97a5809454f5810f7e603cbd02daa036scroggo         retval |= PNG_INFO_pHYs;
9743965825b97a5809454f5810f7e603cbd02daa036scroggo      }
9753965825b97a5809454f5810f7e603cbd02daa036scroggo   }
9763965825b97a5809454f5810f7e603cbd02daa036scroggo
9773965825b97a5809454f5810f7e603cbd02daa036scroggo   return (retval);
9783965825b97a5809454f5810f7e603cbd02daa036scroggo}
9793965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* pHYs */
9803965825b97a5809454f5810f7e603cbd02daa036scroggo
9813965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
9823965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_PLTE(png_const_structrp png_ptr, png_inforp info_ptr,
9833965825b97a5809454f5810f7e603cbd02daa036scroggo    png_colorp *palette, int *num_palette)
9843965825b97a5809454f5810f7e603cbd02daa036scroggo{
9853965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "PLTE");
9863965825b97a5809454f5810f7e603cbd02daa036scroggo
9873965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
9883965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_PLTE) != 0 && palette != NULL)
9893965825b97a5809454f5810f7e603cbd02daa036scroggo   {
9903965825b97a5809454f5810f7e603cbd02daa036scroggo      *palette = info_ptr->palette;
9913965825b97a5809454f5810f7e603cbd02daa036scroggo      *num_palette = info_ptr->num_palette;
9923965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(3, "num_palette = %d", *num_palette);
9933965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_PLTE);
9943965825b97a5809454f5810f7e603cbd02daa036scroggo   }
9953965825b97a5809454f5810f7e603cbd02daa036scroggo
9963965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
9973965825b97a5809454f5810f7e603cbd02daa036scroggo}
9983965825b97a5809454f5810f7e603cbd02daa036scroggo
9993965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_sBIT_SUPPORTED
10003965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
10013965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sBIT(png_const_structrp png_ptr, png_inforp info_ptr,
10023965825b97a5809454f5810f7e603cbd02daa036scroggo    png_color_8p *sig_bit)
10033965825b97a5809454f5810f7e603cbd02daa036scroggo{
10043965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "sBIT");
10053965825b97a5809454f5810f7e603cbd02daa036scroggo
10063965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
10073965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_sBIT) != 0 && sig_bit != NULL)
10083965825b97a5809454f5810f7e603cbd02daa036scroggo   {
10093965825b97a5809454f5810f7e603cbd02daa036scroggo      *sig_bit = &(info_ptr->sig_bit);
10103965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_sBIT);
10113965825b97a5809454f5810f7e603cbd02daa036scroggo   }
10123965825b97a5809454f5810f7e603cbd02daa036scroggo
10133965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
10143965825b97a5809454f5810f7e603cbd02daa036scroggo}
10153965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
10163965825b97a5809454f5810f7e603cbd02daa036scroggo
10173965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_TEXT_SUPPORTED
10183965825b97a5809454f5810f7e603cbd02daa036scroggoint PNGAPI
10193965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_text(png_const_structrp png_ptr, png_inforp info_ptr,
10203965825b97a5809454f5810f7e603cbd02daa036scroggo    png_textp *text_ptr, int *num_text)
10213965825b97a5809454f5810f7e603cbd02daa036scroggo{
10223965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0)
10233965825b97a5809454f5810f7e603cbd02daa036scroggo   {
10243965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in 0x%lx retrieval function",
10253965825b97a5809454f5810f7e603cbd02daa036scroggo         (unsigned long)png_ptr->chunk_name);
10263965825b97a5809454f5810f7e603cbd02daa036scroggo
10273965825b97a5809454f5810f7e603cbd02daa036scroggo      if (text_ptr != NULL)
10283965825b97a5809454f5810f7e603cbd02daa036scroggo         *text_ptr = info_ptr->text;
10293965825b97a5809454f5810f7e603cbd02daa036scroggo
10303965825b97a5809454f5810f7e603cbd02daa036scroggo      if (num_text != NULL)
10313965825b97a5809454f5810f7e603cbd02daa036scroggo         *num_text = info_ptr->num_text;
10323965825b97a5809454f5810f7e603cbd02daa036scroggo
10333965825b97a5809454f5810f7e603cbd02daa036scroggo      return info_ptr->num_text;
10343965825b97a5809454f5810f7e603cbd02daa036scroggo   }
10353965825b97a5809454f5810f7e603cbd02daa036scroggo
10363965825b97a5809454f5810f7e603cbd02daa036scroggo   if (num_text != NULL)
10373965825b97a5809454f5810f7e603cbd02daa036scroggo      *num_text = 0;
10383965825b97a5809454f5810f7e603cbd02daa036scroggo
10393965825b97a5809454f5810f7e603cbd02daa036scroggo   return(0);
10403965825b97a5809454f5810f7e603cbd02daa036scroggo}
10413965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
10423965825b97a5809454f5810f7e603cbd02daa036scroggo
10433965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_tIME_SUPPORTED
10443965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
10453965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_tIME(png_const_structrp png_ptr, png_inforp info_ptr,
10463965825b97a5809454f5810f7e603cbd02daa036scroggo    png_timep *mod_time)
10473965825b97a5809454f5810f7e603cbd02daa036scroggo{
10483965825b97a5809454f5810f7e603cbd02daa036scroggo   png_debug1(1, "in %s retrieval function", "tIME");
10493965825b97a5809454f5810f7e603cbd02daa036scroggo
10503965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
10513965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_tIME) != 0 && mod_time != NULL)
10523965825b97a5809454f5810f7e603cbd02daa036scroggo   {
10533965825b97a5809454f5810f7e603cbd02daa036scroggo      *mod_time = &(info_ptr->mod_time);
10543965825b97a5809454f5810f7e603cbd02daa036scroggo      return (PNG_INFO_tIME);
10553965825b97a5809454f5810f7e603cbd02daa036scroggo   }
10563965825b97a5809454f5810f7e603cbd02daa036scroggo
10573965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
10583965825b97a5809454f5810f7e603cbd02daa036scroggo}
10593965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
10603965825b97a5809454f5810f7e603cbd02daa036scroggo
10613965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_tRNS_SUPPORTED
10623965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
10633965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_tRNS(png_const_structrp png_ptr, png_inforp info_ptr,
10643965825b97a5809454f5810f7e603cbd02daa036scroggo    png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color)
10653965825b97a5809454f5810f7e603cbd02daa036scroggo{
10663965825b97a5809454f5810f7e603cbd02daa036scroggo   png_uint_32 retval = 0;
10673965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL &&
10683965825b97a5809454f5810f7e603cbd02daa036scroggo       (info_ptr->valid & PNG_INFO_tRNS) != 0)
10693965825b97a5809454f5810f7e603cbd02daa036scroggo   {
10703965825b97a5809454f5810f7e603cbd02daa036scroggo      png_debug1(1, "in %s retrieval function", "tRNS");
10713965825b97a5809454f5810f7e603cbd02daa036scroggo
10723965825b97a5809454f5810f7e603cbd02daa036scroggo      if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
10733965825b97a5809454f5810f7e603cbd02daa036scroggo      {
10743965825b97a5809454f5810f7e603cbd02daa036scroggo         if (trans_alpha != NULL)
10753965825b97a5809454f5810f7e603cbd02daa036scroggo         {
10763965825b97a5809454f5810f7e603cbd02daa036scroggo            *trans_alpha = info_ptr->trans_alpha;
10773965825b97a5809454f5810f7e603cbd02daa036scroggo            retval |= PNG_INFO_tRNS;
10783965825b97a5809454f5810f7e603cbd02daa036scroggo         }
10793965825b97a5809454f5810f7e603cbd02daa036scroggo
10803965825b97a5809454f5810f7e603cbd02daa036scroggo         if (trans_color != NULL)
10813965825b97a5809454f5810f7e603cbd02daa036scroggo            *trans_color = &(info_ptr->trans_color);
10823965825b97a5809454f5810f7e603cbd02daa036scroggo      }
10833965825b97a5809454f5810f7e603cbd02daa036scroggo
10843965825b97a5809454f5810f7e603cbd02daa036scroggo      else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */
10853965825b97a5809454f5810f7e603cbd02daa036scroggo      {
10863965825b97a5809454f5810f7e603cbd02daa036scroggo         if (trans_color != NULL)
10873965825b97a5809454f5810f7e603cbd02daa036scroggo         {
10883965825b97a5809454f5810f7e603cbd02daa036scroggo            *trans_color = &(info_ptr->trans_color);
10893965825b97a5809454f5810f7e603cbd02daa036scroggo            retval |= PNG_INFO_tRNS;
10903965825b97a5809454f5810f7e603cbd02daa036scroggo         }
10913965825b97a5809454f5810f7e603cbd02daa036scroggo
10923965825b97a5809454f5810f7e603cbd02daa036scroggo         if (trans_alpha != NULL)
10933965825b97a5809454f5810f7e603cbd02daa036scroggo            *trans_alpha = NULL;
10943965825b97a5809454f5810f7e603cbd02daa036scroggo      }
10953965825b97a5809454f5810f7e603cbd02daa036scroggo
10963965825b97a5809454f5810f7e603cbd02daa036scroggo      if (num_trans != NULL)
10973965825b97a5809454f5810f7e603cbd02daa036scroggo      {
10983965825b97a5809454f5810f7e603cbd02daa036scroggo         *num_trans = info_ptr->num_trans;
10993965825b97a5809454f5810f7e603cbd02daa036scroggo         retval |= PNG_INFO_tRNS;
11003965825b97a5809454f5810f7e603cbd02daa036scroggo      }
11013965825b97a5809454f5810f7e603cbd02daa036scroggo   }
11023965825b97a5809454f5810f7e603cbd02daa036scroggo
11033965825b97a5809454f5810f7e603cbd02daa036scroggo   return (retval);
11043965825b97a5809454f5810f7e603cbd02daa036scroggo}
11053965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
11063965825b97a5809454f5810f7e603cbd02daa036scroggo
11073965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
11083965825b97a5809454f5810f7e603cbd02daa036scroggoint PNGAPI
11093965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_unknown_chunks(png_const_structrp png_ptr, png_inforp info_ptr,
11103965825b97a5809454f5810f7e603cbd02daa036scroggo    png_unknown_chunkpp unknowns)
11113965825b97a5809454f5810f7e603cbd02daa036scroggo{
11123965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL)
11133965825b97a5809454f5810f7e603cbd02daa036scroggo   {
11143965825b97a5809454f5810f7e603cbd02daa036scroggo      *unknowns = info_ptr->unknown_chunks;
11153965825b97a5809454f5810f7e603cbd02daa036scroggo      return info_ptr->unknown_chunks_num;
11163965825b97a5809454f5810f7e603cbd02daa036scroggo   }
11173965825b97a5809454f5810f7e603cbd02daa036scroggo
11183965825b97a5809454f5810f7e603cbd02daa036scroggo   return (0);
11193965825b97a5809454f5810f7e603cbd02daa036scroggo}
11203965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
11213965825b97a5809454f5810f7e603cbd02daa036scroggo
11223965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
11233965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI
11243965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_rgb_to_gray_status (png_const_structrp png_ptr)
11253965825b97a5809454f5810f7e603cbd02daa036scroggo{
11263965825b97a5809454f5810f7e603cbd02daa036scroggo   return (png_byte)(png_ptr ? png_ptr->rgb_to_gray_status : 0);
11273965825b97a5809454f5810f7e603cbd02daa036scroggo}
11283965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
11293965825b97a5809454f5810f7e603cbd02daa036scroggo
11303965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_USER_CHUNKS_SUPPORTED
11313965825b97a5809454f5810f7e603cbd02daa036scroggopng_voidp PNGAPI
11323965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_user_chunk_ptr(png_const_structrp png_ptr)
11333965825b97a5809454f5810f7e603cbd02daa036scroggo{
11343965825b97a5809454f5810f7e603cbd02daa036scroggo   return (png_ptr ? png_ptr->user_chunk_ptr : NULL);
11353965825b97a5809454f5810f7e603cbd02daa036scroggo}
11363965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
11373965825b97a5809454f5810f7e603cbd02daa036scroggo
11383965825b97a5809454f5810f7e603cbd02daa036scroggopng_size_t PNGAPI
11393965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_compression_buffer_size(png_const_structrp png_ptr)
11403965825b97a5809454f5810f7e603cbd02daa036scroggo{
11413965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr == NULL)
11423965825b97a5809454f5810f7e603cbd02daa036scroggo      return 0;
11433965825b97a5809454f5810f7e603cbd02daa036scroggo
11443965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_WRITE_SUPPORTED
11453965825b97a5809454f5810f7e603cbd02daa036scroggo   if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
11463965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
11473965825b97a5809454f5810f7e603cbd02daa036scroggo   {
11483965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
11493965825b97a5809454f5810f7e603cbd02daa036scroggo      return png_ptr->IDAT_read_size;
11503965825b97a5809454f5810f7e603cbd02daa036scroggo#else
11513965825b97a5809454f5810f7e603cbd02daa036scroggo      return PNG_IDAT_READ_SIZE;
11523965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
11533965825b97a5809454f5810f7e603cbd02daa036scroggo   }
11543965825b97a5809454f5810f7e603cbd02daa036scroggo
11553965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_WRITE_SUPPORTED
11563965825b97a5809454f5810f7e603cbd02daa036scroggo   else
11573965825b97a5809454f5810f7e603cbd02daa036scroggo      return png_ptr->zbuffer_size;
11583965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
11593965825b97a5809454f5810f7e603cbd02daa036scroggo}
11603965825b97a5809454f5810f7e603cbd02daa036scroggo
11613965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_SET_USER_LIMITS_SUPPORTED
11623965825b97a5809454f5810f7e603cbd02daa036scroggo/* These functions were added to libpng 1.2.6 and were enabled
11633965825b97a5809454f5810f7e603cbd02daa036scroggo * by default in libpng-1.4.0 */
11643965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
11653965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_user_width_max (png_const_structrp png_ptr)
11663965825b97a5809454f5810f7e603cbd02daa036scroggo{
11673965825b97a5809454f5810f7e603cbd02daa036scroggo   return (png_ptr ? png_ptr->user_width_max : 0);
11683965825b97a5809454f5810f7e603cbd02daa036scroggo}
11693965825b97a5809454f5810f7e603cbd02daa036scroggo
11703965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
11713965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_user_height_max (png_const_structrp png_ptr)
11723965825b97a5809454f5810f7e603cbd02daa036scroggo{
11733965825b97a5809454f5810f7e603cbd02daa036scroggo   return (png_ptr ? png_ptr->user_height_max : 0);
11743965825b97a5809454f5810f7e603cbd02daa036scroggo}
11753965825b97a5809454f5810f7e603cbd02daa036scroggo
11763965825b97a5809454f5810f7e603cbd02daa036scroggo/* This function was added to libpng 1.4.0 */
11773965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
11783965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_chunk_cache_max (png_const_structrp png_ptr)
11793965825b97a5809454f5810f7e603cbd02daa036scroggo{
11803965825b97a5809454f5810f7e603cbd02daa036scroggo   return (png_ptr ? png_ptr->user_chunk_cache_max : 0);
11813965825b97a5809454f5810f7e603cbd02daa036scroggo}
11823965825b97a5809454f5810f7e603cbd02daa036scroggo
11833965825b97a5809454f5810f7e603cbd02daa036scroggo/* This function was added to libpng 1.4.1 */
11843965825b97a5809454f5810f7e603cbd02daa036scroggopng_alloc_size_t PNGAPI
11853965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_chunk_malloc_max (png_const_structrp png_ptr)
11863965825b97a5809454f5810f7e603cbd02daa036scroggo{
11873965825b97a5809454f5810f7e603cbd02daa036scroggo   return (png_ptr ? png_ptr->user_chunk_malloc_max : 0);
11883965825b97a5809454f5810f7e603cbd02daa036scroggo}
11893965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* SET_USER_LIMITS */
11903965825b97a5809454f5810f7e603cbd02daa036scroggo
11913965825b97a5809454f5810f7e603cbd02daa036scroggo/* These functions were added to libpng 1.4.0 */
11923965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_IO_STATE_SUPPORTED
11933965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
11943965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_io_state (png_const_structrp png_ptr)
11953965825b97a5809454f5810f7e603cbd02daa036scroggo{
11963965825b97a5809454f5810f7e603cbd02daa036scroggo   return png_ptr->io_state;
11973965825b97a5809454f5810f7e603cbd02daa036scroggo}
11983965825b97a5809454f5810f7e603cbd02daa036scroggo
11993965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI
12003965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_io_chunk_type (png_const_structrp png_ptr)
12013965825b97a5809454f5810f7e603cbd02daa036scroggo{
12023965825b97a5809454f5810f7e603cbd02daa036scroggo   return png_ptr->chunk_name;
12033965825b97a5809454f5810f7e603cbd02daa036scroggo}
12043965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* IO_STATE */
12053965825b97a5809454f5810f7e603cbd02daa036scroggo
12063965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
12073965825b97a5809454f5810f7e603cbd02daa036scroggo#  ifdef PNG_GET_PALETTE_MAX_SUPPORTED
12083965825b97a5809454f5810f7e603cbd02daa036scroggoint PNGAPI
12093965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_palette_max(png_const_structp png_ptr, png_const_infop info_ptr)
12103965825b97a5809454f5810f7e603cbd02daa036scroggo{
12113965825b97a5809454f5810f7e603cbd02daa036scroggo   if (png_ptr != NULL && info_ptr != NULL)
12123965825b97a5809454f5810f7e603cbd02daa036scroggo      return png_ptr->num_palette_max;
12133965825b97a5809454f5810f7e603cbd02daa036scroggo
12143965825b97a5809454f5810f7e603cbd02daa036scroggo   return (-1);
12153965825b97a5809454f5810f7e603cbd02daa036scroggo}
12163965825b97a5809454f5810f7e603cbd02daa036scroggo#  endif
12173965825b97a5809454f5810f7e603cbd02daa036scroggo#endif
12183965825b97a5809454f5810f7e603cbd02daa036scroggo
12193965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* READ || WRITE */
1220