$NetBSD: patch-ad,v 1.2 2011/02/06 15:50:04 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; iheight; i++) { + rows = (png_bytepp) malloc(sizeof(png_bytep) * png_get_image_height(png_ptr, info_ptr)); + for (i=0; iio_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; }