changeset 1630:8f891b4913b6

package sdl_image: libpng backwards-compatible
author Mark Brand <mabrand@mabrand.nl>
date Sat, 05 Mar 2011 13:40:37 +0100
parents 2288fcbf74ad
children 9a86031b8ee0
files src/sdl_image-1-png.patch
diffstat 1 files changed, 64 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
--- a/src/sdl_image-1-png.patch	Fri Mar 04 22:45:04 2011 +0100
+++ b/src/sdl_image-1-png.patch	Sat Mar 05 13:40:37 2011 +0100
@@ -2,99 +2,109 @@
 See doc/index.html for further information.
 
 diff --git a/IMG_png.c b/IMG_png.c
-index a79fb9c..8e395a5 100644
+index a79fb9c..f85b6c8 100644
 --- a/IMG_png.c
 +++ b/IMG_png.c
-@@ -80,8 +80,8 @@ static struct {
+@@ -80,8 +80,13 @@ static struct {
  	void (*png_destroy_read_struct) (png_structpp png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr);
  	png_uint_32 (*png_get_IHDR) (png_structp png_ptr, png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, int *bit_depth, int *color_type, int *interlace_method, int *compression_method, int *filter_method);
  	png_voidp (*png_get_io_ptr) (png_structp png_ptr);
--	png_uint_32 (*png_get_tRNS) (png_structp png_ptr, png_infop info_ptr, png_bytep *trans, int *num_trans, png_color_16p *trans_values);
--	png_uint_32 (*png_get_valid) (png_structp png_ptr, png_infop info_ptr, png_uint_32 flag);
++#if (PNG_LIBPNG_VER < 10500)
+ 	png_uint_32 (*png_get_tRNS) (png_structp png_ptr, png_infop info_ptr, png_bytep *trans, int *num_trans, png_color_16p *trans_values);
+ 	png_uint_32 (*png_get_valid) (png_structp png_ptr, png_infop info_ptr, png_uint_32 flag);
++#else
 +	png_uint_32 (*png_get_tRNS) (png_const_structp png_ptr, png_infop info_ptr, png_bytep *trans, int *num_trans, png_color_16p *trans_values);
 +	png_uint_32 (*png_get_valid) (png_const_structp png_ptr, png_const_infop info_ptr, png_uint_32 flag);
++#endif
  	void (*png_read_image) (png_structp png_ptr, png_bytepp image);
  	void (*png_read_info) (png_structp png_ptr, png_infop info_ptr);
  	void (*png_read_update_info) (png_structp png_ptr, png_infop info_ptr);
-@@ -90,7 +90,7 @@ static struct {
+@@ -90,7 +95,11 @@ static struct {
  	void (*png_set_packing) (png_structp png_ptr);
  	void (*png_set_read_fn) (png_structp png_ptr, png_voidp io_ptr, png_rw_ptr read_data_fn);
  	void (*png_set_strip_16) (png_structp png_ptr);
--	int (*png_sig_cmp) (png_bytep sig, png_size_t start, png_size_t num_to_check);
++#if (PNG_LIBPNG_VER < 10500)
+ 	int (*png_sig_cmp) (png_bytep sig, png_size_t start, png_size_t num_to_check);
++#else
 +	int (*png_sig_cmp) (png_const_bytep sig, png_size_t start, png_size_t num_to_check);
++#endif
  } lib;
  
  #ifdef LOAD_PNG_DYNAMIC
-@@ -347,7 +347,7 @@ SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)
+@@ -347,7 +356,11 @@ SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)
  	 * the normal method of doing things with libpng).  REQUIRED unless you
  	 * set up your own error handlers in png_create_read_struct() earlier.
  	 */
--	if ( setjmp(png_ptr->jmpbuf) ) {
++#if (PNG_LIBPNG_VER < 10500)
+ 	if ( setjmp(png_ptr->jmpbuf) ) {
++#else
 +	if ( setjmp (png_jmpbuf(png_ptr)) ) {
++#endif
  		error = "Error reading the PNG file.";
  		goto done;
  	}
-@@ -416,9 +416,9 @@ SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)
+@@ -416,9 +429,17 @@ SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)
  			Rmask = 0x000000FF;
  			Gmask = 0x0000FF00;
  			Bmask = 0x00FF0000;
--			Amask = (info_ptr->channels == 4) ? 0xFF000000 : 0;
-+            Amask = (png_get_channels(png_ptr, info_ptr) == 4) ? 0xFF000000 : 0;
++#if (PNG_LIBPNG_VER < 10500)
+ 			Amask = (info_ptr->channels == 4) ? 0xFF000000 : 0;
++#else
++			Amask = (png_get_channels(png_ptr, info_ptr) == 4) ? 0xFF000000 : 0;
++#endif
  		} else {
--		        int s = (info_ptr->channels == 4) ? 0 : 8;
-+            int s = (png_get_channels(png_ptr, info_ptr) == 4) ? 0 : 8;
++#if (PNG_LIBPNG_VER < 10500)
+ 		        int s = (info_ptr->channels == 4) ? 0 : 8;
++#else
++		        int s = (png_get_channels(png_ptr, info_ptr) == 4) ? 0 : 8;
++#endif
  			Rmask = 0xFF000000 >> s;
  			Gmask = 0x00FF0000 >> s;
  			Bmask = 0x0000FF00 >> s;
-@@ -426,7 +426,7 @@ SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)
+@@ -426,7 +447,11 @@ SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)
  		}
  	}
  	surface = SDL_AllocSurface(SDL_SWSURFACE, width, height,
--			bit_depth*info_ptr->channels, Rmask,Gmask,Bmask,Amask);
-+            bit_depth*png_get_channels(png_ptr, info_ptr), Rmask,Gmask,Bmask,Amask);
++#if (PNG_LIBPNG_VER < 10500)
+ 			bit_depth*info_ptr->channels, Rmask,Gmask,Bmask,Amask);
++#else
++			bit_depth*png_get_channels(png_ptr, info_ptr), Rmask,Gmask,Bmask,Amask);
++#endif
  	if ( surface == NULL ) {
  		error = "Out of memory";
  		goto done;
-@@ -465,23 +465,27 @@ SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)
- 	*/
+@@ -466,6 +491,12 @@ SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)
  
  	/* Load the palette, if any */
--	palette = surface->format->palette;
-+    palette = surface->format->palette;
-+    png_colorp info_palette = 0;
-+    int info_num_palette = 0;
-+    png_get_PLTE(png_ptr, info_ptr, &info_palette, &info_num_palette);
-+
+ 	palette = surface->format->palette;
++#if (PNG_LIBPNG_VER >= 10500)
++	palette = surface->format->palette;
++	png_colorp info_palette = 0;
++	int info_num_palette = 0;
++	png_get_PLTE(png_ptr, info_ptr, &info_palette, &info_num_palette);
++#endif
  	if ( palette ) {
  	    if(color_type == PNG_COLOR_TYPE_GRAY) {
--		palette->ncolors = 256;
--		for(i = 0; i < 256; i++) {
--		    palette->colors[i].r = i;
--		    palette->colors[i].g = i;
--		    palette->colors[i].b = i;
--		}
--	    } else if (info_ptr->num_palette > 0 ) {
--		palette->ncolors = info_ptr->num_palette; 
--		for( i=0; i<info_ptr->num_palette; ++i ) {
--		    palette->colors[i].b = info_ptr->palette[i].blue;
--		    palette->colors[i].g = info_ptr->palette[i].green;
--		    palette->colors[i].r = info_ptr->palette[i].red;
--		}
--	    }
-+            palette->ncolors = 256;
-+            for(i = 0; i < 256; i++) {
-+                palette->colors[i].r = i;
-+                palette->colors[i].g = i;
-+                palette->colors[i].b = i;
-+            }
-+        } else if (info_num_palette > 0 ) {
-+            palette->ncolors = info_num_palette;
-+            for( i=0; i<info_num_palette; ++i ) {
-+                palette->colors[i].b = info_palette[i].blue;
-+                palette->colors[i].g = info_palette[i].green;
-+                palette->colors[i].r = info_palette[i].red;
-+            }
-+        }
+ 		palette->ncolors = 256;
+@@ -474,12 +505,21 @@ SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)
+ 		    palette->colors[i].g = i;
+ 		    palette->colors[i].b = i;
+ 		}
++#if (PNG_LIBPNG_VER < 10500)
+ 	    } else if (info_ptr->num_palette > 0 ) {
+ 		palette->ncolors = info_ptr->num_palette; 
+ 		for( i=0; i<info_ptr->num_palette; ++i ) {
+ 		    palette->colors[i].b = info_ptr->palette[i].blue;
+ 		    palette->colors[i].g = info_ptr->palette[i].green;
+ 		    palette->colors[i].r = info_ptr->palette[i].red;
++#else
++	    } else if (info_num_palette > 0 ) {
++		palette->ncolors = info_num_palette;
++		for( i=0; i<info_num_palette; ++i ) {
++		    palette->colors[i].b = info_palette[i].blue;
++		    palette->colors[i].g = info_palette[i].green;
++		    palette->colors[i].r = info_palette[i].red;
++#endif
+ 		}
+ 	    }
  	}
- 
- done:	/* Clean up and return */