0,0 → 1,443 |
|
; pngstruct.inc - header file for PNG reference library |
|
; Last changed in libpng 1.6.24 [August 4, 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. |
; For conditions of distribution and use, see the disclaimer |
; and license in png.inc |
|
|
; The structure that holds the information to read and write PNG files. |
; The only people who need to care about what is inside of this are the |
; people who will be modifying the library for their own special needs. |
; It should NOT be accessed directly by an application. |
|
|
; zlib.inc defines the structure z_stream, an instance of which is included |
; in this structure and is required for decompressing the LZ compressed |
; data in PNG files. |
|
include '../../../../../../fs/kfar/trunk/zlib/zlib.inc' |
|
; zlib.inc declares a magic type 'uInt' that limits the amount of data that zlib |
; can handle at once. This type need be no larger than 16 bits (so maximum of |
; 65535), this define allows us to discover how big it is, but limited by the |
; maximuum for png_size_t. The value can be overriden in a library build |
; (pngusr.h, or set it in CPPFLAGS) and it works to set it to a considerably |
; lower value (e.g. 255 works). A lower value may help memory usage (slightly) |
; and may even improve performance on some systems (and degrade it on others.) |
|
|
ZLIB_IO_MAX equ 0xffff ;-1 ;uInt |
|
|
; The type of a compression buffer list used by the write code. |
struct png_compression_buffer |
next dd ? ;struct png_compression_buffer * |
output db ? ;byte[1] ;actually zbuf_size |
ends |
|
macro PNG_COMPRESSION_BUFFER_SIZE pp |
{ |
mov eax,png_compression_buffer.output |
add eax,[pp+png_struct.zbuffer_size] |
} |
|
; Colorspace support; structures used in png_struct, png_info and in internal |
; functions to hold and communicate information about the color space. |
|
; PNG_COLORSPACE_SUPPORTED is only required if the application will perform |
; colorspace corrections, otherwise all the colorspace information can be |
; skipped and the size of libpng can be reduced (significantly) by compiling |
; out the colorspace support. |
|
if PNG_COLORSPACE_SUPPORTED eq 1 |
; The chromaticities of the red, green and blue colorants and the chromaticity |
; of the corresponding white point (i.e. of rgb(1.0,1.0,1.0)). |
|
struct png_xy |
redx dd ? ;png_fixed_point |
redy dd ? |
greenx dd ? |
greeny dd ? |
bluex dd ? |
bluey dd ? |
whitex dd ? |
whitey dd ? |
ends |
|
; The same data as above but encoded as CIE XYZ values. When this data comes |
; from chromaticities the sum of the Y values is assumed to be 1.0 |
|
struct png_XYZ |
red_X dd ? ;png_fixed_point |
red_Y dd ? |
red_Z dd ? |
green_X dd ? |
green_Y dd ? |
green_Z dd ? |
blue_X dd ? |
blue_Y dd ? |
blue_Z dd ? |
ends |
end if ;COLORSPACE |
|
if (PNG_COLORSPACE_SUPPORTED eq 1) | (PNG_GAMMA_SUPPORTED eq 1) |
; A colorspace is all the above plus, potentially, profile information; |
; however at present libpng does not use the profile internally so it is only |
; stored in the png_info struct (if iCCP is supported.) The rendering intent |
; is retained here and is checked. |
|
; The file gamma encoding information is also stored here and gamma correction |
; is done by libpng, whereas color correction must currently be done by the |
; application. |
|
struct png_colorspace |
if PNG_GAMMA_SUPPORTED eq 1 |
gamma dd ? ;png_fixed_point ;File gamma |
end if |
|
if PNG_COLORSPACE_SUPPORTED eq 1 |
end_points_xy png_xy ;End points as chromaticities |
end_points_XYZ png_XYZ ;End points as CIE XYZ colorant values |
rendering_intent dw ? ;uint_16 ;Rendering intent of a profile |
end if |
|
; Flags are always defined to simplify the code. |
flags dw ? ;uint_16 ;As defined below |
ends |
|
; General flags for the 'flags' field |
PNG_COLORSPACE_HAVE_GAMMA equ 0x0001 |
PNG_COLORSPACE_HAVE_ENDPOINTS equ 0x0002 |
PNG_COLORSPACE_HAVE_INTENT equ 0x0004 |
PNG_COLORSPACE_FROM_gAMA equ 0x0008 |
PNG_COLORSPACE_FROM_cHRM equ 0x0010 |
PNG_COLORSPACE_FROM_sRGB equ 0x0020 |
PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB equ 0x0040 |
PNG_COLORSPACE_MATCHES_sRGB equ 0x0080 ;exact match on profile |
PNG_COLORSPACE_INVALID equ 0x8000 |
macro PNG_COLORSPACE_CANCEL flags {(0xffff xor (flags))} |
end if ;COLORSPACE || GAMMA |
|
struct png_struct |
if PNG_SETJMP_SUPPORTED eq 1 |
jmp_buf_local dd ? ;jmp_buf ;New name in 1.6.0 for jmp_buf in png_struct |
longjmp_fn dd ? ;png_longjmp_ptr ;setjmp non-local goto function. |
jmp_buf_ptr dd ? ;jmp_buf * ;passed to longjmp_fn |
jmp_buf_size dd ? ;size_t ;size of the above, if allocated |
end if |
error_fn dd ? ;png_error_ptr ;function for printing errors and aborting |
if PNG_WARNINGS_SUPPORTED eq 1 |
warning_fn dd ? ;png_error_ptr ;function for printing warnings |
end if |
error_ptr dd ? ;voidp ;user supplied struct for error functions |
write_data_fn dd ? ;png_rw_ptr ;function for writing output data |
read_data_fn dd ? ;png_rw_ptr ;function for reading input data |
io_ptr dd ? ;voidp ;ptr to application struct for I/O functions |
|
if PNG_READ_USER_TRANSFORM_SUPPORTED eq 1 |
read_user_transform_fn dd ? ;png_user_transform_ptr ;user read transform |
end if |
|
if PNG_WRITE_USER_TRANSFORM_SUPPORTED eq 1 |
write_user_transform_fn dd ? ;png_user_transform_ptr ; user write transform |
end if |
|
; These were added in libpng-1.0.2 |
if PNG_USER_TRANSFORM_PTR_SUPPORTED eq 1 |
if (PNG_READ_USER_TRANSFORM_SUPPORTED eq 1) | (PNG_WRITE_USER_TRANSFORM_SUPPORTED eq 1) |
user_transform_ptr dd ? ;voidp ;user supplied struct for user transform |
user_transform_depth db ? ;byte ;bit depth of user transformed pixels |
user_transform_channels db ? ;byte ;channels in user transformed pixels |
end if |
end if |
|
mode dd ? ;uint_32 ;tells us where we are in the PNG file |
flags dd ? ;uint_32 ;flags indicating various things to libpng |
transformations dd ? ;uint_32 ;which transformations to perform |
|
zowner dd ? ;uint_32 ;ID (chunk type) of zstream owner, 0 if none |
zstream z_stream ;decompression structure |
|
zbuffer_list dd ? ;png_compression_bufferp ;Created on demand during write |
zbuffer_size dd ? ;uInt ;size of the actual buffer |
|
zlib_level dd ? ;int ;holds zlib compression level |
zlib_method dd ? ;int ;holds zlib compression method |
zlib_window_bits dd ? ;int ;holds zlib compression window bits |
zlib_mem_level dd ? ;int ;holds zlib compression memory level |
zlib_strategy dd ? ;int ;holds zlib compression strategy |
; Added at libpng 1.5.4 |
if PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED eq 1 |
zlib_text_level dd ? ;int ;holds zlib compression level |
zlib_text_method dd ? ;int ;holds zlib compression method |
zlib_text_window_bits dd ? ;int ;holds zlib compression window bits |
zlib_text_mem_level dd ? ;int ;holds zlib compression memory level |
zlib_text_strategy dd ? ;int ;holds zlib compression strategy |
end if |
;End of material added at libpng 1.5.4 |
;Added at libpng 1.6.0 |
zlib_set_level dd ? ;int ;Actual values set into the zstream on write |
zlib_set_method dd ? ;int |
zlib_set_window_bits dd ? ;int |
zlib_set_mem_level dd ? ;int |
zlib_set_strategy dd ? ;int |
|
width dd ? ;uint_32 ;width of image in pixels |
height dd ? ;uint_32 ;height of image in pixels |
num_rows dd ? ;uint_32 ;number of rows in current pass |
usr_width dd ? ;uint_32 ;width of row at start of write |
rowbytes dd ? ;png_size_t ;size of row in bytes |
iwidth dd ? ;uint_32 ;width of current interlaced row in pixels |
row_number dd ? ;uint_32 ;current row in interlace pass |
chunk_name dd ? ;uint_32 ;PNG_CHUNK() id of current chunk |
prev_row dd ? ;bytep ;buffer to save previous (unfiltered) row. |
;While reading this is a pointer into |
;big_prev_row; while writing it is separately |
;allocated if needed. |
|
row_buf dd ? ;bytep ;buffer to save current (unfiltered) row. |
;While reading, this is a pointer into |
;big_row_buf; while writing it is separately |
;allocated. |
|
if PNG_WRITE_FILTER_SUPPORTED eq 1 |
try_row dd ? ;bytep ;buffer to save trial row when filtering |
tst_row dd ? ;bytep ;buffer to save best trial row when filtering |
end if |
info_rowbytes dd ? ;png_size_t ;Added in 1.5.4: cache of updated row bytes |
|
idat_size dd ? ;uint_32 ;current IDAT size for read |
crc dd ? ;uint_32 ;current chunk CRC value |
palette dd ? ;png_colorp ;palette from the input file |
num_palette dw ? ;uint_16 ;number of color entries in palette |
|
; Added at libpng-1.5.10 |
if PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED eq 1 |
num_palette_max dd ? ;int ;maximum palette index found in IDAT |
end if |
|
num_trans dw ? ;uint_16 ;number of transparency values |
compression db ? ;byte ;file compression type (always 0) |
filter db ? ;byte ;file filter type (always 0) |
interlaced db ? ;byte ;PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 |
pass db ? ;byte ;current interlace pass (0 - 6) |
do_filter db ? ;byte ;row filter flags (see PNG_FILTER_ in png.inc) |
color_type db ? ;byte ;color type of file |
bit_depth db ? ;byte ;bit depth of file |
usr_bit_depth db ? ;byte ;bit depth of users row: write only |
pixel_depth db ? ;byte ;number of bits per pixel |
channels db ? ;byte ;number of channels in file |
usr_channels db ? ;byte ;channels at start of write: write only |
sig_bytes db ? ;byte ;magic bytes read/written from start of file |
maximum_pixel_depth db ? ;byte ;pixel depth used for the row buffers |
transformed_pixel_depth db ? ;byte ;pixel depth after read/write transforms |
;#if PNG_ZLIB_VERNUM >= 0x1240 |
zstream_start db ? ;byte ;at start of an input zlib stream |
;end if /* Zlib >= 1.2.4 */ |
if (PNG_READ_FILLER_SUPPORTED eq 1) | (PNG_WRITE_FILLER_SUPPORTED eq 1) |
filler dw ? ;uint_16 ; filler bytes for pixel expansion |
end if |
|
if (PNG_bKGD_SUPPORTED eq 1) | (PNG_READ_BACKGROUND_SUPPORTED eq 1) | \ |
(PNG_READ_ALPHA_MODE_SUPPORTED eq 1) |
background_gamma_type db ? ;byte |
background_gamma dd ? ;png_fixed_point |
background png_color_16 ;background color in screen gamma space |
if PNG_READ_GAMMA_SUPPORTED eq 1 |
background_1 png_color_16 ;background normalized to gamma 1.0 |
end if |
end if ;bKGD |
|
if PNG_WRITE_FLUSH_SUPPORTED eq 1 |
output_flush_fn dd ? ;png_flush_ptr ;Function for flushing output |
flush_dist dd ? ;uint_32 ;how many rows apart to flush, 0 - no flush |
flush_rows dd ? ;uint_32 ;number of rows written since last flush |
end if |
|
if PNG_READ_GAMMA_SUPPORTED eq 1 |
gamma_shift dd ? ;int ;number of "insignificant" bits in 16-bit gamma |
screen_gamma dd ? ;png_fixed_point ;screen gamma value (display_exponent) |
|
gamma_table dd ? ;bytep ;gamma table for 8-bit depth files |
gamma_16_table dd ? ;uint_16pp ;gamma table for 16-bit depth files |
if (PNG_READ_BACKGROUND_SUPPORTED eq 1) | \ |
(PNG_READ_ALPHA_MODE_SUPPORTED eq 1) | \ |
(PNG_READ_RGB_TO_GRAY_SUPPORTED eq 1) |
gamma_from_1 dd ? ;bytep ;converts from 1.0 to screen |
gamma_to_1 dd ? ;bytep ;converts from file to 1.0 |
gamma_16_from_1 dd ? ;uint_16pp ;converts from 1.0 to screen |
gamma_16_to_1 dd ? ;uint_16pp ;converts from file to 1.0 |
end if ;READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY |
end if |
|
if (PNG_READ_GAMMA_SUPPORTED eq 1) | (PNG_sBIT_SUPPORTED eq 1) |
sig_bit png_color_8 ;significant bits in each available channel |
end if |
|
if (PNG_READ_SHIFT_SUPPORTED eq 1) | (PNG_WRITE_SHIFT_SUPPORTED eq 1) |
shift png_color_8 ;shift for significant bit tranformation |
end if |
|
if (PNG_tRNS_SUPPORTED eq 1) | (PNG_READ_BACKGROUND_SUPPORTED eq 1) \ |
| (PNG_READ_EXPAND_SUPPORTED eq 1) | (PNG_READ_BACKGROUND_SUPPORTED eq 1) |
trans_alpha dd ? ;bytep ;alpha values for paletted files |
trans_color png_color_16 ;transparent color for non-paletted files |
end if |
|
read_row_fn dd ? ;png_read_status_ptr ;called after each row is decoded |
write_row_fn dd ? ;png_write_status_ptr ;called after each row is encoded |
if PNG_PROGRESSIVE_READ_SUPPORTED eq 1 |
info_fn dd ? ;png_progressive_info_ptr ;called after header data fully read |
row_fn dd ? ;png_progressive_row_ptr ;called after a prog. row is decoded |
end_fn dd ? ;png_progressive_end_ptr ;called after image is complete |
save_buffer_ptr dd ? ;bytep ;current location in save_buffer |
save_buffer dd ? ;bytep ;buffer for previously read data |
current_buffer_ptr dd ? ;bytep ;current location in current_buffer |
current_buffer dd ? ;bytep ;buffer for recently used data |
push_length dd ? ;uint_32 ;size of current input chunk |
skip_length dd ? ;uint_32 ;bytes to skip in input data |
save_buffer_size dd ? ;png_size_t ;amount of data now in save_buffer |
save_buffer_max dd ? ;png_size_t ;total size of save_buffer |
buffer_size dd ? ;png_size_t ;total amount of available input data |
current_buffer_size dd ? ;png_size_t ;amount of data now in current_buffer |
process_mode dd ? ;int ;what push library is currently doing |
cur_palette dd ? ;int ;current push library palette index |
|
end if ;PROGRESSIVE_READ |
|
if PNG_READ_QUANTIZE_SUPPORTED eq 1 |
palette_lookup dd ? ;bytep ;lookup table for quantizing |
quantize_index dd ? ;bytep ;index translation for palette files |
end if |
|
; Options |
if PNG_SET_OPTION_SUPPORTED eq 1 |
options db ? ;byte ;On/off state (up to 4 options) |
end if |
|
;#if PNG_LIBPNG_VER < 10700 |
; To do: remove this from libpng-1.7 |
if PNG_TIME_RFC1123_SUPPORTED eq 1 |
time_buffer rb 29 ;char[29] ;String to hold RFC 1123 time text |
end if |
;end if |
|
; New members added in libpng-1.0.6 |
|
free_me dd ? ;uint_32 ;flags items libpng is responsible for freeing |
|
if PNG_USER_CHUNKS_SUPPORTED eq 1 |
user_chunk_ptr dd ? ;voidp |
if PNG_READ_USER_CHUNKS_SUPPORTED eq 1 |
read_user_chunk_fn dd ? ;png_user_chunk_ptr ;user read chunk handler |
end if |
end if |
|
if PNG_SET_UNKNOWN_CHUNKS_SUPPORTED eq 1 |
unknown_default dd ? ;int ; As PNG_HANDLE_* |
num_chunk_list dd ? ;unsigned int ; Number of entries in the list |
chunk_list dd ? ;bytep ; List of byte[5]; the textual chunk name |
; followed by a PNG_HANDLE_* byte |
end if |
|
; New members added in libpng-1.0.3 |
if PNG_READ_RGB_TO_GRAY_SUPPORTED eq 1 |
rgb_to_gray_status db ? ;byte |
; Added in libpng 1.5.5 to record setting of coefficients: |
rgb_to_gray_coefficients_set db ? ;byte |
; These were changed from byte in libpng-1.0.6 |
rgb_to_gray_red_coeff dw ? ;uint_16 |
rgb_to_gray_green_coeff dw ? ;uint_16 |
; deleted in 1.5.5: rgb_to_gray_blue_coeff; |
end if |
|
if PNG_MNG_FEATURES_SUPPORTED eq 1 |
; New member added in libpng-1.0.4 (renamed in 1.0.9) |
; Changed from byte to uint_32 at version 1.2.0 |
mng_features_permitted dd ? ;uint_32 |
|
; New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 |
filter_type db ? ;byte |
end if |
|
; New members added in libpng-1.2.0 |
|
; New members added in libpng-1.0.2 but first enabled by default in 1.2.0 |
if PNG_USER_MEM_SUPPORTED eq 1 |
mem_ptr dd ? ;voidp ;user supplied struct for mem functions |
malloc_fn dd ? ;malloc_ptr ;function for allocating memory |
free_fn dd ? ;free_ptr ;function for freeing memory |
end if |
|
; New member added in libpng-1.0.13 and 1.2.0 |
big_row_buf dd ? ;bytep ;buffer to save current (unfiltered) row |
|
if PNG_READ_QUANTIZE_SUPPORTED eq 1 |
; The following three members were added at version 1.0.14 and 1.2.4 |
quantize_sort dd ? ;bytep ;working sort array |
index_to_palette dd ? ;bytep ;where the original index currently is in the palette |
palette_to_index dd ? ;bytep ;which original index points to this palette color |
end if |
|
; New members added in libpng-1.0.16 and 1.2.6 |
compression_type db ? ;byte |
|
if PNG_USER_LIMITS_SUPPORTED eq 1 |
user_width_max dd ? ;uint_32 |
user_height_max dd ? ;uint_32 |
|
; Added in libpng-1.4.0: Total number of sPLT, text, and unknown |
; chunks that can be stored (0 means unlimited). |
|
user_chunk_cache_max dd ? ;uint_32 |
|
; Total memory that a zTXt, sPLT, iTXt, iCCP, or unknown chunk |
; can occupy when decompressed. 0 means unlimited. |
|
user_chunk_malloc_max dd ? ;png_alloc_size_t |
end if |
|
; New member added in libpng-1.0.25 and 1.2.17 |
if PNG_READ_UNKNOWN_CHUNKS_SUPPORTED eq 1 |
; Temporary storage for unknown chunk that the library doesn't recognize, |
; used while reading the chunk. |
|
; png_unknown_chunk unknown_chunk; |
end if |
|
; New member added in libpng-1.2.26 |
old_big_row_buf_size dd ? ;png_size_t |
|
if PNG_READ_SUPPORTED eq 1 |
; New member added in libpng-1.2.30 |
read_buffer dd ? ;bytep ;buffer for reading chunk data |
read_buffer_size dd ? ;png_alloc_size_t ;current size of the buffer |
end if |
if PNG_SEQUENTIAL_READ_SUPPORTED eq 1 |
IDAT_read_size dd ? ;uInt ;limit on read buffer size for IDAT |
end if |
|
if PNG_IO_STATE_SUPPORTED eq 1 |
; New member added in libpng-1.4.0 |
io_state dd ? ;uint_32 |
end if |
|
; New member added in libpng-1.5.6 |
big_prev_row dd ? ;bytep |
|
; New member added in libpng-1.5.7 |
; void (*read_filter[PNG_FILTER_VALUE_LAST-1])(png_row_infop row_info, |
; bytep row, bytep prev_row); |
|
if PNG_READ_SUPPORTED eq 1 |
if (PNG_COLORSPACE_SUPPORTED eq 1) | (PNG_GAMMA_SUPPORTED eq 1) |
colorspace png_colorspace |
end if |
end if |
ends |