openbsd-ports/graphics/xaos/patches/patch-src_util_png_c
naddy 8c18b08ac5 Fix build with png-1.5.
All fixes from/via NetBSD pkgsrc.  The people there did a lot of
heavy lifting.
2011-07-08 20:36:09 +00:00

136 lines
4.5 KiB
Plaintext

$OpenBSD: patch-src_util_png_c,v 1.1 2011/07/08 20:36:09 naddy Exp $
Fix build with png-1.5.
--- src/util/png.c.orig Wed Jul 6 14:19:33 2011
+++ src/util/png.c Wed Jul 6 14:37:05 2011
@@ -3,6 +3,7 @@
#include <aconfig.h>
#ifdef USE_PNG
#include <png.h>
+#include <zlib.h>
#endif
#include <stdlib.h>
#include <stdio.h>
@@ -31,6 +32,9 @@ CONST char *writepng(FILE * file, CONST struct image *
png_structp png_ptr;
png_infop info_ptr;
png_color palette[256];
+ png_color_8 sig_bit;
+ int color_type;
+ int bit_depth;
volatile unsigned short a = 255;
volatile unsigned char *b = (volatile unsigned char *) &a;
#ifdef _undefined_
@@ -59,7 +63,7 @@ CONST char *writepng(FILE * file, CONST struct image *
png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
return "No memory to create png info structure";
}
- if (setjmp(png_ptr->jmpbuf)) {
+ if (setjmp(png_jmpbuf(png_ptr))) {
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(file);
return strerror(errno);
@@ -78,57 +82,71 @@ CONST char *writepng(FILE * file, CONST struct image *
png_set_compression_window_bits(png_ptr, 15);
png_set_compression_method(png_ptr, 8);
- info_ptr->width = image->width;
- info_ptr->height = image->height;
- /*info_ptr->gamma=1.0; */
- info_ptr->gamma = 0.5;
- info_ptr->valid |= PNG_INFO_gAMA | PNG_INFO_pHYs;
- info_ptr->x_pixels_per_unit = (png_uint_32) (100 / image->pixelwidth);
- info_ptr->y_pixels_per_unit = (png_uint_32) (100 / image->pixelheight);
+ switch (image->palette->type)
+ {
+ case C256:
+ color_type = PNG_COLOR_TYPE_PALETTE;
+ bit_depth = image->bytesperpixel * 8;
+ break;
+ case SMALLITER:
+ case LARGEITER:
+ case GRAYSCALE:
+ color_type = PNG_COLOR_TYPE_GRAY;
+ bit_depth = image->bytesperpixel * 8;
+ break;
+ case TRUECOLOR:
+ case TRUECOLOR24:
+ case TRUECOLOR16:
+ color_type = PNG_COLOR_TYPE_RGB;
+ bit_depth = 8;
+ break;
+ }
+
+ png_set_IHDR (png_ptr, info_ptr, image->width, image->height, bit_depth,
+ color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
+ PNG_FILTER_TYPE_BASE);
-
switch (image->palette->type) {
case C256:
{
int i;
- info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
- info_ptr->bit_depth = image->bytesperpixel * 8;
- info_ptr->palette = palette;
- info_ptr->valid |= PNG_INFO_PLTE;
+ png_color png_palette[257];
+ int png_num_palette;
for (i = 0; i < image->palette->end; i++)
- info_ptr->palette[i].red = image->palette->rgb[i][0],
- info_ptr->palette[i].green = image->palette->rgb[i][1],
- info_ptr->palette[i].blue = image->palette->rgb[i][2],
- info_ptr->num_palette = image->palette->end;
+ png_palette[i].red = image->palette->rgb[i][0],
+ png_palette[i].green = image->palette->rgb[i][1],
+ png_palette[i].blue = image->palette->rgb[i][2],
+ png_num_palette = image->palette->end;
+ png_set_PLTE(png_ptr, info_ptr, png_palette, png_num_palette);
}
break;
- case SMALLITER:
- case LARGEITER:
- case GRAYSCALE:
- info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
- info_ptr->bit_depth = image->bytesperpixel * 8;
- break;
case TRUECOLOR:
case TRUECOLOR24:
case TRUECOLOR16:
- info_ptr->color_type = PNG_COLOR_TYPE_RGB;
- info_ptr->bit_depth = 8;
- info_ptr->sig_bit.red = 8 - image->palette->info.truec.rprec;
- info_ptr->sig_bit.green = 8 - image->palette->info.truec.gprec;
- info_ptr->sig_bit.blue = 8 - image->palette->info.truec.bprec;
+ {
+ sig_bit.red = 8 - image->palette->info.truec.rprec;
+ sig_bit.green = 8 - image->palette->info.truec.gprec;
+ sig_bit.blue = 8 - image->palette->info.truec.bprec;
+ png_set_sBIT(png_ptr, info_ptr, &sig_bit);
+ }
break;
}
- info_ptr->interlace_type = 0;
+
+ png_write_info (png_ptr, info_ptr);
+
#ifdef _undefined_
png_set_text(png_ptr, info_ptr, comments,
sizeof(comments) / sizeof(png_text));
#endif
- png_write_info(png_ptr, info_ptr);
+ png_set_gAMA(png_ptr, info_ptr, 0.5 /* 1.0 */);
+ png_set_pHYs(png_ptr, info_ptr, (png_uint_32) (100 / image->pixelwidth),
+ (png_uint_32) (100 / image->pixelheight), PNG_RESOLUTION_UNKNOWN);
+
/*png_set_filler(png_ptr,0,PNG_FILLER_AFTER); */
png_set_packing(png_ptr);
if (image->palette->type & (TRUECOLOR | TRUECOLOR24 | TRUECOLOR16))
- png_set_shift(png_ptr, &(info_ptr->sig_bit));
+ png_set_shift(png_ptr, &sig_bit);
if (*b == 255)
png_set_swap(png_ptr);
png_set_bgr(png_ptr);