mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
[libpng16] Merged libpng-1.7.0 changes to make no-interlace configurations work
with test programs.
This commit is contained in:
parent
88ecac68be
commit
a8472470a4
6
ANNOUNCE
6
ANNOUNCE
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
Libpng 1.6.9beta02 - December 28, 2013
|
Libpng 1.6.9beta02 - December 29, 2013
|
||||||
|
|
||||||
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.
|
||||||
@ -42,13 +42,15 @@ Version 1.6.9beta01 [December 26, 2013]
|
|||||||
Rebuilt configure scripts with automake-1.14.1 and autoconf-2.69
|
Rebuilt configure scripts with automake-1.14.1 and autoconf-2.69
|
||||||
in the tar distributions.
|
in the tar distributions.
|
||||||
|
|
||||||
Version 1.6.9beta02 [December 28, 2013]
|
Version 1.6.9beta02 [December 29, 2013]
|
||||||
Added checks for libpng 1.5 to pngvalid.c. This supports the use of
|
Added checks for libpng 1.5 to pngvalid.c. This supports the use of
|
||||||
this version of pngvalid in libpng 1.5
|
this version of pngvalid in libpng 1.5
|
||||||
Merged with pngvalid.c from libpng-1.7 changes to create a single
|
Merged with pngvalid.c from libpng-1.7 changes to create a single
|
||||||
pngvalid.c
|
pngvalid.c
|
||||||
Removed #error macro from contrib/tools/pngfix.c (Thomas Klausner).
|
Removed #error macro from contrib/tools/pngfix.c (Thomas Klausner).
|
||||||
Merged pngrio.c, pngtrans.c, pngwio.c, and pngerror.c with libpng-1.7.0
|
Merged pngrio.c, pngtrans.c, pngwio.c, and pngerror.c with libpng-1.7.0
|
||||||
|
Merged libpng-1.7.0 changes to make no-interlace configurations work
|
||||||
|
with test programs.
|
||||||
|
|
||||||
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
|
||||||
|
4
CHANGES
4
CHANGES
@ -4767,13 +4767,15 @@ Version 1.6.9beta01 [December 26, 2013]
|
|||||||
Rebuilt configure scripts with automake-1.14.1 and autoconf-2.69
|
Rebuilt configure scripts with automake-1.14.1 and autoconf-2.69
|
||||||
in the tar distributions.
|
in the tar distributions.
|
||||||
|
|
||||||
Version 1.6.9beta02 [December 28, 2013]
|
Version 1.6.9beta02 [December 29, 2013]
|
||||||
Added checks for libpng 1.5 to pngvalid.c. This supports the use of
|
Added checks for libpng 1.5 to pngvalid.c. This supports the use of
|
||||||
this version of pngvalid in libpng 1.5
|
this version of pngvalid in libpng 1.5
|
||||||
Merged with pngvalid.c from libpng-1.7 changes to create a single
|
Merged with pngvalid.c from libpng-1.7 changes to create a single
|
||||||
pngvalid.c
|
pngvalid.c
|
||||||
Removed #error macro from contrib/tools/pngfix.c (Thomas Klausner).
|
Removed #error macro from contrib/tools/pngfix.c (Thomas Klausner).
|
||||||
Merged pngrio.c, pngtrans.c, pngwio.c, and pngerror.c with libpng-1.7.0
|
Merged pngrio.c, pngtrans.c, pngwio.c, and pngerror.c with libpng-1.7.0
|
||||||
|
Merged libpng-1.7.0 changes to make no-interlace configurations work
|
||||||
|
with test programs.
|
||||||
|
|
||||||
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
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngvalid.c - validate libpng by constructing then reading png files.
|
/* pngvalid.c - validate libpng by constructing then reading png files.
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.9 [(PENDING RELEASE)]
|
* Last changed in libpng 1.5.18 [(PENDING RELEASE)]
|
||||||
* Copyright (c) 2013 Glenn Randers-Pehrson
|
* Copyright (c) 2013 Glenn Randers-Pehrson
|
||||||
* Written by John Cunningham Bowler
|
* Written by John Cunningham Bowler
|
||||||
*
|
*
|
||||||
@ -49,6 +49,15 @@
|
|||||||
# include <zlib.h> /* For crc32 */
|
# include <zlib.h> /* For crc32 */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* 1.6.1 added support for the configure test harness, which uses 77 to indicate
|
||||||
|
* a skipped test, in earlier versions we need to succeed on a skipped test, so:
|
||||||
|
*/
|
||||||
|
#if PNG_LIBPNG_VER < 10601
|
||||||
|
# define SKIP 0
|
||||||
|
#else
|
||||||
|
# define SKIP 77
|
||||||
|
#endif
|
||||||
|
|
||||||
/* pngvalid requires write support and one of the fixed or floating point APIs.
|
/* pngvalid requires write support and one of the fixed or floating point APIs.
|
||||||
*/
|
*/
|
||||||
#if defined(PNG_WRITE_SUPPORTED) &&\
|
#if defined(PNG_WRITE_SUPPORTED) &&\
|
||||||
@ -3401,10 +3410,28 @@ transform_row(png_const_structp pp, png_byte buffer[TRANSFORM_ROWMAX],
|
|||||||
#define DEPTH(bd) ((png_byte)(1U << (bd)))
|
#define DEPTH(bd) ((png_byte)(1U << (bd)))
|
||||||
|
|
||||||
/* This is just a helper for compiling on minimal systems with no write
|
/* This is just a helper for compiling on minimal systems with no write
|
||||||
* interlacing support.
|
* interlacing support. If there is no write interlacing we can't generate test
|
||||||
|
* cases with interlace:
|
||||||
*/
|
*/
|
||||||
#ifndef PNG_WRITE_INTERLACING_SUPPORTED
|
#ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
||||||
|
# define INTERLACE_LAST PNG_INTERLACE_LAST
|
||||||
|
# define check_interlace_type(type) ((void)(type))
|
||||||
|
#else
|
||||||
|
# define INTERLACE_LAST (PNG_INTERLACE_NONE+1)
|
||||||
# define png_set_interlace_handling(a) (1)
|
# define png_set_interlace_handling(a) (1)
|
||||||
|
|
||||||
|
static void
|
||||||
|
check_interlace_type(int PNG_CONST interlace_type)
|
||||||
|
{
|
||||||
|
if (interlace_type != PNG_INTERLACE_NONE)
|
||||||
|
{
|
||||||
|
/* This is an internal error - --interlace tests should be skipped, not
|
||||||
|
* attempted.
|
||||||
|
*/
|
||||||
|
fprintf(stderr, "pngvalid: no interlace support\n");
|
||||||
|
exit(99);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Make a standardized image given a an image colour type, bit depth and
|
/* Make a standardized image given a an image colour type, bit depth and
|
||||||
@ -3420,6 +3447,8 @@ make_transform_image(png_store* PNG_CONST ps, png_byte PNG_CONST colour_type,
|
|||||||
{
|
{
|
||||||
context(ps, fault);
|
context(ps, fault);
|
||||||
|
|
||||||
|
check_interlace_type(interlace_type);
|
||||||
|
|
||||||
Try
|
Try
|
||||||
{
|
{
|
||||||
png_infop pi;
|
png_infop pi;
|
||||||
@ -3560,12 +3589,8 @@ make_transform_images(png_store *ps)
|
|||||||
{
|
{
|
||||||
int interlace_type;
|
int interlace_type;
|
||||||
|
|
||||||
# ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
for (interlace_type = PNG_INTERLACE_NONE;
|
||||||
for (interlace_type = PNG_INTERLACE_NONE;
|
interlace_type < INTERLACE_LAST; ++interlace_type)
|
||||||
interlace_type < PNG_INTERLACE_LAST; ++interlace_type)
|
|
||||||
# else
|
|
||||||
interlace_type = PNG_INTERLACE_NONE;
|
|
||||||
# endif
|
|
||||||
{
|
{
|
||||||
char name[FILE_NAME_SIZE];
|
char name[FILE_NAME_SIZE];
|
||||||
|
|
||||||
@ -3655,6 +3680,12 @@ make_size_image(png_store* PNG_CONST ps, png_byte PNG_CONST colour_type,
|
|||||||
{
|
{
|
||||||
context(ps, fault);
|
context(ps, fault);
|
||||||
|
|
||||||
|
/* At present libpng does not support the write of an interlaced image unless
|
||||||
|
* PNG_WRITE_INTERLACING_SUPPORTED, even with do_interlace so the code here
|
||||||
|
* does the pixel interlace itself, so:
|
||||||
|
*/
|
||||||
|
check_interlace_type(interlace_type);
|
||||||
|
|
||||||
Try
|
Try
|
||||||
{
|
{
|
||||||
png_infop pi;
|
png_infop pi;
|
||||||
@ -3864,13 +3895,6 @@ make_size(png_store* PNG_CONST ps, png_byte PNG_CONST colour_type, int bdlo,
|
|||||||
# ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
# ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
||||||
make_size_image(ps, colour_type, DEPTH(bdlo), PNG_INTERLACE_ADAM7,
|
make_size_image(ps, colour_type, DEPTH(bdlo), PNG_INTERLACE_ADAM7,
|
||||||
width, height, 0);
|
width, height, 0);
|
||||||
# endif
|
|
||||||
# if defined(PNG_WRITE_INTERLACING_SUPPORTED) || PNG_LIBPNG_VER > 10518
|
|
||||||
/* This fails in 1.5.8 with a zlib stream error writing the rows of
|
|
||||||
* the internally generated interlaced images, but only when the
|
|
||||||
* read code is disabled: to be investigated. Probably an erroneous
|
|
||||||
* #define out of the zlib deflate reset.
|
|
||||||
*/
|
|
||||||
make_size_image(ps, colour_type, DEPTH(bdlo), PNG_INTERLACE_ADAM7,
|
make_size_image(ps, colour_type, DEPTH(bdlo), PNG_INTERLACE_ADAM7,
|
||||||
width, height, 1);
|
width, height, 1);
|
||||||
# endif
|
# endif
|
||||||
@ -3964,6 +3988,8 @@ make_error(png_store* volatile psIn, png_byte PNG_CONST colour_type,
|
|||||||
|
|
||||||
context(ps, fault);
|
context(ps, fault);
|
||||||
|
|
||||||
|
check_interlace_type(interlace_type);
|
||||||
|
|
||||||
Try
|
Try
|
||||||
{
|
{
|
||||||
png_structp pp;
|
png_structp pp;
|
||||||
@ -4066,12 +4092,8 @@ make_errors(png_modifier* PNG_CONST pm, png_byte PNG_CONST colour_type,
|
|||||||
{
|
{
|
||||||
int interlace_type;
|
int interlace_type;
|
||||||
|
|
||||||
# ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
for (interlace_type = PNG_INTERLACE_NONE;
|
||||||
for (interlace_type = PNG_INTERLACE_NONE;
|
interlace_type < INTERLACE_LAST; ++interlace_type)
|
||||||
interlace_type < PNG_INTERLACE_LAST; ++interlace_type)
|
|
||||||
# else
|
|
||||||
interlace_type = PNG_INTERLACE_NONE;
|
|
||||||
# endif
|
|
||||||
{
|
{
|
||||||
unsigned int test;
|
unsigned int test;
|
||||||
char name[FILE_NAME_SIZE];
|
char name[FILE_NAME_SIZE];
|
||||||
@ -4269,6 +4291,7 @@ standard_display_init(standard_display *dp, png_store* ps, png_uint_32 id,
|
|||||||
dp->red_sBIT = dp->blue_sBIT = dp->green_sBIT = dp->alpha_sBIT =
|
dp->red_sBIT = dp->blue_sBIT = dp->green_sBIT = dp->alpha_sBIT =
|
||||||
dp->bit_depth;
|
dp->bit_depth;
|
||||||
dp->interlace_type = INTERLACE_FROM_ID(id);
|
dp->interlace_type = INTERLACE_FROM_ID(id);
|
||||||
|
check_interlace_type(dp->interlace_type);
|
||||||
dp->id = id;
|
dp->id = id;
|
||||||
/* All the rest are filled in after the read_info: */
|
/* All the rest are filled in after the read_info: */
|
||||||
dp->w = 0;
|
dp->w = 0;
|
||||||
@ -4887,7 +4910,7 @@ standard_text_validate(standard_display *dp, png_const_structp pp,
|
|||||||
{
|
{
|
||||||
standard_check_text(pp, tp, "image name", dp->ps->current->name);
|
standard_check_text(pp, tp, "image name", dp->ps->current->name);
|
||||||
|
|
||||||
/* This exists because prior to 1.6 the progressive reader left the
|
/* This exists because prior to 1.5.18 the progressive reader left the
|
||||||
* png_struct z_stream unreset at the end of the image, so subsequent
|
* png_struct z_stream unreset at the end of the image, so subsequent
|
||||||
* attempts to use it simply returns Z_STREAM_END.
|
* attempts to use it simply returns Z_STREAM_END.
|
||||||
*/
|
*/
|
||||||
@ -4996,7 +5019,7 @@ standard_end(png_structp ppIn, png_infop pi)
|
|||||||
* interlaced images.
|
* interlaced images.
|
||||||
*/
|
*/
|
||||||
standard_text_validate(dp, pp, pi,
|
standard_text_validate(dp, pp, pi,
|
||||||
PNG_LIBPNG_VER >= 10600/*check_end: see comments above*/);
|
PNG_LIBPNG_VER >= 10518/*check_end: see comments above*/);
|
||||||
standard_image_validate(dp, pp, 0, -1);
|
standard_image_validate(dp, pp, 0, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5098,7 +5121,7 @@ test_standard(png_modifier* PNG_CONST pm, png_byte PNG_CONST colour_type,
|
|||||||
int interlace_type;
|
int interlace_type;
|
||||||
|
|
||||||
for (interlace_type = PNG_INTERLACE_NONE;
|
for (interlace_type = PNG_INTERLACE_NONE;
|
||||||
interlace_type < PNG_INTERLACE_LAST; ++interlace_type)
|
interlace_type < INTERLACE_LAST; ++interlace_type)
|
||||||
{
|
{
|
||||||
standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/,
|
standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/,
|
||||||
interlace_type, 0, 0, 0), 0/*do_interlace*/, pm->use_update_info);
|
interlace_type, 0, 0, 0), 0/*do_interlace*/, pm->use_update_info);
|
||||||
@ -5173,6 +5196,7 @@ test_size(png_modifier* PNG_CONST pm, png_byte PNG_CONST colour_type,
|
|||||||
if (fail(pm))
|
if (fail(pm))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
# ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
||||||
standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/,
|
standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/,
|
||||||
PNG_INTERLACE_ADAM7, w, h, 0), 0/*do_interlace*/,
|
PNG_INTERLACE_ADAM7, w, h, 0), 0/*do_interlace*/,
|
||||||
pm->use_update_info);
|
pm->use_update_info);
|
||||||
@ -5186,6 +5210,7 @@ test_size(png_modifier* PNG_CONST pm, png_byte PNG_CONST colour_type,
|
|||||||
|
|
||||||
if (fail(pm))
|
if (fail(pm))
|
||||||
return 0;
|
return 0;
|
||||||
|
# endif
|
||||||
|
|
||||||
/* Now validate the interlaced read side - do_interlace true,
|
/* Now validate the interlaced read side - do_interlace true,
|
||||||
* in the progressive case this does actually make a difference
|
* in the progressive case this does actually make a difference
|
||||||
@ -5198,12 +5223,14 @@ test_size(png_modifier* PNG_CONST pm, png_byte PNG_CONST colour_type,
|
|||||||
if (fail(pm))
|
if (fail(pm))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
# ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
||||||
standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/,
|
standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/,
|
||||||
PNG_INTERLACE_ADAM7, w, h, 0), 1/*do_interlace*/,
|
PNG_INTERLACE_ADAM7, w, h, 0), 1/*do_interlace*/,
|
||||||
pm->use_update_info);
|
pm->use_update_info);
|
||||||
|
|
||||||
if (fail(pm))
|
if (fail(pm))
|
||||||
return 0;
|
return 0;
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9251,6 +9278,28 @@ static void gamma_composition_test(png_modifier *pm,
|
|||||||
r = random_32();
|
r = random_32();
|
||||||
background.blue = (png_uint_16)r;
|
background.blue = (png_uint_16)r;
|
||||||
background.gray = (png_uint_16)(r >> 16);
|
background.gray = (png_uint_16)(r >> 16);
|
||||||
|
|
||||||
|
/* In earlier libpng versions, those where DIGITIZE is set, any background
|
||||||
|
* gamma correction in the expand16 case was done using 8-bit gamma
|
||||||
|
* correction tables, resulting in larger errors. To cope with those
|
||||||
|
* cases use a 16-bit background value which will handle this gamma
|
||||||
|
* correction.
|
||||||
|
*/
|
||||||
|
# if DIGITIZE
|
||||||
|
if (expand_16 && (do_background == PNG_BACKGROUND_GAMMA_UNIQUE ||
|
||||||
|
do_background == PNG_BACKGROUND_GAMMA_FILE) &&
|
||||||
|
fabs(bg*screen_gamma-1) > PNG_GAMMA_THRESHOLD)
|
||||||
|
{
|
||||||
|
/* The background values will be looked up in an 8-bit table to do
|
||||||
|
* the gamma correction, so only select values which are an exact
|
||||||
|
* match for the 8-bit table entries:
|
||||||
|
*/
|
||||||
|
background.red = (png_uint_16)((background.red >> 8) * 257);
|
||||||
|
background.green = (png_uint_16)((background.green >> 8) * 257);
|
||||||
|
background.blue = (png_uint_16)((background.blue >> 8) * 257);
|
||||||
|
background.gray = (png_uint_16)((background.gray >> 8) * 257);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
else /* 8 bit colors */
|
else /* 8 bit colors */
|
||||||
@ -10222,7 +10271,14 @@ int main(int argc, char **argv)
|
|||||||
++pm.use_update_info; /* Can call multiple times */
|
++pm.use_update_info; /* Can call multiple times */
|
||||||
|
|
||||||
else if (strcmp(*argv, "--interlace") == 0)
|
else if (strcmp(*argv, "--interlace") == 0)
|
||||||
pm.interlace_type = PNG_INTERLACE_ADAM7;
|
{
|
||||||
|
# ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
||||||
|
pm.interlace_type = PNG_INTERLACE_ADAM7;
|
||||||
|
# else
|
||||||
|
fprintf(stderr, "pngvalid: no write interlace support\n");
|
||||||
|
return SKIP;
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
else if (strcmp(*argv, "--use-input-precision") == 0)
|
else if (strcmp(*argv, "--use-input-precision") == 0)
|
||||||
pm.use_input_precision = 1U;
|
pm.use_input_precision = 1U;
|
||||||
@ -10521,11 +10577,6 @@ int main(void)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"pngvalid: no low level write support in libpng, all tests skipped\n");
|
"pngvalid: no low level write support in libpng, all tests skipped\n");
|
||||||
/* So the test is skipped: */
|
/* So the test is skipped: */
|
||||||
#if PNG_LIBPNG_VER < 10601
|
return SKIP;
|
||||||
/* Test harness support was only added in libpng 1.6.1: */
|
|
||||||
return 0;
|
|
||||||
#else
|
|
||||||
return 77;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
67
pngtest.c
67
pngtest.c
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngtest.c - a simple test program to test libpng
|
/* pngtest.c - a simple test program to test libpng
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.8 [December 19, 2013]
|
* Last changed in libpng 1.6.9 [(PENDING RELEASE)]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 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.)
|
||||||
@ -45,6 +45,11 @@
|
|||||||
|
|
||||||
/* Known chunks that exist in pngtest.png must be supported or pngtest will fail
|
/* Known chunks that exist in pngtest.png must be supported or pngtest will fail
|
||||||
* simply as a result of re-ordering them. This may be fixed in 1.7
|
* simply as a result of re-ordering them. This may be fixed in 1.7
|
||||||
|
*
|
||||||
|
* pngtest allocates a single row buffer for each row and overwrites it,
|
||||||
|
* therefore if the write side doesn't support the writing of interlaced images
|
||||||
|
* nothing can be done for an interlaced image (and the code below will fail
|
||||||
|
* horribly trying to write extra data after writing garbage).
|
||||||
*/
|
*/
|
||||||
#if defined PNG_READ_SUPPORTED && /* else nothing can be done */\
|
#if defined PNG_READ_SUPPORTED && /* else nothing can be done */\
|
||||||
defined PNG_READ_bKGD_SUPPORTED &&\
|
defined PNG_READ_bKGD_SUPPORTED &&\
|
||||||
@ -58,9 +63,15 @@
|
|||||||
defined PNG_READ_sRGB_SUPPORTED &&\
|
defined PNG_READ_sRGB_SUPPORTED &&\
|
||||||
defined PNG_READ_tEXt_SUPPORTED &&\
|
defined PNG_READ_tEXt_SUPPORTED &&\
|
||||||
defined PNG_READ_tIME_SUPPORTED &&\
|
defined PNG_READ_tIME_SUPPORTED &&\
|
||||||
defined PNG_READ_zTXt_SUPPORTED
|
defined PNG_READ_zTXt_SUPPORTED &&\
|
||||||
|
defined PNG_WRITE_INTERLACING_SUPPORTED
|
||||||
|
|
||||||
|
#ifdef PNG_ZLIB_HEADER
|
||||||
|
# include PNG_ZLIB_HEADER /* defined by pnglibconf.h from 1.7 */
|
||||||
|
#else
|
||||||
|
# include "zlib.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "zlib.h"
|
|
||||||
/* Copied from pngpriv.h but only used in error messages below. */
|
/* Copied from pngpriv.h but only used in error messages below. */
|
||||||
#ifndef PNG_ZBUF_SIZE
|
#ifndef PNG_ZBUF_SIZE
|
||||||
# define PNG_ZBUF_SIZE 8192
|
# define PNG_ZBUF_SIZE 8192
|
||||||
@ -116,10 +127,6 @@ static int unsupported_chunks = 0; /* chunk unsupported by libpng in input */
|
|||||||
static int error_count = 0; /* count calls to png_error */
|
static int error_count = 0; /* count calls to png_error */
|
||||||
static int warning_count = 0; /* count calls to png_warning */
|
static int warning_count = 0; /* count calls to png_warning */
|
||||||
|
|
||||||
#ifdef __TURBOC__
|
|
||||||
#include <mem.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */
|
/* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */
|
||||||
#ifndef png_jmpbuf
|
#ifndef png_jmpbuf
|
||||||
# define png_jmpbuf(png_ptr) png_ptr->jmpbuf
|
# define png_jmpbuf(png_ptr) png_ptr->jmpbuf
|
||||||
@ -725,18 +732,18 @@ static int PNGCBAPI read_user_chunk_callback(png_struct *png_ptr,
|
|||||||
static void
|
static void
|
||||||
write_sTER_chunk(png_structp write_ptr)
|
write_sTER_chunk(png_structp write_ptr)
|
||||||
{
|
{
|
||||||
png_byte png_sTER[5] = {115, 84, 69, 82, '\0'};
|
png_byte sTER[5] = {115, 84, 69, 82, '\0'};
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
fprintf(STDERR, "\n stereo mode = %d\n", user_chunk_data.sTER_mode);
|
fprintf(STDERR, "\n stereo mode = %d\n", user_chunk_data.sTER_mode);
|
||||||
|
|
||||||
png_write_chunk(write_ptr, png_sTER, &user_chunk_data.sTER_mode, 1);
|
png_write_chunk(write_ptr, sTER, &user_chunk_data.sTER_mode, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
write_vpAg_chunk(png_structp write_ptr)
|
write_vpAg_chunk(png_structp write_ptr)
|
||||||
{
|
{
|
||||||
png_byte png_vpAg[5] = {118, 112, 65, 103, '\0'};
|
png_byte vpAg[5] = {118, 112, 65, 103, '\0'};
|
||||||
|
|
||||||
png_byte vpag_chunk_data[9];
|
png_byte vpag_chunk_data[9];
|
||||||
|
|
||||||
@ -749,7 +756,7 @@ write_vpAg_chunk(png_structp write_ptr)
|
|||||||
png_save_uint_32(vpag_chunk_data, user_chunk_data.vpAg_width);
|
png_save_uint_32(vpag_chunk_data, user_chunk_data.vpAg_width);
|
||||||
png_save_uint_32(vpag_chunk_data + 4, user_chunk_data.vpAg_height);
|
png_save_uint_32(vpag_chunk_data + 4, user_chunk_data.vpAg_height);
|
||||||
vpag_chunk_data[8] = user_chunk_data.vpAg_units;
|
vpag_chunk_data[8] = user_chunk_data.vpAg_units;
|
||||||
png_write_chunk(write_ptr, png_vpAg, vpag_chunk_data, 9);
|
png_write_chunk(write_ptr, vpAg, vpag_chunk_data, 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -830,6 +837,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
png_structp write_ptr;
|
png_structp write_ptr;
|
||||||
png_infop write_info_ptr;
|
png_infop write_info_ptr;
|
||||||
png_infop write_end_info_ptr;
|
png_infop write_end_info_ptr;
|
||||||
|
int interlace_preserved = 1;
|
||||||
#else
|
#else
|
||||||
png_structp write_ptr = NULL;
|
png_structp write_ptr = NULL;
|
||||||
png_infop write_info_ptr = NULL;
|
png_infop write_info_ptr = NULL;
|
||||||
@ -838,7 +846,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
png_bytep row_buf;
|
png_bytep row_buf;
|
||||||
png_uint_32 y;
|
png_uint_32 y;
|
||||||
png_uint_32 width, height;
|
png_uint_32 width, height;
|
||||||
int num_pass, pass;
|
int num_pass = 1, pass;
|
||||||
int bit_depth, color_type;
|
int bit_depth, color_type;
|
||||||
|
|
||||||
row_buf = NULL;
|
row_buf = NULL;
|
||||||
@ -1044,10 +1052,26 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
&color_type, &interlace_type, &compression_type, &filter_type))
|
&color_type, &interlace_type, &compression_type, &filter_type))
|
||||||
{
|
{
|
||||||
png_set_IHDR(write_ptr, write_info_ptr, width, height, bit_depth,
|
png_set_IHDR(write_ptr, write_info_ptr, width, height, bit_depth,
|
||||||
#ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
|
||||||
color_type, interlace_type, compression_type, filter_type);
|
color_type, interlace_type, compression_type, filter_type);
|
||||||
#else
|
#ifndef PNG_READ_INTERLACING_SUPPORTED
|
||||||
color_type, PNG_INTERLACE_NONE, compression_type, filter_type);
|
/* num_pass will not be set below, set it here if the image is
|
||||||
|
* interlaced: what happens is that write interlacing is *not* turned
|
||||||
|
* on an the partial interlaced rows are written directly.
|
||||||
|
*/
|
||||||
|
switch (interlace_type)
|
||||||
|
{
|
||||||
|
case PNG_INTERLACE_NONE:
|
||||||
|
num_pass = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PNG_INTERLACE_ADAM7:
|
||||||
|
num_pass = 7;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
png_error(read_ptr, "invalid interlace type");
|
||||||
|
/*NOT REACHED*/
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1340,14 +1364,10 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#endif /* SINGLE_ROWBUF_ALLOC */
|
#endif /* SINGLE_ROWBUF_ALLOC */
|
||||||
pngtest_debug("Writing row data");
|
pngtest_debug("Writing row data");
|
||||||
|
|
||||||
#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
|
#ifdef PNG_READ_INTERLACING_SUPPORTED
|
||||||
defined(PNG_WRITE_INTERLACING_SUPPORTED)
|
|
||||||
num_pass = png_set_interlace_handling(read_ptr);
|
num_pass = png_set_interlace_handling(read_ptr);
|
||||||
# ifdef PNG_WRITE_SUPPORTED
|
if (png_set_interlace_handling(write_ptr) != num_pass)
|
||||||
png_set_interlace_handling(write_ptr);
|
png_error(write_ptr, "png_set_interlace_handling: inconsistent num_pass");
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
num_pass = 1;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNGTEST_TIMING
|
#ifdef PNGTEST_TIMING
|
||||||
@ -1579,6 +1599,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED /* else nothing was written */
|
#ifdef PNG_WRITE_SUPPORTED /* else nothing was written */
|
||||||
|
if (interlace_preserved) /* else the files will be changed */
|
||||||
{
|
{
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@ -1965,7 +1986,7 @@ main(void)
|
|||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" test ignored because libpng was not built with read support\n");
|
" test ignored because libpng was not built with read support\n");
|
||||||
/* And skip this test */
|
/* And skip this test */
|
||||||
return 77;
|
return PNG_LIBPNG_VER < 10600 ? 0 : 77;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
exec ./pngvalid --standard --interlace
|
exec ./pngvalid --standard --progressive-read
|
||||||
|
Loading…
x
Reference in New Issue
Block a user