Description: Fix FTBFS with libpng 1.5 Author: Nobuhiro Iwamatsu Approved: Ralf Treinen Bug-Debian: #635745 --- exactimage-0.8.5.orig/codecs/png.cc +++ exactimage-0.8.5/codecs/png.cc @@ -17,6 +17,7 @@ #include #include +#include #include @@ -58,7 +59,7 @@ int PNGCodec::readImage (std::istream* s png_structp png_ptr; png_infop info_ptr; png_uint_32 width, height; - int bit_depth, color_type, interlace_type; + int bit_depth, color_type, interlace_type, num_trans; png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL /*user_error_ptr*/, @@ -71,7 +72,7 @@ int PNGCodec::readImage (std::istream* s /* Allocate/initialize the memory for image information. REQUIRED. */ info_ptr = png_create_info_struct(png_ptr); if (info_ptr == NULL) { - png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL); + png_destroy_read_struct(&png_ptr, NULL, NULL); return 0; } @@ -82,7 +83,7 @@ int PNGCodec::readImage (std::istream* s if (setjmp(png_jmpbuf(png_ptr))) { /* Free all of the memory associated with the png_ptr and info_ptr */ - png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); /* If we get here, we had a problem reading the file */ return 0; } @@ -99,13 +100,13 @@ int PNGCodec::readImage (std::istream* s png_read_info (png_ptr, info_ptr); png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, - &interlace_type, int_p_NULL, int_p_NULL); + &interlace_type, NULL, NULL); image.w = width; image.h = height; image.bps = bit_depth; - image.spp = info_ptr->channels; - + image.spp = png_get_channels(png_ptr, info_ptr); + png_uint_32 res_x, res_y; res_x = png_get_x_pixels_per_meter(png_ptr, info_ptr); res_y = png_get_y_pixels_per_meter(png_ptr, info_ptr); @@ -119,11 +120,13 @@ int PNGCodec::readImage (std::istream* s * (not useful if you are using png_set_packing). */ // png_set_packswap(png_ptr); + png_get_tRNS(png_ptr, info_ptr, NULL, &num_trans, NULL); + /* Expand paletted colors into true RGB triplets */ if (color_type == PNG_COLOR_TYPE_PALETTE) { png_set_palette_to_rgb(png_ptr); image.bps = 8; - if (info_ptr->num_trans) + if (num_trans) image.spp = 4; else image.spp = 3; @@ -196,11 +199,11 @@ int PNGCodec::readImage (std::istream* s for (int pass = 0; pass < number_passes; ++pass) for (unsigned int y = 0; y < height; ++y) { row_pointers[0] = image.getRawData() + y * stride; - png_read_rows(png_ptr, row_pointers, png_bytepp_NULL, 1); + png_read_rows(png_ptr, row_pointers, NULL, 1); } /* clean up after the read, and free any memory allocated - REQUIRED */ - png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); /* that's it */ return true; @@ -224,7 +227,7 @@ bool PNGCodec::writeImage (std::ostream* /* Allocate/initialize the memory for image information. 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 false; } @@ -244,8 +247,10 @@ bool PNGCodec::writeImage (std::ostream* else if (quality > Z_BEST_COMPRESSION) quality = Z_BEST_COMPRESSION; png_set_compression_level(png_ptr, quality); + /* Need? png_info_init (info_ptr); - + */ + /* Set up our STL stream output control */ png_set_write_fn (png_ptr, stream, &stdstream_write_data, &stdstream_flush_data);