diff options
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, 441 insertions, 483 deletions
diff --git a/package/libpng/Makefile b/package/libpng/Makefile index ed5808ecf..2deced6df 100644 --- a/package/libpng/Makefile +++ b/package/libpng/Makefile @@ -4,9 +4,9 @@ include ${TOPDIR}/rules.mk PKG_NAME:= libpng -PKG_VERSION:= 1.2.44 -PKG_RELEASE:= 3 -PKG_MD5SUM:= 89b62f8daaeeab1342e307d6d1411ff1 +PKG_VERSION:= 1.5.1 +PKG_RELEASE:= 1 +PKG_MD5SUM:= 220035f111ea045a51e290906025e8b5 PKG_DESCR:= A library for reading/writing PNG images PKG_SECTION:= libs PKG_DEPENDS:= zlib @@ -27,14 +27,15 @@ 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{,12}.so* ${IDIR_LIBPNG}/usr/lib + ${CP} ${WRKINST}/usr/lib/libpng*.so* ${IDIR_LIBPNG}/usr/lib libpng-dev-install: - ${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/include + ${CP} ${WRKINST}/usr/include/* ${IDIR_LIBPNG_DEV}/usr/include ${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 3af4a0547..3b68eea9f 100644 --- a/package/libpng/patches/001-apng.patch +++ b/package/libpng/patches/001-apng.patch @@ -1,51 +1,7 @@ -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 @@ +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 @@ } #endif @@ -55,7 +11,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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) @@ -64,7 +20,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/pngget.c + *num_plays = info_ptr->num_plays; + return (1); + } -+ ++ + return (0); +} + @@ -72,7 +28,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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); @@ -82,7 +38,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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); @@ -96,7 +52,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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 && @@ -114,7 +70,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/pngget.c + *blend_op = info_ptr->next_frame_blend_op; + return (1); + } -+ ++ + return (0); +} + @@ -122,7 +78,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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); @@ -132,7 +88,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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); @@ -142,7 +98,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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); @@ -152,7 +108,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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); @@ -162,7 +118,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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); @@ -172,7 +128,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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); @@ -182,7 +138,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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); @@ -192,7 +148,7 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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); @@ -202,41 +158,32 @@ diff -Nur libpng-1.2.44.orig/pngget.c libpng-1.2.44/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 - 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; + 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" #endif -+#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_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 @@ #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 */ @@ -247,257 +194,149 @@ diff -Nur libpng-1.2.44.orig/png.h libpng-1.2.44/png.h /* This is used for the transformation routines, as some of them * change these values for the row. It also should enable using -@@ -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)); +@@ -811,6 +819,10 @@ + (png_structp, png_infop), ); + typedef PNG_CALLBACK(void, *png_progressive_row_ptr, + (png_structp, png_bytep, png_uint_32, int), ); +#ifdef PNG_APNG_SUPPORTED -+typedef void (PNGAPI *png_progressive_frame_ptr) PNGARG((png_structp, -+ png_uint_32)); ++typedef PNG_CALLBACK(void, *png_progressive_frame_ptr, (png_structp, ++ png_uint_32),); +#endif #endif #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ -@@ -1527,6 +1548,39 @@ - png_uint_32 user_height_max PNG_DEPSTRUCT; - #endif +@@ -1242,6 +1254,18 @@ + PNG_EXPORT(60, void, png_write_image, + (png_structp png_ptr, png_bytepp image)); -+#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 -+ -+/* 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)); ++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)); + -+extern PNG_EXPORT (void,png_write_frame_tail) PNGARG((png_structp png_ptr, -+ png_infop png_info)); ++PNG_EXPORT(1002, void, png_write_frame_tail, (png_structp png_ptr, ++ png_infop info_ptr)); +#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)); ++ + /* 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_READ_APNG_SUPPORTED -+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)); ++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)); +#endif /* Returns the user pointer associated with the push read functions */ - extern PNG_EXPORT(png_voidp,png_get_progressive_ptr) -@@ -2554,6 +2625,59 @@ - #endif - #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ + 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 */ +#ifdef PNG_APNG_SUPPORTED -+extern PNG_EXPORT(png_uint_32,png_get_acTL) PNGARG((png_structp png_ptr, ++PNG_EXPORT(1004, png_uint_32, png_get_acTL, (png_structp png_ptr, + png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays)); -+extern PNG_EXPORT(png_uint_32,png_set_acTL) PNGARG((png_structp png_ptr, ++PNG_EXPORT(1005, png_uint_32, png_set_acTL, (png_structp png_ptr, + png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays)); -+extern PNG_EXPORT(png_uint_32,png_get_num_frames) PNGARG((png_structp png_ptr, ++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, + png_infop info_ptr)); -+extern PNG_EXPORT(png_uint_32,png_get_num_plays) -+ PNGARG((png_structp png_ptr, png_infop info_ptr)); + -+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_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, + 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_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_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, + png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, + png_byte blend_op)); -+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)); ++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 +#endif /* PNG_APNG_SUPPORTED */ + +#ifdef PNG_READ_APNG_SUPPORTED -+extern PNG_EXPORT(void,png_read_frame_head) PNGARG((png_structp png_ptr, ++PNG_EXPORT(1020, void, png_read_frame_head, (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 -@@ -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 -+#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 +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 -+#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)) 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)); ++#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_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 @@ + }; + #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 @@ #ifdef PNG_READ_zTXt_SUPPORTED - PNG_CONST PNG_zTXt; + PNG_zTXt; #endif +#ifdef PNG_READ_APNG_SUPPORTED -+ PNG_CONST PNG_acTL; -+ PNG_CONST PNG_fcTL; -+ PNG_CONST PNG_fdAT; ++ PNG_acTL; ++ PNG_fcTL; ++ PNG_fdAT; +#endif - #endif /* PNG_USE_LOCAL_ARRAYS */ /* First we make sure we have enough data for the 4 byte chunk name -@@ -232,6 +237,103 @@ + * and the 4 byte chunk length before proceeding with decoding the +@@ -288,6 +293,103 @@ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; } @@ -510,7 +349,7 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/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); @@ -528,13 +367,13 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/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); @@ -550,7 +389,7 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/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; + } + } @@ -561,23 +400,23 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/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 @@ -593,16 +432,16 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/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; -@@ -327,6 +429,9 @@ - png_error(png_ptr, "Too many IDAT's found"); + 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"); } +#ifdef PNG_READ_APNG_SUPPORTED @@ -611,7 +450,7 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/pngpread.c png_ptr->idat_size = png_ptr->push_length; png_ptr->mode |= PNG_HAVE_IDAT; png_ptr->process_mode = PNG_READ_IDAT_MODE; -@@ -559,6 +664,38 @@ +@@ -615,6 +720,38 @@ } #endif @@ -650,17 +489,14 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/pngpread.c else { if (png_ptr->push_length + 4 > png_ptr->buffer_size) -@@ -738,13 +875,17 @@ +@@ -810,11 +947,15 @@ png_push_read_IDAT(png_structp png_ptr) { - #ifdef PNG_USE_LOCAL_ARRAYS -- PNG_CONST PNG_IDAT; -+ 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]; @@ -670,13 +506,13 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/pngpread.c { png_push_save_buffer(png_ptr); return; -@@ -756,15 +897,62 @@ +@@ -826,17 +967,64 @@ 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_bytep)png_fdAT, 4) ++ if (png_memcmp(png_ptr->chunk_name, png_fdAT, 4) + && png_ptr->num_frames_read > 0) + { + if (png_ptr->flags & PNG_FLAG_ZLIB_FINISHED) @@ -712,8 +548,10 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/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); @@ -734,7 +572,7 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/pngpread.c } if (png_ptr->idat_size && png_ptr->save_buffer_size) { -@@ -1763,6 +1951,17 @@ +@@ -1843,6 +2031,17 @@ png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer); } @@ -750,25 +588,119 @@ diff -Nur libpng-1.2.44.orig/pngpread.c libpng-1.2.44/pngpread.c +#endif + png_voidp PNGAPI - png_get_progressive_ptr(png_structp png_ptr) + png_get_progressive_ptr(png_const_structp png_ptr) { -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 @@ +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 @@ #ifdef PNG_READ_zTXt_SUPPORTED - PNG_CONST PNG_zTXt; + PNG_zTXt; #endif +#ifdef PNG_READ_APNG_SUPPORTED -+ PNG_CONST PNG_acTL; -+ PNG_CONST PNG_fcTL; -+ PNG_CONST PNG_fdAT; ++ PNG_acTL; ++ PNG_fcTL; ++ 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; -@@ -481,6 +486,9 @@ - !(png_ptr->mode & PNG_HAVE_PLTE)) + +@@ -344,6 +349,9 @@ + !(png_ptr->mode & PNG_HAVE_PLTE)) png_error(png_ptr, "Missing PLTE before IDAT"); +#ifdef PNG_READ_APNG_SUPPORTED @@ -777,10 +709,10 @@ diff -Nur libpng-1.2.44.orig/pngread.c libpng-1.2.44/pngread.c png_ptr->idat_size = length; png_ptr->mode |= PNG_HAVE_IDAT; break; -@@ -553,12 +561,97 @@ - else if (!png_memcmp(chunk_name, png_iTXt, 4)) +@@ -434,12 +442,96 @@ 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); @@ -789,6 +721,7 @@ diff -Nur libpng-1.2.44.orig/pngread.c libpng-1.2.44/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); } @@ -800,39 +733,37 @@ diff -Nur libpng-1.2.44.orig/pngread.c libpng-1.2.44/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 */ @@ -848,7 +779,7 @@ diff -Nur libpng-1.2.44.orig/pngread.c libpng-1.2.44/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); @@ -856,7 +787,7 @@ diff -Nur libpng-1.2.44.orig/pngread.c libpng-1.2.44/pngread.c + { + png_ptr->idat_size = length - 4; + png_ptr->mode |= PNG_HAVE_IDAT; -+ ++ + break; + } + else @@ -875,18 +806,18 @@ diff -Nur libpng-1.2.44.orig/pngread.c libpng-1.2.44/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) -@@ -599,6 +692,10 @@ +@@ -488,6 +580,10 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row) { - PNG_CONST PNG_IDAT; + PNG_IDAT; +#ifdef PNG_READ_APNG_SUPPORTED -+ PNG_CONST PNG_fdAT; -+ PNG_CONST PNG_IEND; ++ PNG_fdAT; ++ 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}; -@@ -734,13 +831,39 @@ +@@ -642,13 +738,39 @@ { if (!(png_ptr->zstream.avail_in)) { @@ -919,17 +850,17 @@ diff -Nur libpng-1.2.44.orig/pngread.c libpng-1.2.44/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; -@@ -758,6 +881,9 @@ - png_error(png_ptr, "Extra compressed data"); +@@ -668,6 +790,9 @@ + png_benign_error(png_ptr, "Extra compressed data"); png_ptr->mode |= PNG_AFTER_IDAT; png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; +#ifdef PNG_READ_APNG_SUPPORTED @@ -937,23 +868,23 @@ diff -Nur libpng-1.2.44.orig/pngread.c libpng-1.2.44/pngread.c +#endif break; } - if (ret != Z_OK) -@@ -1015,6 +1141,11 @@ + +@@ -952,6 +1077,11 @@ #ifdef PNG_READ_zTXt_SUPPORTED - PNG_CONST PNG_zTXt; + PNG_zTXt; #endif +#ifdef PNG_READ_APNG_SUPPORTED -+ PNG_CONST PNG_acTL; -+ PNG_CONST PNG_fcTL; -+ PNG_CONST PNG_fdAT; ++ PNG_acTL; ++ PNG_fcTL; ++ 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; -@@ -1115,6 +1246,14 @@ - else if (!png_memcmp(chunk_name, png_iTXt, 4)) + +@@ -1073,6 +1203,15 @@ 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); @@ -962,13 +893,14 @@ diff -Nur libpng-1.2.44.orig/pngread.c libpng-1.2.44/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.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 @@ +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 @@ * pixels. This check added to libpng-1.2.19 */ #if (PNG_WARN_UNINITIALIZED_ROW==1) @@ -977,10 +909,10 @@ diff -Nur libpng-1.2.44.orig/pngrtran.c libpng-1.2.44/pngrtran.c #else png_warning(png_ptr, "Uninitialized row"); #endif -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 @@ +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 @@ filter_type = buf[11]; interlace_type = buf[12]; @@ -992,7 +924,7 @@ diff -Nur libpng-1.2.44.orig/pngrutil.c libpng-1.2.44/pngrutil.c /* Set internal variables */ png_ptr->width = width; png_ptr->height = height; -@@ -2348,6 +2353,172 @@ +@@ -2492,6 +2497,172 @@ } #endif @@ -1004,7 +936,7 @@ diff -Nur libpng-1.2.44.orig/pngrutil.c libpng-1.2.44/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)) @@ -1029,13 +961,13 @@ diff -Nur libpng-1.2.44.orig/pngrutil.c libpng-1.2.44/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) @@ -1132,7 +1064,7 @@ diff -Nur libpng-1.2.44.orig/pngrutil.c libpng-1.2.44/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 @@ -1147,25 +1079,25 @@ diff -Nur libpng-1.2.44.orig/pngrutil.c libpng-1.2.44/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 -@@ -3379,4 +3550,75 @@ + * 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 @@ png_ptr->flags |= PNG_FLAG_ROW_INIT; } @@ -1191,14 +1123,13 @@ diff -Nur libpng-1.2.44.orig/pngrutil.c libpng-1.2.44/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_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1); ++ png_memset(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}; + @@ -1210,8 +1141,7 @@ diff -Nur libpng-1.2.44.orig/pngrutil.c libpng-1.2.44/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)) @@ -1241,11 +1171,11 @@ diff -Nur libpng-1.2.44.orig/pngrutil.c libpng-1.2.44/pngrutil.c +} +#endif /* PNG_READ_APNG_SUPPORTED */ #endif /* PNG_READ_SUPPORTED */ -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; +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; else info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, width); + @@ -1256,7 +1186,7 @@ diff -Nur libpng-1.2.44.orig/pngset.c libpng-1.2.44/pngset.c } #ifdef PNG_oFFs_SUPPORTED -@@ -960,6 +965,142 @@ +@@ -954,6 +959,142 @@ } #endif /* PNG_sPLT_SUPPORTED */ @@ -1293,12 +1223,12 @@ diff -Nur libpng-1.2.44.orig/pngset.c libpng-1.2.44/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); +} + @@ -1319,10 +1249,10 @@ diff -Nur libpng-1.2.44.orig/pngset.c libpng-1.2.44/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) && @@ -1342,13 +1272,13 @@ diff -Nur libpng-1.2.44.orig/pngset.c libpng-1.2.44/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 PNGAPI ++void /* PRIVATE */ +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, @@ -1383,15 +1313,15 @@ diff -Nur libpng-1.2.44.orig/pngset.c libpng-1.2.44/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 */ @@ -1399,10 +1329,41 @@ diff -Nur libpng-1.2.44.orig/pngset.c libpng-1.2.44/pngset.c #ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED void PNGAPI png_set_unknown_chunks(png_structp png_ptr, -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 @@ +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 @@ /* The rest of these check to see if the valid field has the appropriate * flag set, and if it does, writes the chunk. */ @@ -1412,9 +1373,9 @@ diff -Nur libpng-1.2.44.orig/pngwrite.c libpng-1.2.44/pngwrite.c +#endif #ifdef PNG_WRITE_gAMA_SUPPORTED if (info_ptr->valid & PNG_INFO_gAMA) - { -@@ -319,6 +323,10 @@ - return; + png_write_gAMA_fixed(png_ptr, info_ptr->gamma); +@@ -300,6 +304,10 @@ + if (!(png_ptr->mode & PNG_HAVE_IDAT)) png_error(png_ptr, "No IDATs written into file"); +#ifdef PNG_WRITE_APNG_SUPPORTED @@ -1424,8 +1385,8 @@ diff -Nur libpng-1.2.44.orig/pngwrite.c libpng-1.2.44/pngwrite.c /* See if user wants us to write information chunks */ if (info_ptr != NULL) -@@ -1589,4 +1597,39 @@ - params = params; +@@ -1602,4 +1610,39 @@ + PNG_UNUSED(params) } #endif + @@ -1438,16 +1399,16 @@ diff -Nur libpng-1.2.44.orig/pngwrite.c libpng-1.2.44/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, @@ -1455,21 +1416,21 @@ diff -Nur libpng-1.2.44.orig/pngwrite.c libpng-1.2.44/pngwrite.c +} + +void PNGAPI -+png_write_frame_tail(png_structp png_ptr, png_infop png_info) ++png_write_frame_tail(png_structp png_ptr, png_infop info_ptr) +{ + 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.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 @@ +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 @@ /* Write the chunk */ - png_write_chunk(png_ptr, (png_bytep)png_IHDR, buf, (png_size_t)13); + png_write_chunk(png_ptr, png_IHDR, buf, (png_size_t)13); +#ifdef PNG_WRITE_APNG_SUPPORTED + png_ptr->first_frame_width = width; @@ -1479,38 +1440,38 @@ diff -Nur libpng-1.2.44.orig/pngwutil.c libpng-1.2.44/pngwutil.c /* Initialize zlib with PNG info */ png_ptr->zstream.zalloc = png_zalloc; png_ptr->zstream.zfree = png_zfree; -@@ -641,6 +646,9 @@ +@@ -742,6 +747,9 @@ + png_write_IDAT(png_structp png_ptr, png_bytep data, png_size_t length) { - #ifdef PNG_USE_LOCAL_ARRAYS PNG_IDAT; +#ifdef PNG_WRITE_APNG_SUPPORTED + PNG_fdAT; +#endif - #endif png_debug(1, "in png_write_IDAT"); -@@ -686,7 +694,28 @@ - "Invalid zlib compression method or flags in IDAT"); + +@@ -791,7 +799,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_bytep)png_IDAT, data, length); + png_write_chunk(png_ptr, png_IDAT, data, length); +#ifdef PNG_WRITE_APNG_SUPPORTED + else + { + png_byte buf[4]; -+ -+ png_write_chunk_start(png_ptr, (png_bytep)png_fdAT, 4 + length); -+ ++ ++ png_write_chunk_start(png_ptr, 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 @@ -1518,7 +1479,7 @@ diff -Nur libpng-1.2.44.orig/pngwutil.c libpng-1.2.44/pngwutil.c png_ptr->mode |= PNG_HAVE_IDAT; } -@@ -1754,6 +1783,70 @@ +@@ -1769,6 +1798,66 @@ } #endif @@ -1527,22 +1488,20 @@ diff -Nur libpng-1.2.44.orig/pngwutil.c libpng-1.2.44/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_bytep)png_acTL, data, (png_size_t)8); ++ ++ png_write_chunk(png_ptr, png_acTL, data, (png_size_t)8); +} + +void /* PRIVATE */ @@ -1551,13 +1510,11 @@ diff -Nur libpng-1.2.44.orig/pngwutil.c libpng-1.2.44/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 && @@ -1565,11 +1522,11 @@ diff -Nur libpng-1.2.44.orig/pngwutil.c libpng-1.2.44/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); @@ -1579,9 +1536,9 @@ diff -Nur libpng-1.2.44.orig/pngwutil.c libpng-1.2.44/pngwutil.c + png_save_uint_16(data + 22, delay_den); + data[24] = dispose_op; + data[25] = blend_op; -+ -+ png_write_chunk(png_ptr, (png_bytep)png_fcTL, data, (png_size_t)26); -+ ++ ++ png_write_chunk(png_ptr, png_fcTL, data, (png_size_t)26); ++ + png_ptr->next_seq_num++; +} +#endif /* PNG_WRITE_APNG_SUPPORTED */ @@ -1589,18 +1546,18 @@ diff -Nur libpng-1.2.44.orig/pngwutil.c libpng-1.2.44/pngwutil.c /* Initializes the row writing capability of libpng */ void /* PRIVATE */ png_write_start_row(png_structp png_ptr) -@@ -2159,8 +2252,8 @@ +@@ -2203,8 +2292,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 -@@ -2829,4 +2922,39 @@ +@@ -2945,4 +3034,39 @@ } #endif } @@ -1627,12 +1584,12 @@ diff -Nur libpng-1.2.44.orig/pngwutil.c libpng-1.2.44/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 3dc47967e..8ead586e9 100644 --- a/package/libpng/patches/patch-ltmain_sh +++ b/package/libpng/patches/patch-ltmain_sh @@ -1,11 +1,11 @@ ---- 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 +--- 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 -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -- -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) -+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-fstack-protector*|-flto) + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ +- -O*|-flto*|-fwhopr*|-fuse-linker-plugin) ++ -O*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" |