$NetBSD: patch-ad,v 1.1 2010/06/13 22:45:05 wiz Exp $

Fix build with png-1.5.

--- src/media_tools/img.c.orig	2008-12-01 17:39:36.000000000 +0000
+++ src/media_tools/img.c
@@ -388,7 +388,7 @@ typedef struct
 
 static void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
 {
-	GFpng *ctx = (GFpng*)png_ptr->io_ptr;
+	GFpng *ctx = (GFpng*)png_get_io_ptr(png_ptr);
 
 	if (ctx->pos + length > ctx->size) {
 		png_error(png_ptr, "Read Error");
@@ -399,7 +399,11 @@ static void user_read_data(png_structp p
 }
 static void user_error_fn(png_structp png_ptr,png_const_charp error_msg)
 {
+#if (PNG_LIBPNG_VER < 10500)
 	longjmp(png_ptr->jmpbuf, 1);
+#else
+	png_longjmp(png_ptr, 1);
+#endif
 }
 
 GF_EXPORT
@@ -409,7 +413,10 @@ GF_Err gf_img_png_dec(char *png, u32 png
 	png_struct *png_ptr;
 	png_info *info_ptr;
 	png_byte **rows;
-	u32 i, stride, bpp;
+	u32 i, stride;
+	png_bytep trans_alpha;
+	int num_trans;
+	png_color_16p trans_color;
 
 	if ((png_size<8) || png_sig_cmp(png, 0, 8) ) return GF_NON_COMPLIANT_BITSTREAM;
 
@@ -424,7 +431,7 @@ GF_Err gf_img_png_dec(char *png, u32 png
 		png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
 		return GF_IO_ERR;
 	}
-	if (setjmp(png_ptr->jmpbuf)) {
+	if (setjmp(png_jmpbuf(png_ptr))) {
 		png_destroy_info_struct(png_ptr,(png_infopp) & info_ptr);
 		png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
 		return GF_IO_ERR;
@@ -435,30 +442,30 @@ GF_Err gf_img_png_dec(char *png, u32 png
 	png_read_info(png_ptr, info_ptr);
 
 	/*unpaletize*/
-	if (info_ptr->color_type==PNG_COLOR_TYPE_PALETTE) {
+	if (png_get_color_type(png_ptr, info_ptr)==PNG_COLOR_TYPE_PALETTE) {
 		png_set_expand(png_ptr);
 		png_read_update_info(png_ptr, info_ptr);
 	}
-	if (info_ptr->num_trans) {
+	png_get_tRNS(png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color);
+	if (num_trans) {
 		png_set_tRNS_to_alpha(png_ptr);
 		png_read_update_info(png_ptr, info_ptr);
 	}
 
-	bpp = info_ptr->pixel_depth / 8;
-	*width = info_ptr->width;
-	*height = info_ptr->height;
+	*width = png_get_image_width(png_ptr, info_ptr);
+	*height = png_get_image_height(png_ptr, info_ptr);
 
-	switch (info_ptr->pixel_depth) {
-	case 8:
+	switch (png_get_color_type(png_ptr, info_ptr)) {
+	case PNG_COLOR_TYPE_GRAY:
 		*pixel_format = GF_PIXEL_GREYSCALE;
 		break;
-	case 16:
+	case PNG_COLOR_TYPE_GRAY_ALPHA:
 		*pixel_format = GF_PIXEL_ALPHAGREY;
 		break;
-	case 24:
+	case PNG_COLOR_TYPE_RGB:
 		*pixel_format = GF_PIXEL_RGB_24;
 		break;
-	case 32:
+	case PNG_COLOR_TYPE_RGB_ALPHA:
 		*pixel_format = GF_PIXEL_RGBA;
 		break;
 	default:
@@ -469,18 +476,18 @@ GF_Err gf_img_png_dec(char *png, u32 png
 	}
 
 	/*new cfg, reset*/
-	if (*dst_size != info_ptr->width * info_ptr->height * bpp) {
-		*dst_size  = info_ptr->width * info_ptr->height * bpp;
+	if (*dst_size != png_get_rowbytes(png_ptr, info_ptr) * png_get_image_height(png_ptr, info_ptr)) {
+		*dst_size  = png_get_rowbytes(png_ptr, info_ptr) * png_get_image_height(png_ptr, info_ptr);
 		png_destroy_info_struct(png_ptr,(png_infopp) & info_ptr);
 		png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
 		return GF_BUFFER_TOO_SMALL;
 	}
-	*dst_size  = info_ptr->width * info_ptr->height * bpp;
+	*dst_size  = png_get_rowbytes(png_ptr, info_ptr) * png_get_image_height(png_ptr, info_ptr);
 
 	/*read*/
 	stride = png_get_rowbytes(png_ptr, info_ptr);
-	rows = (png_bytepp) malloc(sizeof(png_bytep) * info_ptr->height);
-	for (i=0; i<info_ptr->height; i++) {
+	rows = (png_bytepp) malloc(sizeof(png_bytep) * png_get_image_height(png_ptr, info_ptr));
+	for (i=0; i<png_get_image_height(png_ptr, info_ptr); i++) {
 		rows[i] = dst + i*stride;
 	}
 	png_read_image(png_ptr, rows);
@@ -495,7 +502,7 @@ GF_Err gf_img_png_dec(char *png, u32 png
 
 void my_png_write(png_structp png, png_bytep data, png_size_t size)
 {
-	GFpng *p = (GFpng *)png->io_ptr;
+	GFpng *p = (GFpng *)png_get_io_ptr(png);
 	memcpy(p->buffer+p->pos, data, sizeof(char)*size);
 	p->pos += size;
 }
@@ -551,7 +558,7 @@ GF_Err gf_img_png_enc(char *data, u32 wi
 	/* Allocate/initialize the image information data.  REQUIRED */
 	info_ptr = png_create_info_struct(png_ptr);
 	if (info_ptr == NULL) {
-		png_destroy_write_struct(&png_ptr,  png_infopp_NULL);
+		png_destroy_write_struct(&png_ptr,  NULL);
 		return GF_IO_ERR;
 	}
 	
