/* * pngxutil.h - libpng extension utilities. * * Copyright (C) 2003-2011 Cosmin Truta. * This software is distributed under the same licensing and warranty terms * as libpng. */ #ifndef PNGXUTIL_H #define PNGXUTIL_H #include "png.h" #ifdef __cplusplus extern "C" { #endif /* Store data into the info structure. */ void PNGAPI pngx_set_compression_type (png_structp png_ptr, png_infop info_ptr, int compression_type); void PNGAPI pngx_set_filter_type (png_structp png_ptr, png_infop info_ptr, int filter_type); void PNGAPI pngx_set_interlace_type (png_structp png_ptr, png_infop info_ptr, int interlace_type); #if PNG_LIBPNG_VER >= 10400 typedef png_alloc_size_t pngx_alloc_size_t; #else /* Compatibility backport of png_alloc_size_t */ typedef png_uint_32 pngx_alloc_size_t; #endif #ifdef PNG_INFO_IMAGE_SUPPORTED /* Allocate memory for the row pointers. * Use filler to initialize the rows if it is non-negative. * On success return the newly-allocated row pointers. * On failure issue a png_error() or return NULL, * depending on the status of PNG_FLAG_MALLOC_NULL_MEM_OK. */ png_bytepp PNGAPI pngx_malloc_rows (png_structp png_ptr, png_infop info_ptr, int filler); png_bytepp PNGAPI pngx_malloc_rows_extended (png_structp png_ptr, png_infop info_ptr, pngx_alloc_size_t min_row_size, int filler); #endif /* * I/O states were introduced in libpng-1.4.0, but they can be reliably used * starting with libpng-1.4.5 only. */ #if PNG_LIBPNG_VER >= 10405 #ifndef PNG_IO_STATE_SUPPORTED #error This module requires libpng with PNG_IO_STATE_SUPPORTED #endif #define pngx_get_io_state png_get_io_state #define pngx_get_io_chunk_name png_get_io_chunk_name #define pngx_set_read_fn png_set_read_fn #define pngx_set_write_fn png_set_write_fn #define pngx_write_sig png_write_sig #define PNGX_IO_NONE PNG_IO_NONE #define PNGX_IO_READING PNG_IO_READING #define PNGX_IO_WRITING PNG_IO_WRITING #define PNGX_IO_SIGNATURE PNG_IO_SIGNATURE #define PNGX_IO_CHUNK_HDR PNG_IO_CHUNK_HDR #define PNGX_IO_CHUNK_DATA PNG_IO_CHUNK_DATA #define PNGX_IO_CHUNK_CRC PNG_IO_CHUNK_CRC #define PNGX_IO_MASK_OP PNG_IO_MASK_OP #define PNGX_IO_MASK_LOC PNG_IO_MASK_LOC #else /* PNG_LIBPNG_VER < 10405 */ /* Compatibility backports of functions added to libpng 1.4 */ png_uint_32 PNGAPI pngx_get_io_state(png_structp png_ptr); png_bytep PNGAPI pngx_get_io_chunk_name(png_structp png_ptr); /* Note: although these backports have several limitations in comparison * to the actual libpng 1.4 functions, they work properly in OptiPNG, * as long as that they are used in conjunction with the wrappers below. */ /* Compatibility wrappers for old libpng functions */ void PNGAPI pngx_set_read_fn (png_structp png_ptr, png_voidp io_ptr, png_rw_ptr read_data_fn); void PNGAPI pngx_set_write_fn (png_structp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn); void PNGAPI pngx_write_sig(png_structp png_ptr); /* Flags returned by png_get_io_state() */ #define PNGX_IO_NONE 0x0000 /* no I/O at this moment */ #define PNGX_IO_READING 0x0001 /* currently reading */ #define PNGX_IO_WRITING 0x0002 /* currently writing */ #define PNGX_IO_SIGNATURE 0x0010 /* currently at the file signature */ #define PNGX_IO_CHUNK_HDR 0x0020 /* currently at the chunk header */ #define PNGX_IO_CHUNK_DATA 0x0040 /* currently at the chunk data */ #define PNGX_IO_CHUNK_CRC 0x0080 /* currently at the chunk crc */ #define PNGX_IO_MASK_OP 0x000f /* current operation: reading/writing */ #define PNGX_IO_MASK_LOC 0x00f0 /* current location: sig/hdr/data/crc */ #endif #ifdef __cplusplus } /* extern "C" */ #endif #endif /* PNGXUTIL_H */