提交 dee75773 编写于 作者: J John Bowler 提交者: Glenn Randers-Pehrson

[libpng16] Added PNG_IMAGE_FLAG_FAST for the benefit of applications that

store intermediate files, or intermediate in-memory data, while processing
image data with the simplified API.  The option makes the files larger
but faster to write and read.  pngstest now uses this by default; this
can be disabled with the --slow option.
上级 1c25b9b0
Libpng 1.6.0beta15 - February 29, 2012 Libpng 1.6.0beta15 - March 2, 2012
This is not intended to be a public release. It will be replaced This is not intended to be a public release. It will be replaced
within a few weeks by a public version or by another test version. within a few weeks by a public version or by another test version.
...@@ -234,12 +234,17 @@ Version 1.6.0beta14 [February 27, 2012] ...@@ -234,12 +234,17 @@ Version 1.6.0beta14 [February 27, 2012]
Added information about the new limits in the manual. Added information about the new limits in the manual.
Updated Makefile.in Updated Makefile.in
Version 1.6.0beta15 [February 29, 2012] Version 1.6.0beta15 [March 2, 2012]
Removed unused "current_text" members of png_struct and the png_free() Removed unused "current_text" members of png_struct and the png_free()
of png_ptr->current_text from pngread.c of png_ptr->current_text from pngread.c
Rewrote pngstest.c for substantial speed improvement. Rewrote pngstest.c for substantial speed improvement.
Fixed transparent pixel and 16-bit rgb tests in pngstest and removed a Fixed transparent pixel and 16-bit rgb tests in pngstest and removed a
spurious check in pngwrite.c spurious check in pngwrite.c
Added PNG_IMAGE_FLAG_FAST for the benefit of applications that store
intermediate files, or intermediate in-memory data, while processing
image data with the simplified API. The option makes the files larger
but faster to write and read. pngstest now uses this by default; this
can be disabled with the --slow option.
Send comments/corrections/commendations to png-mng-implement at lists.sf.net Send comments/corrections/commendations to png-mng-implement at lists.sf.net
(subscription required; visit (subscription required; visit
......
...@@ -3986,12 +3986,17 @@ Version 1.6.0beta14 [February 27, 2012] ...@@ -3986,12 +3986,17 @@ Version 1.6.0beta14 [February 27, 2012]
Added information about the new limits in the manual. Added information about the new limits in the manual.
Updated Makefile.in Updated Makefile.in
Version 1.6.0beta15 [February 29, 2012] Version 1.6.0beta15 [March 2, 2012]
Removed unused "current_text" members of png_struct and the png_free() Removed unused "current_text" members of png_struct and the png_free()
of png_ptr->current_text from pngread.c of png_ptr->current_text from pngread.c
Rewrote pngstest.c for substantial speed improvement. Rewrote pngstest.c for substantial speed improvement.
Fixed transparent pixel and 16-bit rgb tests in pngstest and removed a Fixed transparent pixel and 16-bit rgb tests in pngstest and removed a
spurious check in pngwrite.c spurious check in pngwrite.c
Added PNG_IMAGE_FLAG_FAST for the benefit of applications that store
intermediate files, or intermediate in-memory data, while processing
image data with the simplified API. The option makes the files larger
but faster to write and read. pngstest now uses this by default; this
can be disabled with the --slow option.
Send comments/corrections/commendations to png-mng-implement at lists.sf.net Send comments/corrections/commendations to png-mng-implement at lists.sf.net
(subscription required; visit (subscription required; visit
......
...@@ -304,6 +304,7 @@ compare_16bit(int v1, int v2, int error_limit, int multiple_algorithms) ...@@ -304,6 +304,7 @@ compare_16bit(int v1, int v2, int error_limit, int multiple_algorithms)
#define KEEP_TMPFILES 16 /* else delete temporary files */ #define KEEP_TMPFILES 16 /* else delete temporary files */
#define KEEP_GOING 32 #define KEEP_GOING 32
#define ACCUMULATE 64 #define ACCUMULATE 64
#define FAST_WRITE 128
static void static void
print_opts(png_uint_32 opts) print_opts(png_uint_32 opts)
...@@ -1932,7 +1933,7 @@ static png_uint_16 gpc_error[16/*in*/][16/*out*/][4/*a*/] = ...@@ -1932,7 +1933,7 @@ static png_uint_16 gpc_error[16/*in*/][16/*out*/][4/*a*/] =
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: sRGB-rgb */ }, { /* input: sRGB-rgb */
{ 0, 0, 17, 0 }, { 0, 0, 17, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 19, 0 }, { 0, 0, 19, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 863, 0 }, { 0, 0, 863, 0 }, { 0, 0, 811, 0 }, { 0, 0, 811, 0 }, { 0, 0, 863, 0 }, { 0, 0, 863, 0 }, { 0, 0, 811, 0 }, { 0, 0, 811, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
...@@ -2010,7 +2011,7 @@ static png_uint_16 gpc_error_via_linear[16][4/*out*/][4] = ...@@ -2010,7 +2011,7 @@ static png_uint_16 gpc_error_via_linear[16][4/*out*/][4] =
}, { /* input: sRGB-gray+alpha */ }, { /* input: sRGB-gray+alpha */
{ 0, 6, 3, 0 }, { 0, 53, 3, 0 }, { 0, 6, 3, 0 }, { 0, 53, 3, 0 } { 0, 6, 3, 0 }, { 0, 53, 3, 0 }, { 0, 6, 3, 0 }, { 0, 53, 3, 0 }
}, { /* input: sRGB-rgb */ }, { /* input: sRGB-rgb */
{ 0, 0, 17, 0 }, { 0, 0, 17, 0 }, { 0, 0, 14, 0 }, { 0, 0, 14, 0 } { 0, 0, 19, 0 }, { 0, 0, 19, 0 }, { 0, 0, 15, 0 }, { 0, 0, 15, 0 }
}, { /* input: sRGB-rgb+alpha */ }, { /* input: sRGB-rgb+alpha */
{ 0, 8, 10, 0 }, { 0, 13, 10, 0 }, { 0, 12, 8, 0 }, { 0, 53, 8, 0 } { 0, 8, 10, 0 }, { 0, 13, 10, 0 }, { 0, 12, 8, 0 }, { 0, 53, 8, 0 }
}, { /* input: linear-gray */ }, { /* input: linear-gray */
...@@ -3083,6 +3084,9 @@ read_one_file(Image *image) ...@@ -3083,6 +3084,9 @@ read_one_file(Image *image)
static int static int
write_one_file(Image *output, Image *image, int convert_to_8bit) write_one_file(Image *output, Image *image, int convert_to_8bit)
{ {
if (image->opts & FAST_WRITE)
image->image.flags |= PNG_IMAGE_FLAG_FAST;
if (image->opts & USE_STDIO) if (image->opts & USE_STDIO)
{ {
FILE *f = tmpfile(); FILE *f = tmpfile();
...@@ -3303,7 +3307,7 @@ testimage(Image *image, png_uint_32 opts, format_list *pf) ...@@ -3303,7 +3307,7 @@ testimage(Image *image, png_uint_32 opts, format_list *pf)
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
png_uint_32 opts = 0; png_uint_32 opts = FAST_WRITE;
format_list formats; format_list formats;
const char *touch = NULL; const char *touch = NULL;
int log_pass = 0; int log_pass = 0;
...@@ -3347,6 +3351,10 @@ main(int argc, char **argv) ...@@ -3347,6 +3351,10 @@ main(int argc, char **argv)
opts &= ~KEEP_TMPFILES; opts &= ~KEEP_TMPFILES;
else if (strcmp(arg, "--keep-going") == 0) else if (strcmp(arg, "--keep-going") == 0)
opts |= KEEP_GOING; opts |= KEEP_GOING;
else if (strcmp(arg, "--fast") == 0)
opts |= FAST_WRITE;
else if (strcmp(arg, "--slow") == 0)
opts &= ~FAST_WRITE;
else if (strcmp(arg, "--accumulate") == 0) else if (strcmp(arg, "--accumulate") == 0)
opts |= ACCUMULATE; opts |= ACCUMULATE;
else if (strcmp(arg, "--redundant") == 0) else if (strcmp(arg, "--redundant") == 0)
......
/* png.h - header file for PNG reference library /* png.h - header file for PNG reference library
* *
* libpng version 1.6.0beta15 - February 27, 2012 * libpng version 1.6.0beta15 - March 2, 2012
* Copyright (c) 1998-2012 Glenn Randers-Pehrson * Copyright (c) 1998-2012 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* Authors and maintainers: * Authors and maintainers:
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
* libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
* libpng versions 0.97, January 1998, through 1.6.0beta15 - February 27, 2012: Glenn * libpng versions 0.97, January 1998, through 1.6.0beta15 - March 2, 2012: Glenn
* See also "Contributing Authors", below. * See also "Contributing Authors", below.
* *
* Note about libpng version numbers: * Note about libpng version numbers:
...@@ -198,7 +198,7 @@ ...@@ -198,7 +198,7 @@
* *
* This code is released under the libpng license. * This code is released under the libpng license.
* *
* libpng versions 1.2.6, August 15, 2004, through 1.6.0beta15, February 27, 2012, are * libpng versions 1.2.6, August 15, 2004, through 1.6.0beta15, March 2, 2012, are
* Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson, and are * Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson, and are
* distributed according to the same disclaimer and license as libpng-1.2.5 * distributed according to the same disclaimer and license as libpng-1.2.5
* with the following individual added to the list of Contributing Authors: * with the following individual added to the list of Contributing Authors:
...@@ -310,7 +310,7 @@ ...@@ -310,7 +310,7 @@
* Y2K compliance in libpng: * Y2K compliance in libpng:
* ========================= * =========================
* *
* February 27, 2012 * March 2, 2012
* *
* Since the PNG Development group is an ad-hoc body, we can't make * Since the PNG Development group is an ad-hoc body, we can't make
* an official declaration. * an official declaration.
...@@ -376,7 +376,7 @@ ...@@ -376,7 +376,7 @@
/* Version information for png.h - this should match the version in png.c */ /* Version information for png.h - this should match the version in png.c */
#define PNG_LIBPNG_VER_STRING "1.6.0beta15" #define PNG_LIBPNG_VER_STRING "1.6.0beta15"
#define PNG_HEADER_VERSION_STRING \ #define PNG_HEADER_VERSION_STRING \
" libpng version 1.6.0beta15 - February 27, 2012\n" " libpng version 1.6.0beta15 - March 2, 2012\n"
#define PNG_LIBPNG_VER_SONUM 16 #define PNG_LIBPNG_VER_SONUM 16
#define PNG_LIBPNG_VER_DLLNUM 16 #define PNG_LIBPNG_VER_DLLNUM 16
...@@ -2943,6 +2943,17 @@ typedef struct ...@@ -2943,6 +2943,17 @@ typedef struct
* correspond to the red, green and blue end-points defined by sRGB. * 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.
*/
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED #ifdef PNG_SIMPLIFIED_READ_SUPPORTED
/* READ APIs /* READ APIs
* --------- * ---------
......
...@@ -731,6 +731,15 @@ png_write_row(png_structrp png_ptr, png_const_bytep row) ...@@ -731,6 +731,15 @@ png_write_row(png_structrp png_ptr, png_const_bytep row)
} }
#endif #endif
#if 0 /* To do: implement png_do_check_palette_indexes() */
/* Check for out-of-range palette index */
if (png_ptr->num_palette < (1 << png_ptr->bit_depth))
png_do_check_palette_indexes(&row_info, png_ptr->row_buf + 1,
png_ptr->num_palette_max);
if (png_ptr->num_palette_max > num_palette + 1)
png_warning(png_ptr, "Palette index exceeded num_palette");
#endif
/* Find a filter if necessary, filter the row and write it out. */ /* Find a filter if necessary, filter the row and write it out. */
png_write_find_filter(png_ptr, &row_info); png_write_find_filter(png_ptr, &row_info);
...@@ -2109,6 +2118,18 @@ png_image_write_main(png_voidp argument) ...@@ -2109,6 +2118,18 @@ png_image_write_main(png_voidp argument)
display->row_bytes = row_bytes; display->row_bytes = row_bytes;
} }
/* Apply 'fast' options if the flag is set. */
if ((image->flags & PNG_IMAGE_FLAG_FAST) != 0)
{
png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, PNG_NO_FILTERS);
/* NOTE: determined by experiment using pngstest, this reflects some
* balance between the time to write the image once and the time to read
* it about 50 times. The speed-up in pngstest was about 10-20% of the
* total (user) time on a heavily loaded system.
*/
png_set_compression_level(png_ptr, 3);
}
/* Check for the cases that currently require a pre-transform on the row /* Check for the cases that currently require a pre-transform on the row
* before it is written. This only applies when the input is 16-bit and * before it is written. This only applies when the input is 16-bit and
* either there is an alpha channel or it is converted to 8-bit. * either there is an alpha channel or it is converted to 8-bit.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册