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
+#ifdef PNG_APNG_SUPPORTED
+png_uint_32 PNGAPI
+png_get_acTL(png_structp png_ptr, png_infop info_ptr,
+ 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)
+ {
+ *num_frames = info_ptr->num_frames;
+ *num_plays = info_ptr->num_plays;
+ return (1);
+ }
+
+ return (0);
+}
+
+png_uint_32 PNGAPI
+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);
+}
+
+png_uint_32 PNGAPI
+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);
+}
+
+png_uint_32 PNGAPI
+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)
+{
+ 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 &&
+ x_offset != NULL && x_offset != NULL &&
+ delay_num != NULL && delay_den != NULL &&
+ dispose_op != NULL && blend_op != NULL)
+ {
+ *width = info_ptr->next_frame_width;
+ *height = info_ptr->next_frame_height;
+ *x_offset = info_ptr->next_frame_x_offset;
+ *y_offset = info_ptr->next_frame_y_offset;
+ *delay_num = info_ptr->next_frame_delay_num;
+ *delay_den = info_ptr->next_frame_delay_den;
+ *dispose_op = info_ptr->next_frame_dispose_op;
+ *blend_op = info_ptr->next_frame_blend_op;
+ return (1);
+ }
+
+ return (0);
+}
+
+png_uint_32 PNGAPI
+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);
+}
+
+png_uint_32 PNGAPI
+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);
+}
+
+png_uint_32 PNGAPI
+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)
+
|