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