SOURCES: libpng-apng.patch (NEW) - from http://littlesvr.ca/apng/d...

glen glen at pld-linux.org
Wed Feb 13 12:43:49 CET 2008


Author: glen                         Date: Wed Feb 13 11:43:49 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- from http://littlesvr.ca/apng/diff/libpng-1.2.24-apng.patch

---- Files affected:
SOURCES:
   libpng-apng.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/libpng-apng.patch
diff -u /dev/null SOURCES/libpng-apng.patch:1.1
--- /dev/null	Wed Feb 13 12:43:49 2008
+++ SOURCES/libpng-apng.patch	Wed Feb 13 12:43:44 2008
@@ -0,0 +1,1682 @@
+Index: pngread.c
+===================================================================
+--- pngread.c	(révision 144)
++++ pngread.c	(copie de travail)
+@@ -399,6 +399,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+       PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++      PNG_CONST PNG_acTL;
++      PNG_CONST PNG_fcTL;
++      PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+       png_byte chunk_length[4];
+       png_uint_32 length;
+@@ -452,6 +457,9 @@
+                   !(png_ptr->mode & PNG_HAVE_PLTE))
+             png_error(png_ptr, "Missing PLTE before IDAT");
+ 
++#if defined(PNG_READ_APNG_SUPPORTED)
++         png_have_info(png_ptr, info_ptr);
++#endif
+          png_ptr->idat_size = length;
+          png_ptr->mode |= PNG_HAVE_IDAT;
+          break;
+@@ -524,12 +532,97 @@
+       else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
+          png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++      else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++         png_handle_acTL(png_ptr, info_ptr, length);
++      else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++         png_handle_fcTL(png_ptr, info_ptr, length);
++      else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++         png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+       else
+          png_handle_unknown(png_ptr, info_ptr, length);
+    }
+ }
+ #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
+ 
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++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\n");
++    
++    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 */
++            if (have_chunk_after_DAT || png_ptr->num_frames_read > 1)
++                png_error(png_ptr, "png_read_frame_head(): out of place IDAT");
++            png_crc_finish(png_ptr, length);
++        }
++        else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++        {
++            png_handle_fcTL(png_ptr, info_ptr, length);
++            have_chunk_after_DAT = 1;
++        }
++        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);
++            else if(png_ptr->mode & PNG_HAVE_fcTL)
++            {
++                png_ptr->idat_size = length - 4;
++                png_ptr->mode |= PNG_HAVE_IDAT;
++                
++                break;
++            }
++            else
++                png_error(png_ptr, "png_read_frame_head(): out of place fdAT");
++        }
++        else
++        {
++            png_warning(png_ptr, "Skipped (ignored) a chunk "
++                                 "between APNG chunks");
++            png_crc_finish(png_ptr, length);
++        }
++    }
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* optional call to update the users info_ptr structure */
+ void PNGAPI
+ png_read_update_info(png_structp png_ptr, png_infop info_ptr)
+@@ -566,6 +659,10 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+    PNG_CONST PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++   PNG_CONST PNG_fdAT;
++   PNG_CONST PNG_IEND;
++#endif
+    PNG_CONST int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55,
+      0xff};
+    PNG_CONST int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
+@@ -695,19 +792,46 @@
+    {
+       if (!(png_ptr->zstream.avail_in))
+       {
+-         while (!png_ptr->idat_size)
++         png_uint_32 bytes_to_skip = 0;
++         
++         while (!png_ptr->idat_size || bytes_to_skip != 0)
+          {
+             png_byte chunk_length[4];
+ 
+-            png_crc_finish(png_ptr, 0);
+-
++            png_crc_finish(png_ptr, bytes_to_skip);
++            bytes_to_skip = 0;
++            
+             png_read_data(png_ptr, chunk_length, 4);
+             png_ptr->idat_size = 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))
+-               png_error(png_ptr, "Not enough image data");
++            
++#if defined(PNG_READ_APNG_SUPPORTED)
++            if (png_ptr->num_frames_read == 0)
++            {
++#endif
++               if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++                  png_error(png_ptr, "Not enough image data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++            }
++            else
++            {
++               if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++                  png_error(png_ptr, "Not enough image data");
++               if (png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++               {
++                  png_warning(png_ptr, "Skipped (ignored) a chunk "
++                                       "between APNG chunks");
++                  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;
+@@ -725,6 +849,9 @@
+             png_error(png_ptr, "Extra compressed data");
+          png_ptr->mode |= PNG_AFTER_IDAT;
+          png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
++#if defined(PNG_READ_APNG_SUPPORTED)
++         png_ptr->num_frames_read++;
++#endif
+          break;
+       }
+       if (ret != Z_OK)
+@@ -979,6 +1106,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+       PNG_CONST PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++      PNG_CONST PNG_acTL;
++      PNG_CONST PNG_fcTL;
++      PNG_CONST PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ 
+       png_read_data(png_ptr, chunk_length, 4);
+@@ -1085,6 +1217,14 @@
+       else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
+          png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++      else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++         png_handle_acTL(png_ptr, info_ptr, length);
++      else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++         png_handle_fcTL(png_ptr, info_ptr, length);
++      else if (!png_memcmp(png_ptr->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));
+Index: png.c
+===================================================================
+--- png.c	(révision 144)
++++ png.c	(copie de travail)
+@@ -51,6 +51,9 @@
+ PNG_tIME;
+ PNG_tRNS;
+ PNG_zTXt;
++PNG_acTL;
++PNG_fcTL;
++PNG_fdAT;
+ 
+ #ifdef PNG_READ_SUPPORTED
+ /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
+Index: pngget.c
+===================================================================
+--- pngget.c	(révision 144)
++++ pngget.c	(copie de travail)
+@@ -797,6 +797,167 @@
+ }
+ #endif
+ 
++#if defined(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\n", "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()\n");
++    
++    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()\n");
++    
++    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\n", "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()\n");
++    
++    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()\n");
++    
++    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()\n");
++    
++    if (png_ptr != NULL && info_ptr != NULL)
++        return (info_ptr->next_frame_x_offset);
++    return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_y_offset(png_structp png_ptr, png_infop info_ptr)
++{
++    png_debug(1, "in png_get_next_frame_y_offset()\n");
++    
++    if (png_ptr != NULL && info_ptr != NULL)
++        return (info_ptr->next_frame_y_offset);
++    return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_num(png_structp png_ptr, png_infop info_ptr)
++{
++    png_debug(1, "in png_get_next_frame_delay_num()\n");
++    
++    if (png_ptr != NULL && info_ptr != NULL)
++        return (info_ptr->next_frame_delay_num);
++    return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_den(png_structp png_ptr, png_infop info_ptr)
++{
++    png_debug(1, "in png_get_next_frame_delay_den()\n");
++    
++    if (png_ptr != NULL && info_ptr != NULL)
++        return (info_ptr->next_frame_delay_den);
++    return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_dispose_op(png_structp png_ptr, png_infop info_ptr)
++{
++    png_debug(1, "in png_get_next_frame_dispose_op()\n");
++    
++    if (png_ptr != NULL && info_ptr != NULL)
++        return (info_ptr->next_frame_dispose_op);
++    return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_blend_op(png_structp png_ptr, png_infop info_ptr)
++{
++    png_debug(1, "in png_get_next_frame_blend_op()\n");
++    
++    if (png_ptr != NULL && info_ptr != NULL)
++        return (info_ptr->next_frame_blend_op);
++    return (0);
++}
++
++png_byte PNGAPI
++png_get_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr)
++{
++    png_debug(1, "in png_first_frame_is_hidden()\n");
++    
++    if (png_ptr != NULL)
++       return (png_byte)(png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN);
++    
++    return 0;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ png_uint_32 PNGAPI
+ png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
+Index: png.h
+===================================================================
+--- png.h	(révision 144)
++++ png.h	(copie de travail)
+@@ -947,6 +947,19 @@
+    png_fixed_point int_y_blue;
+ #endif
+ 
++#if defined(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;
+@@ -1048,6 +1061,8 @@
+ #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 */
++#define PNG_INFO_acTL 0x10000L
++#define PNG_INFO_fcTL 0x20000L
+ 
+ /* This is used for the transformation routines, as some of them
+  * change these values for the row.  It also should enable using
+@@ -1088,7 +1103,11 @@
+ 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));
++#if defined(PNG_APNG_SUPPORTED)
++typedef void (PNGAPI *png_progressive_frame_ptr) PNGARG((png_structp, 
++   png_uint_32));
+ #endif
++#endif
+ 
+ #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
+     defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
+@@ -1419,6 +1438,39 @@
+    png_uint_32 user_height_max;
+ #endif
+ 
++#if defined(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;
++
++#if defined(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
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++   png_uint_32 num_frames_to_write;
++   png_uint_32 num_frames_written;
++#endif
++#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
++
+ /* New member added in libpng-1.0.25 and 1.2.17 */
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+    /* storage for unknown chunk that the library doesn't recognize. */
+@@ -1745,6 +1797,18 @@
+ extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
+    png_bytepp image));
+ 
++#if defined(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));
+@@ -1993,6 +2057,11 @@
+    png_voidp progressive_ptr,
+    png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
+    png_progressive_end_ptr end_fn));
++#if defined(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));
++#endif
+ 
+ /* returns the user pointer associated with the push read functions */
+ extern PNG_EXPORT(png_voidp,png_get_progressive_ptr)
+@@ -2430,6 +2499,59 @@
+ #endif
+ #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
+ 
++#if defined(PNG_APNG_SUPPORTED)
++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));
++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));
++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));
++
++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));
++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));
++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 */
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_read_frame_head) PNGARG((png_structp png_ptr,
++   png_infop info_ptr));
++#endif
++
+ #if defined(PNG_UNKNOWN_CHUNKS_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
+@@ -2736,6 +2858,8 @@
+ #define PNG_BACKGROUND_IS_GRAY     0x800
+ #define PNG_HAVE_PNG_SIGNATURE    0x1000
+ #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
<<Diff was trimmed, longer than 597 lines>>


More information about the pld-cvs-commit mailing list