diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2011-03-31 20:20:09 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2011-03-31 20:20:09 +0200 |
commit | c2bd3a43342e37a05a97e12581dd2bd52993877a (patch) | |
tree | 39f9427d581669d8f619b4df44c5c5548c8fd955 /package/libpng | |
parent | ac46bdeef28bc2b65e1880884a79257c28e423a7 (diff) |
Revert "fix conflict, autoseect libgcj"
This reverts commit ac46bdeef28bc2b65e1880884a79257c28e423a7, reversing
changes made to 418fb3668f7140cc3e2ba07c354fe0d9bbb47d04.
Diffstat (limited to 'package/libpng')
-rw-r--r-- | package/libpng/Makefile | 15 | ||||
-rw-r--r-- | package/libpng/patches/001-apng.patch | 895 | ||||
-rw-r--r-- | package/libpng/patches/patch-ltmain_sh | 14 |
3 files changed, 483 insertions, 441 deletions
diff --git a/package/libpng/Makefile b/package/libpng/Makefile index 2deced6df..ed5808ecf 100644 --- a/package/libpng/Makefile +++ b/package/libpng/Makefile @@ -4,9 +4,9 @@ include ${TOPDIR}/rules.mk PKG_NAME:= libpng -PKG_VERSION:= 1.5.1 -PKG_RELEASE:= 1 -PKG_MD5SUM:= 220035f111ea045a51e290906025e8b5 +PKG_VERSION:= 1.2.44 +PKG_RELEASE:= 3 +PKG_MD5SUM:= 89b62f8daaeeab1342e307d6d1411ff1 PKG_DESCR:= A library for reading/writing PNG images PKG_SECTION:= libs PKG_DEPENDS:= zlib @@ -27,15 +27,14 @@ include ${TOPDIR}/mk/package.mk $(eval $(call PKG_template,LIBPNG,libpng,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS})) $(eval $(call PKG_template,LIBPNG_DEV,libpng-dev,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKGSD_LIBPNG_DEV},${PKGSC_LIBPNG_DEV},${PKG_OPTS})) -#TARGET_CFLAGS:= $(filter-out -flto,$(TARGET_CFLAGS)) - libpng-install: ${INSTALL_DIR} ${IDIR_LIBPNG}/usr/lib - ${CP} ${WRKINST}/usr/lib/libpng*.so* ${IDIR_LIBPNG}/usr/lib + ${CP} ${WRKINST}/usr/lib/libpng{,12}.so* ${IDIR_LIBPNG}/usr/lib libpng-dev-install: - ${INSTALL_DIR} ${IDIR_LIBPNG_DEV}/usr/include - ${CP} ${WRKINST}/usr/include/* ${IDIR_LIBPNG_DEV}/usr/include + ${INSTALL_DIR} ${IDIR_LIBPNG_DEV}/usr/include/libpng12 + ${CP} ${WRKINST}/usr/include/*.h ${IDIR_LIBPNG_DEV}/usr/include + ${CP} ${WRKINST}/usr/include/libpng12/*.h ${IDIR_LIBPNG_DEV}/usr/include/libpng12 ${INSTALL_DIR} ${IDIR_LIBPNG_DEV}/usr/lib/pkgconfig ${CP} ${WRKINST}/usr/lib/pkgconfig/*.pc \ ${IDIR_LIBPNG_DEV}/usr/lib/pkgconfig diff --git a/package/libpng/patches/001-apng.patch b/package/libpng/patches/001-apng.patch index 3b68eea9f..3af4a0547 100644 --- a/package/libpng/patches/001-apng.patch +++ b/package/libpng/patches/001-apng.patch @@ -1,7 +1,51 @@ -diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c ---- libpng-1.5.1.orig/pngget.c 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pngget.c 2011-03-27 19:43:38.404620874 +0200 -@@ -937,6 +937,167 @@ +diff -Nur libpng-1.2.44.orig/png.c libpng-1.2.44/png.c +--- libpng-1.2.44.orig/png.c 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/png.c 2010-07-08 21:21:33.745873377 +0200 +@@ -56,6 +56,11 @@ + PNG_tIME; + PNG_tRNS; + PNG_zTXt; ++#ifdef PNG_APNG_SUPPORTED ++PNG_acTL; ++PNG_fcTL; ++PNG_fdAT; ++#endif + + #ifdef PNG_READ_SUPPORTED + /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */ +diff -Nur libpng-1.2.44.orig/pngconf.h libpng-1.2.44/pngconf.h +--- libpng-1.2.44.orig/pngconf.h 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/pngconf.h 2010-07-08 21:21:33.906029659 +0200 +@@ -951,6 +951,10 @@ + # define PNG_NO_READ_tEXt + # define PNG_NO_READ_zTXt + #endif ++#ifndef PNG_NO_READ_APNG ++# define PNG_READ_APNG_SUPPORTED ++# define PNG_APNG_SUPPORTED ++#endif + #ifndef PNG_NO_READ_bKGD + # define PNG_READ_bKGD_SUPPORTED + # define PNG_bKGD_SUPPORTED +@@ -1177,6 +1181,14 @@ + # define PNG_TEXT_SUPPORTED + # endif + #endif ++#ifndef PNG_NO_WRITE_APNG ++# ifndef PNG_WRITE_APNG_SUPPORTED ++# define PNG_WRITE_APNG_SUPPORTED ++# endif ++# ifndef PNG_APNG_SUPPORTED ++# define PNG_APNG_SUPPORTED ++# endif ++#endif + + #ifdef PNG_WRITE_tIME_SUPPORTED + # ifndef PNG_NO_CONVERT_tIME +diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/pngget.c +--- libpng-1.2.44.orig/pngget.c 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/pngget.c 2010-07-08 21:21:33.676118515 +0200 +@@ -842,6 +842,167 @@ } #endif @@ -11,7 +55,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c + png_uint_32 *num_frames, png_uint_32 *num_plays) +{ + png_debug1(1, "in %s retrieval function", "acTL"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL && + (info_ptr->valid & PNG_INFO_acTL) && + num_frames != NULL && num_plays != NULL) @@ -20,7 +64,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c + *num_plays = info_ptr->num_plays; + return (1); + } -+ ++ + return (0); +} + @@ -28,7 +72,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_num_frames(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_get_num_frames()"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL) + return (info_ptr->num_frames); + return (0); @@ -38,7 +82,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_num_plays(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_get_num_plays()"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL) + return (info_ptr->num_plays); + return (0); @@ -52,7 +96,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c + png_byte *dispose_op, png_byte *blend_op) +{ + png_debug1(1, "in %s retrieval function", "fcTL"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL && + (info_ptr->valid & PNG_INFO_fcTL) && + width != NULL && height != NULL && @@ -70,7 +114,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c + *blend_op = info_ptr->next_frame_blend_op; + return (1); + } -+ ++ + return (0); +} + @@ -78,7 +122,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_next_frame_width(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_get_next_frame_width()"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL) + return (info_ptr->next_frame_width); + return (0); @@ -88,7 +132,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_next_frame_height(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_get_next_frame_height()"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL) + return (info_ptr->next_frame_height); + return (0); @@ -98,7 +142,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_next_frame_x_offset(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_get_next_frame_x_offset()"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL) + return (info_ptr->next_frame_x_offset); + return (0); @@ -108,7 +152,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_next_frame_y_offset(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_get_next_frame_y_offset()"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL) + return (info_ptr->next_frame_y_offset); + return (0); @@ -118,7 +162,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_next_frame_delay_num(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_get_next_frame_delay_num()"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL) + return (info_ptr->next_frame_delay_num); + return (0); @@ -128,7 +172,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_next_frame_delay_den(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_get_next_frame_delay_den()"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL) + return (info_ptr->next_frame_delay_den); + return (0); @@ -138,7 +182,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_next_frame_dispose_op(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_get_next_frame_dispose_op()"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL) + return (info_ptr->next_frame_dispose_op); + return (0); @@ -148,7 +192,7 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_next_frame_blend_op(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_get_next_frame_blend_op()"); -+ ++ + if (png_ptr != NULL && info_ptr != NULL) + return (info_ptr->next_frame_blend_op); + return (0); @@ -158,32 +202,41 @@ diff -Nur libpng-1.5.1.orig/pngget.c libpng-1.5.1/pngget.c +png_get_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_first_frame_is_hidden()"); -+ ++ + if (png_ptr != NULL) + return (png_byte)(png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN); -+ ++ + return 0; +} +#endif /* PNG_APNG_SUPPORTED */ + #ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED - int PNGAPI - png_get_unknown_chunks(png_const_structp png_ptr, png_const_infop info_ptr, -diff -Nur libpng-1.5.1.orig/png.h libpng-1.5.1/png.h ---- libpng-1.5.1.orig/png.h 2011-02-03 05:58:16.000000000 +0100 -+++ libpng-1.5.1/png.h 2011-03-27 19:43:38.414620995 +0200 -@@ -404,6 +404,10 @@ - # include "pnglibconf.h" + png_uint_32 PNGAPI + png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr, +diff -Nur libpng-1.2.44.orig/png.h libpng-1.2.44/png.h +--- libpng-1.2.44.orig/png.h 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/png.h 2010-07-08 21:21:33.796029652 +0200 +@@ -1041,6 +1041,19 @@ + png_fixed_point int_y_blue PNG_DEPSTRUCT; #endif -+#define PNG_APNG_SUPPORTED -+#define PNG_READ_APNG_SUPPORTED -+#define PNG_WRITE_APNG_SUPPORTED -+ - #ifndef PNG_VERSION_INFO_ONLY - /* Standard header files (not needed for the version info) */ - # ifdef PNG_SETJMP_SUPPORTED -@@ -766,6 +770,10 @@ ++#ifdef PNG_APNG_SUPPORTED ++ png_uint_32 num_frames; /* including default image */ ++ png_uint_32 num_plays; ++ png_uint_32 next_frame_width; ++ png_uint_32 next_frame_height; ++ png_uint_32 next_frame_x_offset; ++ png_uint_32 next_frame_y_offset; ++ png_uint_16 next_frame_delay_num; ++ png_uint_16 next_frame_delay_den; ++ png_byte next_frame_dispose_op; ++ png_byte next_frame_blend_op; ++#endif ++ + } png_info; + + typedef png_info FAR * png_infop; +@@ -1142,6 +1155,10 @@ #define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ #define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ #define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */ @@ -194,149 +247,257 @@ diff -Nur libpng-1.5.1.orig/png.h libpng-1.5.1/png.h /* This is used for the transformation routines, as some of them * change these values for the row. It also should enable using -@@ -811,6 +819,10 @@ - (png_structp, png_infop), ); - typedef PNG_CALLBACK(void, *png_progressive_row_ptr, - (png_structp, png_bytep, png_uint_32, int), ); +@@ -1182,6 +1199,10 @@ + typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop)); + typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, + png_uint_32, int)); +#ifdef PNG_APNG_SUPPORTED -+typedef PNG_CALLBACK(void, *png_progressive_frame_ptr, (png_structp, -+ png_uint_32),); ++typedef void (PNGAPI *png_progressive_frame_ptr) PNGARG((png_structp, ++ png_uint_32)); +#endif #endif #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ -@@ -1242,6 +1254,18 @@ - PNG_EXPORT(60, void, png_write_image, - (png_structp png_ptr, png_bytepp image)); +@@ -1527,6 +1548,39 @@ + png_uint_32 user_height_max PNG_DEPSTRUCT; + #endif -+#ifdef PNG_WRITE_APNG_SUPPORTED -+PNG_EXPORT(1001, void, png_write_frame_head, (png_structp png_ptr, -+ png_infop info_ptr, png_bytepp row_pointers, -+ png_uint_32 width, png_uint_32 height, -+ png_uint_32 x_offset, png_uint_32 y_offset, -+ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, -+ png_byte blend_op)); ++#ifdef PNG_APNG_SUPPORTED ++ png_uint_32 apng_flags; ++ png_uint_32 next_seq_num; /* next fcTL/fdAT chunk sequence number */ ++ png_uint_32 first_frame_width; ++ png_uint_32 first_frame_height; + -+PNG_EXPORT(1002, void, png_write_frame_tail, (png_structp png_ptr, -+ png_infop info_ptr)); ++#ifdef PNG_READ_APNG_SUPPORTED ++ png_uint_32 num_frames_read; /* incremented after all image data of */ ++ /* a frame is read */ ++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED ++ png_progressive_frame_ptr frame_info_fn; /* frame info read callback */ ++ png_progressive_frame_ptr frame_end_fn; /* frame data read callback */ ++#endif +#endif + - /* Write the end of the PNG file. */ - PNG_EXPORT(61, void, png_write_end, - (png_structp png_ptr, png_infop info_ptr)); -@@ -1496,6 +1520,11 @@ - PNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structp png_ptr, - png_voidp progressive_ptr, png_progressive_info_ptr info_fn, - png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn)); ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ png_uint_32 num_frames_to_write; ++ png_uint_32 num_frames_written; ++#endif ++ ++/* For png_struct.apng_flags: */ ++#define PNG_FIRST_FRAME_HIDDEN 0x0001 ++ ++/* dispose_op flags from inside fcTL */ ++#define PNG_DISPOSE_OP_NONE 0x00 ++#define PNG_DISPOSE_OP_BACKGROUND 0x01 ++#define PNG_DISPOSE_OP_PREVIOUS 0x02 ++ ++/* blend_op flags from inside fcTL */ ++#define PNG_BLEND_OP_SOURCE 0x00 ++#define PNG_BLEND_OP_OVER 0x01 ++#endif /* PNG_APNG_SUPPORTED */ ++ + /* New member added in libpng-1.0.25 and 1.2.17 */ + #ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED + /* Storage for unknown chunk that the library doesn't recognize. */ +@@ -1861,6 +1915,18 @@ + extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, + png_bytepp image)); + ++#ifdef PNG_WRITE_APNG_SUPPORTED ++extern PNG_EXPORT (void,png_write_frame_head) PNGARG((png_structp png_ptr, ++ png_infop png_info, png_bytepp row_pointers, ++ png_uint_32 width, png_uint_32 height, ++ png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, ++ png_byte blend_op)); ++ ++extern PNG_EXPORT (void,png_write_frame_tail) PNGARG((png_structp png_ptr, ++ png_infop png_info)); ++#endif ++ + /* Writes the end of the PNG file. */ + extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +@@ -2114,6 +2180,11 @@ + png_voidp progressive_ptr, + png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, + png_progressive_end_ptr end_fn)); +#ifdef PNG_READ_APNG_SUPPORTED -+PNG_EXPORT(1003, void, png_set_progressive_frame_fn, (png_structp png_ptr, -+ png_progressive_frame_ptr frame_info_fn, -+ png_progressive_frame_ptr frame_end_fn)); ++extern PNG_EXPORT(void,png_set_progressive_frame_fn) PNGARG((png_structp png_ptr, ++ png_progressive_frame_ptr frame_info_fn, ++ png_progressive_frame_ptr frame_end_fn)); +#endif /* Returns the user pointer associated with the push read functions */ - PNG_EXPORT(91, png_voidp, png_get_progressive_ptr, (png_const_structp png_ptr)); -@@ -1970,6 +1999,62 @@ - int unit, png_const_charp swidth, png_const_charp sheight)); - #endif /* PNG_sCAL_SUPPORTED */ + extern PNG_EXPORT(png_voidp,png_get_progressive_ptr) +@@ -2554,6 +2625,59 @@ + #endif + #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ +#ifdef PNG_APNG_SUPPORTED -+PNG_EXPORT(1004, png_uint_32, png_get_acTL, (png_structp png_ptr, ++extern PNG_EXPORT(png_uint_32,png_get_acTL) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays)); -+PNG_EXPORT(1005, png_uint_32, png_set_acTL, (png_structp png_ptr, ++extern PNG_EXPORT(png_uint_32,png_set_acTL) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays)); -+PNG_EXPORT(1006, png_uint_32, png_get_num_frames, (png_structp png_ptr, -+ png_infop info_ptr)); -+PNG_EXPORT(1007, png_uint_32,png_get_num_plays, (png_structp png_ptr, ++extern PNG_EXPORT(png_uint_32,png_get_num_frames) PNGARG((png_structp png_ptr, + png_infop info_ptr)); ++extern PNG_EXPORT(png_uint_32,png_get_num_plays) ++ PNGARG((png_structp png_ptr, png_infop info_ptr)); + -+PNG_EXPORT(1008, png_uint_32, png_get_next_frame_fcTL, -+ (png_structp png_ptr, png_infop info_ptr, png_uint_32 *width, -+ png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset, ++extern PNG_EXPORT(png_uint_32,png_get_next_frame_fcTL) ++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 *width, ++ png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset, + png_uint_16 *delay_num, png_uint_16 *delay_den, png_byte *dispose_op, + png_byte *blend_op)); -+PNG_EXPORT(1009, png_uint_32, png_set_next_frame_fcTL, -+ (png_structp png_ptr, png_infop info_ptr, png_uint_32 width, -+ png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset, ++extern PNG_EXPORT(png_uint_32,png_set_next_frame_fcTL) ++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 width, ++ png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset, + png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, + png_byte blend_op)); -+PNG_EXPORT(1010, png_uint_32, png_get_next_frame_width, -+ (png_structp png_ptr, png_infop info_ptr)); -+PNG_EXPORT(1011, png_uint_32, png_get_next_frame_height, -+ (png_structp png_ptr, png_infop info_ptr)); -+PNG_EXPORT(1012, png_uint_32, png_get_next_frame_x_offset, -+ (png_structp png_ptr, png_infop info_ptr)); -+PNG_EXPORT(1013, png_uint_32, png_get_next_frame_y_offset, -+ (png_structp png_ptr, png_infop info_ptr)); -+PNG_EXPORT(1014, png_uint_16, png_get_next_frame_delay_num, -+ (png_structp png_ptr, png_infop info_ptr)); -+PNG_EXPORT(1015, png_uint_16, png_get_next_frame_delay_den, -+ (png_structp png_ptr, png_infop info_ptr)); -+PNG_EXPORT(1016, png_byte, png_get_next_frame_dispose_op, -+ (png_structp png_ptr, png_infop info_ptr)); -+PNG_EXPORT(1017, png_byte, png_get_next_frame_blend_op, -+ (png_structp png_ptr, png_infop info_ptr)); -+PNG_EXPORT(1018, png_byte, png_get_first_frame_is_hidden, -+ (png_structp png_ptr, png_infop info_ptr)); -+PNG_EXPORT(1019, png_uint_32, png_set_first_frame_is_hidden, -+ (png_structp png_ptr, png_infop info_ptr, png_byte is_hidden)); -+ -+/* dispose_op flags from inside fcTL */ -+#define PNG_DISPOSE_OP_NONE 0x00 -+#define PNG_DISPOSE_OP_BACKGROUND 0x01 -+#define PNG_DISPOSE_OP_PREVIOUS 0x02 -+ -+/* blend_op flags from inside fcTL */ -+#define PNG_BLEND_OP_SOURCE 0x00 -+#define PNG_BLEND_OP_OVER 0x01 ++extern PNG_EXPORT(void,png_ensure_fcTL_is_valid) ++ PNGARG((png_structp png_ptr, ++ png_uint_32 width, png_uint_32 height, ++ png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, ++ png_byte dispose_op, png_byte blend_op)); ++extern PNG_EXPORT(png_uint_32,png_get_next_frame_width) ++ PNGARG((png_structp png_ptr, png_infop info_ptr)); ++extern PNG_EXPORT(png_uint_32,png_get_next_frame_height) ++ PNGARG((png_structp png_ptr, png_infop info_ptr)); ++extern PNG_EXPORT(png_uint_32,png_get_next_frame_x_offset) ++ PNGARG((png_structp png_ptr, png_infop info_ptr)); ++extern PNG_EXPORT(png_uint_32,png_get_next_frame_y_offset) ++ PNGARG((png_structp png_ptr, png_infop info_ptr)); ++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_num) ++ PNGARG((png_structp png_ptr, png_infop info_ptr)); ++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_den) ++ PNGARG((png_structp png_ptr, png_infop info_ptr)); ++extern PNG_EXPORT(png_byte,png_get_next_frame_dispose_op) ++ PNGARG((png_structp png_ptr, png_infop info_ptr)); ++extern PNG_EXPORT(png_byte,png_get_next_frame_blend_op) ++ PNGARG((png_structp png_ptr, png_infop info_ptr)); ++extern PNG_EXPORT(png_byte,png_get_first_frame_is_hidden) ++ PNGARG((png_structp png_ptr, png_infop info_ptr)); ++extern PNG_EXPORT(png_uint_32,png_set_first_frame_is_hidden) ++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_byte is_hidden)); +#endif /* PNG_APNG_SUPPORTED */ + +#ifdef PNG_READ_APNG_SUPPORTED -+PNG_EXPORT(1020, void, png_read_frame_head, (png_structp png_ptr, ++extern PNG_EXPORT(void,png_read_frame_head) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED /* Provide a list of chunks and how they are to be handled, if the built-in handling or default unknown chunk handling is not desired. Any chunks not -diff -Nur libpng-1.5.1.orig/pnginfo.h libpng-1.5.1/pnginfo.h ---- libpng-1.5.1.orig/pnginfo.h 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pnginfo.h 2011-03-27 19:43:38.543370848 +0200 -@@ -266,5 +266,18 @@ - png_bytepp row_pointers; /* the image bits */ - #endif +@@ -2918,6 +3042,10 @@ + #define PNG_BACKGROUND_IS_GRAY 0x800 + #define PNG_HAVE_PNG_SIGNATURE 0x1000 + #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */ ++#ifdef PNG_APNG_SUPPORTED ++#define PNG_HAVE_acTL 0x4000 ++#define PNG_HAVE_fcTL 0x8000L ++#endif + /* Flags for the transformations the PNG library does on the image data */ + #define PNG_BGR 0x0001 +@@ -3060,6 +3188,11 @@ + #define PNG_tIME png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} + #define PNG_tRNS png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} + #define PNG_zTXt png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} +#ifdef PNG_APNG_SUPPORTED -+ png_uint_32 num_frames; /* including default image */ -+ png_uint_32 num_plays; -+ png_uint_32 next_frame_width; -+ png_uint_32 next_frame_height; -+ png_uint_32 next_frame_x_offset; -+ png_uint_32 next_frame_y_offset; -+ png_uint_16 next_frame_delay_num; -+ png_uint_16 next_frame_delay_den; -+ png_byte next_frame_dispose_op; -+ png_byte next_frame_blend_op; ++#define PNG_acTL png_byte png_acTL[5] = { 97, 99, 84, 76, '\0'} ++#define PNG_fcTL png_byte png_fcTL[5] = {102, 99, 84, 76, '\0'} ++#define PNG_fdAT png_byte png_fdAT[5] = {102, 100, 65, 84, '\0'} ++#endif + + #ifdef PNG_USE_GLOBAL_ARRAYS + PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5]; +@@ -3083,6 +3216,11 @@ + PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5]; + PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5]; + PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5]; ++#ifdef PNG_APNG_SUPPORTED ++PNG_EXPORT_VAR (png_byte FARDATA) png_acTL[5]; ++PNG_EXPORT_VAR (png_byte FARDATA) png_fcTL[5]; ++PNG_EXPORT_VAR (png_byte FARDATA) png_fdAT[5]; +#endif + #endif /* PNG_USE_GLOBAL_ARRAYS */ + + #if defined(PNG_1_0_X) || defined (PNG_1_2_X) +@@ -3365,6 +3503,17 @@ + #endif + #endif + ++#ifdef PNG_WRITE_APNG_SUPPORTED ++PNG_EXTERN void png_write_acTL PNGARG((png_structp png_ptr, ++ png_uint_32 num_frames, png_uint_32 num_plays)); + - }; - #endif /* PNGINFO_H */ -diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c ---- libpng-1.5.1.orig/pngpread.c 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pngpread.c 2011-03-27 19:43:38.673370990 +0200 -@@ -263,6 +263,11 @@ ++PNG_EXTERN void png_write_fcTL PNGARG((png_structp png_ptr, ++ png_uint_32 width, png_uint_32 height, ++ png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, ++ png_byte dispose_op, png_byte blend_op)); ++#endif ++ + /* Called when finished processing a row of data */ + PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)) PNG_PRIVATE; + +@@ -3417,6 +3566,20 @@ + PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr, + png_infop info_ptr)) PNG_PRIVATE; + ++#ifdef PNG_READ_APNG_SUPPORTED ++/* Private, reset some things to become ready for reading next frame */ ++PNG_EXTERN void png_read_reset PNGARG((png_structp png_ptr)); ++PNG_EXTERN void png_read_reinit PNGARG((png_structp png_ptr, ++ png_infop info_ptr)); ++PNG_EXTERN void png_progressive_read_reset PNGARG((png_structp png_ptr)); ++#endif ++#ifdef PNG_WRITE_APNG_SUPPORTED ++/* Private, reset some things to become ready for writing next frame */ ++PNG_EXTERN void png_write_reset PNGARG((png_structp png_ptr)); ++PNG_EXTERN void png_write_reinit PNGARG((png_structp png_ptr, ++ png_infop info_ptr, png_uint_32 width, png_uint_32 height)); ++#endif ++ + /* These are the functions that do the transformations */ + #ifdef PNG_READ_FILLER_SUPPORTED + PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info, +@@ -3640,6 +3803,18 @@ + png_uint_32 length)) PNG_PRIVATE; + #endif + ++#ifdef PNG_READ_APNG_SUPPORTED ++PNG_EXTERN void png_handle_acTL PNGARG((png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 length)); ++PNG_EXTERN void png_handle_fcTL PNGARG((png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 length)); ++PNG_EXTERN void png_have_info PNGARG((png_structp png_ptr, png_infop info_ptr)); ++PNG_EXTERN void png_handle_fdAT PNGARG((png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 length)); ++PNG_EXTERN void png_ensure_sequence_number PNGARG((png_structp png_ptr, ++ png_uint_32 length)); ++#endif ++ + PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)) PNG_PRIVATE; + +diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/pngpread.c +--- libpng-1.2.44.orig/pngpread.c 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/pngpread.c 2010-07-08 21:21:33.947205863 +0200 +@@ -206,6 +206,11 @@ #ifdef PNG_READ_zTXt_SUPPORTED - PNG_zTXt; + PNG_CONST PNG_zTXt; #endif +#ifdef PNG_READ_APNG_SUPPORTED -+ PNG_acTL; -+ PNG_fcTL; -+ PNG_fdAT; ++ PNG_CONST PNG_acTL; ++ PNG_CONST PNG_fcTL; ++ PNG_CONST PNG_fdAT; +#endif + #endif /* PNG_USE_LOCAL_ARRAYS */ /* First we make sure we have enough data for the 4 byte chunk name - * and the 4 byte chunk length before proceeding with decoding the -@@ -288,6 +293,103 @@ +@@ -232,6 +237,103 @@ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; } @@ -349,7 +510,7 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c + /* Discard trailing IDATs for the first frame */ + if (png_ptr->mode & PNG_HAVE_fcTL || png_ptr->num_frames_read > 1) + png_error(png_ptr, "out of place IDAT"); -+ ++ + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); @@ -367,13 +528,13 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c + return; + } + png_ensure_sequence_number(png_ptr, 4); -+ ++ + if (!(png_ptr->mode & PNG_HAVE_fcTL)) + { + /* Discard trailing fdATs for frames other than the first */ + if (png_ptr->num_frames_read < 2) + png_error(png_ptr, "out of place fdAT"); -+ ++ + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); @@ -389,7 +550,7 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c + png_ptr->idat_size = png_ptr->push_length - 4; + png_ptr->mode |= PNG_HAVE_IDAT; + png_ptr->process_mode = PNG_READ_IDAT_MODE; -+ ++ + return; + } + } @@ -400,23 +561,23 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c + png_push_save_buffer(png_ptr); + return; + } -+ ++ + png_read_reset(png_ptr); + png_ptr->mode &= ~PNG_HAVE_fcTL; -+ ++ + png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length); -+ ++ + if (!(png_ptr->mode & PNG_HAVE_fcTL)) + png_error(png_ptr, "missing required fcTL chunk"); -+ ++ + png_read_reinit(png_ptr, info_ptr); + png_progressive_read_reset(png_ptr); -+ ++ + if (png_ptr->frame_info_fn != NULL) + (*(png_ptr->frame_info_fn))(png_ptr, png_ptr->num_frames_read); -+ ++ + png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; -+ ++ + return; + } + else @@ -432,16 +593,16 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c + png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; + return; + } -+ ++ + return; + } +#endif /* PNG_READ_APNG_SUPPORTED */ + if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) - if (png_ptr->mode & PNG_AFTER_IDAT) - png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT; -@@ -383,6 +485,9 @@ - png_benign_error(png_ptr, "Too many IDATs found"); + if (png_ptr->mode & PNG_AFTER_IDAT) + png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT; +@@ -327,6 +429,9 @@ + png_error(png_ptr, "Too many IDAT's found"); } +#ifdef PNG_READ_APNG_SUPPORTED @@ -450,7 +611,7 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c png_ptr->idat_size = png_ptr->push_length; png_ptr->mode |= PNG_HAVE_IDAT; png_ptr->process_mode = PNG_READ_IDAT_MODE; -@@ -615,6 +720,38 @@ +@@ -559,6 +664,38 @@ } #endif @@ -489,14 +650,17 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c else { if (png_ptr->push_length + 4 > png_ptr->buffer_size) -@@ -810,11 +947,15 @@ +@@ -738,13 +875,17 @@ png_push_read_IDAT(png_structp png_ptr) { - PNG_IDAT; + #ifdef PNG_USE_LOCAL_ARRAYS +- PNG_CONST PNG_IDAT; ++ PNG_IDAT; +#ifdef PNG_READ_APNG_SUPPORTED + PNG_fdAT; + PNG_IEND; +#endif + #endif if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER)) { png_byte chunk_length[4]; @@ -506,13 +670,13 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c { png_push_save_buffer(png_ptr); return; -@@ -826,17 +967,64 @@ +@@ -756,15 +897,62 @@ png_crc_read(png_ptr, png_ptr->chunk_name, 4); png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; - if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) +#ifdef PNG_READ_APNG_SUPPORTED -+ if (png_memcmp(png_ptr->chunk_name, png_fdAT, 4) ++ if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_fdAT, 4) + && png_ptr->num_frames_read > 0) + { + if (png_ptr->flags & PNG_FLAG_ZLIB_FINISHED) @@ -548,10 +712,8 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c + ) { png_ptr->process_mode = PNG_READ_CHUNK_MODE; - if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) png_error(png_ptr, "Not enough compressed data"); - +#ifdef PNG_READ_APNG_SUPPORTED + if (png_ptr->frame_end_fn != NULL) + (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read); @@ -572,7 +734,7 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c } if (png_ptr->idat_size && png_ptr->save_buffer_size) { -@@ -1843,6 +2031,17 @@ +@@ -1763,6 +1951,17 @@ png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer); } @@ -588,119 +750,25 @@ diff -Nur libpng-1.5.1.orig/pngpread.c libpng-1.5.1/pngpread.c +#endif + png_voidp PNGAPI - png_get_progressive_ptr(png_const_structp png_ptr) + png_get_progressive_ptr(png_structp png_ptr) { -diff -Nur libpng-1.5.1.orig/pngpriv.h libpng-1.5.1/pngpriv.h ---- libpng-1.5.1.orig/pngpriv.h 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pngpriv.h 2011-03-27 19:43:38.503370856 +0200 -@@ -275,6 +275,10 @@ - #define PNG_BACKGROUND_IS_GRAY 0x800 - #define PNG_HAVE_PNG_SIGNATURE 0x1000 - #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */ -+#ifdef PNG_APNG_SUPPORTED -+#define PNG_HAVE_acTL 0x4000 -+#define PNG_HAVE_fcTL 0x8000L -+#endif - - /* Flags for the transformations the PNG library does on the image data */ - #define PNG_BGR 0x0001 -@@ -457,6 +461,14 @@ - #define PNG_tIME PNG_CONST png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} - #define PNG_tRNS PNG_CONST png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} - #define PNG_zTXt PNG_CONST png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} -+#ifdef PNG_APNG_SUPPORTED -+#define PNG_acTL PNG_CONST png_byte png_acTL[5] = { 97, 99, 84, 76, '\0'} -+#define PNG_fcTL PNG_CONST png_byte png_fcTL[5] = {102, 99, 84, 76, '\0'} -+#define PNG_fdAT PNG_CONST png_byte png_fdAT[5] = {102, 100, 65, 84, '\0'} -+ -+/* For png_struct.apng_flags: */ -+#define PNG_FIRST_FRAME_HIDDEN 0x0001 -+#endif - - - /* Inhibit C++ name-mangling for libpng functions but not for system calls. */ -@@ -696,6 +708,17 @@ - int unit, png_const_charp width, png_const_charp height)); - #endif - -+#ifdef PNG_WRITE_APNG_SUPPORTED -+PNG_EXTERN void png_write_acTL PNGARG((png_structp png_ptr, -+ png_uint_32 num_frames, png_uint_32 num_plays)); -+ -+PNG_EXTERN void png_write_fcTL PNGARG((png_structp png_ptr, -+ png_uint_32 width, png_uint_32 height, -+ png_uint_32 x_offset, png_uint_32 y_offset, -+ png_uint_16 delay_num, png_uint_16 delay_den, -+ png_byte dispose_op, png_byte blend_op)); -+#endif -+ - /* Called when finished processing a row of data */ - PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)); - -@@ -744,6 +767,20 @@ - PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -+#ifdef PNG_READ_APNG_SUPPORTED -+/* Private, reset some things to become ready for reading next frame */ -+PNG_EXTERN void png_read_reset PNGARG((png_structp png_ptr)); -+PNG_EXTERN void png_read_reinit PNGARG((png_structp png_ptr, -+ png_infop info_ptr)); -+PNG_EXTERN void png_progressive_read_reset PNGARG((png_structp png_ptr)); -+#endif -+#ifdef PNG_WRITE_APNG_SUPPORTED -+/* Private, reset some things to become ready for writing next frame */ -+PNG_EXTERN void png_write_reset PNGARG((png_structp png_ptr)); -+PNG_EXTERN void png_write_reinit PNGARG((png_structp png_ptr, -+ png_infop info_ptr, png_uint_32 width, png_uint_32 height)); -+#endif -+ - /* These are the functions that do the transformations */ - #ifdef PNG_READ_FILLER_SUPPORTED - PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info, -@@ -972,6 +1009,25 @@ - png_uint_32 length)); - #endif - -+#ifdef PNG_READ_APNG_SUPPORTED -+PNG_EXTERN void png_handle_acTL PNGARG((png_structp png_ptr, png_infop info_ptr, -+ png_uint_32 length)); -+PNG_EXTERN void png_handle_fcTL PNGARG((png_structp png_ptr, png_infop info_ptr, -+ png_uint_32 length)); -+PNG_EXTERN void png_have_info PNGARG((png_structp png_ptr, png_infop info_ptr)); -+PNG_EXTERN void png_handle_fdAT PNGARG((png_structp png_ptr, png_infop info_ptr, -+ png_uint_32 length)); -+PNG_EXTERN void png_ensure_sequence_number PNGARG((png_structp png_ptr, -+ png_uint_32 length)); -+#endif -+#ifdef PNG_APNG_SUPPORTED -+PNG_EXTERN void png_ensure_fcTL_is_valid PNGARG((png_structp png_ptr, -+ png_uint_32 width, png_uint_32 height, -+ png_uint_32 x_offset, png_uint_32 y_offset, -+ png_uint_16 delay_num, png_uint_16 delay_den, -+ png_byte dispose_op, png_byte blend_op)); -+#endif -+ - PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); - -diff -Nur libpng-1.5.1.orig/pngread.c libpng-1.5.1/pngread.c ---- libpng-1.5.1.orig/pngread.c 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pngread.c 2011-03-27 19:43:38.383370613 +0200 -@@ -292,6 +292,11 @@ +diff -Nur libpng-1.2.44.orig/pngread.c libpng-1.2.44/pngread.c +--- libpng-1.2.44.orig/pngread.c 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/pngread.c 2010-07-08 21:21:33.676118515 +0200 +@@ -437,6 +437,11 @@ #ifdef PNG_READ_zTXt_SUPPORTED - PNG_zTXt; + PNG_CONST PNG_zTXt; #endif +#ifdef PNG_READ_APNG_SUPPORTED -+ PNG_acTL; -+ PNG_fcTL; -+ PNG_fdAT; ++ PNG_CONST PNG_acTL; ++ PNG_CONST PNG_fcTL; ++ PNG_CONST PNG_fdAT; +#endif + #endif /* PNG_USE_LOCAL_ARRAYS */ png_uint_32 length = png_read_chunk_header(png_ptr); PNG_CONST png_bytep chunk_name = png_ptr->chunk_name; - -@@ -344,6 +349,9 @@ - !(png_ptr->mode & PNG_HAVE_PLTE)) +@@ -481,6 +486,9 @@ + !(png_ptr->mode & PNG_HAVE_PLTE)) png_error(png_ptr, "Missing PLTE before IDAT"); +#ifdef PNG_READ_APNG_SUPPORTED @@ -709,10 +777,10 @@ diff -Nur libpng-1.5.1.orig/pngread.c libpng-1.5.1/pngread.c png_ptr->idat_size = length; png_ptr->mode |= PNG_HAVE_IDAT; break; -@@ -434,12 +442,96 @@ +@@ -553,12 +561,97 @@ + else if (!png_memcmp(chunk_name, png_iTXt, 4)) png_handle_iTXt(png_ptr, info_ptr, length); #endif - +#ifdef PNG_READ_APNG_SUPPORTED + else if (!png_memcmp(chunk_name, png_acTL, 4)) + png_handle_acTL(png_ptr, info_ptr, length); @@ -721,7 +789,6 @@ diff -Nur libpng-1.5.1.orig/pngread.c libpng-1.5.1/pngread.c + else if (!png_memcmp(chunk_name, png_fdAT, 4)) + png_handle_fdAT(png_ptr, info_ptr, length); +#endif -+ else png_handle_unknown(png_ptr, info_ptr, length); } @@ -733,37 +800,39 @@ diff -Nur libpng-1.5.1.orig/pngread.c libpng-1.5.1/pngread.c +png_read_frame_head(png_structp png_ptr, png_infop info_ptr) +{ + png_byte have_chunk_after_DAT; /* after IDAT or after fdAT */ -+ ++ + png_debug(0, "Reading frame head"); -+ ++ + if (!(png_ptr->mode & PNG_HAVE_acTL)) + png_error(png_ptr, "attempt to png_read_frame_head() but " + "no acTL present"); -+ ++ + /* do nothing for the main IDAT */ + if (png_ptr->num_frames_read == 0) + return; -+ ++ + png_crc_finish(png_ptr, 0); /* CRC from last IDAT or fdAT chunk */ -+ ++ + png_read_reset(png_ptr); + png_ptr->mode &= ~PNG_HAVE_fcTL; -+ ++ + have_chunk_after_DAT = 0; + for (;;) + { ++#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IDAT; + PNG_fdAT; + PNG_fcTL; ++#endif + png_byte chunk_length[4]; + png_uint_32 length; -+ ++ + png_read_data(png_ptr, chunk_length, 4); + length = png_get_uint_31(png_ptr, chunk_length); -+ ++ + png_reset_crc(png_ptr); + png_crc_read(png_ptr, png_ptr->chunk_name, 4); -+ ++ + if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) + { + /* discard trailing IDATs for the first frame */ @@ -779,7 +848,7 @@ diff -Nur libpng-1.5.1.orig/pngread.c libpng-1.5.1/pngread.c + else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4)) + { + png_ensure_sequence_number(png_ptr, length); -+ ++ + /* discard trailing fdATs for frames other than the first */ + if (!have_chunk_after_DAT && png_ptr->num_frames_read > 1) + png_crc_finish(png_ptr, length - 4); @@ -787,7 +856,7 @@ diff -Nur libpng-1.5.1.orig/pngread.c libpng-1.5.1/pngread.c + { + png_ptr->idat_size = length - 4; + png_ptr->mode |= PNG_HAVE_IDAT; -+ ++ + break; + } + else @@ -806,18 +875,18 @@ diff -Nur libpng-1.5.1.orig/pngread.c libpng-1.5.1/pngread.c /* Optional call to update the users info_ptr structure */ void PNGAPI png_read_update_info(png_structp png_ptr, png_infop info_ptr) -@@ -488,6 +580,10 @@ +@@ -599,6 +692,10 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row) { - PNG_IDAT; + PNG_CONST PNG_IDAT; +#ifdef PNG_READ_APNG_SUPPORTED -+ PNG_fdAT; -+ PNG_IEND; ++ PNG_CONST PNG_fdAT; ++ PNG_CONST PNG_IEND; +#endif PNG_CONST int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, - 0xff}; + 0xff}; PNG_CONST int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff}; -@@ -642,13 +738,39 @@ +@@ -734,13 +831,39 @@ { if (!(png_ptr->zstream.avail_in)) { @@ -850,17 +919,17 @@ diff -Nur libpng-1.5.1.orig/pngread.c libpng-1.5.1/pngread.c + bytes_to_skip = png_ptr->idat_size; + continue; + } -+ ++ + png_ensure_sequence_number(png_ptr, png_ptr->idat_size); -+ ++ + png_ptr->idat_size -= 4; + } +#endif } png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size; png_ptr->zstream.next_in = png_ptr->zbuf; -@@ -668,6 +790,9 @@ - png_benign_error(png_ptr, "Extra compressed data"); +@@ -758,6 +881,9 @@ + png_error(png_ptr, "Extra compressed data"); png_ptr->mode |= PNG_AFTER_IDAT; png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; +#ifdef PNG_READ_APNG_SUPPORTED @@ -868,23 +937,23 @@ diff -Nur libpng-1.5.1.orig/pngread.c libpng-1.5.1/pngread.c +#endif break; } - -@@ -952,6 +1077,11 @@ + if (ret != Z_OK) +@@ -1015,6 +1141,11 @@ #ifdef PNG_READ_zTXt_SUPPORTED - PNG_zTXt; + PNG_CONST PNG_zTXt; #endif +#ifdef PNG_READ_APNG_SUPPORTED -+ PNG_acTL; -+ PNG_fcTL; -+ PNG_fdAT; ++ PNG_CONST PNG_acTL; ++ PNG_CONST PNG_fcTL; ++ PNG_CONST PNG_fdAT; +#endif + #endif /* PNG_USE_LOCAL_ARRAYS */ png_uint_32 length = png_read_chunk_header(png_ptr); PNG_CONST png_bytep chunk_name = png_ptr->chunk_name; - -@@ -1073,6 +1203,15 @@ +@@ -1115,6 +1246,14 @@ + else if (!png_memcmp(chunk_name, png_iTXt, 4)) png_handle_iTXt(png_ptr, info_ptr, length); #endif - +#ifdef PNG_READ_APNG_SUPPORTED + else if (!png_memcmp(chunk_name, png_acTL, 4)) + png_handle_acTL(png_ptr, info_ptr, length); @@ -893,14 +962,13 @@ diff -Nur libpng-1.5.1.orig/pngread.c libpng-1.5.1/pngread.c + else if (!png_memcmp(chunk_name, png_fdAT, 4)) + png_handle_fdAT(png_ptr, info_ptr, length); +#endif -+ else png_handle_unknown(png_ptr, info_ptr, length); } while (!(png_ptr->mode & PNG_HAVE_IEND)); -diff -Nur libpng-1.5.1.orig/pngrtran.c libpng-1.5.1/pngrtran.c ---- libpng-1.5.1.orig/pngrtran.c 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pngrtran.c 2011-03-27 19:43:38.813371313 +0200 -@@ -1425,7 +1425,7 @@ +diff -Nur libpng-1.2.44.orig/pngrtran.c libpng-1.2.44/pngrtran.c +--- libpng-1.2.44.orig/pngrtran.c 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/pngrtran.c 2010-07-08 21:21:34.149609181 +0200 +@@ -1352,7 +1352,7 @@ * pixels. This check added to libpng-1.2.19 */ #if (PNG_WARN_UNINITIALIZED_ROW==1) @@ -909,10 +977,10 @@ diff -Nur libpng-1.5.1.orig/pngrtran.c libpng-1.5.1/pngrtran.c #else png_warning(png_ptr, "Uninitialized row"); #endif -diff -Nur libpng-1.5.1.orig/pngrutil.c libpng-1.5.1/pngrutil.c ---- libpng-1.5.1.orig/pngrutil.c 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pngrutil.c 2011-03-27 19:43:38.743371274 +0200 -@@ -569,6 +569,11 @@ +diff -Nur libpng-1.2.44.orig/pngrutil.c libpng-1.2.44/pngrutil.c +--- libpng-1.2.44.orig/pngrutil.c 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/pngrutil.c 2010-07-08 21:21:34.045873588 +0200 +@@ -460,6 +460,11 @@ filter_type = buf[11]; interlace_type = buf[12]; @@ -924,7 +992,7 @@ diff -Nur libpng-1.5.1.orig/pngrutil.c libpng-1.5.1/pngrutil.c /* Set internal variables */ png_ptr->width = width; png_ptr->height = height; -@@ -2492,6 +2497,172 @@ +@@ -2348,6 +2353,172 @@ } #endif @@ -936,7 +1004,7 @@ diff -Nur libpng-1.5.1.orig/pngrutil.c libpng-1.5.1/pngrutil.c + png_uint_32 num_frames; + png_uint_32 num_plays; + png_uint_32 didSet; -+ ++ + png_debug(1, "in png_handle_acTL"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) @@ -961,13 +1029,13 @@ diff -Nur libpng-1.5.1.orig/pngrutil.c libpng-1.5.1/pngrutil.c + png_crc_finish(png_ptr, length); + return; + } -+ ++ + png_crc_read(png_ptr, data, 8); + png_crc_finish(png_ptr, 0); -+ ++ + num_frames = png_get_uint_31(png_ptr, data); + num_plays = png_get_uint_31(png_ptr, data + 4); -+ ++ + /* the set function will do error checking on num_frames */ + didSet = png_set_acTL(png_ptr, info_ptr, num_frames, num_plays); + if(didSet) @@ -1064,7 +1132,7 @@ diff -Nur libpng-1.5.1.orig/pngrutil.c libpng-1.5.1/pngrutil.c +png_handle_fdAT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_ensure_sequence_number(png_ptr, length); -+ ++ + /* This function is only called from png_read_end(), png_read_info(), + * and png_push_read_chunk() which means that: + * - the user doesn't want to read this frame @@ -1079,25 +1147,25 @@ diff -Nur libpng-1.5.1.orig/pngrutil.c libpng-1.5.1/pngrutil.c +{ + png_byte data[4]; + png_uint_32 sequence_number; -+ ++ + if (length < 4) + png_error(png_ptr, "invalid fcTL or fdAT chunk found"); -+ ++ + png_crc_read(png_ptr, data, 4); + sequence_number = png_get_uint_31(png_ptr, data); -+ ++ + if (sequence_number != png_ptr->next_seq_num) + png_error(png_ptr, "fcTL or fdAT chunk with out-of-order sequence " + "number found"); -+ ++ + png_ptr->next_seq_num++; +} +#endif /* PNG_READ_APNG_SUPPORTED */ + /* This function is called when we haven't found a handler for a - * chunk. If there isn't a problem with the chunk itself (ie bad - * chunk name, CRC, or a critical chunk), the chunk is silently ignored -@@ -3613,4 +3784,73 @@ + chunk. If there isn't a problem with the chunk itself (ie bad + chunk name, CRC, or a critical chunk), the chunk is silently ignored +@@ -3379,4 +3550,75 @@ png_ptr->flags |= PNG_FLAG_ROW_INIT; } @@ -1123,13 +1191,14 @@ diff -Nur libpng-1.5.1.orig/pngrutil.c libpng-1.5.1/pngrutil.c + png_ptr->height = info_ptr->next_frame_height; + png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width); + if (png_ptr->prev_row) -+ png_memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1); ++ png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1); +} + +/* same as png_read_reset() but for the progressive reader */ +void /* PRIVATE */ +png_progressive_read_reset(png_structp png_ptr) +{ ++#ifdef PNG_USE_LOCAL_ARRAYS + /* start of interlace block */ + const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; + @@ -1141,7 +1210,8 @@ diff -Nur libpng-1.5.1.orig/pngrutil.c libpng-1.5.1/pngrutil.c + + /* offset to next interlace block in the y direction */ + const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2}; -+ ++#endif ++ + if (png_ptr->interlaced) + { + if (!(png_ptr->transformations & PNG_INTERLACE)) @@ -1171,11 +1241,11 @@ diff -Nur libpng-1.5.1.orig/pngrutil.c libpng-1.5.1/pngrutil.c +} +#endif /* PNG_READ_APNG_SUPPORTED */ #endif /* PNG_READ_SUPPORTED */ -diff -Nur libpng-1.5.1.orig/pngset.c libpng-1.5.1/pngset.c ---- libpng-1.5.1.orig/pngset.c 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pngset.c 2011-03-27 19:43:38.733370835 +0200 -@@ -211,6 +211,11 @@ - info_ptr->rowbytes = 0; +diff -Nur libpng-1.2.44.orig/pngset.c libpng-1.2.44/pngset.c +--- libpng-1.2.44.orig/pngset.c 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/pngset.c 2010-07-08 21:21:33.996027603 +0200 +@@ -266,6 +266,11 @@ + info_ptr->rowbytes = (png_size_t)0; else info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, width); + @@ -1186,7 +1256,7 @@ diff -Nur libpng-1.5.1.orig/pngset.c libpng-1.5.1/pngset.c } #ifdef PNG_oFFs_SUPPORTED -@@ -954,6 +959,142 @@ +@@ -960,6 +965,142 @@ } #endif /* PNG_sPLT_SUPPORTED */ @@ -1223,12 +1293,12 @@ diff -Nur libpng-1.5.1.orig/pngset.c libpng-1.5.1/pngset.c + "> 2^31-1"); + return (0); + } -+ ++ + info_ptr->num_frames = num_frames; + info_ptr->num_plays = num_plays; -+ ++ + info_ptr->valid |= PNG_INFO_acTL; -+ ++ + return (1); +} + @@ -1249,10 +1319,10 @@ diff -Nur libpng-1.5.1.orig/pngset.c libpng-1.5.1/pngset.c + "ignored"); + return (0); + } -+ ++ + png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset, + delay_num, delay_den, dispose_op, blend_op); -+ ++ + if (blend_op == PNG_BLEND_OP_OVER) + { + if (!(png_ptr->color_type & PNG_COLOR_MASK_ALPHA) && @@ -1272,13 +1342,13 @@ diff -Nur libpng-1.5.1.orig/pngset.c libpng-1.5.1/pngset.c + info_ptr->next_frame_delay_den = delay_den; + info_ptr->next_frame_dispose_op = dispose_op; + info_ptr->next_frame_blend_op = blend_op; -+ ++ + info_ptr->valid |= PNG_INFO_fcTL; -+ ++ + return (1); +} + -+void /* PRIVATE */ ++void PNGAPI +png_ensure_fcTL_is_valid(png_structp png_ptr, + png_uint_32 width, png_uint_32 height, + png_uint_32 x_offset, png_uint_32 y_offset, @@ -1313,15 +1383,15 @@ diff -Nur libpng-1.5.1.orig/pngset.c libpng-1.5.1/pngset.c + png_byte is_hidden) +{ + png_debug(1, "in png_first_frame_is_hidden()"); -+ ++ + if (png_ptr == NULL) + return 0; -+ ++ + if(is_hidden) + png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN; + else + png_ptr->apng_flags &= ~PNG_FIRST_FRAME_HIDDEN; -+ ++ + return 1; +} +#endif /* PNG_APNG_SUPPORTED */ @@ -1329,41 +1399,10 @@ diff -Nur libpng-1.5.1.orig/pngset.c libpng-1.5.1/pngset.c #ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED void PNGAPI png_set_unknown_chunks(png_structp png_ptr, -diff -Nur libpng-1.5.1.orig/pngstruct.h libpng-1.5.1/pngstruct.h ---- libpng-1.5.1.orig/pngstruct.h 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pngstruct.h 2011-03-27 19:43:38.603370828 +0200 -@@ -287,6 +287,27 @@ - png_alloc_size_t user_chunk_malloc_max; - #endif - -+#ifdef PNG_APNG_SUPPORTED -+ png_uint_32 apng_flags; -+ png_uint_32 next_seq_num; /* next fcTL/fdAT chunk sequence number */ -+ png_uint_32 first_frame_width; -+ png_uint_32 first_frame_height; -+ -+#ifdef PNG_READ_APNG_SUPPORTED -+ png_uint_32 num_frames_read; /* incremented after all image data of */ -+ /* a frame is read */ -+#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -+ png_progressive_frame_ptr frame_info_fn; /* frame info read callback */ -+ png_progressive_frame_ptr frame_end_fn; /* frame data read callback */ -+#endif -+#endif -+ -+#ifdef PNG_WRITE_APNG_SUPPORTED -+ png_uint_32 num_frames_to_write; -+ png_uint_32 num_frames_written; -+#endif -+#endif /* PNG_APNG_SUPPORTED */ -+ - /* New member added in libpng-1.0.25 and 1.2.17 */ - #ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED - /* Storage for unknown chunk that the library doesn't recognize. */ -diff -Nur libpng-1.5.1.orig/pngwrite.c libpng-1.5.1/pngwrite.c ---- libpng-1.5.1.orig/pngwrite.c 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pngwrite.c 2011-03-27 19:43:38.643370780 +0200 -@@ -58,6 +58,10 @@ +diff -Nur libpng-1.2.44.orig/pngwrite.c libpng-1.2.44/pngwrite.c +--- libpng-1.2.44.orig/pngwrite.c 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/pngwrite.c 2010-07-08 21:21:33.847089331 +0200 +@@ -57,6 +57,10 @@ /* The rest of these check to see if the valid field has the appropriate * flag set, and if it does, writes the chunk. */ @@ -1373,9 +1412,9 @@ diff -Nur libpng-1.5.1.orig/pngwrite.c libpng-1.5.1/pngwrite.c +#endif #ifdef PNG_WRITE_gAMA_SUPPORTED if (info_ptr->valid & PNG_INFO_gAMA) - png_write_gAMA_fixed(png_ptr, info_ptr->gamma); -@@ -300,6 +304,10 @@ - + { +@@ -319,6 +323,10 @@ + return; if (!(png_ptr->mode & PNG_HAVE_IDAT)) png_error(png_ptr, "No IDATs written into file"); +#ifdef PNG_WRITE_APNG_SUPPORTED @@ -1385,8 +1424,8 @@ diff -Nur libpng-1.5.1.orig/pngwrite.c libpng-1.5.1/pngwrite.c /* See if user wants us to write information chunks */ if (info_ptr != NULL) -@@ -1602,4 +1610,39 @@ - PNG_UNUSED(params) +@@ -1589,4 +1597,39 @@ + params = params; } #endif + @@ -1399,16 +1438,16 @@ diff -Nur libpng-1.5.1.orig/pngwrite.c libpng-1.5.1/pngwrite.c + png_byte blend_op) +{ + png_debug(1, "in png_write_frame_head"); -+ ++ + /* there is a chance this has been set after png_write_info was called, + * so it would be set but not written. is there a way to be sure? */ + if (!(info_ptr->valid & PNG_INFO_acTL)) + png_error(png_ptr, "png_write_frame_head(): acTL not set"); -+ ++ + png_write_reset(png_ptr); -+ ++ + png_write_reinit(png_ptr, info_ptr, width, height); -+ ++ + if ( !(png_ptr->num_frames_written == 0 && + (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) ) ) + png_write_fcTL(png_ptr, width, height, x_offset, y_offset, @@ -1416,21 +1455,21 @@ diff -Nur libpng-1.5.1.orig/pngwrite.c libpng-1.5.1/pngwrite.c +} + +void PNGAPI -+png_write_frame_tail(png_structp png_ptr, png_infop info_ptr) ++png_write_frame_tail(png_structp png_ptr, png_infop png_info) +{ + png_debug(1, "in png_write_frame_tail"); -+ ++ + png_ptr->num_frames_written++; +} +#endif /* PNG_WRITE_APNG_SUPPORTED */ + #endif /* PNG_WRITE_SUPPORTED */ -diff -Nur libpng-1.5.1.orig/pngwutil.c libpng-1.5.1/pngwutil.c ---- libpng-1.5.1.orig/pngwutil.c 2011-02-03 05:58:17.000000000 +0100 -+++ libpng-1.5.1/pngwutil.c 2011-03-27 19:43:38.803370805 +0200 -@@ -596,6 +596,11 @@ +diff -Nur libpng-1.2.44.orig/pngwutil.c libpng-1.2.44/pngwutil.c +--- libpng-1.2.44.orig/pngwutil.c 2010-06-26 02:31:14.000000000 +0200 ++++ libpng-1.2.44/pngwutil.c 2010-07-08 21:21:34.095873630 +0200 +@@ -516,6 +516,11 @@ /* Write the chunk */ - png_write_chunk(png_ptr, png_IHDR, buf, (png_size_t)13); + png_write_chunk(png_ptr, (png_bytep)png_IHDR, buf, (png_size_t)13); +#ifdef PNG_WRITE_APNG_SUPPORTED + png_ptr->first_frame_width = width; @@ -1440,38 +1479,38 @@ diff -Nur libpng-1.5.1.orig/pngwutil.c libpng-1.5.1/pngwutil.c /* Initialize zlib with PNG info */ png_ptr->zstream.zalloc = png_zalloc; png_ptr->zstream.zfree = png_zfree; -@@ -742,6 +747,9 @@ - png_write_IDAT(png_structp png_ptr, png_bytep data, png_size_t length) +@@ -641,6 +646,9 @@ { + #ifdef PNG_USE_LOCAL_ARRAYS PNG_IDAT; +#ifdef PNG_WRITE_APNG_SUPPORTED + PNG_fdAT; +#endif + #endif png_debug(1, "in png_write_IDAT"); - -@@ -791,7 +799,28 @@ - "Invalid zlib compression method or flags in IDAT"); +@@ -686,7 +694,28 @@ + "Invalid zlib compression method or flags in IDAT"); } +#ifdef PNG_WRITE_APNG_SUPPORTED + if(png_ptr->num_frames_written == 0) +#endif - png_write_chunk(png_ptr, png_IDAT, data, length); + png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length); +#ifdef PNG_WRITE_APNG_SUPPORTED + else + { + png_byte buf[4]; -+ -+ png_write_chunk_start(png_ptr, png_fdAT, 4 + length); -+ ++ ++ png_write_chunk_start(png_ptr, (png_bytep)png_fdAT, 4 + length); ++ + png_save_uint_32(buf, png_ptr->next_seq_num); + png_write_chunk_data(png_ptr, buf, 4); -+ ++ + png_write_chunk_data(png_ptr, data, length); -+ ++ + png_write_chunk_end(png_ptr); -+ ++ + png_ptr->next_seq_num++; + } +#endif @@ -1479,7 +1518,7 @@ diff -Nur libpng-1.5.1.orig/pngwutil.c libpng-1.5.1/pngwutil.c png_ptr->mode |= PNG_HAVE_IDAT; } -@@ -1769,6 +1798,66 @@ +@@ -1754,6 +1783,70 @@ } #endif @@ -1488,20 +1527,22 @@ diff -Nur libpng-1.5.1.orig/pngwutil.c libpng-1.5.1/pngwutil.c +png_write_acTL(png_structp png_ptr, + png_uint_32 num_frames, png_uint_32 num_plays) +{ ++#ifdef PNG_USE_LOCAL_ARRAYS + PNG_acTL; ++#endif + png_byte data[16]; -+ ++ + png_debug(1, "in png_write_acTL"); -+ ++ + png_ptr->num_frames_to_write = num_frames; -+ ++ + if (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) + num_frames--; -+ ++ + png_save_uint_32(data, num_frames); + png_save_uint_32(data + 4, num_plays); -+ -+ png_write_chunk(png_ptr, png_acTL, data, (png_size_t)8); ++ ++ png_write_chunk(png_ptr, (png_bytep)png_acTL, data, (png_size_t)8); +} + +void /* PRIVATE */ @@ -1510,11 +1551,13 @@ diff -Nur libpng-1.5.1.orig/pngwutil.c libpng-1.5.1/pngwutil.c + png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, + png_byte blend_op) +{ ++#ifdef PNG_USE_LOCAL_ARRAYS + PNG_fcTL; ++#endif + png_byte data[26]; -+ ++ + png_debug(1, "in png_write_fcTL"); -+ ++ + if (png_ptr->num_frames_written == 0 && (x_offset != 0 || y_offset != 0)) + png_error(png_ptr, "x and/or y offset for the first frame aren't 0"); + if (png_ptr->num_frames_written == 0 && @@ -1522,11 +1565,11 @@ diff -Nur libpng-1.5.1.orig/pngwutil.c libpng-1.5.1/pngwutil.c + height != png_ptr->first_frame_height)) + png_error(png_ptr, "width and/or height in the first frame's fcTL " + "don't match the ones in IHDR"); -+ ++ + /* more error checking */ + png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset, + delay_num, delay_den, dispose_op, blend_op); -+ ++ + png_save_uint_32(data, png_ptr->next_seq_num); + png_save_uint_32(data + 4, width); + png_save_uint_32(data + 8, height); @@ -1536,9 +1579,9 @@ diff -Nur libpng-1.5.1.orig/pngwutil.c libpng-1.5.1/pngwutil.c + png_save_uint_16(data + 22, delay_den); + data[24] = dispose_op; + data[25] = blend_op; -+ -+ png_write_chunk(png_ptr, png_fcTL, data, (png_size_t)26); -+ ++ ++ png_write_chunk(png_ptr, (png_bytep)png_fcTL, data, (png_size_t)26); ++ + png_ptr->next_seq_num++; +} +#endif /* PNG_WRITE_APNG_SUPPORTED */ @@ -1546,18 +1589,18 @@ diff -Nur libpng-1.5.1.orig/pngwutil.c libpng-1.5.1/pngwutil.c /* Initializes the row writing capability of libpng */ void /* PRIVATE */ png_write_start_row(png_structp png_ptr) -@@ -2203,8 +2292,8 @@ +@@ -2159,8 +2252,8 @@ #ifndef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED if (png_ptr->row_number == 0 && filter_to_do == PNG_ALL_FILTERS) { -- /* These will never be selected so we need not test them. */ -- filter_to_do &= ~(PNG_FILTER_UP | PNG_FILTER_PAETH); -+ /* These use previous row */ -+ filter_to_do &= ~(PNG_FILTER_UP | PNG_FILTER_AVG | PNG_FILTER_PAETH); +- /* These will never be selected so we need not test them. */ +- filter_to_do &= ~(PNG_FILTER_UP | PNG_FILTER_PAETH); ++ /* These use previous row */ ++ filter_to_do &= ~(PNG_FILTER_UP | PNG_FILTER_AVG | PNG_FILTER_PAETH); } - #endif + #endif -@@ -2945,4 +3034,39 @@ +@@ -2829,4 +2922,39 @@ } #endif } @@ -1584,12 +1627,12 @@ diff -Nur libpng-1.5.1.orig/pngwutil.c libpng-1.5.1/pngwutil.c + height > png_ptr->first_frame_height) + png_error(png_ptr, "width and/or height for a frame greater than" + "the ones in IHDR"); -+ ++ + png_set_IHDR(png_ptr, info_ptr, width, height, + info_ptr->bit_depth, info_ptr->color_type, + info_ptr->interlace_type, info_ptr->compression_type, + info_ptr->filter_type); -+ ++ + png_ptr->width = width; + png_ptr->height = height; + png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width); diff --git a/package/libpng/patches/patch-ltmain_sh b/package/libpng/patches/patch-ltmain_sh index 8ead586e9..3dc47967e 100644 --- a/package/libpng/patches/patch-ltmain_sh +++ b/package/libpng/patches/patch-ltmain_sh @@ -1,11 +1,11 @@ ---- libpng-1.5.1.orig/ltmain.sh 2011-02-03 05:58:21.000000000 +0100 -+++ libpng-1.5.1/ltmain.sh 2011-03-27 19:35:09.613370655 +0200 -@@ -5840,7 +5840,7 @@ func_mode_link () - # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization +--- libpng-1.2.44.orig/ltmain.sh 2009-11-22 15:45:24.000000000 +0100 ++++ libpng-1.2.44/ltmain.sh 2011-01-14 00:13:24.000000000 +0100 +@@ -4765,7 +4765,7 @@ func_mode_link () + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -- -O*|-flto*|-fwhopr*|-fuse-linker-plugin) -+ -O*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*) +- -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) ++ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" |