blob: 286de7e1974056405ce98f5b566b341a54ffc358 [file] [log] [blame]
/*
* 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 */