From fc630f27d60766b3c4a928376b289b98dc4c1eb7 Mon Sep 17 00:00:00 2001 From: Philip Meulengracht Date: Wed, 3 Feb 2021 11:12:53 +0100 Subject: [PATCH] Vali: - Cleanup in structure - Minor updates to cmake --- .idea/misc.xml | 2 +- CMakeLists.txt | 27 +- librt/libds/mstring/mstringiterate.c | 3 +- protocols/service_protocols.xml | 2 +- resources/shared/include/jconfig.h | 53 - resources/shared/include/jmorecfg.h | 454 ---- resources/shared/include/jpeglib.h | 1180 ---------- resources/shared/include/png.h | 3130 -------------------------- resources/shared/lib/freetype2.lib | Bin 42196 -> 0 bytes resources/shared/lib/libjpeg-9.lib | Bin 36042 -> 0 bytes resources/shared/lib/libpng16.lib | Bin 55610 -> 0 bytes resources/shared/lib/zlib.lib | Bin 277672 -> 0 bytes services/filemanager/include/vfs.h | 9 +- services/filemanager/path.c | 7 +- 14 files changed, 31 insertions(+), 4836 deletions(-) delete mode 100644 resources/shared/include/jconfig.h delete mode 100644 resources/shared/include/jmorecfg.h delete mode 100644 resources/shared/include/jpeglib.h delete mode 100644 resources/shared/include/png.h delete mode 100644 resources/shared/lib/freetype2.lib delete mode 100644 resources/shared/lib/libjpeg-9.lib delete mode 100644 resources/shared/lib/libpng16.lib delete mode 100644 resources/shared/lib/zlib.lib diff --git a/.idea/misc.xml b/.idea/misc.xml index 8822db8f1..9de97e8b3 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + diff --git a/CMakeLists.txt b/CMakeLists.txt index 19812fd23..373951613 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,19 +26,21 @@ set (VALI_ARCH "i386" CACHE STRING "Platform architecture to build Vali for") set_property (CACHE VALI_ARCH PROPERTY STRINGS i386 amd64) set (ENV{VALI_ARCH} ${VALI_ARCH}) -# Set paths +# Set paths and define the structure of the initial system image set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -set (VALI_PATH_DEPLOY ${CMAKE_BINARY_DIR}/deploy) -set (VALI_PATH_DEPLOY_HDD ${CMAKE_BINARY_DIR}/deploy/hdd) -set (VALI_PATH_DEPLOY_SYSTEM ${CMAKE_BINARY_DIR}/deploy/hdd/system) -set (VALI_PATH_DEPLOY_SHARED ${CMAKE_BINARY_DIR}/deploy/hdd/shared) -set (VALI_PATH_DEPLOY_SHARED_BIN ${CMAKE_BINARY_DIR}/deploy/hdd/shared/bin) -set (VALI_PATH_DEPLOY_SHARED_LIB ${CMAKE_BINARY_DIR}/deploy/hdd/shared/lib) -set (VALI_PATH_DEPLOY_SHARED_MAPS ${CMAKE_BINARY_DIR}/deploy/hdd/shared/maps) -set (VALI_PATH_INITRD ${CMAKE_BINARY_DIR}/initrd) -set (VALI_PATH_APPLICATIONS ${CMAKE_BINARY_DIR}/apps) +set (VALI_PATH_DEPLOY ${CMAKE_BINARY_DIR}/deploy) +set (VALI_PATH_DEPLOY_HDD ${CMAKE_BINARY_DIR}/deploy/hdd) +set (VALI_PATH_DEPLOY_SYSTEM ${CMAKE_BINARY_DIR}/deploy/hdd/system) +set (VALI_PATH_DEPLOY_SHARED ${CMAKE_BINARY_DIR}/deploy/hdd/shared) +set (VALI_PATH_DEPLOY_SHARED_BIN ${CMAKE_BINARY_DIR}/deploy/hdd/shared/bin) +set (VALI_PATH_DEPLOY_SHARED_LIB ${CMAKE_BINARY_DIR}/deploy/hdd/shared/lib) +set (VALI_PATH_DEPLOY_SHARED_INC ${CMAKE_BINARY_DIR}/deploy/hdd/shared/include) +set (VALI_PATH_DEPLOY_SHARED_MAPS ${CMAKE_BINARY_DIR}/deploy/hdd/shared/maps) +set (VALI_PATH_DEPLOY_SHARED_SHARE ${CMAKE_BINARY_DIR}/deploy/hdd/shared/share) +set (VALI_PATH_INITRD ${CMAKE_BINARY_DIR}/initrd) +set (VALI_PATH_APPLICATIONS ${CMAKE_BINARY_DIR}/apps) if (DEFINED ENV{VALI_APPLICATION_PATH}) set (VALI_PATH_APPLICATIONS $ENV{VALI_APPLICATION_PATH}) @@ -57,7 +59,9 @@ file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SYSTEM}) file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED}) file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_BIN}) file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_LIB}) +file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_INC}) file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_MAPS}) +file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_SHARE}) file (MAKE_DIRECTORY ${VALI_PATH_INITRD}) file (MAKE_DIRECTORY ${VALI_PATH_APPLICATIONS}) @@ -106,6 +110,9 @@ add_custom_target (install_applications COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/utils.py --cp --source ${VALI_PATH_APPLICATIONS}/bin --dest ${VALI_PATH_DEPLOY_SHARED_BIN} --pattern *.app COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/utils.py --cp --source ${VALI_PATH_APPLICATIONS}/bin --dest ${VALI_PATH_DEPLOY_SHARED_BIN} --pattern *.dll COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/utils.py --cp --source ${VALI_PATH_APPLICATIONS}/bin --dest ${VALI_PATH_DEPLOY_SHARED_MAPS} --pattern *.map + #COMMAND ${CMAKE_COMMAND} -E copy_directory ${VALI_PATH_APPLICATIONS}/include/ ${VALI_PATH_DEPLOY_SHARED_INC} + #COMMAND ${CMAKE_COMMAND} -E copy_directory ${VALI_PATH_APPLICATIONS}/lib/ ${VALI_PATH_DEPLOY_SHARED_LIB} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${VALI_PATH_APPLICATIONS}/share/ ${VALI_PATH_DEPLOY_SHARED_SHARE} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) diff --git a/librt/libds/mstring/mstringiterate.c b/librt/libds/mstring/mstringiterate.c index dda5b3b1a..9c8ec0219 100644 --- a/librt/libds/mstring/mstringiterate.c +++ b/librt/libds/mstring/mstringiterate.c @@ -60,8 +60,7 @@ mchar_t MStringIterate(MString_t *String, char **Iterator, size_t *Index) int Left = 0; /* Sanitize */ - if (String->Data == NULL - || String->Length == 0) { + if (String->Data == NULL || String->Length == 0) { return MSTRING_EOS; } diff --git a/protocols/service_protocols.xml b/protocols/service_protocols.xml index 6062f548b..25f3920be 100644 --- a/protocols/service_protocols.xml +++ b/protocols/service_protocols.xml @@ -282,7 +282,7 @@ - + diff --git a/resources/shared/include/jconfig.h b/resources/shared/include/jconfig.h deleted file mode 100644 index 8ddc6e022..000000000 --- a/resources/shared/include/jconfig.h +++ /dev/null @@ -1,53 +0,0 @@ -/* jconfig.vc --- jconfig.h for Microsoft Visual C++ on Windows 9x or NT. */ -/* This file also works for Borland C++ 32-bit (bcc32) on Windows 9x or NT. */ -/* see jconfig.txt for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#define NO_GETENV -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS /* we presume a 32-bit flat memory model */ -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -/* Define "boolean" as unsigned char, not enum, per Windows custom */ -#ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ -typedef unsigned char boolean; -#endif -#ifndef FALSE /* in case these macros already exist */ -#define FALSE 0 /* values of boolean */ -#endif -#ifndef TRUE -#define TRUE 1 -#endif -#define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ - - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE /* optional */ -#define USE_SETMODE /* Microsoft has setmode() */ -#undef NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/resources/shared/include/jmorecfg.h b/resources/shared/include/jmorecfg.h deleted file mode 100644 index 205c2fc13..000000000 --- a/resources/shared/include/jmorecfg.h +++ /dev/null @@ -1,454 +0,0 @@ -/* - * jmorecfg.h - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 1997-2013 by Guido Vollbeding. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains additional configuration options that customize the - * JPEG software for special applications or support machine-dependent - * optimizations. Most users will not need to touch this file. - */ - - -/* - * Define BITS_IN_JSAMPLE as either - * 8 for 8-bit sample values (the usual setting) - * 9 for 9-bit sample values - * 10 for 10-bit sample values - * 11 for 11-bit sample values - * 12 for 12-bit sample values - * Only 8, 9, 10, 11, and 12 bits sample data precision are supported for - * full-feature DCT processing. Further depths up to 16-bit may be added - * later for the lossless modes of operation. - * Run-time selection and conversion of data precision will be added later - * and are currently not supported, sorry. - * Exception: The transcoding part (jpegtran) supports all settings in a - * single instance, since it operates on the level of DCT coefficients and - * not sample values. The DCT coefficients are of the same type (16 bits) - * in all cases (see below). - */ - -#define BITS_IN_JSAMPLE 8 /* use 8, 9, 10, 11, or 12 */ - - -/* - * Maximum number of components (color channels) allowed in JPEG image. - * To meet the letter of the JPEG spec, set this to 255. However, darn - * few applications need more than 4 channels (maybe 5 for CMYK + alpha - * mask). We recommend 10 as a reasonable compromise; use 4 if you are - * really short on memory. (Each allowed component costs a hundred or so - * bytes of storage, whether actually used in an image or not.) - */ - -#define MAX_COMPONENTS 10 /* maximum number of image components */ - - -/* - * Basic data types. - * You may need to change these if you have a machine with unusual data - * type sizes; for example, "char" not 8 bits, "short" not 16 bits, - * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, - * but it had better be at least 16. - */ - -/* Representation of a single sample (pixel element value). - * We frequently allocate large arrays of these, so it's important to keep - * them small. But if you have memory to burn and access to char or short - * arrays is very slow on your hardware, you might want to change these. - */ - -#if BITS_IN_JSAMPLE == 8 -/* JSAMPLE should be the smallest type that will hold the values 0..255. - * You can use a signed char by having GETJSAMPLE mask it with 0xFF. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JSAMPLE; -#ifdef CHAR_IS_UNSIGNED -#define GETJSAMPLE(value) ((int) (value)) -#else -#define GETJSAMPLE(value) ((int) (value) & 0xFF) -#endif /* CHAR_IS_UNSIGNED */ - -#endif /* HAVE_UNSIGNED_CHAR */ - -#define MAXJSAMPLE 255 -#define CENTERJSAMPLE 128 - -#endif /* BITS_IN_JSAMPLE == 8 */ - - -#if BITS_IN_JSAMPLE == 9 -/* JSAMPLE should be the smallest type that will hold the values 0..511. - * On nearly all machines "short" will do nicely. - */ - -typedef short JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#define MAXJSAMPLE 511 -#define CENTERJSAMPLE 256 - -#endif /* BITS_IN_JSAMPLE == 9 */ - - -#if BITS_IN_JSAMPLE == 10 -/* JSAMPLE should be the smallest type that will hold the values 0..1023. - * On nearly all machines "short" will do nicely. - */ - -typedef short JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#define MAXJSAMPLE 1023 -#define CENTERJSAMPLE 512 - -#endif /* BITS_IN_JSAMPLE == 10 */ - - -#if BITS_IN_JSAMPLE == 11 -/* JSAMPLE should be the smallest type that will hold the values 0..2047. - * On nearly all machines "short" will do nicely. - */ - -typedef short JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#define MAXJSAMPLE 2047 -#define CENTERJSAMPLE 1024 - -#endif /* BITS_IN_JSAMPLE == 11 */ - - -#if BITS_IN_JSAMPLE == 12 -/* JSAMPLE should be the smallest type that will hold the values 0..4095. - * On nearly all machines "short" will do nicely. - */ - -typedef short JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#define MAXJSAMPLE 4095 -#define CENTERJSAMPLE 2048 - -#endif /* BITS_IN_JSAMPLE == 12 */ - - -/* Representation of a DCT frequency coefficient. - * This should be a signed value of at least 16 bits; "short" is usually OK. - * Again, we allocate large arrays of these, but you can change to int - * if you have memory to burn and "short" is really slow. - */ - -typedef short JCOEF; - - -/* Compressed datastreams are represented as arrays of JOCTET. - * These must be EXACTLY 8 bits wide, at least once they are written to - * external storage. Note that when using the stdio data source/destination - * managers, this is also the data type passed to fread/fwrite. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JOCTET; -#define GETJOCTET(value) (value) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JOCTET; -#ifdef CHAR_IS_UNSIGNED -#define GETJOCTET(value) (value) -#else -#define GETJOCTET(value) ((value) & 0xFF) -#endif /* CHAR_IS_UNSIGNED */ - -#endif /* HAVE_UNSIGNED_CHAR */ - - -/* These typedefs are used for various table entries and so forth. - * They must be at least as wide as specified; but making them too big - * won't cost a huge amount of memory, so we don't provide special - * extraction code like we did for JSAMPLE. (In other words, these - * typedefs live at a different point on the speed/space tradeoff curve.) - */ - -/* UINT8 must hold at least the values 0..255. */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char UINT8; -#else /* not HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char UINT8; -#else /* not CHAR_IS_UNSIGNED */ -typedef short UINT8; -#endif /* CHAR_IS_UNSIGNED */ -#endif /* HAVE_UNSIGNED_CHAR */ - -/* UINT16 must hold at least the values 0..65535. */ - -#ifdef HAVE_UNSIGNED_SHORT -typedef unsigned short UINT16; -#else /* not HAVE_UNSIGNED_SHORT */ -typedef unsigned int UINT16; -#endif /* HAVE_UNSIGNED_SHORT */ - -/* INT16 must hold at least the values -32768..32767. */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ -typedef short INT16; -#endif - -/* INT32 must hold at least signed 32-bit values. */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ -#ifndef _BASETSD_H_ /* Microsoft defines it in basetsd.h */ -#ifndef _BASETSD_H /* MinGW is slightly different */ -#ifndef QGLOBAL_H /* Qt defines it in qglobal.h */ -typedef long INT32; -#endif -#endif -#endif -#endif - -/* Datatype used for image dimensions. The JPEG standard only supports - * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore - * "unsigned int" is sufficient on all machines. However, if you need to - * handle larger images and you don't mind deviating from the spec, you - * can change this datatype. - */ - -typedef unsigned int JDIMENSION; - -#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ - - -/* These macros are used in all function definitions and extern declarations. - * You could modify them if you need to change function linkage conventions; - * in particular, you'll need to do that to make the library a Windows DLL. - * Another application is to make all functions global for use with debuggers - * or code profilers that require it. - */ - -/* a function called through method pointers: */ -#define METHODDEF(type) static type -/* a function used only in its module: */ -#define LOCAL(type) static type - -#ifdef JPEG_DLL -/* a function referenced thru EXTERNs: */ -#define GLOBAL(type) __declspec(dllexport) type -/* a reference to a GLOBAL function: */ -#define EXTERN(type) extern __declspec(dllexport) type -#else -/* a function referenced thru EXTERNs: */ -#define GLOBAL(type) type -/* a reference to a GLOBAL function: */ -#define EXTERN(type) extern type -#endif - - -/* This macro is used to declare a "method", that is, a function pointer. - * We want to supply prototype parameters if the compiler can cope. - * Note that the arglist parameter must be parenthesized! - * Again, you can customize this if you need special linkage keywords. - */ - -#ifdef HAVE_PROTOTYPES -#define JMETHOD(type,methodname,arglist) type (*methodname) arglist -#else -#define JMETHOD(type,methodname,arglist) type (*methodname) () -#endif - - -/* The noreturn type identifier is used to declare functions - * which cannot return. - * Compilers can thus create more optimized code and perform - * better checks for warnings and errors. - * Static analyzer tools can make improved inferences about - * execution paths and are prevented from giving false alerts. - * - * Unfortunately, the proposed specifications of corresponding - * extensions in the Dec 2011 ISO C standard revision (C11), - * GCC, MSVC, etc. are not viable. - * Thus we introduce a user defined type to declare noreturn - * functions at least for clarity. A proper compiler would - * have a suitable noreturn type to match in place of void. - */ - -#ifndef HAVE_NORETURN_T -typedef void noreturn_t; -#endif - - -/* Here is the pseudo-keyword for declaring pointers that must be "far" - * on 80x86 machines. Most of the specialized coding for 80x86 is handled - * by just saying "FAR *" where such a pointer is needed. In a few places - * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. - */ - -#ifndef FAR -#ifdef NEED_FAR_POINTERS -#define FAR far -#else -#define FAR -#endif -#endif - - -/* - * On a few systems, type boolean and/or its values FALSE, TRUE may appear - * in standard header files. Or you may have conflicts with application- - * specific header files that you want to include together with these files. - * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. - */ - -#ifndef HAVE_BOOLEAN -#if defined FALSE || defined TRUE || defined QGLOBAL_H -/* Qt3 defines FALSE and TRUE as "const" variables in qglobal.h */ -typedef int boolean; -#ifndef FALSE /* in case these macros already exist */ -#define FALSE 0 /* values of boolean */ -#endif -#ifndef TRUE -#define TRUE 1 -#endif -#else -typedef enum { FALSE = 0, TRUE = 1 } boolean; -#endif -#endif - - -/* - * The remaining options affect code selection within the JPEG library, - * but they don't need to be visible to most applications using the library. - * To minimize application namespace pollution, the symbols won't be - * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. - */ - -#ifdef JPEG_INTERNALS -#define JPEG_INTERNAL_OPTIONS -#endif - -#ifdef JPEG_INTERNAL_OPTIONS - - -/* - * These defines indicate whether to include various optional functions. - * Undefining some of these symbols will produce a smaller but less capable - * library. Note that you can leave certain source files out of the - * compilation/linking process if you've #undef'd the corresponding symbols. - * (You may HAVE to do that if your compiler doesn't like null source files.) - */ - -/* Capability options common to encoder and decoder: */ - -#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ -#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ -#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ - -/* Encoder capability options: */ - -#define C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ -#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define DCT_SCALING_SUPPORTED /* Input rescaling via DCT? (Requires DCT_ISLOW)*/ -#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ -/* Note: if you selected more than 8-bit data precision, it is dangerous to - * turn off ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only - * good for 8-bit precision, so arithmetic coding is recommended for higher - * precision. The Huffman encoder normally uses entropy optimization to - * compute usable tables for higher precision. Otherwise, you'll have to - * supply different default Huffman tables. - * The exact same statements apply for progressive JPEG: the default tables - * don't work for progressive mode. (This may get fixed, however.) - */ -#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ - -/* Decoder capability options: */ - -#define D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ -#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? (Requires DCT_ISLOW)*/ -#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ -#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ -#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ -#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ -#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ -#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ - -/* more capability options later, no doubt */ - - -/* - * Ordering of RGB data in scanlines passed to or from the application. - * If your application wants to deal with data in the order B,G,R, just - * change these macros. You can also deal with formats such as R,G,B,X - * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing - * the offsets will also change the order in which colormap data is organized. - * RESTRICTIONS: - * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. - * 2. The color quantizer modules will not behave desirably if RGB_PIXELSIZE - * is not 3 (they don't understand about dummy color components!). So you - * can't use color quantization if you change that value. - */ - -#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ -#define RGB_GREEN 1 /* Offset of Green */ -#define RGB_BLUE 2 /* Offset of Blue */ -#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ - - -/* Definitions for speed-related optimizations. */ - - -/* If your compiler supports inline functions, define INLINE - * as the inline keyword; otherwise define it as empty. - */ - -#ifndef INLINE -#ifdef __GNUC__ /* for instance, GNU C knows about inline */ -#define INLINE __inline__ -#endif -#ifndef INLINE -#define INLINE /* default is to define it as empty */ -#endif -#endif - - -/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying - * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER - * as short on such a machine. MULTIPLIER must be at least 16 bits wide. - */ - -#ifndef MULTIPLIER -#define MULTIPLIER int /* type for fastest integer multiply */ -#endif - - -/* FAST_FLOAT should be either float or double, whichever is done faster - * by your compiler. (Note that this type is only used in the floating point - * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) - * Typically, float is faster in ANSI C compilers, while double is faster in - * pre-ANSI compilers (because they insist on converting to double anyway). - * The code below therefore chooses float if we have ANSI-style prototypes. - */ - -#ifndef FAST_FLOAT -#ifdef HAVE_PROTOTYPES -#define FAST_FLOAT float -#else -#define FAST_FLOAT double -#endif -#endif - -#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/resources/shared/include/jpeglib.h b/resources/shared/include/jpeglib.h deleted file mode 100644 index 939b50be5..000000000 --- a/resources/shared/include/jpeglib.h +++ /dev/null @@ -1,1180 +0,0 @@ -/* - * jpeglib.h - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2002-2015 by Guido Vollbeding. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file defines the application interface for the JPEG library. - * Most applications using the library need only include this file, - * and perhaps jerror.h if they want to know the exact error codes. - */ - -#ifndef JPEGLIB_H -#define JPEGLIB_H - -/* - * First we include the configuration files that record how this - * installation of the JPEG library is set up. jconfig.h can be - * generated automatically for many systems. jmorecfg.h contains - * manual configuration options that most people need not worry about. - */ - -#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ -#include "jconfig.h" /* widely used configuration options */ -#endif -#include "jmorecfg.h" /* seldom changed options */ - - -#ifdef __cplusplus -#ifndef DONT_USE_EXTERN_C -extern "C" { -#endif -#endif - -/* Version IDs for the JPEG library. - * Might be useful for tests like "#if JPEG_LIB_VERSION >= 90". - */ - -#define JPEG_LIB_VERSION 90 /* Compatibility version 9.0 */ -#define JPEG_LIB_VERSION_MAJOR 9 -#define JPEG_LIB_VERSION_MINOR 2 - - -/* Various constants determining the sizes of things. - * All of these are specified by the JPEG standard, - * so don't change them if you want to be compatible. - */ - -#define DCTSIZE 8 /* The basic DCT block is 8x8 coefficients */ -#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ -#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ -#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ -#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ -#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ -#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ -/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; - * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. - * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU - * to handle it. We even let you do this from the jconfig.h file. However, - * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe - * sometimes emits noncompliant files doesn't mean you should too. - */ -#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ -#ifndef D_MAX_BLOCKS_IN_MCU -#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ -#endif - - -/* Data structures for images (arrays of samples and of DCT coefficients). - * On 80x86 machines, the image arrays are too big for near pointers, - * but the pointer arrays can fit in near memory. - */ - -typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ -typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ -typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ - -typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ -typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ -typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ -typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ - -typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ - - -/* Types for JPEG compression parameters and working tables. */ - - -/* DCT coefficient quantization tables. */ - -typedef struct { - /* This array gives the coefficient quantizers in natural array order - * (not the zigzag order in which they are stored in a JPEG DQT marker). - * CAUTION: IJG versions prior to v6a kept this array in zigzag order. - */ - UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JQUANT_TBL; - - -/* Huffman coding tables. */ - -typedef struct { - /* These two fields directly represent the contents of a JPEG DHT marker */ - UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ - /* length k bits; bits[0] is unused */ - UINT8 huffval[256]; /* The symbols, in order of incr code length */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JHUFF_TBL; - - -/* Basic info about one component (color channel). */ - -typedef struct { - /* These values are fixed over the whole image. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOF marker. */ - int component_id; /* identifier for this component (0..255) */ - int component_index; /* its index in SOF or cinfo->comp_info[] */ - int h_samp_factor; /* horizontal sampling factor (1..4) */ - int v_samp_factor; /* vertical sampling factor (1..4) */ - int quant_tbl_no; /* quantization table selector (0..3) */ - /* These values may vary between scans. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOS marker. */ - /* The decompressor output side may not use these variables. */ - int dc_tbl_no; /* DC entropy table selector (0..3) */ - int ac_tbl_no; /* AC entropy table selector (0..3) */ - - /* Remaining fields should be treated as private by applications. */ - - /* These values are computed during compression or decompression startup: */ - /* Component's size in DCT blocks. - * Any dummy blocks added to complete an MCU are not counted; therefore - * these values do not depend on whether a scan is interleaved or not. - */ - JDIMENSION width_in_blocks; - JDIMENSION height_in_blocks; - /* Size of a DCT block in samples, - * reflecting any scaling we choose to apply during the DCT step. - * Values from 1 to 16 are supported. - * Note that different components may receive different DCT scalings. - */ - int DCT_h_scaled_size; - int DCT_v_scaled_size; - /* The downsampled dimensions are the component's actual, unpadded number - * of samples at the main buffer (preprocessing/compression interface); - * DCT scaling is included, so - * downsampled_width = - * ceil(image_width * Hi/Hmax * DCT_h_scaled_size/block_size) - * and similarly for height. - */ - JDIMENSION downsampled_width; /* actual width in samples */ - JDIMENSION downsampled_height; /* actual height in samples */ - /* For decompression, in cases where some of the components will be - * ignored (eg grayscale output from YCbCr image), we can skip most - * computations for the unused components. - * For compression, some of the components will need further quantization - * scale by factor of 2 after DCT (eg BG_YCC output from normal RGB input). - * The field is first set TRUE for decompression, FALSE for compression - * in initial_setup, and then adapted in color conversion setup. - */ - boolean component_needed; - - /* These values are computed before starting a scan of the component. */ - /* The decompressor output side may not use these variables. */ - int MCU_width; /* number of blocks per MCU, horizontally */ - int MCU_height; /* number of blocks per MCU, vertically */ - int MCU_blocks; /* MCU_width * MCU_height */ - int MCU_sample_width; /* MCU width in samples: MCU_width * DCT_h_scaled_size */ - int last_col_width; /* # of non-dummy blocks across in last MCU */ - int last_row_height; /* # of non-dummy blocks down in last MCU */ - - /* Saved quantization table for component; NULL if none yet saved. - * See jdinput.c comments about the need for this information. - * This field is currently used only for decompression. - */ - JQUANT_TBL * quant_table; - - /* Private per-component storage for DCT or IDCT subsystem. */ - void * dct_table; -} jpeg_component_info; - - -/* The script for encoding a multiple-scan file is an array of these: */ - -typedef struct { - int comps_in_scan; /* number of components encoded in this scan */ - int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ - int Ss, Se; /* progressive JPEG spectral selection parms */ - int Ah, Al; /* progressive JPEG successive approx. parms */ -} jpeg_scan_info; - -/* The decompressor can save APPn and COM markers in a list of these: */ - -typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; - -struct jpeg_marker_struct { - jpeg_saved_marker_ptr next; /* next in list, or NULL */ - UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ - unsigned int original_length; /* # bytes of data in the file */ - unsigned int data_length; /* # bytes of data saved at data[] */ - JOCTET FAR * data; /* the data contained in the marker */ - /* the marker length word is not counted in data_length or original_length */ -}; - -/* Known color spaces. */ - -typedef enum { - JCS_UNKNOWN, /* error/unspecified */ - JCS_GRAYSCALE, /* monochrome */ - JCS_RGB, /* red/green/blue, standard RGB (sRGB) */ - JCS_YCbCr, /* Y/Cb/Cr (also known as YUV), standard YCC */ - JCS_CMYK, /* C/M/Y/K */ - JCS_YCCK, /* Y/Cb/Cr/K */ - JCS_BG_RGB, /* big gamut red/green/blue, bg-sRGB */ - JCS_BG_YCC /* big gamut Y/Cb/Cr, bg-sYCC */ -} J_COLOR_SPACE; - -/* Supported color transforms. */ - -typedef enum { - JCT_NONE = 0, - JCT_SUBTRACT_GREEN = 1 -} J_COLOR_TRANSFORM; - -/* DCT/IDCT algorithm options. */ - -typedef enum { - JDCT_ISLOW, /* slow but accurate integer algorithm */ - JDCT_IFAST, /* faster, less accurate integer method */ - JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ -} J_DCT_METHOD; - -#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ -#define JDCT_DEFAULT JDCT_ISLOW -#endif -#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ -#define JDCT_FASTEST JDCT_IFAST -#endif - -/* Dithering options for decompression. */ - -typedef enum { - JDITHER_NONE, /* no dithering */ - JDITHER_ORDERED, /* simple ordered dither */ - JDITHER_FS /* Floyd-Steinberg error diffusion dither */ -} J_DITHER_MODE; - - -/* Common fields between JPEG compression and decompression master structs. */ - -#define jpeg_common_fields \ - struct jpeg_error_mgr * err; /* Error handler module */\ - struct jpeg_memory_mgr * mem; /* Memory manager module */\ - struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ - void * client_data; /* Available for use by application */\ - boolean is_decompressor; /* So common code can tell which is which */\ - int global_state /* For checking call sequence validity */ - -/* Routines that are to be used by both halves of the library are declared - * to receive a pointer to this structure. There are no actual instances of - * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. - */ -struct jpeg_common_struct { - jpeg_common_fields; /* Fields common to both master struct types */ - /* Additional fields follow in an actual jpeg_compress_struct or - * jpeg_decompress_struct. All three structs must agree on these - * initial fields! (This would be a lot cleaner in C++.) - */ -}; - -typedef struct jpeg_common_struct * j_common_ptr; -typedef struct jpeg_compress_struct * j_compress_ptr; -typedef struct jpeg_decompress_struct * j_decompress_ptr; - - -/* Master record for a compression instance */ - -struct jpeg_compress_struct { - jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ - - /* Destination for compressed data */ - struct jpeg_destination_mgr * dest; - - /* Description of source image --- these fields must be filled in by - * outer application before starting compression. in_color_space must - * be correct before you can even call jpeg_set_defaults(). - */ - - JDIMENSION image_width; /* input image width */ - JDIMENSION image_height; /* input image height */ - int input_components; /* # of color components in input image */ - J_COLOR_SPACE in_color_space; /* colorspace of input image */ - - double input_gamma; /* image gamma of input image */ - - /* Compression parameters --- these fields must be set before calling - * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to - * initialize everything to reasonable defaults, then changing anything - * the application specifically wants to change. That way you won't get - * burnt when new parameters are added. Also note that there are several - * helper routines to simplify changing parameters. - */ - - unsigned int scale_num, scale_denom; /* fraction by which to scale image */ - - JDIMENSION jpeg_width; /* scaled JPEG image width */ - JDIMENSION jpeg_height; /* scaled JPEG image height */ - /* Dimensions of actual JPEG image that will be written to file, - * derived from input dimensions by scaling factors above. - * These fields are computed by jpeg_start_compress(). - * You can also use jpeg_calc_jpeg_dimensions() to determine these values - * in advance of calling jpeg_start_compress(). - */ - - int data_precision; /* bits of precision in image data */ - - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - jpeg_component_info * comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; - int q_scale_factor[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined, - * and corresponding scale factors (percentage, initialized 100). - */ - - JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - int num_scans; /* # of entries in scan_info array */ - const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ - /* The default value of scan_info is NULL, which causes a single-scan - * sequential JPEG file to be emitted. To create a multi-scan file, - * set num_scans and scan_info to point to an array of scan definitions. - */ - - boolean raw_data_in; /* TRUE=caller supplies downsampled data */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - boolean do_fancy_downsampling; /* TRUE=apply fancy downsampling */ - int smoothing_factor; /* 1..100, or 0 for no input smoothing */ - J_DCT_METHOD dct_method; /* DCT algorithm selector */ - - /* The restart interval can be specified in absolute MCUs by setting - * restart_interval, or in MCU rows by setting restart_in_rows - * (in which case the correct restart_interval will be figured - * for each scan). - */ - unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ - int restart_in_rows; /* if > 0, MCU rows per restart interval */ - - /* Parameters controlling emission of special markers. */ - - boolean write_JFIF_header; /* should a JFIF marker be written? */ - UINT8 JFIF_major_version; /* What to write for the JFIF version number */ - UINT8 JFIF_minor_version; - /* These three values are not used by the JPEG code, merely copied */ - /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ - /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ - /* ratio is defined by X_density/Y_density even when density_unit=0. */ - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean write_Adobe_marker; /* should an Adobe marker be written? */ - - J_COLOR_TRANSFORM color_transform; - /* Color transform identifier, writes LSE marker if nonzero */ - - /* State variable: index of next scanline to be written to - * jpeg_write_scanlines(). Application may use this to control its - * processing loop, e.g., "while (next_scanline < image_height)". - */ - - JDIMENSION next_scanline; /* 0 .. image_height-1 */ - - /* Remaining fields are known throughout compressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during compression startup - */ - boolean progressive_mode; /* TRUE if scan script uses progressive mode */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - - int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */ - int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */ - - JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ - /* The coefficient controller receives data in units of MCU rows as defined - * for fully interleaved scans (whether the JPEG file is interleaved or not). - * There are v_samp_factor * DCTSIZE sample rows of each component in an - * "iMCU" (interleaved MCU) row. - */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[C_MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - - int block_size; /* the basic DCT block size: 1..16 */ - const int * natural_order; /* natural-order position array */ - int lim_Se; /* min( Se, DCTSIZE2-1 ) */ - - /* - * Links to compression subobjects (methods and private variables of modules) - */ - struct jpeg_comp_master * master; - struct jpeg_c_main_controller * main; - struct jpeg_c_prep_controller * prep; - struct jpeg_c_coef_controller * coef; - struct jpeg_marker_writer * marker; - struct jpeg_color_converter * cconvert; - struct jpeg_downsampler * downsample; - struct jpeg_forward_dct * fdct; - struct jpeg_entropy_encoder * entropy; - jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ - int script_space_size; -}; - - -/* Master record for a decompression instance */ - -struct jpeg_decompress_struct { - jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ - - /* Source of compressed data */ - struct jpeg_source_mgr * src; - - /* Basic description of image --- filled in by jpeg_read_header(). */ - /* Application may inspect these values to decide how to process image. */ - - JDIMENSION image_width; /* nominal image width (from SOF marker) */ - JDIMENSION image_height; /* nominal image height */ - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - /* Decompression processing parameters --- these fields must be set before - * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes - * them to default values. - */ - - J_COLOR_SPACE out_color_space; /* colorspace for output */ - - unsigned int scale_num, scale_denom; /* fraction by which to scale image */ - - double output_gamma; /* image gamma wanted in output */ - - boolean buffered_image; /* TRUE=multiple output passes */ - boolean raw_data_out; /* TRUE=downsampled data wanted */ - - J_DCT_METHOD dct_method; /* IDCT algorithm selector */ - boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ - boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ - - boolean quantize_colors; /* TRUE=colormapped output wanted */ - /* the following are ignored if not quantize_colors: */ - J_DITHER_MODE dither_mode; /* type of color dithering to use */ - boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ - int desired_number_of_colors; /* max # colors to use in created colormap */ - /* these are significant only in buffered-image mode: */ - boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ - boolean enable_external_quant;/* enable future use of external colormap */ - boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ - - /* Description of actual output image that will be returned to application. - * These fields are computed by jpeg_start_decompress(). - * You can also use jpeg_calc_output_dimensions() to determine these values - * in advance of calling jpeg_start_decompress(). - */ - - JDIMENSION output_width; /* scaled image width */ - JDIMENSION output_height; /* scaled image height */ - int out_color_components; /* # of color components in out_color_space */ - int output_components; /* # of color components returned */ - /* output_components is 1 (a colormap index) when quantizing colors; - * otherwise it equals out_color_components. - */ - int rec_outbuf_height; /* min recommended height of scanline buffer */ - /* If the buffer passed to jpeg_read_scanlines() is less than this many rows - * high, space and time will be wasted due to unnecessary data copying. - * Usually rec_outbuf_height will be 1 or 2, at most 4. - */ - - /* When quantizing colors, the output colormap is described by these fields. - * The application can supply a colormap by setting colormap non-NULL before - * calling jpeg_start_decompress; otherwise a colormap is created during - * jpeg_start_decompress or jpeg_start_output. - * The map has out_color_components rows and actual_number_of_colors columns. - */ - int actual_number_of_colors; /* number of entries in use */ - JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ - - /* State variables: these variables indicate the progress of decompression. - * The application may examine these but must not modify them. - */ - - /* Row index of next scanline to be read from jpeg_read_scanlines(). - * Application may use this to control its processing loop, e.g., - * "while (output_scanline < output_height)". - */ - JDIMENSION output_scanline; /* 0 .. output_height-1 */ - - /* Current input scan number and number of iMCU rows completed in scan. - * These indicate the progress of the decompressor input side. - */ - int input_scan_number; /* Number of SOS markers seen so far */ - JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ - - /* The "output scan number" is the notional scan being displayed by the - * output side. The decompressor will not allow output scan/row number - * to get ahead of input scan/row, but it can fall arbitrarily far behind. - */ - int output_scan_number; /* Nominal scan number being displayed */ - JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ - - /* Current progression status. coef_bits[c][i] indicates the precision - * with which component c's DCT coefficient i (in zigzag order) is known. - * It is -1 when no data has yet been received, otherwise it is the point - * transform (shift) value for the most recent scan of the coefficient - * (thus, 0 at completion of the progression). - * This pointer is NULL when reading a non-progressive file. - */ - int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ - - /* Internal JPEG parameters --- the application usually need not look at - * these fields. Note that the decompressor output side may not use - * any parameters that can change between scans. - */ - - /* Quantization and Huffman tables are carried forward across input - * datastreams when processing abbreviated JPEG datastreams. - */ - - JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined */ - - JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - /* These parameters are never carried across datastreams, since they - * are given in SOF/SOS markers or defined to be reset by SOI. - */ - - int data_precision; /* bits of precision in image data */ - - jpeg_component_info * comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - boolean is_baseline; /* TRUE if Baseline SOF0 encountered */ - boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ - - /* These fields record data obtained from optional markers recognized by - * the JPEG library. - */ - boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ - /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ - UINT8 JFIF_major_version; /* JFIF version number */ - UINT8 JFIF_minor_version; - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ - UINT8 Adobe_transform; /* Color transform code from Adobe marker */ - - J_COLOR_TRANSFORM color_transform; - /* Color transform identifier derived from LSE marker, otherwise zero */ - - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - - /* Aside from the specific data retained from APPn markers known to the - * library, the uninterpreted contents of any or all APPn and COM markers - * can be saved in a list for examination by the application. - */ - jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ - - /* Remaining fields are known throughout decompressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during decompression startup - */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - - int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */ - int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */ - - JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ - /* The coefficient controller's input and output progress is measured in - * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows - * in fully interleaved JPEG scans, but are used whether the scan is - * interleaved or not. We define an iMCU row as v_samp_factor DCT block - * rows of each component. Therefore, the IDCT output contains - * v_samp_factor*DCT_v_scaled_size sample rows of a component per iMCU row. - */ - - JSAMPLE * sample_range_limit; /* table for fast range-limiting */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - * Note that the decompressor output side must not use these fields. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[D_MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - - /* These fields are derived from Se of first SOS marker. - */ - int block_size; /* the basic DCT block size: 1..16 */ - const int * natural_order; /* natural-order position array for entropy decode */ - int lim_Se; /* min( Se, DCTSIZE2-1 ) for entropy decode */ - - /* This field is shared between entropy decoder and marker parser. - * It is either zero or the code of a JPEG marker that has been - * read from the data source, but has not yet been processed. - */ - int unread_marker; - - /* - * Links to decompression subobjects (methods, private variables of modules) - */ - struct jpeg_decomp_master * master; - struct jpeg_d_main_controller * main; - struct jpeg_d_coef_controller * coef; - struct jpeg_d_post_controller * post; - struct jpeg_input_controller * inputctl; - struct jpeg_marker_reader * marker; - struct jpeg_entropy_decoder * entropy; - struct jpeg_inverse_dct * idct; - struct jpeg_upsampler * upsample; - struct jpeg_color_deconverter * cconvert; - struct jpeg_color_quantizer * cquantize; -}; - - -/* "Object" declarations for JPEG modules that may be supplied or called - * directly by the surrounding application. - * As with all objects in the JPEG library, these structs only define the - * publicly visible methods and state variables of a module. Additional - * private fields may exist after the public ones. - */ - - -/* Error handler object */ - -struct jpeg_error_mgr { - /* Error exit handler: does not return to caller */ - JMETHOD(noreturn_t, error_exit, (j_common_ptr cinfo)); - /* Conditionally emit a trace or warning message */ - JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); - /* Routine that actually outputs a trace or error message */ - JMETHOD(void, output_message, (j_common_ptr cinfo)); - /* Format a message string for the most recent JPEG error or message */ - JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); -#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ - /* Reset error state variables at start of a new image */ - JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); - - /* The message ID code and any parameters are saved here. - * A message can have one string parameter or up to 8 int parameters. - */ - int msg_code; -#define JMSG_STR_PARM_MAX 80 - union { - int i[8]; - char s[JMSG_STR_PARM_MAX]; - } msg_parm; - - /* Standard state variables for error facility */ - - int trace_level; /* max msg_level that will be displayed */ - - /* For recoverable corrupt-data errors, we emit a warning message, - * but keep going unless emit_message chooses to abort. emit_message - * should count warnings in num_warnings. The surrounding application - * can check for bad data by seeing if num_warnings is nonzero at the - * end of processing. - */ - long num_warnings; /* number of corrupt-data warnings */ - - /* These fields point to the table(s) of error message strings. - * An application can change the table pointer to switch to a different - * message list (typically, to change the language in which errors are - * reported). Some applications may wish to add additional error codes - * that will be handled by the JPEG library error mechanism; the second - * table pointer is used for this purpose. - * - * First table includes all errors generated by JPEG library itself. - * Error code 0 is reserved for a "no such error string" message. - */ - const char * const * jpeg_message_table; /* Library errors */ - int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ - /* Second table can be added by application (see cjpeg/djpeg for example). - * It contains strings numbered first_addon_message..last_addon_message. - */ - const char * const * addon_message_table; /* Non-library errors */ - int first_addon_message; /* code for first string in addon table */ - int last_addon_message; /* code for last string in addon table */ -}; - - -/* Progress monitor object */ - -struct jpeg_progress_mgr { - JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); - - long pass_counter; /* work units completed in this pass */ - long pass_limit; /* total number of work units in this pass */ - int completed_passes; /* passes completed so far */ - int total_passes; /* total number of passes expected */ -}; - - -/* Data destination object for compression */ - -struct jpeg_destination_mgr { - JOCTET * next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - - JMETHOD(void, init_destination, (j_compress_ptr cinfo)); - JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); - JMETHOD(void, term_destination, (j_compress_ptr cinfo)); -}; - - -/* Data source object for decompression */ - -struct jpeg_source_mgr { - const JOCTET * next_input_byte; /* => next byte to read from buffer */ - size_t bytes_in_buffer; /* # of bytes remaining in buffer */ - - JMETHOD(void, init_source, (j_decompress_ptr cinfo)); - JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); - JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); - JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); - JMETHOD(void, term_source, (j_decompress_ptr cinfo)); -}; - - -/* Memory manager object. - * Allocates "small" objects (a few K total), "large" objects (tens of K), - * and "really big" objects (virtual arrays with backing store if needed). - * The memory manager does not allow individual objects to be freed; rather, - * each created object is assigned to a pool, and whole pools can be freed - * at once. This is faster and more convenient than remembering exactly what - * to free, especially where malloc()/free() are not too speedy. - * NB: alloc routines never return NULL. They exit to error_exit if not - * successful. - */ - -#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ -#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ -#define JPOOL_NUMPOOLS 2 - -typedef struct jvirt_sarray_control * jvirt_sarray_ptr; -typedef struct jvirt_barray_control * jvirt_barray_ptr; - - -struct jpeg_memory_mgr { - /* Method pointers */ - JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, - size_t sizeofobject)); - JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, - size_t sizeofobject)); - JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, - JDIMENSION samplesperrow, - JDIMENSION numrows)); - JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, - JDIMENSION blocksperrow, - JDIMENSION numrows)); - JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, - int pool_id, - boolean pre_zero, - JDIMENSION samplesperrow, - JDIMENSION numrows, - JDIMENSION maxaccess)); - JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, - int pool_id, - boolean pre_zero, - JDIMENSION blocksperrow, - JDIMENSION numrows, - JDIMENSION maxaccess)); - JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); - JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, - jvirt_sarray_ptr ptr, - JDIMENSION start_row, - JDIMENSION num_rows, - boolean writable)); - JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, - jvirt_barray_ptr ptr, - JDIMENSION start_row, - JDIMENSION num_rows, - boolean writable)); - JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); - JMETHOD(void, self_destruct, (j_common_ptr cinfo)); - - /* Limit on memory allocation for this JPEG object. (Note that this is - * merely advisory, not a guaranteed maximum; it only affects the space - * used for virtual-array buffers.) May be changed by outer application - * after creating the JPEG object. - */ - long max_memory_to_use; - - /* Maximum allocation request accepted by alloc_large. */ - long max_alloc_chunk; -}; - - -/* Routine signature for application-supplied marker processing methods. - * Need not pass marker code since it is stored in cinfo->unread_marker. - */ -typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); - - -/* Declarations for routines called by application. - * The JPP macro hides prototype parameters from compilers that can't cope. - * Note JPP requires double parentheses. - */ - -#ifdef HAVE_PROTOTYPES -#define JPP(arglist) arglist -#else -#define JPP(arglist) () -#endif - - -/* Short forms of external names for systems with brain-damaged linkers. - * We shorten external names to be unique in the first six letters, which - * is good enough for all known systems. - * (If your compiler itself needs names to be unique in less than 15 - * characters, you are out of luck. Get a better compiler.) - */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_std_error jStdError -#define jpeg_CreateCompress jCreaCompress -#define jpeg_CreateDecompress jCreaDecompress -#define jpeg_destroy_compress jDestCompress -#define jpeg_destroy_decompress jDestDecompress -#define jpeg_stdio_dest jStdDest -#define jpeg_stdio_src jStdSrc -#define jpeg_mem_dest jMemDest -#define jpeg_mem_src jMemSrc -#define jpeg_set_defaults jSetDefaults -#define jpeg_set_colorspace jSetColorspace -#define jpeg_default_colorspace jDefColorspace -#define jpeg_set_quality jSetQuality -#define jpeg_set_linear_quality jSetLQuality -#define jpeg_default_qtables jDefQTables -#define jpeg_add_quant_table jAddQuantTable -#define jpeg_quality_scaling jQualityScaling -#define jpeg_simple_progression jSimProgress -#define jpeg_suppress_tables jSuppressTables -#define jpeg_alloc_quant_table jAlcQTable -#define jpeg_alloc_huff_table jAlcHTable -#define jpeg_start_compress jStrtCompress -#define jpeg_write_scanlines jWrtScanlines -#define jpeg_finish_compress jFinCompress -#define jpeg_calc_jpeg_dimensions jCjpegDimensions -#define jpeg_write_raw_data jWrtRawData -#define jpeg_write_marker jWrtMarker -#define jpeg_write_m_header jWrtMHeader -#define jpeg_write_m_byte jWrtMByte -#define jpeg_write_tables jWrtTables -#define jpeg_read_header jReadHeader -#define jpeg_start_decompress jStrtDecompress -#define jpeg_read_scanlines jReadScanlines -#define jpeg_finish_decompress jFinDecompress -#define jpeg_read_raw_data jReadRawData -#define jpeg_has_multiple_scans jHasMultScn -#define jpeg_start_output jStrtOutput -#define jpeg_finish_output jFinOutput -#define jpeg_input_complete jInComplete -#define jpeg_new_colormap jNewCMap -#define jpeg_consume_input jConsumeInput -#define jpeg_core_output_dimensions jCoreDimensions -#define jpeg_calc_output_dimensions jCalcDimensions -#define jpeg_save_markers jSaveMarkers -#define jpeg_set_marker_processor jSetMarker -#define jpeg_read_coefficients jReadCoefs -#define jpeg_write_coefficients jWrtCoefs -#define jpeg_copy_critical_parameters jCopyCrit -#define jpeg_abort_compress jAbrtCompress -#define jpeg_abort_decompress jAbrtDecompress -#define jpeg_abort jAbort -#define jpeg_destroy jDestroy -#define jpeg_resync_to_restart jResyncRestart -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* Default error-management setup */ -EXTERN(struct jpeg_error_mgr *) jpeg_std_error - JPP((struct jpeg_error_mgr * err)); - -/* Initialization of JPEG compression objects. - * jpeg_create_compress() and jpeg_create_decompress() are the exported - * names that applications should call. These expand to calls on - * jpeg_CreateCompress and jpeg_CreateDecompress with additional information - * passed for version mismatch checking. - * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. - */ -#define jpeg_create_compress(cinfo) \ - jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ - (size_t) sizeof(struct jpeg_compress_struct)) -#define jpeg_create_decompress(cinfo) \ - jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ - (size_t) sizeof(struct jpeg_decompress_struct)) -EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, - int version, size_t structsize)); -EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, - int version, size_t structsize)); -/* Destruction of JPEG compression objects */ -EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); - -/* Standard data source and destination managers: stdio streams. */ -/* Caller is responsible for opening the file before and closing after. */ -EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); -EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); - -/* Data source and destination managers: memory buffers. */ -EXTERN(void) jpeg_mem_dest JPP((j_compress_ptr cinfo, - unsigned char ** outbuffer, - unsigned long * outsize)); -EXTERN(void) jpeg_mem_src JPP((j_decompress_ptr cinfo, - const unsigned char * inbuffer, - unsigned long insize)); - -/* Default parameter setup for compression */ -EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); -/* Compression parameter setup aids */ -EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, - J_COLOR_SPACE colorspace)); -EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, - boolean force_baseline)); -EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, - int scale_factor, - boolean force_baseline)); -EXTERN(void) jpeg_default_qtables JPP((j_compress_ptr cinfo, - boolean force_baseline)); -EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, - const unsigned int *basic_table, - int scale_factor, - boolean force_baseline)); -EXTERN(int) jpeg_quality_scaling JPP((int quality)); -EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, - boolean suppress)); -EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); -EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); - -/* Main entry points for compression */ -EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, - boolean write_all_tables)); -EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION num_lines)); -EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); - -/* Precalculate JPEG dimensions for current compression parameters. */ -EXTERN(void) jpeg_calc_jpeg_dimensions JPP((j_compress_ptr cinfo)); - -/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ -EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, - JSAMPIMAGE data, - JDIMENSION num_lines)); - -/* Write a special marker. See libjpeg.txt concerning safe usage. */ -EXTERN(void) jpeg_write_marker - JPP((j_compress_ptr cinfo, int marker, - const JOCTET * dataptr, unsigned int datalen)); -/* Same, but piecemeal. */ -EXTERN(void) jpeg_write_m_header - JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); -EXTERN(void) jpeg_write_m_byte - JPP((j_compress_ptr cinfo, int val)); - -/* Alternate compression function: just write an abbreviated table file */ -EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); - -/* Decompression startup: read start of JPEG datastream to see what's there */ -EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, - boolean require_image)); -/* Return value is one of: */ -#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ -#define JPEG_HEADER_OK 1 /* Found valid image datastream */ -#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ -/* If you pass require_image = TRUE (normal case), you need not check for - * a TABLES_ONLY return code; an abbreviated file will cause an error exit. - * JPEG_SUSPENDED is only possible if you use a data source module that can - * give a suspension return (the stdio source module doesn't). - */ - -/* Main entry points for decompression */ -EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); -EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION max_lines)); -EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); - -/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ -EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, - JSAMPIMAGE data, - JDIMENSION max_lines)); - -/* Additional entry points for buffered-image mode. */ -EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); -EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, - int scan_number)); -EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); -EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); -EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); -EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); -/* Return value is one of: */ -/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ -#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ -#define JPEG_REACHED_EOI 2 /* Reached end of image */ -#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ -#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ - -/* Precalculate output dimensions for current decompression parameters. */ -EXTERN(void) jpeg_core_output_dimensions JPP((j_decompress_ptr cinfo)); -EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); - -/* Control saving of COM and APPn markers into marker_list. */ -EXTERN(void) jpeg_save_markers - JPP((j_decompress_ptr cinfo, int marker_code, - unsigned int length_limit)); - -/* Install a special processing method for COM or APPn markers. */ -EXTERN(void) jpeg_set_marker_processor - JPP((j_decompress_ptr cinfo, int marker_code, - jpeg_marker_parser_method routine)); - -/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ -EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); -EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, - jvirt_barray_ptr * coef_arrays)); -EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, - j_compress_ptr dstinfo)); - -/* If you choose to abort compression or decompression before completing - * jpeg_finish_(de)compress, then you need to clean up to release memory, - * temporary files, etc. You can just call jpeg_destroy_(de)compress - * if you're done with the JPEG object, but if you want to clean it up and - * reuse it, call this: - */ -EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); - -/* Generic versions of jpeg_abort and jpeg_destroy that work on either - * flavor of JPEG object. These may be more convenient in some places. - */ -EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); -EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); - -/* Default restart-marker-resync procedure for use by data source modules */ -EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, - int desired)); - - -/* These marker codes are exported since applications and data source modules - * are likely to want to use them. - */ - -#define JPEG_RST0 0xD0 /* RST0 marker code */ -#define JPEG_EOI 0xD9 /* EOI marker code */ -#define JPEG_APP0 0xE0 /* APP0 marker code */ -#define JPEG_COM 0xFE /* COM marker code */ - - -/* If we have a brain-damaged compiler that emits warnings (or worse, errors) - * for structure definitions that are never filled in, keep it quiet by - * supplying dummy definitions for the various substructures. - */ - -#ifdef INCOMPLETE_TYPES_BROKEN -#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ -struct jvirt_sarray_control { long dummy; }; -struct jvirt_barray_control { long dummy; }; -struct jpeg_comp_master { long dummy; }; -struct jpeg_c_main_controller { long dummy; }; -struct jpeg_c_prep_controller { long dummy; }; -struct jpeg_c_coef_controller { long dummy; }; -struct jpeg_marker_writer { long dummy; }; -struct jpeg_color_converter { long dummy; }; -struct jpeg_downsampler { long dummy; }; -struct jpeg_forward_dct { long dummy; }; -struct jpeg_entropy_encoder { long dummy; }; -struct jpeg_decomp_master { long dummy; }; -struct jpeg_d_main_controller { long dummy; }; -struct jpeg_d_coef_controller { long dummy; }; -struct jpeg_d_post_controller { long dummy; }; -struct jpeg_input_controller { long dummy; }; -struct jpeg_marker_reader { long dummy; }; -struct jpeg_entropy_decoder { long dummy; }; -struct jpeg_inverse_dct { long dummy; }; -struct jpeg_upsampler { long dummy; }; -struct jpeg_color_deconverter { long dummy; }; -struct jpeg_color_quantizer { long dummy; }; -#endif /* JPEG_INTERNALS */ -#endif /* INCOMPLETE_TYPES_BROKEN */ - - -/* - * The JPEG library modules define JPEG_INTERNALS before including this file. - * The internal structure declarations are read only when that is true. - * Applications using the library should not include jpegint.h, but may wish - * to include jerror.h. - */ - -#ifdef JPEG_INTERNALS -#include "jpegint.h" /* fetch private declarations */ -#include "jerror.h" /* fetch error codes too */ -#endif - -#ifdef __cplusplus -#ifndef DONT_USE_EXTERN_C -} -#endif -#endif - -#endif /* JPEGLIB_H */ diff --git a/resources/shared/include/png.h b/resources/shared/include/png.h deleted file mode 100644 index d6d115ebe..000000000 --- a/resources/shared/include/png.h +++ /dev/null @@ -1,3130 +0,0 @@ - -/* png.h - header file for PNG reference library - * - * libpng version 1.6.21, January 15, 2016 - * - * Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * This code is released under the libpng license (See LICENSE, below) - * - * Authors and maintainers: - * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat - * libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger - * libpng versions 0.97, January 1998, through 1.6.21, January 15, 2016: - * Glenn Randers-Pehrson. - * See also "Contributing Authors", below. - */ - -/* - * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: - * - * If you modify libpng you may insert additional notices immediately following - * this sentence. - * - * This code is released under the libpng license. - * - * libpng versions 1.0.7, July 1, 2000, through 1.6.21, January 15, 2016, are - * Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are - * derived from libpng-1.0.6, and are distributed according to the same - * disclaimer and license as libpng-1.0.6 with the following individuals - * added to the list of Contributing Authors: - * - * Simon-Pierre Cadieux - * Eric S. Raymond - * Mans Rullgard - * Cosmin Truta - * Gilles Vollant - * James Yu - * - * and with the following additions to the disclaimer: - * - * There is no warranty against interference with your enjoyment of the - * library or against infringement. There is no warranty that our - * efforts or the library will fulfill any of your particular purposes - * or needs. This library is provided with all faults, and the entire - * risk of satisfactory quality, performance, accuracy, and effort is with - * the user. - * - * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are - * Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from - * libpng-0.96, and are distributed according to the same disclaimer and - * license as libpng-0.96, with the following individuals added to the list - * of Contributing Authors: - * - * Tom Lane - * Glenn Randers-Pehrson - * Willem van Schaik - * - * libpng versions 0.89, June 1996, through 0.96, May 1997, are - * Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, - * and are distributed according to the same disclaimer and license as - * libpng-0.88, with the following individuals added to the list of - * Contributing Authors: - * - * John Bowler - * Kevin Bracey - * Sam Bushell - * Magnus Holmgren - * Greg Roelofs - * Tom Tanner - * - * libpng versions 0.5, May 1995, through 0.88, January 1996, are - * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. - * - * For the purposes of this copyright and license, "Contributing Authors" - * is defined as the following set of individuals: - * - * Andreas Dilger - * Dave Martindale - * Guy Eric Schalnat - * Paul Schmidt - * Tim Wegner - * - * The PNG Reference Library is supplied "AS IS". The Contributing Authors - * and Group 42, Inc. disclaim all warranties, expressed or implied, - * including, without limitation, the warranties of merchantability and of - * fitness for any purpose. The Contributing Authors and Group 42, Inc. - * assume no liability for direct, indirect, incidental, special, exemplary, - * or consequential damages, which may result from the use of the PNG - * Reference Library, even if advised of the possibility of such damage. - * - * Permission is hereby granted to use, copy, modify, and distribute this - * source code, or portions hereof, for any purpose, without fee, subject - * to the following restrictions: - * - * 1. The origin of this source code must not be misrepresented. - * - * 2. Altered versions must be plainly marked as such and must not - * be misrepresented as being the original source. - * - * 3. This Copyright notice may not be removed or altered from any - * source or altered source distribution. - * - * The Contributing Authors and Group 42, Inc. specifically permit, without - * fee, and encourage the use of this source code as a component to - * supporting the PNG file format in commercial products. If you use this - * source code in a product, acknowledgment is not required but would be - * appreciated. - * - * END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE. - */ - -/* - * A "png_get_copyright" function is available, for convenient use in "about" - * boxes and the like: - * - * printf("%s", png_get_copyright(NULL)); - * - * Also, the PNG logo (in PNG format, of course) is supplied in the - * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). - */ - -/* - * Libpng is OSI Certified Open Source Software. OSI Certified Open Source is - * a certification mark of the Open Source Initiative. OSI has not addressed - * the additional disclaimers inserted at version 1.0.7. - */ - -/* - * The contributing authors would like to thank all those who helped - * with testing, bug fixes, and patience. This wouldn't have been - * possible without all of you. - * - * Thanks to Frank J. T. Wojcik for helping with the documentation. - */ - -/* Note about libpng version numbers: - * - * Due to various miscommunications, unforeseen code incompatibilities - * and occasional factors outside the authors' control, version numbering - * on the library has not always been consistent and straightforward. - * The following table summarizes matters since version 0.89c, which was - * the first widely used release: - * - * source png.h png.h shared-lib - * version string int version - * ------- ------ ----- ---------- - * 0.89c "1.0 beta 3" 0.89 89 1.0.89 - * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] - * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] - * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] - * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] - * 0.97c 0.97 97 2.0.97 - * 0.98 0.98 98 2.0.98 - * 0.99 0.99 98 2.0.99 - * 0.99a-m 0.99 99 2.0.99 - * 1.00 1.00 100 2.1.0 [100 should be 10000] - * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] - * 1.0.1 png.h string is 10001 2.1.0 - * 1.0.1a-e identical to the 10002 from here on, the shared library - * 1.0.2 source version) 10002 is 2.V where V is the source code - * 1.0.2a-b 10003 version, except as noted. - * 1.0.3 10003 - * 1.0.3a-d 10004 - * 1.0.4 10004 - * 1.0.4a-f 10005 - * 1.0.5 (+ 2 patches) 10005 - * 1.0.5a-d 10006 - * 1.0.5e-r 10100 (not source compatible) - * 1.0.5s-v 10006 (not binary compatible) - * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) - * 1.0.6d-f 10007 (still binary incompatible) - * 1.0.6g 10007 - * 1.0.6h 10007 10.6h (testing xy.z so-numbering) - * 1.0.6i 10007 10.6i - * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) - * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) - * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) - * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) - * 1.0.7 1 10007 (still compatible) - * ... - * 1.0.19 10 10019 10.so.0.19[.0] - * ... - * 1.2.53 13 10253 12.so.0.53[.0] - * ... - * 1.5.23 15 10523 15.so.15.23[.0] - * ... - * 1.6.21 16 10621 16.so.16.21[.0] - * - * Henceforth the source version will match the shared-library major - * and minor numbers; the shared-library major version number will be - * used for changes in backward compatibility, as it is intended. The - * PNG_LIBPNG_VER macro, which is not used within libpng but is available - * for applications, is an unsigned integer of the form xyyzz corresponding - * to the source version x.y.z (leading zeros in y and z). Beta versions - * were given the previous public release number plus a letter, until - * version 1.0.6j; from then on they were given the upcoming public - * release number plus "betaNN" or "rcNN". - * - * Binary incompatibility exists only when applications make direct access - * to the info_ptr or png_ptr members through png.h, and the compiled - * application is loaded with a different version of the library. - * - * DLLNUM will change each time there are forward or backward changes - * in binary compatibility (e.g., when a new feature is added). - * - * See libpng.txt or libpng.3 for more information. The PNG specification - * is available as a W3C Recommendation and as an ISO Specification, - * - * - * If you just need to read a PNG file and don't want to read the documentation - * skip to the end of this file and read the section entitled 'simplified API'. - */ - -/* Version information for png.h - this should match the version in png.c */ -#define PNG_LIBPNG_VER_STRING "1.6.21" -#define PNG_HEADER_VERSION_STRING \ - " libpng version 1.6.21 - January 15, 2016\n" - -#define PNG_LIBPNG_VER_SONUM 16 -#define PNG_LIBPNG_VER_DLLNUM 16 - -/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ -#define PNG_LIBPNG_VER_MAJOR 1 -#define PNG_LIBPNG_VER_MINOR 6 -#define PNG_LIBPNG_VER_RELEASE 21 - -/* This should match the numeric part of the final component of - * PNG_LIBPNG_VER_STRING, omitting any leading zero: - */ - -#define PNG_LIBPNG_VER_BUILD 0 - -/* Release Status */ -#define PNG_LIBPNG_BUILD_ALPHA 1 -#define PNG_LIBPNG_BUILD_BETA 2 -#define PNG_LIBPNG_BUILD_RC 3 -#define PNG_LIBPNG_BUILD_STABLE 4 -#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7 - -/* Release-Specific Flags */ -#define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with - PNG_LIBPNG_BUILD_STABLE only */ -#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with - PNG_LIBPNG_BUILD_SPECIAL */ -#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with - PNG_LIBPNG_BUILD_PRIVATE */ - -#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE - -/* Careful here. At one time, Guy wanted to use 082, but that would be octal. - * We must not include leading zeros. - * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only - * version 1.0.0 was mis-numbered 100 instead of 10000). From - * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release - */ -#define PNG_LIBPNG_VER 10621 /* 1.6.21 */ - -/* Library configuration: these options cannot be changed after - * the library has been built. - */ -#ifndef PNGLCONF_H - /* If pnglibconf.h is missing, you can - * copy scripts/pnglibconf.h.prebuilt to pnglibconf.h - */ -# include "pnglibconf.h" -#endif - -#ifndef PNG_VERSION_INFO_ONLY - /* Machine specific configuration. */ -# include "pngconf.h" -#endif - -/* - * Added at libpng-1.2.8 - * - * Ref MSDN: Private as priority over Special - * VS_FF_PRIVATEBUILD File *was not* built using standard release - * procedures. If this value is given, the StringFileInfo block must - * contain a PrivateBuild string. - * - * VS_FF_SPECIALBUILD File *was* built by the original company using - * standard release procedures but is a variation of the standard - * file of the same version number. If this value is given, the - * StringFileInfo block must contain a SpecialBuild string. - */ - -#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */ -# define PNG_LIBPNG_BUILD_TYPE \ - (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE) -#else -# ifdef PNG_LIBPNG_SPECIALBUILD -# define PNG_LIBPNG_BUILD_TYPE \ - (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL) -# else -# define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE) -# endif -#endif - -#ifndef PNG_VERSION_INFO_ONLY - -/* Inhibit C++ name-mangling for libpng functions but not for system calls. */ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* Version information for C files, stored in png.c. This had better match - * the version above. - */ -#define png_libpng_ver png_get_header_ver(NULL) - -/* This file is arranged in several sections: - * - * 1. [omitted] - * 2. Any configuration options that can be specified by for the application - * code when it is built. (Build time configuration is in pnglibconf.h) - * 3. Type definitions (base types are defined in pngconf.h), structure - * definitions. - * 4. Exported library functions. - * 5. Simplified API. - * 6. Implementation options. - * - * The library source code has additional files (principally pngpriv.h) that - * allow configuration of the library. - */ - -/* Section 1: [omitted] */ - -/* Section 2: run time configuration - * See pnglibconf.h for build time configuration - * - * Run time configuration allows the application to choose between - * implementations of certain arithmetic APIs. The default is set - * at build time and recorded in pnglibconf.h, but it is safe to - * override these (and only these) settings. Note that this won't - * change what the library does, only application code, and the - * settings can (and probably should) be made on a per-file basis - * by setting the #defines before including png.h - * - * Use macros to read integers from PNG data or use the exported - * functions? - * PNG_USE_READ_MACROS: use the macros (see below) Note that - * the macros evaluate their argument multiple times. - * PNG_NO_USE_READ_MACROS: call the relevant library function. - * - * Use the alternative algorithm for compositing alpha samples that - * does not use division? - * PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division' - * algorithm. - * PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm. - * - * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is - * false? - * PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error - * APIs to png_warning. - * Otherwise the calls are mapped to png_error. - */ - -/* Section 3: type definitions, including structures and compile time - * constants. - * See pngconf.h for base types that vary by machine/system - */ - -/* This triggers a compiler error in png.c, if png.c and png.h - * do not agree upon the version number. - */ -typedef char* png_libpng_version_1_6_21; - -/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info. - * - * png_struct is the cache of information used while reading or writing a single - * PNG file. One of these is always required, although the simplified API - * (below) hides the creation and destruction of it. - */ -typedef struct png_struct_def png_struct; -typedef const png_struct * png_const_structp; -typedef png_struct * png_structp; -typedef png_struct * * png_structpp; - -/* png_info contains information read from or to be written to a PNG file. One - * or more of these must exist while reading or creating a PNG file. The - * information is not used by libpng during read but is used to control what - * gets written when a PNG file is created. "png_get_" function calls read - * information during read and "png_set_" functions calls write information - * when creating a PNG. - * been moved into a separate header file that is not accessible to - * applications. Read libpng-manual.txt or libpng.3 for more info. - */ -typedef struct png_info_def png_info; -typedef png_info * png_infop; -typedef const png_info * png_const_infop; -typedef png_info * * png_infopp; - -/* Types with names ending 'p' are pointer types. The corresponding types with - * names ending 'rp' are identical pointer types except that the pointer is - * marked 'restrict', which means that it is the only pointer to the object - * passed to the function. Applications should not use the 'restrict' types; - * it is always valid to pass 'p' to a pointer with a function argument of the - * corresponding 'rp' type. Different compilers have different rules with - * regard to type matching in the presence of 'restrict'. For backward - * compatibility libpng callbacks never have 'restrict' in their parameters and, - * consequentially, writing portable application code is extremely difficult if - * an attempt is made to use 'restrict'. - */ -typedef png_struct * PNG_RESTRICT png_structrp; -typedef const png_struct * PNG_RESTRICT png_const_structrp; -typedef png_info * PNG_RESTRICT png_inforp; -typedef const png_info * PNG_RESTRICT png_const_inforp; - -/* Three color definitions. The order of the red, green, and blue, (and the - * exact size) is not important, although the size of the fields need to - * be png_byte or png_uint_16 (as defined below). - */ -typedef struct png_color_struct -{ - png_byte red; - png_byte green; - png_byte blue; -} png_color; -typedef png_color * png_colorp; -typedef const png_color * png_const_colorp; -typedef png_color * * png_colorpp; - -typedef struct png_color_16_struct -{ - png_byte index; /* used for palette files */ - png_uint_16 red; /* for use in red green blue files */ - png_uint_16 green; - png_uint_16 blue; - png_uint_16 gray; /* for use in grayscale files */ -} png_color_16; -typedef png_color_16 * png_color_16p; -typedef const png_color_16 * png_const_color_16p; -typedef png_color_16 * * png_color_16pp; - -typedef struct png_color_8_struct -{ - png_byte red; /* for use in red green blue files */ - png_byte green; - png_byte blue; - png_byte gray; /* for use in grayscale files */ - png_byte alpha; /* for alpha channel files */ -} png_color_8; -typedef png_color_8 * png_color_8p; -typedef const png_color_8 * png_const_color_8p; -typedef png_color_8 * * png_color_8pp; - -/* - * The following two structures are used for the in-core representation - * of sPLT chunks. - */ -typedef struct png_sPLT_entry_struct -{ - png_uint_16 red; - png_uint_16 green; - png_uint_16 blue; - png_uint_16 alpha; - png_uint_16 frequency; -} png_sPLT_entry; -typedef png_sPLT_entry * png_sPLT_entryp; -typedef const png_sPLT_entry * png_const_sPLT_entryp; -typedef png_sPLT_entry * * png_sPLT_entrypp; - -/* When the depth of the sPLT palette is 8 bits, the color and alpha samples - * occupy the LSB of their respective members, and the MSB of each member - * is zero-filled. The frequency member always occupies the full 16 bits. - */ - -typedef struct png_sPLT_struct -{ - png_charp name; /* palette name */ - png_byte depth; /* depth of palette samples */ - png_sPLT_entryp entries; /* palette entries */ - png_int_32 nentries; /* number of palette entries */ -} png_sPLT_t; -typedef png_sPLT_t * png_sPLT_tp; -typedef const png_sPLT_t * png_const_sPLT_tp; -typedef png_sPLT_t * * png_sPLT_tpp; - -#ifdef PNG_TEXT_SUPPORTED -/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file, - * and whether that contents is compressed or not. The "key" field - * points to a regular zero-terminated C string. The "text" fields can be a - * regular C string, an empty string, or a NULL pointer. - * However, the structure returned by png_get_text() will always contain - * the "text" field as a regular zero-terminated C string (possibly - * empty), never a NULL pointer, so it can be safely used in printf() and - * other string-handling functions. Note that the "itxt_length", "lang", and - * "lang_key" members of the structure only exist when the library is built - * with iTXt chunk support. Prior to libpng-1.4.0 the library was built by - * default without iTXt support. Also note that when iTXt *is* supported, - * the "lang" and "lang_key" fields contain NULL pointers when the - * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or - * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the - * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag" - * which is always 0 or 1, or its "compression method" which is always 0. - */ -typedef struct png_text_struct -{ - int compression; /* compression value: - -1: tEXt, none - 0: zTXt, deflate - 1: iTXt, none - 2: iTXt, deflate */ - png_charp key; /* keyword, 1-79 character description of "text" */ - png_charp text; /* comment, may be an empty string (ie "") - or a NULL pointer */ - png_size_t text_length; /* length of the text string */ - png_size_t itxt_length; /* length of the itxt string */ - png_charp lang; /* language code, 0-79 characters - or a NULL pointer */ - png_charp lang_key; /* keyword translated UTF-8 string, 0 or more - chars or a NULL pointer */ -} png_text; -typedef png_text * png_textp; -typedef const png_text * png_const_textp; -typedef png_text * * png_textpp; -#endif - -/* Supported compression types for text in PNG files (tEXt, and zTXt). - * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */ -#define PNG_TEXT_COMPRESSION_NONE_WR -3 -#define PNG_TEXT_COMPRESSION_zTXt_WR -2 -#define PNG_TEXT_COMPRESSION_NONE -1 -#define PNG_TEXT_COMPRESSION_zTXt 0 -#define PNG_ITXT_COMPRESSION_NONE 1 -#define PNG_ITXT_COMPRESSION_zTXt 2 -#define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */ - -/* png_time is a way to hold the time in an machine independent way. - * Two conversions are provided, both from time_t and struct tm. There - * is no portable way to convert to either of these structures, as far - * as I know. If you know of a portable way, send it to me. As a side - * note - PNG has always been Year 2000 compliant! - */ -typedef struct png_time_struct -{ - png_uint_16 year; /* full year, as in, 1995 */ - png_byte month; /* month of year, 1 - 12 */ - png_byte day; /* day of month, 1 - 31 */ - png_byte hour; /* hour of day, 0 - 23 */ - png_byte minute; /* minute of hour, 0 - 59 */ - png_byte second; /* second of minute, 0 - 60 (for leap seconds) */ -} png_time; -typedef png_time * png_timep; -typedef const png_time * png_const_timep; -typedef png_time * * png_timepp; - -#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) ||\ - defined(PNG_USER_CHUNKS_SUPPORTED) -/* png_unknown_chunk is a structure to hold queued chunks for which there is - * no specific support. The idea is that we can use this to queue - * up private chunks for output even though the library doesn't actually - * know about their semantics. - * - * The data in the structure is set by libpng on read and used on write. - */ -typedef struct png_unknown_chunk_t -{ - png_byte name[5]; /* Textual chunk name with '\0' terminator */ - png_byte *data; /* Data, should not be modified on read! */ - png_size_t size; - - /* On write 'location' must be set using the flag values listed below. - * Notice that on read it is set by libpng however the values stored have - * more bits set than are listed below. Always treat the value as a - * bitmask. On write set only one bit - setting multiple bits may cause the - * chunk to be written in multiple places. - */ - png_byte location; /* mode of operation at read time */ -} -png_unknown_chunk; - -typedef png_unknown_chunk * png_unknown_chunkp; -typedef const png_unknown_chunk * png_const_unknown_chunkp; -typedef png_unknown_chunk * * png_unknown_chunkpp; -#endif - -/* Flag values for the unknown chunk location byte. */ -#define PNG_HAVE_IHDR 0x01 -#define PNG_HAVE_PLTE 0x02 -#define PNG_AFTER_IDAT 0x08 - -/* Maximum positive integer used in PNG is (2^31)-1 */ -#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL) -#define PNG_UINT_32_MAX ((png_uint_32)(-1)) -#define PNG_SIZE_MAX ((png_size_t)(-1)) - -/* These are constants for fixed point values encoded in the - * PNG specification manner (x100000) - */ -#define PNG_FP_1 100000 -#define PNG_FP_HALF 50000 -#define PNG_FP_MAX ((png_fixed_point)0x7fffffffL) -#define PNG_FP_MIN (-PNG_FP_MAX) - -/* These describe the color_type field in png_info. */ -/* color type masks */ -#define PNG_COLOR_MASK_PALETTE 1 -#define PNG_COLOR_MASK_COLOR 2 -#define PNG_COLOR_MASK_ALPHA 4 - -/* color types. Note that not all combinations are legal */ -#define PNG_COLOR_TYPE_GRAY 0 -#define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE) -#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR) -#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA) -#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA) -/* aliases */ -#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA -#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA - -/* This is for compression type. PNG 1.0-1.2 only define the single type. */ -#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */ -#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE - -/* This is for filter type. PNG 1.0-1.2 only define the single type. */ -#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */ -#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */ -#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE - -/* These are for the interlacing type. These values should NOT be changed. */ -#define PNG_INTERLACE_NONE 0 /* Non-interlaced image */ -#define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */ -#define PNG_INTERLACE_LAST 2 /* Not a valid value */ - -/* These are for the oFFs chunk. These values should NOT be changed. */ -#define PNG_OFFSET_PIXEL 0 /* Offset in pixels */ -#define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */ -#define PNG_OFFSET_LAST 2 /* Not a valid value */ - -/* These are for the pCAL chunk. These values should NOT be changed. */ -#define PNG_EQUATION_LINEAR 0 /* Linear transformation */ -#define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */ -#define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */ -#define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */ -#define PNG_EQUATION_LAST 4 /* Not a valid value */ - -/* These are for the sCAL chunk. These values should NOT be changed. */ -#define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */ -#define PNG_SCALE_METER 1 /* meters per pixel */ -#define PNG_SCALE_RADIAN 2 /* radians per pixel */ -#define PNG_SCALE_LAST 3 /* Not a valid value */ - -/* These are for the pHYs chunk. These values should NOT be changed. */ -#define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */ -#define PNG_RESOLUTION_METER 1 /* pixels/meter */ -#define PNG_RESOLUTION_LAST 2 /* Not a valid value */ - -/* These are for the sRGB chunk. These values should NOT be changed. */ -#define PNG_sRGB_INTENT_PERCEPTUAL 0 -#define PNG_sRGB_INTENT_RELATIVE 1 -#define PNG_sRGB_INTENT_SATURATION 2 -#define PNG_sRGB_INTENT_ABSOLUTE 3 -#define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */ - -/* This is for text chunks */ -#define PNG_KEYWORD_MAX_LENGTH 79 - -/* Maximum number of entries in PLTE/sPLT/tRNS arrays */ -#define PNG_MAX_PALETTE_LENGTH 256 - -/* These determine if an ancillary chunk's data has been successfully read - * from the PNG header, or if the application has filled in the corresponding - * data in the info_struct to be written into the output file. The values - * of the PNG_INFO_ defines should NOT be changed. - */ -#define PNG_INFO_gAMA 0x0001 -#define PNG_INFO_sBIT 0x0002 -#define PNG_INFO_cHRM 0x0004 -#define PNG_INFO_PLTE 0x0008 -#define PNG_INFO_tRNS 0x0010 -#define PNG_INFO_bKGD 0x0020 -#define PNG_INFO_hIST 0x0040 -#define PNG_INFO_pHYs 0x0080 -#define PNG_INFO_oFFs 0x0100 -#define PNG_INFO_tIME 0x0200 -#define PNG_INFO_pCAL 0x0400 -#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ -#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ -#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ -#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ -#if INT_MAX >= 0x8000 /* else this might break */ -#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */ -#endif - -/* This is used for the transformation routines, as some of them - * change these values for the row. It also should enable using - * the routines for other purposes. - */ -typedef struct png_row_info_struct -{ - png_uint_32 width; /* width of row */ - png_size_t rowbytes; /* number of bytes in row */ - png_byte color_type; /* color type of row */ - png_byte bit_depth; /* bit depth of row */ - png_byte channels; /* number of channels (1, 2, 3, or 4) */ - png_byte pixel_depth; /* bits per pixel (depth * channels) */ -} png_row_info; - -typedef png_row_info * png_row_infop; -typedef png_row_info * * png_row_infopp; - -/* These are the function types for the I/O functions and for the functions - * that allow the user to override the default I/O functions with his or her - * own. The png_error_ptr type should match that of user-supplied warning - * and error functions, while the png_rw_ptr type should match that of the - * user read/write data functions. Note that the 'write' function must not - * modify the buffer it is passed. The 'read' function, on the other hand, is - * expected to return the read data in the buffer. - */ -typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp)); -typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t)); -typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp)); -typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32, - int)); -typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32, - int)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop)); -typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop)); - -/* The following callback receives png_uint_32 row_number, int pass for the - * png_bytep data of the row. When transforming an interlaced image the - * row number is the row number within the sub-image of the interlace pass, so - * the value will increase to the height of the sub-image (not the full image) - * then reset to 0 for the next pass. - * - * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to - * find the output pixel (x,y) given an interlaced sub-image pixel - * (row,col,pass). (See below for these macros.) - */ -typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep, - png_uint_32, int)); -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) -typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop, - png_bytep)); -#endif - -#ifdef PNG_USER_CHUNKS_SUPPORTED -typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp, - png_unknown_chunkp)); -#endif -#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED -/* not used anywhere */ -/* typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp)); */ -#endif - -#ifdef PNG_SETJMP_SUPPORTED -/* This must match the function definition in , and the application - * must include this before png.h to obtain the definition of jmp_buf. The - * function is required to be PNG_NORETURN, but this is not checked. If the - * function does return the application will crash via an abort() or similar - * system level call. - * - * If you get a warning here while building the library you may need to make - * changes to ensure that pnglibconf.h records the calling convention used by - * your compiler. This may be very difficult - try using a different compiler - * to build the library! - */ -PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef); -#endif - -/* Transform masks for the high-level interface */ -#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ -#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ -#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ -#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ -#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ -#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ -#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ -#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ -#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ -#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ -#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ -#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ -#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */ -/* Added to libpng-1.2.34 */ -#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER -#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */ -/* Added to libpng-1.4.0 */ -#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */ -/* Added to libpng-1.5.4 */ -#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */ -#if INT_MAX >= 0x8000 /* else this might break */ -#define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */ -#endif - -/* Flags for MNG supported features */ -#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 -#define PNG_FLAG_MNG_FILTER_64 0x04 -#define PNG_ALL_MNG_FEATURES 0x05 - -/* NOTE: prior to 1.5 these functions had no 'API' style declaration, - * this allowed the zlib default functions to be used on Windows - * platforms. In 1.5 the zlib default malloc (which just calls malloc and - * ignores the first argument) should be completely compatible with the - * following. - */ -typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp, - png_alloc_size_t)); -typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp)); - -/* Section 4: exported functions - * Here are the function definitions most commonly used. This is not - * the place to find out how to use libpng. See libpng-manual.txt for the - * full explanation, see example.c for the summary. This just provides - * a simple one line description of the use of each function. - * - * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in - * pngconf.h and in the *.dfn files in the scripts directory. - * - * PNG_EXPORT(ordinal, type, name, (args)); - * - * ordinal: ordinal that is used while building - * *.def files. The ordinal value is only - * relevant when preprocessing png.h with - * the *.dfn files for building symbol table - * entries, and are removed by pngconf.h. - * type: return type of the function - * name: function name - * args: function arguments, with types - * - * When we wish to append attributes to a function prototype we use - * the PNG_EXPORTA() macro instead. - * - * PNG_EXPORTA(ordinal, type, name, (args), attributes); - * - * ordinal, type, name, and args: same as in PNG_EXPORT(). - * attributes: function attributes - */ - -/* Returns the version number of the library */ -PNG_EXPORT(1, png_uint_32, png_access_version_number, (void)); - -/* Tell lib we have already handled the first magic bytes. - * Handling more than 8 bytes from the beginning of the file is an error. - */ -PNG_EXPORT(2, void, png_set_sig_bytes, (png_structrp png_ptr, int num_bytes)); - -/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a - * PNG file. Returns zero if the supplied bytes match the 8-byte PNG - * signature, and non-zero otherwise. Having num_to_check == 0 or - * start > 7 will always fail (ie return non-zero). - */ -PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start, - png_size_t num_to_check)); - -/* Simple signature checking function. This is the same as calling - * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). - */ -#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n)) - -/* Allocate and initialize png_ptr struct for reading, and any other memory. */ -PNG_EXPORTA(4, png_structp, png_create_read_struct, - (png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn), - PNG_ALLOCATED); - -/* Allocate and initialize png_ptr struct for writing, and any other memory */ -PNG_EXPORTA(5, png_structp, png_create_write_struct, - (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, - png_error_ptr warn_fn), - PNG_ALLOCATED); - -PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size, - (png_const_structrp png_ptr)); - -PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structrp png_ptr, - png_size_t size)); - -/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp - * match up. - */ -#ifdef PNG_SETJMP_SUPPORTED -/* This function returns the jmp_buf built in to *png_ptr. It must be - * supplied with an appropriate 'longjmp' function to use on that jmp_buf - * unless the default error function is overridden in which case NULL is - * acceptable. The size of the jmp_buf is checked against the actual size - * allocated by the library - the call will return NULL on a mismatch - * indicating an ABI mismatch. - */ -PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structrp png_ptr, - png_longjmp_ptr longjmp_fn, size_t jmp_buf_size)); -# define png_jmpbuf(png_ptr) \ - (*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf)))) -#else -# define png_jmpbuf(png_ptr) \ - (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP) -#endif -/* This function should be used by libpng applications in place of - * longjmp(png_ptr->jmpbuf, val). If longjmp_fn() has been set, it - * will use it; otherwise it will call PNG_ABORT(). This function was - * added in libpng-1.5.0. - */ -PNG_EXPORTA(9, void, png_longjmp, (png_const_structrp png_ptr, int val), - PNG_NORETURN); - -#ifdef PNG_READ_SUPPORTED -/* Reset the compression stream */ -PNG_EXPORTA(10, int, png_reset_zstream, (png_structrp png_ptr), PNG_DEPRECATED); -#endif - -/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ -#ifdef PNG_USER_MEM_SUPPORTED -PNG_EXPORTA(11, png_structp, png_create_read_struct_2, - (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, - png_error_ptr warn_fn, - png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), - PNG_ALLOCATED); -PNG_EXPORTA(12, png_structp, png_create_write_struct_2, - (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, - png_error_ptr warn_fn, - png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), - PNG_ALLOCATED); -#endif - -/* Write the PNG file signature. */ -PNG_EXPORT(13, void, png_write_sig, (png_structrp png_ptr)); - -/* Write a PNG chunk - size, type, (optional) data, CRC. */ -PNG_EXPORT(14, void, png_write_chunk, (png_structrp png_ptr, png_const_bytep - chunk_name, png_const_bytep data, png_size_t length)); - -/* Write the start of a PNG chunk - length and chunk name. */ -PNG_EXPORT(15, void, png_write_chunk_start, (png_structrp png_ptr, - png_const_bytep chunk_name, png_uint_32 length)); - -/* Write the data of a PNG chunk started with png_write_chunk_start(). */ -PNG_EXPORT(16, void, png_write_chunk_data, (png_structrp png_ptr, - png_const_bytep data, png_size_t length)); - -/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ -PNG_EXPORT(17, void, png_write_chunk_end, (png_structrp png_ptr)); - -/* Allocate and initialize the info structure */ -PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_const_structrp png_ptr), - PNG_ALLOCATED); - -/* DEPRECATED: this function allowed init structures to be created using the - * default allocation method (typically malloc). Use is deprecated in 1.6.0 and - * the API will be removed in the future. - */ -PNG_EXPORTA(19, void, png_info_init_3, (png_infopp info_ptr, - png_size_t png_info_struct_size), PNG_DEPRECATED); - -/* Writes all the PNG information before the image. */ -PNG_EXPORT(20, void, png_write_info_before_PLTE, - (png_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(21, void, png_write_info, - (png_structrp png_ptr, png_const_inforp info_ptr)); - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read the information before the actual image data. */ -PNG_EXPORT(22, void, png_read_info, - (png_structrp png_ptr, png_inforp info_ptr)); -#endif - -#ifdef PNG_TIME_RFC1123_SUPPORTED - /* Convert to a US string format: there is no localization support in this - * routine. The original implementation used a 29 character buffer in - * png_struct, this will be removed in future versions. - */ -#if PNG_LIBPNG_VER < 10700 -/* To do: remove this from libpng17 (and from libpng17/png.c and pngstruct.h) */ -PNG_EXPORTA(23, png_const_charp, png_convert_to_rfc1123, (png_structrp png_ptr, - png_const_timep ptime),PNG_DEPRECATED); -#endif -PNG_EXPORT(241, int, png_convert_to_rfc1123_buffer, (char out[29], - png_const_timep ptime)); -#endif - -#undef PNG_CONVERT_tIME_SUPPORTED -#ifdef PNG_CONVERT_tIME_SUPPORTED -/* Convert from a struct tm to png_time */ -PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime, const struct tm * ttime)); - -/* Convert from time_t to png_time. Uses gmtime() */ -PNG_EXPORT(25, void, png_convert_from_time_t, (png_timep ptime, time_t ttime)); -#endif /* CONVERT_tIME */ - -#ifdef PNG_READ_EXPAND_SUPPORTED -/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ -PNG_EXPORT(26, void, png_set_expand, (png_structrp png_ptr)); -PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structrp png_ptr)); -PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structrp png_ptr)); -PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_EXPAND_16_SUPPORTED -/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion - * of a tRNS chunk if present. - */ -PNG_EXPORT(221, void, png_set_expand_16, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) -/* Use blue, green, red order for pixels. */ -PNG_EXPORT(30, void, png_set_bgr, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED -/* Expand the grayscale to 24-bit RGB if necessary. */ -PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED -/* Reduce RGB to grayscale. */ -#define PNG_ERROR_ACTION_NONE 1 -#define PNG_ERROR_ACTION_WARN 2 -#define PNG_ERROR_ACTION_ERROR 3 -#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/ - -PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structrp png_ptr, - int error_action, double red, double green)) -PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structrp png_ptr, - int error_action, png_fixed_point red, png_fixed_point green)) - -PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structrp - png_ptr)); -#endif - -#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED -PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth, - png_colorp palette)); -#endif - -#ifdef PNG_READ_ALPHA_MODE_SUPPORTED -/* How the alpha channel is interpreted - this affects how the color channels - * of a PNG file are returned to the calling application when an alpha channel, - * or a tRNS chunk in a palette file, is present. - * - * This has no effect on the way pixels are written into a PNG output - * datastream. The color samples in a PNG datastream are never premultiplied - * with the alpha samples. - * - * The default is to return data according to the PNG specification: the alpha - * channel is a linear measure of the contribution of the pixel to the - * corresponding composited pixel, and the color channels are unassociated - * (not premultiplied). The gamma encoded color channels must be scaled - * according to the contribution and to do this it is necessary to undo - * the encoding, scale the color values, perform the composition and reencode - * the values. This is the 'PNG' mode. - * - * The alternative is to 'associate' the alpha with the color information by - * storing color channel values that have been scaled by the alpha. - * image. These are the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' modes - * (the latter being the two common names for associated alpha color channels). - * - * For the 'OPTIMIZED' mode, a pixel is treated as opaque only if the alpha - * value is equal to the maximum value. - * - * The final choice is to gamma encode the alpha channel as well. This is - * broken because, in practice, no implementation that uses this choice - * correctly undoes the encoding before handling alpha composition. Use this - * choice only if other serious errors in the software or hardware you use - * mandate it; the typical serious error is for dark halos to appear around - * opaque areas of the composited PNG image because of arithmetic overflow. - * - * The API function png_set_alpha_mode specifies which of these choices to use - * with an enumerated 'mode' value and the gamma of the required output: - */ -#define PNG_ALPHA_PNG 0 /* according to the PNG standard */ -#define PNG_ALPHA_STANDARD 1 /* according to Porter/Duff */ -#define PNG_ALPHA_ASSOCIATED 1 /* as above; this is the normal practice */ -#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */ -#define PNG_ALPHA_OPTIMIZED 2 /* 'PNG' for opaque pixels, else 'STANDARD' */ -#define PNG_ALPHA_BROKEN 3 /* the alpha channel is gamma encoded */ - -PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structrp png_ptr, int mode, - double output_gamma)) -PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structrp png_ptr, - int mode, png_fixed_point output_gamma)) -#endif - -#if defined(PNG_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED) -/* The output_gamma value is a screen gamma in libpng terminology: it expresses - * how to decode the output values, not how they are encoded. - */ -#define PNG_DEFAULT_sRGB -1 /* sRGB gamma and color space */ -#define PNG_GAMMA_MAC_18 -2 /* Old Mac '1.8' gamma and color space */ -#define PNG_GAMMA_sRGB 220000 /* Television standards--matches sRGB gamma */ -#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */ -#endif - -/* The following are examples of calls to png_set_alpha_mode to achieve the - * required overall gamma correction and, where necessary, alpha - * premultiplication. - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); - * This is the default libpng handling of the alpha channel - it is not - * pre-multiplied into the color components. In addition the call states - * that the output is for a sRGB system and causes all PNG files without gAMA - * chunks to be assumed to be encoded using sRGB. - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); - * In this case the output is assumed to be something like an sRGB conformant - * display preceeded by a power-law lookup table of power 1.45. This is how - * early Mac systems behaved. - * - * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR); - * This is the classic Jim Blinn approach and will work in academic - * environments where everything is done by the book. It has the shortcoming - * of assuming that input PNG data with no gamma information is linear - this - * is unlikely to be correct unless the PNG files where generated locally. - * Most of the time the output precision will be so low as to show - * significant banding in dark areas of the image. - * - * png_set_expand_16(pp); - * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB); - * This is a somewhat more realistic Jim Blinn inspired approach. PNG files - * are assumed to have the sRGB encoding if not marked with a gamma value and - * the output is always 16 bits per component. This permits accurate scaling - * and processing of the data. If you know that your input PNG files were - * generated locally you might need to replace PNG_DEFAULT_sRGB with the - * correct value for your system. - * - * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB); - * If you just need to composite the PNG image onto an existing background - * and if you control the code that does this you can use the optimization - * setting. In this case you just copy completely opaque pixels to the - * output. For pixels that are not completely transparent (you just skip - * those) you do the composition math using png_composite or png_composite_16 - * below then encode the resultant 8-bit or 16-bit values to match the output - * encoding. - * - * Other cases - * If neither the PNG nor the standard linear encoding work for you because - * of the software or hardware you use then you have a big problem. The PNG - * case will probably result in halos around the image. The linear encoding - * will probably result in a washed out, too bright, image (it's actually too - * contrasty.) Try the ALPHA_OPTIMIZED mode above - this will probably - * substantially reduce the halos. Alternatively try: - * - * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB); - * This option will also reduce the halos, but there will be slight dark - * halos round the opaque parts of the image where the background is light. - * In the OPTIMIZED mode the halos will be light halos where the background - * is dark. Take your pick - the halos are unavoidable unless you can get - * your hardware/software fixed! (The OPTIMIZED approach is slightly - * faster.) - * - * When the default gamma of PNG files doesn't match the output gamma. - * If you have PNG files with no gamma information png_set_alpha_mode allows - * you to provide a default gamma, but it also sets the ouput gamma to the - * matching value. If you know your PNG files have a gamma that doesn't - * match the output you can take advantage of the fact that - * png_set_alpha_mode always sets the output gamma but only sets the PNG - * default if it is not already set: - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); - * The first call sets both the default and the output gamma values, the - * second call overrides the output gamma without changing the default. This - * is easier than achieving the same effect with png_set_gamma. You must use - * PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will - * fire if more than one call to png_set_alpha_mode and png_set_background is - * made in the same read operation, however multiple calls with PNG_ALPHA_PNG - * are ignored. - */ - -#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED -PNG_EXPORT(36, void, png_set_strip_alpha, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) -PNG_EXPORT(37, void, png_set_swap_alpha, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) -PNG_EXPORT(38, void, png_set_invert_alpha, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) -/* Add a filler byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */ -PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler, - int flags)); -/* The values of the PNG_FILLER_ defines should NOT be changed */ -# define PNG_FILLER_BEFORE 0 -# define PNG_FILLER_AFTER 1 -/* Add an alpha byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */ -PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr, - png_uint_32 filler, int flags)); -#endif /* READ_FILLER || WRITE_FILLER */ - -#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) -/* Swap bytes in 16-bit depth files. */ -PNG_EXPORT(41, void, png_set_swap, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) -/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ -PNG_EXPORT(42, void, png_set_packing, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \ - defined(PNG_WRITE_PACKSWAP_SUPPORTED) -/* Swap packing order of pixels in bytes. */ -PNG_EXPORT(43, void, png_set_packswap, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) -/* Converts files to legal bit depths. */ -PNG_EXPORT(44, void, png_set_shift, (png_structrp png_ptr, png_const_color_8p - true_bits)); -#endif - -#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ - defined(PNG_WRITE_INTERLACING_SUPPORTED) -/* Have the code handle the interlacing. Returns the number of passes. - * MUST be called before png_read_update_info or png_start_read_image, - * otherwise it will not have the desired effect. Note that it is still - * necessary to call png_read_row or png_read_rows png_get_image_height - * times for each pass. -*/ -PNG_EXPORT(45, int, png_set_interlace_handling, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) -/* Invert monochrome files */ -PNG_EXPORT(46, void, png_set_invert_mono, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_BACKGROUND_SUPPORTED -/* Handle alpha and tRNS by replacing with a background color. Prior to - * libpng-1.5.4 this API must not be called before the PNG file header has been - * read. Doing so will result in unexpected behavior and possible warnings or - * errors if the PNG file contains a bKGD chunk. - */ -PNG_FP_EXPORT(47, void, png_set_background, (png_structrp png_ptr, - png_const_color_16p background_color, int background_gamma_code, - int need_expand, double background_gamma)) -PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structrp png_ptr, - png_const_color_16p background_color, int background_gamma_code, - int need_expand, png_fixed_point background_gamma)) -#endif -#ifdef PNG_READ_BACKGROUND_SUPPORTED -# define PNG_BACKGROUND_GAMMA_UNKNOWN 0 -# define PNG_BACKGROUND_GAMMA_SCREEN 1 -# define PNG_BACKGROUND_GAMMA_FILE 2 -# define PNG_BACKGROUND_GAMMA_UNIQUE 3 -#endif - -#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED -/* Scale a 16-bit depth file down to 8-bit, accurately. */ -PNG_EXPORT(229, void, png_set_scale_16, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED -#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */ -/* Strip the second byte of information from a 16-bit depth file. */ -PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_QUANTIZE_SUPPORTED -/* Turn on quantizing, and reduce the palette to the number of colors - * available. - */ -PNG_EXPORT(49, void, png_set_quantize, (png_structrp png_ptr, - png_colorp palette, int num_palette, int maximum_colors, - png_const_uint_16p histogram, int full_quantize)); -#endif - -#ifdef PNG_READ_GAMMA_SUPPORTED -/* The threshold on gamma processing is configurable but hard-wired into the - * library. The following is the floating point variant. - */ -#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001) - -/* Handle gamma correction. Screen_gamma=(display_exponent). - * NOTE: this API simply sets the screen and file gamma values. It will - * therefore override the value for gamma in a PNG file if it is called after - * the file header has been read - use with care - call before reading the PNG - * file for best results! - * - * These routines accept the same gamma values as png_set_alpha_mode (described - * above). The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either - * API (floating point or fixed.) Notice, however, that the 'file_gamma' value - * is the inverse of a 'screen gamma' value. - */ -PNG_FP_EXPORT(50, void, png_set_gamma, (png_structrp png_ptr, - double screen_gamma, double override_file_gamma)) -PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structrp png_ptr, - png_fixed_point screen_gamma, png_fixed_point override_file_gamma)) -#endif - -#ifdef PNG_WRITE_FLUSH_SUPPORTED -/* Set how many lines between output flushes - 0 for no flushing */ -PNG_EXPORT(51, void, png_set_flush, (png_structrp png_ptr, int nrows)); -/* Flush the current PNG output buffer */ -PNG_EXPORT(52, void, png_write_flush, (png_structrp png_ptr)); -#endif - -/* Optional update palette with requested transformations */ -PNG_EXPORT(53, void, png_start_read_image, (png_structrp png_ptr)); - -/* Optional call to update the users info structure */ -PNG_EXPORT(54, void, png_read_update_info, (png_structrp png_ptr, - png_inforp info_ptr)); - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read one or more rows of image data. */ -PNG_EXPORT(55, void, png_read_rows, (png_structrp png_ptr, png_bytepp row, - png_bytepp display_row, png_uint_32 num_rows)); -#endif - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read a row of data. */ -PNG_EXPORT(56, void, png_read_row, (png_structrp png_ptr, png_bytep row, - png_bytep display_row)); -#endif - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read the whole image into memory at once. */ -PNG_EXPORT(57, void, png_read_image, (png_structrp png_ptr, png_bytepp image)); -#endif - -/* Write a row of image data */ -PNG_EXPORT(58, void, png_write_row, (png_structrp png_ptr, - png_const_bytep row)); - -/* Write a few rows of image data: (*row) is not written; however, the type - * is declared as writeable to maintain compatibility with previous versions - * of libpng and to allow the 'display_row' array from read_rows to be passed - * unchanged to write_rows. - */ -PNG_EXPORT(59, void, png_write_rows, (png_structrp png_ptr, png_bytepp row, - png_uint_32 num_rows)); - -/* Write the image data */ -PNG_EXPORT(60, void, png_write_image, (png_structrp png_ptr, png_bytepp image)); - -/* Write the end of the PNG file. */ -PNG_EXPORT(61, void, png_write_end, (png_structrp png_ptr, - png_inforp info_ptr)); - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read the end of the PNG file. */ -PNG_EXPORT(62, void, png_read_end, (png_structrp png_ptr, png_inforp info_ptr)); -#endif - -/* Free any memory associated with the png_info_struct */ -PNG_EXPORT(63, void, png_destroy_info_struct, (png_const_structrp png_ptr, - png_infopp info_ptr_ptr)); - -/* Free any memory associated with the png_struct and the png_info_structs */ -PNG_EXPORT(64, void, png_destroy_read_struct, (png_structpp png_ptr_ptr, - png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); - -/* Free any memory associated with the png_struct and the png_info_structs */ -PNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr, - png_infopp info_ptr_ptr)); - -/* Set the libpng method of handling chunk CRC errors */ -PNG_EXPORT(66, void, png_set_crc_action, (png_structrp png_ptr, int crit_action, - int ancil_action)); - -/* Values for png_set_crc_action() say how to handle CRC errors in - * ancillary and critical chunks, and whether to use the data contained - * therein. Note that it is impossible to "discard" data in a critical - * chunk. For versions prior to 0.90, the action was always error/quit, - * whereas in version 0.90 and later, the action for CRC errors in ancillary - * chunks is warn/discard. These values should NOT be changed. - * - * value action:critical action:ancillary - */ -#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ -#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ -#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ -#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ -#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ -#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ - -#ifdef PNG_WRITE_SUPPORTED -/* These functions give the user control over the scan-line filtering in - * libpng and the compression methods used by zlib. These functions are - * mainly useful for testing, as the defaults should work with most users. - * Those users who are tight on memory or want faster performance at the - * expense of compression can modify them. See the compression library - * header file (zlib.h) for an explination of the compression functions. - */ - -/* Set the filtering method(s) used by libpng. Currently, the only valid - * value for "method" is 0. - */ -PNG_EXPORT(67, void, png_set_filter, (png_structrp png_ptr, int method, - int filters)); -#endif /* WRITE */ - -/* Flags for png_set_filter() to say which filters to use. The flags - * are chosen so that they don't conflict with real filter types - * below, in case they are supplied instead of the #defined constants. - * These values should NOT be changed. - */ -#define PNG_NO_FILTERS 0x00 -#define PNG_FILTER_NONE 0x08 -#define PNG_FILTER_SUB 0x10 -#define PNG_FILTER_UP 0x20 -#define PNG_FILTER_AVG 0x40 -#define PNG_FILTER_PAETH 0x80 -#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ - PNG_FILTER_AVG | PNG_FILTER_PAETH) - -/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. - * These defines should NOT be changed. - */ -#define PNG_FILTER_VALUE_NONE 0 -#define PNG_FILTER_VALUE_SUB 1 -#define PNG_FILTER_VALUE_UP 2 -#define PNG_FILTER_VALUE_AVG 3 -#define PNG_FILTER_VALUE_PAETH 4 -#define PNG_FILTER_VALUE_LAST 5 - -#ifdef PNG_WRITE_SUPPORTED -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* DEPRECATED */ -PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structrp png_ptr, - int heuristic_method, int num_weights, png_const_doublep filter_weights, - png_const_doublep filter_costs)) -PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed, - (png_structrp png_ptr, int heuristic_method, int num_weights, - png_const_fixed_point_p filter_weights, - png_const_fixed_point_p filter_costs)) -#endif /* WRITE_WEIGHTED_FILTER */ - -/* The following are no longer used and will be removed from libpng-1.7: */ -#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ -#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ -#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ -#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ - -/* Set the library compression level. Currently, valid values range from - * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 - * (0 - no compression, 9 - "maximal" compression). Note that tests have - * shown that zlib compression levels 3-6 usually perform as well as level 9 - * for PNG images, and do considerably fewer caclulations. In the future, - * these values may not correspond directly to the zlib compression levels. - */ -#ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED -PNG_EXPORT(69, void, png_set_compression_level, (png_structrp png_ptr, - int level)); - -PNG_EXPORT(70, void, png_set_compression_mem_level, (png_structrp png_ptr, - int mem_level)); - -PNG_EXPORT(71, void, png_set_compression_strategy, (png_structrp png_ptr, - int strategy)); - -/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a - * smaller value of window_bits if it can do so safely. - */ -PNG_EXPORT(72, void, png_set_compression_window_bits, (png_structrp png_ptr, - int window_bits)); - -PNG_EXPORT(73, void, png_set_compression_method, (png_structrp png_ptr, - int method)); -#endif /* WRITE_CUSTOMIZE_COMPRESSION */ - -#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED -/* Also set zlib parameters for compressing non-IDAT chunks */ -PNG_EXPORT(222, void, png_set_text_compression_level, (png_structrp png_ptr, - int level)); - -PNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structrp png_ptr, - int mem_level)); - -PNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structrp png_ptr, - int strategy)); - -/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a - * smaller value of window_bits if it can do so safely. - */ -PNG_EXPORT(225, void, png_set_text_compression_window_bits, - (png_structrp png_ptr, int window_bits)); - -PNG_EXPORT(226, void, png_set_text_compression_method, (png_structrp png_ptr, - int method)); -#endif /* WRITE_CUSTOMIZE_ZTXT_COMPRESSION */ -#endif /* WRITE */ - -/* These next functions are called for input/output, memory, and error - * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, - * and call standard C I/O routines such as fread(), fwrite(), and - * fprintf(). These functions can be made to use other I/O routines - * at run time for those applications that need to handle I/O in a - * different manner by calling png_set_???_fn(). See libpng-manual.txt for - * more information. - */ - -#ifdef PNG_STDIO_SUPPORTED -/* Initialize the input/output for the PNG file to the default functions. */ -PNG_EXPORT(74, void, png_init_io, (png_structrp png_ptr, png_FILE_p fp)); -#endif - -/* Replace the (error and abort), and warning functions with user - * supplied functions. If no messages are to be printed you must still - * write and use replacement functions. The replacement error_fn should - * still do a longjmp to the last setjmp location if you are using this - * method of error handling. If error_fn or warning_fn is NULL, the - * default function will be used. - */ - -PNG_EXPORT(75, void, png_set_error_fn, (png_structrp png_ptr, - png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); - -/* Return the user pointer associated with the error functions */ -PNG_EXPORT(76, png_voidp, png_get_error_ptr, (png_const_structrp png_ptr)); - -/* Replace the default data output functions with a user supplied one(s). - * If buffered output is not used, then output_flush_fn can be set to NULL. - * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time - * output_flush_fn will be ignored (and thus can be NULL). - * It is probably a mistake to use NULL for output_flush_fn if - * write_data_fn is not also NULL unless you have built libpng with - * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's - * default flush function, which uses the standard *FILE structure, will - * be used. - */ -PNG_EXPORT(77, void, png_set_write_fn, (png_structrp png_ptr, png_voidp io_ptr, - png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); - -/* Replace the default data input function with a user supplied one. */ -PNG_EXPORT(78, void, png_set_read_fn, (png_structrp png_ptr, png_voidp io_ptr, - png_rw_ptr read_data_fn)); - -/* Return the user pointer associated with the I/O functions */ -PNG_EXPORT(79, png_voidp, png_get_io_ptr, (png_const_structrp png_ptr)); - -PNG_EXPORT(80, void, png_set_read_status_fn, (png_structrp png_ptr, - png_read_status_ptr read_row_fn)); - -PNG_EXPORT(81, void, png_set_write_status_fn, (png_structrp png_ptr, - png_write_status_ptr write_row_fn)); - -#ifdef PNG_USER_MEM_SUPPORTED -/* Replace the default memory allocation functions with user supplied one(s). */ -PNG_EXPORT(82, void, png_set_mem_fn, (png_structrp png_ptr, png_voidp mem_ptr, - png_malloc_ptr malloc_fn, png_free_ptr free_fn)); -/* Return the user pointer associated with the memory functions */ -PNG_EXPORT(83, png_voidp, png_get_mem_ptr, (png_const_structrp png_ptr)); -#endif - -#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED -PNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structrp png_ptr, - png_user_transform_ptr read_user_transform_fn)); -#endif - -#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED -PNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structrp png_ptr, - png_user_transform_ptr write_user_transform_fn)); -#endif - -#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED -PNG_EXPORT(86, void, png_set_user_transform_info, (png_structrp png_ptr, - png_voidp user_transform_ptr, int user_transform_depth, - int user_transform_channels)); -/* Return the user pointer associated with the user transform functions */ -PNG_EXPORT(87, png_voidp, png_get_user_transform_ptr, - (png_const_structrp png_ptr)); -#endif - -#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED -/* Return information about the row currently being processed. Note that these - * APIs do not fail but will return unexpected results if called outside a user - * transform callback. Also note that when transforming an interlaced image the - * row number is the row number within the sub-image of the interlace pass, so - * the value will increase to the height of the sub-image (not the full image) - * then reset to 0 for the next pass. - * - * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to - * find the output pixel (x,y) given an interlaced sub-image pixel - * (row,col,pass). (See below for these macros.) - */ -PNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structrp)); -PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structrp)); -#endif - -#ifdef PNG_READ_USER_CHUNKS_SUPPORTED -/* This callback is called only for *unknown* chunks. If - * PNG_HANDLE_AS_UNKNOWN_SUPPORTED is set then it is possible to set known - * chunks to be treated as unknown, however in this case the callback must do - * any processing required by the chunk (e.g. by calling the appropriate - * png_set_ APIs.) - * - * There is no write support - on write, by default, all the chunks in the - * 'unknown' list are written in the specified position. - * - * The integer return from the callback function is interpreted thus: - * - * negative: An error occurred; png_chunk_error will be called. - * zero: The chunk was not handled, the chunk will be saved. A critical - * chunk will cause an error at this point unless it is to be saved. - * positive: The chunk was handled, libpng will ignore/discard it. - * - * See "INTERACTION WTIH USER CHUNK CALLBACKS" below for important notes about - * how this behavior will change in libpng 1.7 - */ -PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structrp png_ptr, - png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); -#endif - -#ifdef PNG_USER_CHUNKS_SUPPORTED -PNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_structrp png_ptr)); -#endif - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -/* Sets the function callbacks for the push reader, and a pointer to a - * user-defined structure available to the callback functions. - */ -PNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structrp png_ptr, - png_voidp progressive_ptr, png_progressive_info_ptr info_fn, - png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn)); - -/* Returns the user pointer associated with the push read functions */ -PNG_EXPORT(91, png_voidp, png_get_progressive_ptr, - (png_const_structrp png_ptr)); - -/* Function to be called when data becomes available */ -PNG_EXPORT(92, void, png_process_data, (png_structrp png_ptr, - png_inforp info_ptr, png_bytep buffer, png_size_t buffer_size)); - -/* A function which may be called *only* within png_process_data to stop the - * processing of any more data. The function returns the number of bytes - * remaining, excluding any that libpng has cached internally. A subsequent - * call to png_process_data must supply these bytes again. If the argument - * 'save' is set to true the routine will first save all the pending data and - * will always return 0. - */ -PNG_EXPORT(219, png_size_t, png_process_data_pause, (png_structrp, int save)); - -/* A function which may be called *only* outside (after) a call to - * png_process_data. It returns the number of bytes of data to skip in the - * input. Normally it will return 0, but if it returns a non-zero value the - * application must skip than number of bytes of input data and pass the - * following data to the next call to png_process_data. - */ -PNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structrp)); - -/* Function that combines rows. 'new_row' is a flag that should come from - * the callback and be non-NULL if anything needs to be done; the library - * stores its own version of the new data internally and ignores the passed - * in value. - */ -PNG_EXPORT(93, void, png_progressive_combine_row, (png_const_structrp png_ptr, - png_bytep old_row, png_const_bytep new_row)); -#endif /* PROGRESSIVE_READ */ - -PNG_EXPORTA(94, png_voidp, png_malloc, (png_const_structrp png_ptr, - png_alloc_size_t size), PNG_ALLOCATED); -/* Added at libpng version 1.4.0 */ -PNG_EXPORTA(95, png_voidp, png_calloc, (png_const_structrp png_ptr, - png_alloc_size_t size), PNG_ALLOCATED); - -/* Added at libpng version 1.2.4 */ -PNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_const_structrp png_ptr, - png_alloc_size_t size), PNG_ALLOCATED); - -/* Frees a pointer allocated by png_malloc() */ -PNG_EXPORT(97, void, png_free, (png_const_structrp png_ptr, png_voidp ptr)); - -/* Free data that was allocated internally */ -PNG_EXPORT(98, void, png_free_data, (png_const_structrp png_ptr, - png_inforp info_ptr, png_uint_32 free_me, int num)); - -/* Reassign responsibility for freeing existing data, whether allocated - * by libpng or by the application; this works on the png_info structure passed - * in, it does not change the state for other png_info structures. - * - * It is unlikely that this function works correctly as of 1.6.0 and using it - * may result either in memory leaks or double free of allocated data. - */ -PNG_EXPORT(99, void, png_data_freer, (png_const_structrp png_ptr, - png_inforp info_ptr, int freer, png_uint_32 mask)); - -/* Assignments for png_data_freer */ -#define PNG_DESTROY_WILL_FREE_DATA 1 -#define PNG_SET_WILL_FREE_DATA 1 -#define PNG_USER_WILL_FREE_DATA 2 -/* Flags for png_ptr->free_me and info_ptr->free_me */ -#define PNG_FREE_HIST 0x0008 -#define PNG_FREE_ICCP 0x0010 -#define PNG_FREE_SPLT 0x0020 -#define PNG_FREE_ROWS 0x0040 -#define PNG_FREE_PCAL 0x0080 -#define PNG_FREE_SCAL 0x0100 -#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED -# define PNG_FREE_UNKN 0x0200 -#endif -/* PNG_FREE_LIST 0x0400 removed in 1.6.0 because it is ignored */ -#define PNG_FREE_PLTE 0x1000 -#define PNG_FREE_TRNS 0x2000 -#define PNG_FREE_TEXT 0x4000 -#define PNG_FREE_ALL 0x7fff -#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ - -#ifdef PNG_USER_MEM_SUPPORTED -PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr, - png_alloc_size_t size), PNG_ALLOCATED PNG_DEPRECATED); -PNG_EXPORTA(101, void, png_free_default, (png_const_structrp png_ptr, - png_voidp ptr), PNG_DEPRECATED); -#endif - -#ifdef PNG_ERROR_TEXT_SUPPORTED -/* Fatal error in PNG image of libpng - can't continue */ -PNG_EXPORTA(102, void, png_error, (png_const_structrp png_ptr, - png_const_charp error_message), PNG_NORETURN); - -/* The same, but the chunk name is prepended to the error string. */ -PNG_EXPORTA(103, void, png_chunk_error, (png_const_structrp png_ptr, - png_const_charp error_message), PNG_NORETURN); - -#else -/* Fatal error in PNG image of libpng - can't continue */ -PNG_EXPORTA(104, void, png_err, (png_const_structrp png_ptr), PNG_NORETURN); -# define png_error(s1,s2) png_err(s1) -# define png_chunk_error(s1,s2) png_err(s1) -#endif - -#ifdef PNG_WARNINGS_SUPPORTED -/* Non-fatal error in libpng. Can continue, but may have a problem. */ -PNG_EXPORT(105, void, png_warning, (png_const_structrp png_ptr, - png_const_charp warning_message)); - -/* Non-fatal error in libpng, chunk name is prepended to message. */ -PNG_EXPORT(106, void, png_chunk_warning, (png_const_structrp png_ptr, - png_const_charp warning_message)); -#else -# define png_warning(s1,s2) ((void)(s1)) -# define png_chunk_warning(s1,s2) ((void)(s1)) -#endif - -#ifdef PNG_BENIGN_ERRORS_SUPPORTED -/* Benign error in libpng. Can continue, but may have a problem. - * User can choose whether to handle as a fatal error or as a warning. */ -PNG_EXPORT(107, void, png_benign_error, (png_const_structrp png_ptr, - png_const_charp warning_message)); - -#ifdef PNG_READ_SUPPORTED -/* Same, chunk name is prepended to message (only during read) */ -PNG_EXPORT(108, void, png_chunk_benign_error, (png_const_structrp png_ptr, - png_const_charp warning_message)); -#endif - -PNG_EXPORT(109, void, png_set_benign_errors, - (png_structrp png_ptr, int allowed)); -#else -# ifdef PNG_ALLOW_BENIGN_ERRORS -# define png_benign_error png_warning -# define png_chunk_benign_error png_chunk_warning -# else -# define png_benign_error png_error -# define png_chunk_benign_error png_chunk_error -# endif -#endif - -/* The png_set_ functions are for storing values in the png_info_struct. - * Similarly, the png_get_ calls are used to read values from the - * png_info_struct, either storing the parameters in the passed variables, or - * setting pointers into the png_info_struct where the data is stored. The - * png_get_ functions return a non-zero value if the data was available - * in info_ptr, or return zero and do not change any of the parameters if the - * data was not available. - * - * These functions should be used instead of directly accessing png_info - * to avoid problems with future changes in the size and internal layout of - * png_info_struct. - */ -/* Returns "flag" if chunk data is valid in info_ptr. */ -PNG_EXPORT(110, png_uint_32, png_get_valid, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_uint_32 flag)); - -/* Returns number of bytes needed to hold a transformed row. */ -PNG_EXPORT(111, png_size_t, png_get_rowbytes, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -#ifdef PNG_INFO_IMAGE_SUPPORTED -/* Returns row_pointers, which is an array of pointers to scanlines that was - * returned from png_read_png(). - */ -PNG_EXPORT(112, png_bytepp, png_get_rows, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Set row_pointers, which is an array of pointers to scanlines for use - * by png_write_png(). - */ -PNG_EXPORT(113, void, png_set_rows, (png_const_structrp png_ptr, - png_inforp info_ptr, png_bytepp row_pointers)); -#endif - -/* Returns number of color channels in image. */ -PNG_EXPORT(114, png_byte, png_get_channels, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -#ifdef PNG_EASY_ACCESS_SUPPORTED -/* Returns image width in pixels. */ -PNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image height in pixels. */ -PNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image bit_depth. */ -PNG_EXPORT(117, png_byte, png_get_bit_depth, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image color_type. */ -PNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image filter_type. */ -PNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image interlace_type. */ -PNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image compression_type. */ -PNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image resolution in pixels per meter, from pHYs chunk data. */ -PNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); - -/* Returns pixel aspect ratio, computed from pHYs chunk data. */ -PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio, - (png_const_structrp png_ptr, png_const_inforp info_ptr)) -PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr)) - -/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ -PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(127, png_int_32, png_get_y_offset_pixels, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(128, png_int_32, png_get_x_offset_microns, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(129, png_int_32, png_get_y_offset_microns, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); - -#endif /* EASY_ACCESS */ - -#ifdef PNG_READ_SUPPORTED -/* Returns pointer to signature string read from PNG header */ -PNG_EXPORT(130, png_const_bytep, png_get_signature, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); -#endif - -#ifdef PNG_bKGD_SUPPORTED -PNG_EXPORT(131, png_uint_32, png_get_bKGD, (png_const_structrp png_ptr, - png_inforp info_ptr, png_color_16p *background)); -#endif - -#ifdef PNG_bKGD_SUPPORTED -PNG_EXPORT(132, void, png_set_bKGD, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_color_16p background)); -#endif - -#ifdef PNG_cHRM_SUPPORTED -PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structrp png_ptr, - png_const_inforp info_ptr, double *white_x, double *white_y, double *red_x, - double *red_y, double *green_x, double *green_y, double *blue_x, - double *blue_y)) -PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_const_structrp png_ptr, - png_const_inforp info_ptr, double *red_X, double *red_Y, double *red_Z, - double *green_X, double *green_Y, double *green_Z, double *blue_X, - double *blue_Y, double *blue_Z)) -PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr, - png_fixed_point *int_white_x, png_fixed_point *int_white_y, - png_fixed_point *int_red_x, png_fixed_point *int_red_y, - png_fixed_point *int_green_x, png_fixed_point *int_green_y, - png_fixed_point *int_blue_x, png_fixed_point *int_blue_y)) -PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr, - png_fixed_point *int_red_X, png_fixed_point *int_red_Y, - png_fixed_point *int_red_Z, png_fixed_point *int_green_X, - png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, - png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, - png_fixed_point *int_blue_Z)) -#endif - -#ifdef PNG_cHRM_SUPPORTED -PNG_FP_EXPORT(135, void, png_set_cHRM, (png_const_structrp png_ptr, - png_inforp info_ptr, - double white_x, double white_y, double red_x, double red_y, double green_x, - double green_y, double blue_x, double blue_y)) -PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_const_structrp png_ptr, - png_inforp info_ptr, double red_X, double red_Y, double red_Z, - double green_X, double green_Y, double green_Z, double blue_X, - double blue_Y, double blue_Z)) -PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_const_structrp png_ptr, - png_inforp info_ptr, png_fixed_point int_white_x, - png_fixed_point int_white_y, png_fixed_point int_red_x, - png_fixed_point int_red_y, png_fixed_point int_green_x, - png_fixed_point int_green_y, png_fixed_point int_blue_x, - png_fixed_point int_blue_y)) -PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_const_structrp png_ptr, - png_inforp info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, - png_fixed_point int_red_Z, png_fixed_point int_green_X, - png_fixed_point int_green_Y, png_fixed_point int_green_Z, - png_fixed_point int_blue_X, png_fixed_point int_blue_Y, - png_fixed_point int_blue_Z)) -#endif - -#ifdef PNG_gAMA_SUPPORTED -PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA, (png_const_structrp png_ptr, - png_const_inforp info_ptr, double *file_gamma)) -PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr, - png_fixed_point *int_file_gamma)) -#endif - -#ifdef PNG_gAMA_SUPPORTED -PNG_FP_EXPORT(139, void, png_set_gAMA, (png_const_structrp png_ptr, - png_inforp info_ptr, double file_gamma)) -PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_const_structrp png_ptr, - png_inforp info_ptr, png_fixed_point int_file_gamma)) -#endif - -#ifdef PNG_hIST_SUPPORTED -PNG_EXPORT(141, png_uint_32, png_get_hIST, (png_const_structrp png_ptr, - png_inforp info_ptr, png_uint_16p *hist)); -#endif - -#ifdef PNG_hIST_SUPPORTED -PNG_EXPORT(142, void, png_set_hIST, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_uint_16p hist)); -#endif - -PNG_EXPORT(143, png_uint_32, png_get_IHDR, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_uint_32 *width, png_uint_32 *height, - int *bit_depth, int *color_type, int *interlace_method, - int *compression_method, int *filter_method)); - -PNG_EXPORT(144, void, png_set_IHDR, (png_const_structrp png_ptr, - png_inforp info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, - int color_type, int interlace_method, int compression_method, - int filter_method)); - -#ifdef PNG_oFFs_SUPPORTED -PNG_EXPORT(145, png_uint_32, png_get_oFFs, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, - int *unit_type)); -#endif - -#ifdef PNG_oFFs_SUPPORTED -PNG_EXPORT(146, void, png_set_oFFs, (png_const_structrp png_ptr, - png_inforp info_ptr, png_int_32 offset_x, png_int_32 offset_y, - int unit_type)); -#endif - -#ifdef PNG_pCAL_SUPPORTED -PNG_EXPORT(147, png_uint_32, png_get_pCAL, (png_const_structrp png_ptr, - png_inforp info_ptr, png_charp *purpose, png_int_32 *X0, - png_int_32 *X1, int *type, int *nparams, png_charp *units, - png_charpp *params)); -#endif - -#ifdef PNG_pCAL_SUPPORTED -PNG_EXPORT(148, void, png_set_pCAL, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_charp purpose, png_int_32 X0, png_int_32 X1, - int type, int nparams, png_const_charp units, png_charpp params)); -#endif - -#ifdef PNG_pHYs_SUPPORTED -PNG_EXPORT(149, png_uint_32, png_get_pHYs, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, - int *unit_type)); -#endif - -#ifdef PNG_pHYs_SUPPORTED -PNG_EXPORT(150, void, png_set_pHYs, (png_const_structrp png_ptr, - png_inforp info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); -#endif - -PNG_EXPORT(151, png_uint_32, png_get_PLTE, (png_const_structrp png_ptr, - png_inforp info_ptr, png_colorp *palette, int *num_palette)); - -PNG_EXPORT(152, void, png_set_PLTE, (png_structrp png_ptr, - png_inforp info_ptr, png_const_colorp palette, int num_palette)); - -#ifdef PNG_sBIT_SUPPORTED -PNG_EXPORT(153, png_uint_32, png_get_sBIT, (png_const_structrp png_ptr, - png_inforp info_ptr, png_color_8p *sig_bit)); -#endif - -#ifdef PNG_sBIT_SUPPORTED -PNG_EXPORT(154, void, png_set_sBIT, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_color_8p sig_bit)); -#endif - -#ifdef PNG_sRGB_SUPPORTED -PNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structrp png_ptr, - png_const_inforp info_ptr, int *file_srgb_intent)); -#endif - -#ifdef PNG_sRGB_SUPPORTED -PNG_EXPORT(156, void, png_set_sRGB, (png_const_structrp png_ptr, - png_inforp info_ptr, int srgb_intent)); -PNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_const_structrp png_ptr, - png_inforp info_ptr, int srgb_intent)); -#endif - -#ifdef PNG_iCCP_SUPPORTED -PNG_EXPORT(158, png_uint_32, png_get_iCCP, (png_const_structrp png_ptr, - png_inforp info_ptr, png_charpp name, int *compression_type, - png_bytepp profile, png_uint_32 *proflen)); -#endif - -#ifdef PNG_iCCP_SUPPORTED -PNG_EXPORT(159, void, png_set_iCCP, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_charp name, int compression_type, - png_const_bytep profile, png_uint_32 proflen)); -#endif - -#ifdef PNG_sPLT_SUPPORTED -PNG_EXPORT(160, int, png_get_sPLT, (png_const_structrp png_ptr, - png_inforp info_ptr, png_sPLT_tpp entries)); -#endif - -#ifdef PNG_sPLT_SUPPORTED -PNG_EXPORT(161, void, png_set_sPLT, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_sPLT_tp entries, int nentries)); -#endif - -#ifdef PNG_TEXT_SUPPORTED -/* png_get_text also returns the number of text chunks in *num_text */ -PNG_EXPORT(162, int, png_get_text, (png_const_structrp png_ptr, - png_inforp info_ptr, png_textp *text_ptr, int *num_text)); -#endif - -/* Note while png_set_text() will accept a structure whose text, - * language, and translated keywords are NULL pointers, the structure - * returned by png_get_text will always contain regular - * zero-terminated C strings. They might be empty strings but - * they will never be NULL pointers. - */ - -#ifdef PNG_TEXT_SUPPORTED -PNG_EXPORT(163, void, png_set_text, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_textp text_ptr, int num_text)); -#endif - -#ifdef PNG_tIME_SUPPORTED -PNG_EXPORT(164, png_uint_32, png_get_tIME, (png_const_structrp png_ptr, - png_inforp info_ptr, png_timep *mod_time)); -#endif - -#ifdef PNG_tIME_SUPPORTED -PNG_EXPORT(165, void, png_set_tIME, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_timep mod_time)); -#endif - -#ifdef PNG_tRNS_SUPPORTED -PNG_EXPORT(166, png_uint_32, png_get_tRNS, (png_const_structrp png_ptr, - png_inforp info_ptr, png_bytep *trans_alpha, int *num_trans, - png_color_16p *trans_color)); -#endif - -#ifdef PNG_tRNS_SUPPORTED -PNG_EXPORT(167, void, png_set_tRNS, (png_structrp png_ptr, - png_inforp info_ptr, png_const_bytep trans_alpha, int num_trans, - png_const_color_16p trans_color)); -#endif - -#ifdef PNG_sCAL_SUPPORTED -PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, (png_const_structrp png_ptr, - png_const_inforp info_ptr, int *unit, double *width, double *height)) -#if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \ - defined(PNG_FLOATING_POINT_SUPPORTED) -/* NOTE: this API is currently implemented using floating point arithmetic, - * consequently it can only be used on systems with floating point support. - * In any case the range of values supported by png_fixed_point is small and it - * is highly recommended that png_get_sCAL_s be used instead. - */ -PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, - png_fixed_point *width, png_fixed_point *height)) -#endif -PNG_EXPORT(169, png_uint_32, png_get_sCAL_s, - (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, - png_charpp swidth, png_charpp sheight)); - -PNG_FP_EXPORT(170, void, png_set_sCAL, (png_const_structrp png_ptr, - png_inforp info_ptr, int unit, double width, double height)) -PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_const_structrp png_ptr, - png_inforp info_ptr, int unit, png_fixed_point width, - png_fixed_point height)) -PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr, - png_inforp info_ptr, int unit, - png_const_charp swidth, png_const_charp sheight)); -#endif /* sCAL */ - -#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED -/* Provide the default handling for all unknown chunks or, optionally, for - * specific unknown chunks. - * - * NOTE: prior to 1.6.0 the handling specified for particular chunks on read was - * ignored and the default was used, the per-chunk setting only had an effect on - * write. If you wish to have chunk-specific handling on read in code that must - * work on earlier versions you must use a user chunk callback to specify the - * desired handling (keep or discard.) - * - * The 'keep' parameter is a PNG_HANDLE_CHUNK_ value as listed below. The - * parameter is interpreted as follows: - * - * READ: - * PNG_HANDLE_CHUNK_AS_DEFAULT: - * Known chunks: do normal libpng processing, do not keep the chunk (but - * see the comments below about PNG_HANDLE_AS_UNKNOWN_SUPPORTED) - * Unknown chunks: for a specific chunk use the global default, when used - * as the default discard the chunk data. - * PNG_HANDLE_CHUNK_NEVER: - * Discard the chunk data. - * PNG_HANDLE_CHUNK_IF_SAFE: - * Keep the chunk data if the chunk is not critical else raise a chunk - * error. - * PNG_HANDLE_CHUNK_ALWAYS: - * Keep the chunk data. - * - * If the chunk data is saved it can be retrieved using png_get_unknown_chunks, - * below. Notice that specifying "AS_DEFAULT" as a global default is equivalent - * to specifying "NEVER", however when "AS_DEFAULT" is used for specific chunks - * it simply resets the behavior to the libpng default. - * - * INTERACTION WTIH USER CHUNK CALLBACKS: - * The per-chunk handling is always used when there is a png_user_chunk_ptr - * callback and the callback returns 0; the chunk is then always stored *unless* - * it is critical and the per-chunk setting is other than ALWAYS. Notice that - * the global default is *not* used in this case. (In effect the per-chunk - * value is incremented to at least IF_SAFE.) - * - * IMPORTANT NOTE: this behavior will change in libpng 1.7 - the global and - * per-chunk defaults will be honored. If you want to preserve the current - * behavior when your callback returns 0 you must set PNG_HANDLE_CHUNK_IF_SAFE - * as the default - if you don't do this libpng 1.6 will issue a warning. - * - * If you want unhandled unknown chunks to be discarded in libpng 1.6 and - * earlier simply return '1' (handled). - * - * PNG_HANDLE_AS_UNKNOWN_SUPPORTED: - * If this is *not* set known chunks will always be handled by libpng and - * will never be stored in the unknown chunk list. Known chunks listed to - * png_set_keep_unknown_chunks will have no effect. If it is set then known - * chunks listed with a keep other than AS_DEFAULT will *never* be processed - * by libpng, in addition critical chunks must either be processed by the - * callback or saved. - * - * The IHDR and IEND chunks must not be listed. Because this turns off the - * default handling for chunks that would otherwise be recognized the - * behavior of libpng transformations may well become incorrect! - * - * WRITE: - * When writing chunks the options only apply to the chunks specified by - * png_set_unknown_chunks (below), libpng will *always* write known chunks - * required by png_set_ calls and will always write the core critical chunks - * (as required for PLTE). - * - * Each chunk in the png_set_unknown_chunks list is looked up in the - * png_set_keep_unknown_chunks list to find the keep setting, this is then - * interpreted as follows: - * - * PNG_HANDLE_CHUNK_AS_DEFAULT: - * Write safe-to-copy chunks and write other chunks if the global - * default is set to _ALWAYS, otherwise don't write this chunk. - * PNG_HANDLE_CHUNK_NEVER: - * Do not write the chunk. - * PNG_HANDLE_CHUNK_IF_SAFE: - * Write the chunk if it is safe-to-copy, otherwise do not write it. - * PNG_HANDLE_CHUNK_ALWAYS: - * Write the chunk. - * - * Note that the default behavior is effectively the opposite of the read case - - * in read unknown chunks are not stored by default, in write they are written - * by default. Also the behavior of PNG_HANDLE_CHUNK_IF_SAFE is very different - * - on write the safe-to-copy bit is checked, on read the critical bit is - * checked and on read if the chunk is critical an error will be raised. - * - * num_chunks: - * =========== - * If num_chunks is positive, then the "keep" parameter specifies the manner - * for handling only those chunks appearing in the chunk_list array, - * otherwise the chunk list array is ignored. - * - * If num_chunks is 0 the "keep" parameter specifies the default behavior for - * unknown chunks, as described above. - * - * If num_chunks is negative, then the "keep" parameter specifies the manner - * for handling all unknown chunks plus all chunks recognized by libpng - * except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to - * be processed by libpng. - */ -PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr, - int keep, png_const_bytep chunk_list, int num_chunks)); - -/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned; - * the result is therefore true (non-zero) if special handling is required, - * false for the default handling. - */ -PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr, - png_const_bytep chunk_name)); -#endif - -#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED -PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_unknown_chunkp unknowns, - int num_unknowns)); - /* NOTE: prior to 1.6.0 this routine set the 'location' field of the added - * unknowns to the location currently stored in the png_struct. This is - * invariably the wrong value on write. To fix this call the following API - * for each chunk in the list with the correct location. If you know your - * code won't be compiled on earlier versions you can rely on - * png_set_unknown_chunks(write-ptr, png_get_unknown_chunks(read-ptr)) doing - * the correct thing. - */ - -PNG_EXPORT(175, void, png_set_unknown_chunk_location, - (png_const_structrp png_ptr, png_inforp info_ptr, int chunk, int location)); - -PNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structrp png_ptr, - png_inforp info_ptr, png_unknown_chunkpp entries)); -#endif - -/* Png_free_data() will turn off the "valid" flag for anything it frees. - * If you need to turn it off for a chunk that your application has freed, - * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); - */ -PNG_EXPORT(177, void, png_set_invalid, (png_const_structrp png_ptr, - png_inforp info_ptr, int mask)); - -#ifdef PNG_INFO_IMAGE_SUPPORTED -/* The "params" pointer is currently not used and is for future expansion. */ -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -PNG_EXPORT(178, void, png_read_png, (png_structrp png_ptr, png_inforp info_ptr, - int transforms, png_voidp params)); -#endif -#ifdef PNG_WRITE_SUPPORTED -PNG_EXPORT(179, void, png_write_png, (png_structrp png_ptr, png_inforp info_ptr, - int transforms, png_voidp params)); -#endif -#endif - -PNG_EXPORT(180, png_const_charp, png_get_copyright, - (png_const_structrp png_ptr)); -PNG_EXPORT(181, png_const_charp, png_get_header_ver, - (png_const_structrp png_ptr)); -PNG_EXPORT(182, png_const_charp, png_get_header_version, - (png_const_structrp png_ptr)); -PNG_EXPORT(183, png_const_charp, png_get_libpng_ver, - (png_const_structrp png_ptr)); - -#ifdef PNG_MNG_FEATURES_SUPPORTED -PNG_EXPORT(184, png_uint_32, png_permit_mng_features, (png_structrp png_ptr, - png_uint_32 mng_features_permitted)); -#endif - -/* For use in png_set_keep_unknown, added to version 1.2.6 */ -#define PNG_HANDLE_CHUNK_AS_DEFAULT 0 -#define PNG_HANDLE_CHUNK_NEVER 1 -#define PNG_HANDLE_CHUNK_IF_SAFE 2 -#define PNG_HANDLE_CHUNK_ALWAYS 3 -#define PNG_HANDLE_CHUNK_LAST 4 - -/* Strip the prepended error numbers ("#nnn ") from error and warning - * messages before passing them to the error or warning handler. - */ -#ifdef PNG_ERROR_NUMBERS_SUPPORTED -PNG_EXPORT(185, void, png_set_strip_error_numbers, (png_structrp png_ptr, - png_uint_32 strip_mode)); -#endif - -/* Added in libpng-1.2.6 */ -#ifdef PNG_SET_USER_LIMITS_SUPPORTED -PNG_EXPORT(186, void, png_set_user_limits, (png_structrp png_ptr, - png_uint_32 user_width_max, png_uint_32 user_height_max)); -PNG_EXPORT(187, png_uint_32, png_get_user_width_max, - (png_const_structrp png_ptr)); -PNG_EXPORT(188, png_uint_32, png_get_user_height_max, - (png_const_structrp png_ptr)); -/* Added in libpng-1.4.0 */ -PNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structrp png_ptr, - png_uint_32 user_chunk_cache_max)); -PNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max, - (png_const_structrp png_ptr)); -/* Added in libpng-1.4.1 */ -PNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structrp png_ptr, - png_alloc_size_t user_chunk_cache_max)); -PNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max, - (png_const_structrp png_ptr)); -#endif - -#if defined(PNG_INCH_CONVERSIONS_SUPPORTED) -PNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); - -PNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); - -PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); - -PNG_FP_EXPORT(196, float, png_get_x_offset_inches, - (png_const_structrp png_ptr, png_const_inforp info_ptr)) -#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ -PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr)) -#endif - -PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structrp png_ptr, - png_const_inforp info_ptr)) -#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ -PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr)) -#endif - -# ifdef PNG_pHYs_SUPPORTED -PNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, - int *unit_type)); -# endif /* pHYs */ -#endif /* INCH_CONVERSIONS */ - -/* Added in libpng-1.4.0 */ -#ifdef PNG_IO_STATE_SUPPORTED -PNG_EXPORT(199, png_uint_32, png_get_io_state, (png_const_structrp png_ptr)); - -/* Removed from libpng 1.6; use png_get_io_chunk_type. */ -PNG_REMOVED(200, png_const_bytep, png_get_io_chunk_name, (png_structrp png_ptr), - PNG_DEPRECATED) - -PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type, - (png_const_structrp png_ptr)); - -/* The flags returned by png_get_io_state() are the following: */ -# define PNG_IO_NONE 0x0000 /* no I/O at this moment */ -# define PNG_IO_READING 0x0001 /* currently reading */ -# define PNG_IO_WRITING 0x0002 /* currently writing */ -# define PNG_IO_SIGNATURE 0x0010 /* currently at the file signature */ -# define PNG_IO_CHUNK_HDR 0x0020 /* currently at the chunk header */ -# define PNG_IO_CHUNK_DATA 0x0040 /* currently at the chunk data */ -# define PNG_IO_CHUNK_CRC 0x0080 /* currently at the chunk crc */ -# define PNG_IO_MASK_OP 0x000f /* current operation: reading/writing */ -# define PNG_IO_MASK_LOC 0x00f0 /* current location: sig/hdr/data/crc */ -#endif /* IO_STATE */ - -/* Interlace support. The following macros are always defined so that if - * libpng interlace handling is turned off the macros may be used to handle - * interlaced images within the application. - */ -#define PNG_INTERLACE_ADAM7_PASSES 7 - -/* Two macros to return the first row and first column of the original, - * full, image which appears in a given pass. 'pass' is in the range 0 - * to 6 and the result is in the range 0 to 7. - */ -#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7) -#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7) - -/* A macro to return the offset between pixels in the output row for a pair of - * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that - * follows. Note that ROW_OFFSET is the offset from one row to the next whereas - * COL_OFFSET is from one column to the next, within a row. - */ -#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8) -#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1)) - -/* Two macros to help evaluate the number of rows or columns in each - * pass. This is expressed as a shift - effectively log2 of the number or - * rows or columns in each 8x8 tile of the original image. - */ -#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3) -#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3) - -/* Hence two macros to determine the number of rows or columns in a given - * pass of an image given its height or width. In fact these macros may - * return non-zero even though the sub-image is empty, because the other - * dimension may be empty for a small image. - */ -#define PNG_PASS_ROWS(height, pass) (((height)+(((1<>PNG_PASS_ROW_SHIFT(pass)) -#define PNG_PASS_COLS(width, pass) (((width)+(((1<>PNG_PASS_COL_SHIFT(pass)) - -/* For the reader row callbacks (both progressive and sequential) it is - * necessary to find the row in the output image given a row in an interlaced - * image, so two more macros: - */ -#define PNG_ROW_FROM_PASS_ROW(y_in, pass) \ - (((y_in)<>(((7-(off))-(pass))<<2)) & 0xF) | \ - ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0)) - -#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \ - ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1) -#define PNG_COL_IN_INTERLACE_PASS(x, pass) \ - ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1) - -#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED -/* With these routines we avoid an integer divide, which will be slower on - * most machines. However, it does take more operations than the corresponding - * divide method, so it may be slower on a few RISC systems. There are two - * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. - * - * Note that the rounding factors are NOT supposed to be the same! 128 and - * 32768 are correct for the NODIV code; 127 and 32767 are correct for the - * standard method. - * - * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] - */ - - /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ - -# define png_composite(composite, fg, alpha, bg) \ - { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \ - * (png_uint_16)(alpha) \ - + (png_uint_16)(bg)*(png_uint_16)(255 \ - - (png_uint_16)(alpha)) + 128); \ - (composite) = (png_byte)(((temp + (temp >> 8)) >> 8) & 0xff); } - -# define png_composite_16(composite, fg, alpha, bg) \ - { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \ - * (png_uint_32)(alpha) \ - + (png_uint_32)(bg)*(65535 \ - - (png_uint_32)(alpha)) + 32768); \ - (composite) = (png_uint_16)(0xffff & ((temp + (temp >> 16)) >> 16)); } - -#else /* Standard method using integer division */ - -# define png_composite(composite, fg, alpha, bg) \ - (composite) = \ - (png_byte)(0xff & (((png_uint_16)(fg) * (png_uint_16)(alpha) + \ - (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ - 127) / 255)) - -# define png_composite_16(composite, fg, alpha, bg) \ - (composite) = \ - (png_uint_16)(0xffff & (((png_uint_32)(fg) * (png_uint_32)(alpha) + \ - (png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) + \ - 32767) / 65535)) -#endif /* READ_COMPOSITE_NODIV */ - -#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED -PNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf)); -PNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf)); -PNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf)); -#endif - -PNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_const_structrp png_ptr, - png_const_bytep buf)); -/* No png_get_int_16 -- may be added if there's a real need for it. */ - -/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */ -#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED -PNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i)); -#endif -#ifdef PNG_SAVE_INT_32_SUPPORTED -PNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i)); -#endif - -/* Place a 16-bit number into a buffer in PNG byte order. - * The parameter is declared unsigned int, not png_uint_16, - * just to avoid potential problems on pre-ANSI C compilers. - */ -#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED -PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i)); -/* No png_save_int_16 -- may be added if there's a real need for it. */ -#endif - -#ifdef PNG_USE_READ_MACROS -/* Inline macros to do direct reads of bytes from the input buffer. - * The png_get_int_32() routine assumes we are using two's complement - * format for negative values, which is almost certainly true. - */ -# define PNG_get_uint_32(buf) \ - (((png_uint_32)(*(buf)) << 24) + \ - ((png_uint_32)(*((buf) + 1)) << 16) + \ - ((png_uint_32)(*((buf) + 2)) << 8) + \ - ((png_uint_32)(*((buf) + 3)))) - - /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the - * function) incorrectly returned a value of type png_uint_32. - */ -# define PNG_get_uint_16(buf) \ - ((png_uint_16) \ - (((unsigned int)(*(buf)) << 8) + \ - ((unsigned int)(*((buf) + 1))))) - -# define PNG_get_int_32(buf) \ - ((png_int_32)((*(buf) & 0x80) \ - ? -((png_int_32)(((png_get_uint_32(buf)^0xffffffffU)+1U)&0x7fffffffU)) \ - : (png_int_32)png_get_uint_32(buf))) - - /* If PNG_PREFIX is defined the same thing as below happens in pnglibconf.h, - * but defining a macro name prefixed with PNG_PREFIX. - */ -# ifndef PNG_PREFIX -# define png_get_uint_32(buf) PNG_get_uint_32(buf) -# define png_get_uint_16(buf) PNG_get_uint_16(buf) -# define png_get_int_32(buf) PNG_get_int_32(buf) -# endif -#else -# ifdef PNG_PREFIX - /* No macros; revert to the (redefined) function */ -# define PNG_get_uint_32 (png_get_uint_32) -# define PNG_get_uint_16 (png_get_uint_16) -# define PNG_get_int_32 (png_get_int_32) -# endif -#endif - -#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED -PNG_EXPORT(242, void, png_set_check_for_invalid_index, - (png_structrp png_ptr, int allowed)); -# ifdef PNG_GET_PALETTE_MAX_SUPPORTED -PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr, - png_const_infop info_ptr)); -# endif -#endif /* CHECK_FOR_INVALID_INDEX */ - -/******************************************************************************* - * Section 5: SIMPLIFIED API - ******************************************************************************* - * - * Please read the documentation in libpng-manual.txt (TODO: write said - * documentation) if you don't understand what follows. - * - * The simplified API hides the details of both libpng and the PNG file format - * itself. It allows PNG files to be read into a very limited number of - * in-memory bitmap formats or to be written from the same formats. If these - * formats do not accomodate your needs then you can, and should, use the more - * sophisticated APIs above - these support a wide variety of in-memory formats - * and a wide variety of sophisticated transformations to those formats as well - * as a wide variety of APIs to manipulate ancillary information. - * - * To read a PNG file using the simplified API: - * - * 1) Declare a 'png_image' structure (see below) on the stack, set the - * version field to PNG_IMAGE_VERSION and the 'opaque' pointer to NULL - * (this is REQUIRED, your program may crash if you don't do it.) - * 2) Call the appropriate png_image_begin_read... function. - * 3) Set the png_image 'format' member to the required sample format. - * 4) Allocate a buffer for the image and, if required, the color-map. - * 5) Call png_image_finish_read to read the image and, if required, the - * color-map into your buffers. - * - * There are no restrictions on the format of the PNG input itself; all valid - * color types, bit depths, and interlace methods are acceptable, and the - * input image is transformed as necessary to the requested in-memory format - * during the png_image_finish_read() step. The only caveat is that if you - * request a color-mapped image from a PNG that is full-color or makes - * complex use of an alpha channel the transformation is extremely lossy and the - * result may look terrible. - * - * To write a PNG file using the simplified API: - * - * 1) Declare a 'png_image' structure on the stack and memset() it to all zero. - * 2) Initialize the members of the structure that describe the image, setting - * the 'format' member to the format of the image samples. - * 3) Call the appropriate png_image_write... function with a pointer to the - * image and, if necessary, the color-map to write the PNG data. - * - * png_image is a structure that describes the in-memory format of an image - * when it is being read or defines the in-memory format of an image that you - * need to write: - */ -#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) || \ - defined(PNG_SIMPLIFIED_WRITE_SUPPORTED) - -#define PNG_IMAGE_VERSION 1 - -typedef struct png_control *png_controlp; -typedef struct -{ - png_controlp opaque; /* Initialize to NULL, free with png_image_free */ - png_uint_32 version; /* Set to PNG_IMAGE_VERSION */ - png_uint_32 width; /* Image width in pixels (columns) */ - png_uint_32 height; /* Image height in pixels (rows) */ - png_uint_32 format; /* Image format as defined below */ - png_uint_32 flags; /* A bit mask containing informational flags */ - png_uint_32 colormap_entries; - /* Number of entries in the color-map */ - - /* In the event of an error or warning the following field will be set to a - * non-zero value and the 'message' field will contain a '\0' terminated - * string with the libpng error or warning message. If both warnings and - * an error were encountered, only the error is recorded. If there - * are multiple warnings, only the first one is recorded. - * - * The upper 30 bits of this value are reserved, the low two bits contain - * a value as follows: - */ -# define PNG_IMAGE_WARNING 1 -# define PNG_IMAGE_ERROR 2 - /* - * The result is a two-bit code such that a value more than 1 indicates - * a failure in the API just called: - * - * 0 - no warning or error - * 1 - warning - * 2 - error - * 3 - error preceded by warning - */ -# define PNG_IMAGE_FAILED(png_cntrl) ((((png_cntrl).warning_or_error)&0x03)>1) - - png_uint_32 warning_or_error; - - char message[64]; -} png_image, *png_imagep; - -/* The samples of the image have one to four channels whose components have - * original values in the range 0 to 1.0: - * - * 1: A single gray or luminance channel (G). - * 2: A gray/luminance channel and an alpha channel (GA). - * 3: Three red, green, blue color channels (RGB). - * 4: Three color channels and an alpha channel (RGBA). - * - * The components are encoded in one of two ways: - * - * a) As a small integer, value 0..255, contained in a single byte. For the - * alpha channel the original value is simply value/255. For the color or - * luminance channels the value is encoded according to the sRGB specification - * and matches the 8-bit format expected by typical display devices. - * - * The color/gray channels are not scaled (pre-multiplied) by the alpha - * channel and are suitable for passing to color management software. - * - * b) As a value in the range 0..65535, contained in a 2-byte integer. All - * channels can be converted to the original value by dividing by 65535; all - * channels are linear. Color channels use the RGB encoding (RGB end-points) of - * the sRGB specification. This encoding is identified by the - * PNG_FORMAT_FLAG_LINEAR flag below. - * - * When the simplified API needs to convert between sRGB and linear colorspaces, - * the actual sRGB transfer curve defined in the sRGB specification (see the - * article at http://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2 - * approximation used elsewhere in libpng. - * - * When an alpha channel is present it is expected to denote pixel coverage - * of the color or luminance channels and is returned as an associated alpha - * channel: the color/gray channels are scaled (pre-multiplied) by the alpha - * value. - * - * The samples are either contained directly in the image data, between 1 and 8 - * bytes per pixel according to the encoding, or are held in a color-map indexed - * by bytes in the image data. In the case of a color-map the color-map entries - * are individual samples, encoded as above, and the image data has one byte per - * pixel to select the relevant sample from the color-map. - */ - -/* PNG_FORMAT_* - * - * #defines to be used in png_image::format. Each #define identifies a - * particular layout of sample data and, if present, alpha values. There are - * separate defines for each of the two component encodings. - * - * A format is built up using single bit flag values. All combinations are - * valid. Formats can be built up from the flag values or you can use one of - * the predefined values below. When testing formats always use the FORMAT_FLAG - * macros to test for individual features - future versions of the library may - * add new flags. - * - * When reading or writing color-mapped images the format should be set to the - * format of the entries in the color-map then png_image_{read,write}_colormap - * called to read or write the color-map and set the format correctly for the - * image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly! - * - * NOTE: libpng can be built with particular features disabled. If you see - * compiler errors because the definition of one of the following flags has been - * compiled out it is because libpng does not have the required support. It is - * possible, however, for the libpng configuration to enable the format on just - * read or just write; in that case you may see an error at run time. You can - * guard against this by checking for the definition of the appropriate - * "_SUPPORTED" macro, one of: - * - * PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED - */ -#define PNG_FORMAT_FLAG_ALPHA 0x01U /* format with an alpha channel */ -#define PNG_FORMAT_FLAG_COLOR 0x02U /* color format: otherwise grayscale */ -#define PNG_FORMAT_FLAG_LINEAR 0x04U /* 2-byte channels else 1-byte */ -#define PNG_FORMAT_FLAG_COLORMAP 0x08U /* image data is color-mapped */ - -#ifdef PNG_FORMAT_BGR_SUPPORTED -# define PNG_FORMAT_FLAG_BGR 0x10U /* BGR colors, else order is RGB */ -#endif - -#ifdef PNG_FORMAT_AFIRST_SUPPORTED -# define PNG_FORMAT_FLAG_AFIRST 0x20U /* alpha channel comes first */ -#endif - -/* Commonly used formats have predefined macros. - * - * First the single byte (sRGB) formats: - */ -#define PNG_FORMAT_GRAY 0 -#define PNG_FORMAT_GA PNG_FORMAT_FLAG_ALPHA -#define PNG_FORMAT_AG (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST) -#define PNG_FORMAT_RGB PNG_FORMAT_FLAG_COLOR -#define PNG_FORMAT_BGR (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR) -#define PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA) -#define PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST) -#define PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA) -#define PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST) - -/* Then the linear 2-byte formats. When naming these "Y" is used to - * indicate a luminance (gray) channel. - */ -#define PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR -#define PNG_FORMAT_LINEAR_Y_ALPHA (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA) -#define PNG_FORMAT_LINEAR_RGB (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR) -#define PNG_FORMAT_LINEAR_RGB_ALPHA \ - (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA) - -/* With color-mapped formats the image data is one byte for each pixel, the byte - * is an index into the color-map which is formatted as above. To obtain a - * color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP - * to one of the above definitions, or you can use one of the definitions below. - */ -#define PNG_FORMAT_RGB_COLORMAP (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_COLORMAP) -#define PNG_FORMAT_BGR_COLORMAP (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_COLORMAP) -#define PNG_FORMAT_RGBA_COLORMAP (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_COLORMAP) -#define PNG_FORMAT_ARGB_COLORMAP (PNG_FORMAT_ARGB|PNG_FORMAT_FLAG_COLORMAP) -#define PNG_FORMAT_BGRA_COLORMAP (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_COLORMAP) -#define PNG_FORMAT_ABGR_COLORMAP (PNG_FORMAT_ABGR|PNG_FORMAT_FLAG_COLORMAP) - -/* PNG_IMAGE macros - * - * These are convenience macros to derive information from a png_image - * structure. The PNG_IMAGE_SAMPLE_ macros return values appropriate to the - * actual image sample values - either the entries in the color-map or the - * pixels in the image. The PNG_IMAGE_PIXEL_ macros return corresponding values - * for the pixels and will always return 1 for color-mapped formats. The - * remaining macros return information about the rows in the image and the - * complete image. - * - * NOTE: All the macros that take a png_image::format parameter are compile time - * constants if the format parameter is, itself, a constant. Therefore these - * macros can be used in array declarations and case labels where required. - * Similarly the macros are also pre-processor constants (sizeof is not used) so - * they can be used in #if tests. - * - * First the information about the samples. - */ -#define PNG_IMAGE_SAMPLE_CHANNELS(fmt)\ - (((fmt)&(PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA))+1) - /* Return the total number of channels in a given format: 1..4 */ - -#define PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)\ - ((((fmt) & PNG_FORMAT_FLAG_LINEAR) >> 2)+1) - /* Return the size in bytes of a single component of a pixel or color-map - * entry (as appropriate) in the image: 1 or 2. - */ - -#define PNG_IMAGE_SAMPLE_SIZE(fmt)\ - (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)) - /* This is the size of the sample data for one sample. If the image is - * color-mapped it is the size of one color-map entry (and image pixels are - * one byte in size), otherwise it is the size of one image pixel. - */ - -#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\ - (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256) - /* The maximum size of the color-map required by the format expressed in a - * count of components. This can be used to compile-time allocate a - * color-map: - * - * png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)]; - * - * png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)]; - * - * Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the - * information from one of the png_image_begin_read_ APIs and dynamically - * allocate the required memory. - */ - -/* Corresponding information about the pixels */ -#define PNG_IMAGE_PIXEL_(test,fmt)\ - (((fmt)&PNG_FORMAT_FLAG_COLORMAP)?1:test(fmt)) - -#define PNG_IMAGE_PIXEL_CHANNELS(fmt)\ - PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_CHANNELS,fmt) - /* The number of separate channels (components) in a pixel; 1 for a - * color-mapped image. - */ - -#define PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\ - PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_COMPONENT_SIZE,fmt) - /* The size, in bytes, of each component in a pixel; 1 for a color-mapped - * image. - */ - -#define PNG_IMAGE_PIXEL_SIZE(fmt) PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_SIZE,fmt) - /* The size, in bytes, of a complete pixel; 1 for a color-mapped image. */ - -/* Information about the whole row, or whole image */ -#define PNG_IMAGE_ROW_STRIDE(image)\ - (PNG_IMAGE_PIXEL_CHANNELS((image).format) * (image).width) - /* Return the total number of components in a single row of the image; this - * is the minimum 'row stride', the minimum count of components between each - * row. For a color-mapped image this is the minimum number of bytes in a - * row. - */ - -#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\ - (PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride)) - /* Return the size, in bytes, of an image buffer given a png_image and a row - * stride - the number of components to leave space for in each row. - */ - -#define PNG_IMAGE_SIZE(image)\ - PNG_IMAGE_BUFFER_SIZE(image, PNG_IMAGE_ROW_STRIDE(image)) - /* Return the size, in bytes, of the image in memory given just a png_image; - * the row stride is the minimum stride required for the image. - */ - -#define PNG_IMAGE_COLORMAP_SIZE(image)\ - (PNG_IMAGE_SAMPLE_SIZE((image).format) * (image).colormap_entries) - /* Return the size, in bytes, of the color-map of this image. If the image - * format is not a color-map format this will return a size sufficient for - * 256 entries in the given format; check PNG_FORMAT_FLAG_COLORMAP if - * you don't want to allocate a color-map in this case. - */ - -/* PNG_IMAGE_FLAG_* - * - * Flags containing additional information about the image are held in the - * 'flags' field of png_image. - */ -#define PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB 0x01 - /* This indicates the the RGB values of the in-memory bitmap do not - * correspond to the red, green and blue end-points defined by sRGB. - */ - -#define PNG_IMAGE_FLAG_FAST 0x02 - /* On write emphasise speed over compression; the resultant PNG file will be - * larger but will be produced significantly faster, particular for large - * images. Do not use this option for images which will be distributed, only - * used it when producing intermediate files that will be read back in - * repeatedly. For a typical 24-bit image the option will double the read - * speed at the cost of increasing the image size by 25%, however for many - * more compressible images the PNG file can be 10 times larger with only a - * slight speed gain. - */ - -#define PNG_IMAGE_FLAG_16BIT_sRGB 0x04 - /* On read if the image is a 16-bit per component image and there is no gAMA - * or sRGB chunk assume that the components are sRGB encoded. Notice that - * images output by the simplified API always have gamma information; setting - * this flag only affects the interpretation of 16-bit images from an - * external source. It is recommended that the application expose this flag - * to the user; the user can normally easily recognize the difference between - * linear and sRGB encoding. This flag has no effect on write - the data - * passed to the write APIs must have the correct encoding (as defined - * above.) - * - * If the flag is not set (the default) input 16-bit per component data is - * assumed to be linear. - * - * NOTE: the flag can only be set after the png_image_begin_read_ call, - * because that call initializes the 'flags' field. - */ - -#ifdef PNG_SIMPLIFIED_READ_SUPPORTED -/* READ APIs - * --------- - * - * The png_image passed to the read APIs must have been initialized by setting - * the png_controlp field 'opaque' to NULL (or, safer, memset the whole thing.) - */ -#ifdef PNG_STDIO_SUPPORTED -PNG_EXPORT(234, int, png_image_begin_read_from_file, (png_imagep image, - const char *file_name)); - /* The named file is opened for read and the image header is filled in - * from the PNG header in the file. - */ - -PNG_EXPORT(235, int, png_image_begin_read_from_stdio, (png_imagep image, - FILE* file)); - /* The PNG header is read from the stdio FILE object. */ -#endif /* STDIO */ - -PNG_EXPORT(236, int, png_image_begin_read_from_memory, (png_imagep image, - png_const_voidp memory, png_size_t size)); - /* The PNG header is read from the given memory buffer. */ - -PNG_EXPORT(237, int, png_image_finish_read, (png_imagep image, - png_const_colorp background, void *buffer, png_int_32 row_stride, - void *colormap)); - /* Finish reading the image into the supplied buffer and clean up the - * png_image structure. - * - * row_stride is the step, in byte or 2-byte units as appropriate, - * between adjacent rows. A positive stride indicates that the top-most row - * is first in the buffer - the normal top-down arrangement. A negative - * stride indicates that the bottom-most row is first in the buffer. - * - * background need only be supplied if an alpha channel must be removed from - * a png_byte format and the removal is to be done by compositing on a solid - * color; otherwise it may be NULL and any composition will be done directly - * onto the buffer. The value is an sRGB color to use for the background, - * for grayscale output the green channel is used. - * - * background must be supplied when an alpha channel must be removed from a - * single byte color-mapped output format, in other words if: - * - * 1) The original format from png_image_begin_read_from_* had - * PNG_FORMAT_FLAG_ALPHA set. - * 2) The format set by the application does not. - * 3) The format set by the application has PNG_FORMAT_FLAG_COLORMAP set and - * PNG_FORMAT_FLAG_LINEAR *not* set. - * - * For linear output removing the alpha channel is always done by compositing - * on black and background is ignored. - * - * colormap must be supplied when PNG_FORMAT_FLAG_COLORMAP is set. It must - * be at least the size (in bytes) returned by PNG_IMAGE_COLORMAP_SIZE. - * image->colormap_entries will be updated to the actual number of entries - * written to the colormap; this may be less than the original value. - */ - -PNG_EXPORT(238, void, png_image_free, (png_imagep image)); - /* Free any data allocated by libpng in image->opaque, setting the pointer to - * NULL. May be called at any time after the structure is initialized. - */ -#endif /* SIMPLIFIED_READ */ - -#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED -#ifdef PNG_STDIO_SUPPORTED -/* WRITE APIS - * ---------- - * For write you must initialize a png_image structure to describe the image to - * be written. To do this use memset to set the whole structure to 0 then - * initialize fields describing your image. - * - * version: must be set to PNG_IMAGE_VERSION - * opaque: must be initialized to NULL - * width: image width in pixels - * height: image height in rows - * format: the format of the data (image and color-map) you wish to write - * flags: set to 0 unless one of the defined flags applies; set - * PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB for color format images where the RGB - * values do not correspond to the colors in sRGB. - * colormap_entries: set to the number of entries in the color-map (0 to 256) - */ -PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image, - const char *file, int convert_to_8bit, const void *buffer, - png_int_32 row_stride, const void *colormap)); - /* Write the image to the named file. */ - -PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file, - int convert_to_8_bit, const void *buffer, png_int_32 row_stride, - const void *colormap)); - /* Write the image to the given (FILE*). */ - -/* With both write APIs if image is in one of the linear formats with 16-bit - * data then setting convert_to_8_bit will cause the output to be an 8-bit PNG - * gamma encoded according to the sRGB specification, otherwise a 16-bit linear - * encoded PNG file is written. - * - * With color-mapped data formats the colormap parameter point to a color-map - * with at least image->colormap_entries encoded in the specified format. If - * the format is linear the written PNG color-map will be converted to sRGB - * regardless of the convert_to_8_bit flag. - * - * With all APIs row_stride is handled as in the read APIs - it is the spacing - * from one row to the next in component sized units (1 or 2 bytes) and if - * negative indicates a bottom-up row layout in the buffer. If row_stride is zero, - * libpng will calculate it for you from the image width and number of channels. - * - * Note that the write API does not support interlacing, sub-8-bit pixels, indexed - * PNG (color_type 3) or most ancillary chunks. - */ -#endif /* STDIO */ -#endif /* SIMPLIFIED_WRITE */ -/******************************************************************************* - * END OF SIMPLIFIED API - ******************************************************************************/ -#endif /* SIMPLIFIED_{READ|WRITE} */ - -/******************************************************************************* - * Section 6: IMPLEMENTATION OPTIONS - ******************************************************************************* - * - * Support for arbitrary implementation-specific optimizations. The API allows - * particular options to be turned on or off. 'Option' is the number of the - * option and 'onoff' is 0 (off) or non-0 (on). The value returned is given - * by the PNG_OPTION_ defines below. - * - * HARDWARE: normally hardware capabilites, such as the Intel SSE instructions, - * are detected at run time, however sometimes it may be impossible - * to do this in user mode, in which case it is necessary to discover - * the capabilities in an OS specific way. Such capabilities are - * listed here when libpng has support for them and must be turned - * ON by the application if present. - * - * SOFTWARE: sometimes software optimizations actually result in performance - * decrease on some architectures or systems, or with some sets of - * PNG images. 'Software' options allow such optimizations to be - * selected at run time. - */ -#ifdef PNG_SET_OPTION_SUPPORTED -#ifdef PNG_ARM_NEON_API_SUPPORTED -# define PNG_ARM_NEON 0 /* HARDWARE: ARM Neon SIMD instructions supported */ -#endif -#define PNG_MAXIMUM_INFLATE_WINDOW 2 /* SOFTWARE: force maximum window */ -#define PNG_SKIP_sRGB_CHECK_PROFILE 4 /* SOFTWARE: Check ICC profile for sRGB */ -#define PNG_OPTION_NEXT 6 /* Next option - numbers must be even */ - -/* Return values: NOTE: there are four values and 'off' is *not* zero */ -#define PNG_OPTION_UNSET 0 /* Unset - defaults to off */ -#define PNG_OPTION_INVALID 1 /* Option number out of range */ -#define PNG_OPTION_OFF 2 -#define PNG_OPTION_ON 3 - -PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option, - int onoff)); -#endif /* SET_OPTION */ - -/******************************************************************************* - * END OF HARDWARE AND SOFTWARE OPTIONS - ******************************************************************************/ - -/* Maintainer: Put new public prototypes here ^, in libpng.3, in project - * defs, and in scripts/symbols.def. - */ - -/* The last ordinal number (this is the *last* one already used; the next - * one to use is one more than this.) - */ -#ifdef PNG_EXPORT_LAST_ORDINAL - PNG_EXPORT_LAST_ORDINAL(244); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* PNG_VERSION_INFO_ONLY */ -/* Do not put anything past this line */ -#endif /* PNG_H */ diff --git a/resources/shared/lib/freetype2.lib b/resources/shared/lib/freetype2.lib deleted file mode 100644 index bd868ab0159e2e96b03604ab56fb0258148c3129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42196 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 diff --git a/resources/shared/lib/libjpeg-9.lib b/resources/shared/lib/libjpeg-9.lib deleted file mode 100644 index 98786c1741e0e96f9617e2ac83e35dd6db070614..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36042 zcmeHQYm8jQu`U}hj>E$N#{tK{0tQTYdDgq@C2^cJHsH67-x$N}?9A-$*z;J=%&ynQ z_=T~}BZN34aY*8DQN%?Nmmd+4B5r=5D2h;oxKZwp8zJ2&(v2d-Mf^Z0KO&Ue>c=@< zRejF!jL*)$yHYXk>gxVZ*Qu`4U0vsJ0am;Tu<|2-XFoRd^cw(*p6RmmBK{)nDH}TdYXC)Ce`jdddjN{I zOc;802KJ-qprMoV02HnI#L((t07Yw88rp!@plBoV6s_wvwE9mdhxAa7p*7n96z!N} zX!}9{P3Q0zY1fdUt%G=7NKd_D=*e9GiXO)6Q}iTWtD>h6N6}GBCk6l%J^ZnuZEpf7 zTJx@<4YTn&k#-(3^mHHU32D!t4OLD6C_41Ip`EB>MaSkF+O`b)LwW?qt!T@KhW2g; zP;}~IL&u&&c}4#)bn~flC_25>(7M-9e@JWJGPG#}fT9hb z8rt|r)HBk~zZ+WL1)%7}FAW|406@{Ew+$VyV;Sio>{HQ^RfcvvkM{v-^9zR7pT&NV zw#+be^i|X?(y0kUCDel^99s!#@DoErO92$+uQ61>`>5&n_={A0-O%vg02Gb znXy|7+4x~KlSy2)1wW8tEhDHi_-AJX+3_ZRZK-0VUi`3{g z)I0>BXdJIc(FEGDqWx%lnm)o`qyu=(iVj|7sPQtkM;iaFp~+nUiVhw%R4oH2s=Z}s z-%J2S_3eiC{T0iKCJc?81<C!qSKMi!{+= zXg}JoqRDp*9r!6;KhmM4hBkMh9U&dYzBK{$FwLP zsK+HOaznLxQ$k24kuMY*&3f&CY~iy>n-%q9u322chas6n-rTEtZhy9rYv!0v9n+I< zsVZ(S;gS}OX3ihAWLkN=3C(N{&1W=QtmbRxE=Mt`d>$249LE1tQCsD*zSp`< zLbXi0r+IKs z;;Ts?##bw6H(bh>iq&S&I;w)Svrn-?G4L_=ens#}tI=E|TS1d6Df?EgJwS`9Ani)k zv2pX1E8_?)lw=Zlbij@AN-?WNthnG2X?(mDvca=n8xZ3VN%LU!2JN#+o8ZyvwTh}B z?aTvqrBtxbCT*8^fj()HPEF!Bl;-214OO7X{$)nqe6DE;2 zSK?{NXWKSjdH={ z^KC2rJg?P@Sz~Qk|A`(`Nl^=NtCffff~y`7c5Q-B**rdEYr)z-x{9{VO%!e8z0YH`0=FH~}4 z7KpQmtX^Kl-YK;#i>PGRSgel}3)%58@o=kneA=pz9ji5z=a*&`Q9;{zFoZ!yrM+6j z!!LqQTH##I7VC9qGOkRdhH*Wg9WK{$!A+zLDOVcC6?)*XRYS{=a+%3)Dy553rhBr7 z%IKn$Sv=WCWpq)>^i1|s8C{ezy_1`C=ZE@6G? zvM1HYZ(l~2Bc!-GQA{yBIlQra0EXeo^@y98F$_;`@nnW+He(o`9Nsx*I;axG@Z>U+ z8Ft4rhT+LA5(bMmLRqksyLS>pR(jQ0^l<~zMJcm{o0l$1nNp)%+fPSt8APrm{U2pWIqLtkobUfM+xb6Nlzln> zr)8x7(@f|8Tv7Jp{GXPQ{!cTB|08AD6Y+mq%JYAkOZ*=x%f5*J(^8)Q(_H8OTv7Jq z{GXPQ{!cTV|8qszkMn<8M*2U^B>s<-WlzT6>1k)Ar2jKq=l@9A>&y8+BPIP`zzzK$ zWq7?2|7YYp|7Y05|51k5AMt-i&hvkUP5d8ac>NLoXXHHpXV}F5QHJc#`9Ccs{hw(X z`af5c{W$-pWu*VpOy~bxQTF5fpO%sSPcxnWb4A&Y^M6`K`ajKd{?8R)emGVBXx9?9*6X(_K&!JuULQTib6*9L1avk$kfJ))$C9%zZb)2*+vt$PgXjr zg0xeBxrtnOy;%m4Q?02O zDO)M6;mlaB(J-O9(m}W5^4PRZcXS(%ZQJOu+7QN)_h#$*87LW4&TMv+pxP^HNyf6W z_1btPq5 zH2`yV04&5)(Q`;c*vBCD^~zJ2UGOCK_b~R0zuj2wJ_;~!0@hS&ENUhjrY0H0$2f5dD4JNDPL9^jXV|G{y9x3R8{zpvpKRvp2hMv3cOCi4b)c?`x!?aPoVzx<9$WyI{W0e05%3Oi{e~8qB{U64@-@(3qiv2Ie`_hFv zdS4wgBfW)s>q6bXgZJe%JSp!-nv4CMc@XjNzTEc!z|WBep95Hcyyep{iw35{PvB*E z1%3?YpdV(#7ho=21Gm9dunfKkUxyX24i>`IFaUF4IeY^ifG@!+coEjZdbkX_;X0TF zi{Mt62VaJ3VGZ03x5ItV1-HO__&j7_6dr>S7=|nqp#X!Bhat$p9@q@KU@vTeGHiuM zpaR=qJ5*r@?1mcbgfVy+9)%KYf`?!q%!E5&G5i322rt2p;7)i3j>6M$8jis!I0?t$ zDL4U7!gJ7sL-0))hv#7eo`7$`ewc(8-~cM;+i(!hz~gWPo`pIz;5%>^oP~Sgd+;^* zF06*{!_BY(?txzDg9qV$xB+g21+Wrsg6rW*SOPt;5xxpb;dAg6xCCavrEoc10T;u+ z{J-{6Y40N31zu1FL$G;l`8g2j*ex^qDMl;fo=du=h>6p7;s~5po$pZF53=&s=6E@X z(uKQeeMNaZ#}wyatZ~xGctn(&w@o<5K2HEWK0d6k`aI#qs1rHeF8Sa-45rgj#2??s zhR!uqY}`INysX>UDt)$xt5SLy_8zKB3}VQvnk;5HUxsyQZFJN%A$272bjzNaTL5)_ zU=H5AD|S^8!_k#7C%3xJ%M+l0x{@6QliKsAgQyF|P!fFFev}>6W;Y}URk&<#Vt((hemu5zW6k}rk5$JNat^1VWFwHdK zFnOUdk;texZe)O6?$R|>^yxrku+j^W=?-L^N;74kLo@9mjvSUBqSVqn5};;CQpR6$ zzJxf>r&mCB;gTJ_d$xOVBJA&>)zzLa6+?w}{VA)1Al{TUTyM%6wl`%1Ha~wbTyM%6 zwl`%1HlC1>ks7WyWewY#vH=^9zq~%glr^F%$S)=3l+}`Q%33BKd&%Z<%4$hDWi>N0 zZY!s(m5dmXH)XY`oU)o39k!NJ)`~{lL~qJ!Q8{Hb)0?uE8=)yVWwoR~Wi{KMvW9I= zGw3}K2}h(#M9V~t$uJR2wf17SSoNWELxiA-0upBIdHi`odP!+>$%oszHb{mdSEBhX zCHt^OUOoezKmCHS(ovCo6NCp(ucJ)g#K7@eP8oO2J%efSp$h1dY z6|?f;xmT=Jm|VcQVPcZUmX?&1FMgi1K2zO7o;X~PyfY04C7crMgeO$!?{tkU+v6IR*xfRw zwjA8o223yc$ySiPY`~GbSi>j#SA8lecdmrFl5Ctc+wNA~ztN=yJ8QzE{=u;2-qdit zT`6I+{ixgXM(u8i7ivWjq*X}NZPNlQ|1QF}@)ub1C; zY04NpbA=q0nigguN?OP?9CBD|T98xTfWcF8%u)V}3>sl|dj%JW(33^29?Z8aG=ydV@EN=#iU6+w1`z^Ctt|(sXtv0ZiP`FEXSTXX z%+{9KsGQmAT57hMLCw}MNM=>=SX6I=gs(k_{fAbs;+dUCSTuW%u;?<;l`P3N;5!U0 zAGNp872d8wb0hW>jvwqK9LKE(9gi#oEz{dKXg=RD7?#*8giN-?mY2Cb+xkt?{*#Svp4~G@FWGT~A~y{KXe5 z=fB=6?wXO4x6N>amAgx2NO;FLeEawALb;6T4CnjuLhqvBlMI8i)=j$z{_XJp?zj?9 zk7we+GyYAxyHFe&A6bCs^yY5`{@@`q`x}7S_uXAm@1`#34l3s0KmG&he=Or7{2hQr zZ(F%O%f^#d1VOw&PVonz>+R|II|t8X)!*f8P`AO=voA%i>QVh&hV+YbSFJDQ>$OI0 zxY@OE^X*;hR&T(x1piM7tA?rrOmWcvnvMUxME{H7z<^p`;`RRG+<(JA{}}+PHtJ7Z z;B*LvJ%D)*iZdE;^Z*soMFFQr$sohY^g52>-=zLy|5RUq2iWd!Iv%3q=KwD3NHxJ= zX0buHU@_gj-R4srUCLsnYm51Jyfkyk(H4U#9PE!+%;KOzSSH0h08VFw=UiinI}{nMVJ}OzR2w%5eWPDA?aA)^961y#b*U z%&}dq_6F_?tr7GzT{lhnFa@K$m`xIM`DF|M+P41Q#n$)*-i?Sh&Ee6cw3LWF_eLWs zC-eLDY*KsthfqMeU6q>&-aUOB^bXTy+q0hQth_ zI%zRuEa)~I=cNwQkGpjccP7P^!Lqct{n7XJRvho=I4+ACa#&Vs;knqGpygQB7jkgU{-XG%bvBM_q> zIc*~*c;GKO#2_9MzKqOpfR$PqXM*+2rKs+meFkv>zBge7@g;}I&saK$d5wpuLkM-Q z$_p50fz*d!F2~v9FUb-v7iLI{W8T9$6E}CE4vlcggwlB zhw2W`I9&UCm;|f6PUER_6LB_|7Bk_weZ9aWM}H|%d+ggeUBZ6mq5a$tqMDOM4#i5X z+`|N&c5x(k{>DHqU{)sR^hSY64rS7!#^`hb>hvauDo$NFC@Zz1-Gq_e>@ek-E`zxM z{U&&W1p<{G8FN@xYGJH>G2Y;I)bA}JYUF`5gKB@geKF6^I}rI+j_jXzr^N0}SfkwL zu-S1shh(Kz^c*u|@50e8B#1GG^$c!mb$vTQkIV%~iJi1l{Yr=(k!p|@H^Fn<;o%0E z3>=h|TDZ$SF>`o6-sL+9rpc3Fy|@1yPw-NANvx@R3M8z}?)Ffp@Hr6Ur&Q$io)A~3 z4w%DuuH5!lEy2ga#k2f+#9QRy_42#NOD)(WlM1{0?3EEuj z;q`I-@lr}{_6RhcWs!Dt3EJ!xcshwAEnb2)`#iiQTz|ZjQkzQzn$AE;JGumI_6t0n z;F1P>|ywrj=lg?MZD$p=HC*|0Z(7qk_S_V_PQC zdOA6_Z*Vk~c-28o4oEcVoZEh~CfVe2j;7MaIykobBw9!B+X{&$T}j)T>`m}oD><6Z zspG0-rIeoQeu*X*L{mDp2RNEe2xOz-Mw4=E4@$I-&bL((E%kg$vXa#tO(#osPLpdS znp~Ppsg$%5@5-bRjRl59JOw@KjX z9Nx5e3DJj#9G=Nx4___epsdt_7we6QKB!ED%@Q+qYu+|$LM&~IM73$N41=3)E8|SC z)vXTE<@|HFDV-bJIG%ZBAT3_PbA5Y==f23s;aI5^Z6=`YU}#Z;Ya1;gezY@0i+J0D z0kt0iO^UEQ9OCL6{*K3wc6oSmxx@zB$~{b&5swJ8PREaS3%pLpj~?~#va4mEAToUKN|G#b}k47X~N5?iQ(K@q7$B*_%H0hk%UX3NqfV~{8!||iCMC<5%t4K8IO4`dY(K;MIs!24tAez##jd8RN$B)!kN6A~Y>Md*L^xI#{Ce47lL`yy2lB}e`(K;MI zYDzS@G?`K>8Ruvnjvq}(w2u0c{T!{s@uNwO*75k!0gl)4_|ZXuHzo0-n0z7iw$S4a zkALVYrC&+PiaHcx@;BHyBrCPBZ%y)KPcTINemv`bYW?P6hNfS?Pm2~4jZ?WmM;MxV zFPww1Qc67@Wmx*#0j&G>^_cWl;;|5oeVQOGVnWpDc!(JB<%6`i2~pf9LtOb`1rEwe zE!@kbDDH_6)BkJ(!{PSS3Ti^``%@g%eiR}lUP9FPB*zOsUXT(o!K0qyi0;b>9J2lO zMT`$n5&6>uQ+_Xl!?IE<_cA84R=qX+bco8n#=#&iz#}B+_8EuBKlYIpGhvj^GR*K> zB54s5ywGzDQGBW-C2mrV_BR=>_a&5+$l=EqL>6QhTGI0jIrz{D2V|vIEH^>J-*R~V zXIvQ2)Y|V04wru=CM{+{{_eL0X6#{I`yMG_)|?Tjk%x8dBPN_LeTN_hAI{`zWu;au zDB&dJMT!=DpoalmfaN5N?z;jn{W`BVVLkFahc-TjZ++wcNy&c8hYyjJTG432ocw-> zX+9przFowCEp;+D{{;MND{#{lG(vTn4p2I}%3ulEgG0cIx0Le<%=RmR{|T uGQnA$P9uij!DWMiS^o#kJfg|~ diff --git a/resources/shared/lib/libpng16.lib b/resources/shared/lib/libpng16.lib deleted file mode 100644 index a96ba8f12f6a958868870c11ca5c9f103db0c94b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55610 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