Annotation of /trunk/ghostscript-gpl/patches/ghostscript-gpl-9.02-libpng15.patch
Parent Directory | Revision Log
Revision 1375 -
(hide annotations)
(download)
Wed Jun 29 12:37:39 2011 UTC (13 years, 3 months ago) by niro
File size: 6699 byte(s)
Wed Jun 29 12:37:39 2011 UTC (13 years, 3 months ago) by niro
File size: 6699 byte(s)
added libpng-1.5 patch
1 | niro | 1375 | $NetBSD: patch-ak,v 1.5 2011/01/15 14:08:10 wiz Exp $ |
2 | |||
3 | Fix build with png-1.5. From John Bowler. | ||
4 | |||
5 | --- base/gdevpng.c.orig 2008-07-17 02:34:01.000000000 +0000 | ||
6 | +++ base/gdevpng.c | ||
7 | @@ -36,12 +36,14 @@ | ||
8 | #include "gdevpccm.h" | ||
9 | #include "gscdefs.h" | ||
10 | |||
11 | -#define PNG_INTERNAL | ||
12 | /* | ||
13 | * libpng versions 1.0.3 and later allow disabling access to the stdxxx | ||
14 | * files while retaining support for FILE * I/O. | ||
15 | + * | ||
16 | + * This is a misunderstanding - this is a build time option for libpng, | ||
17 | + * it has no effect on a user of libpng. | ||
18 | */ | ||
19 | -#define PNG_NO_CONSOLE_IO | ||
20 | +/*#define PNG_NO_CONSOLE_IO*/ | ||
21 | /* | ||
22 | * Earlier libpng versions require disabling FILE * I/O altogether. | ||
23 | * This produces a compiler warning about no prototype for png_init_io. | ||
24 | @@ -280,7 +282,7 @@ png_print_page(gx_device_printer * pdev, | ||
25 | goto done; | ||
26 | } | ||
27 | /* set error handling */ | ||
28 | - if (setjmp(png_ptr->jmpbuf)) { | ||
29 | + if (setjmp(png_jmpbuf(png_ptr))) { | ||
30 | /* If we get here, we had a problem reading the file */ | ||
31 | code = gs_note_error(gs_error_VMerror); | ||
32 | goto done; | ||
33 | @@ -290,19 +292,12 @@ png_print_page(gx_device_printer * pdev, | ||
34 | png_init_io(png_ptr, file); | ||
35 | |||
36 | /* set the file information here */ | ||
37 | - info_ptr->width = pdev->width; | ||
38 | - info_ptr->height = pdev->height; | ||
39 | - /* resolution is in pixels per meter vs. dpi */ | ||
40 | - info_ptr->x_pixels_per_unit = | ||
41 | - (png_uint_32) (pdev->HWResolution[0] * (100.0 / 2.54)); | ||
42 | - info_ptr->y_pixels_per_unit = | ||
43 | - (png_uint_32) (pdev->HWResolution[1] * (100.0 / 2.54)); | ||
44 | - info_ptr->phys_unit_type = PNG_RESOLUTION_METER; | ||
45 | - info_ptr->valid |= PNG_INFO_pHYs; | ||
46 | switch (depth) { | ||
47 | case 32: | ||
48 | - info_ptr->bit_depth = 8; | ||
49 | - info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA; | ||
50 | + png_set_IHDR(png_ptr, info_ptr, pdev->width, pdev->height, | ||
51 | + 8, PNG_COLOR_TYPE_RGB_ALPHA, | ||
52 | + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, | ||
53 | + PNG_FILTER_TYPE_DEFAULT); | ||
54 | png_set_invert_alpha(png_ptr); | ||
55 | { gx_device_pngalpha *ppdev = (gx_device_pngalpha *)pdev; | ||
56 | png_color_16 background; | ||
57 | @@ -315,57 +310,69 @@ png_print_page(gx_device_printer * pdev, | ||
58 | } | ||
59 | break; | ||
60 | case 48: | ||
61 | - info_ptr->bit_depth = 16; | ||
62 | - info_ptr->color_type = PNG_COLOR_TYPE_RGB; | ||
63 | + png_set_IHDR(png_ptr, info_ptr, pdev->width, pdev->height, | ||
64 | + 16, PNG_COLOR_TYPE_RGB, | ||
65 | + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, | ||
66 | + PNG_FILTER_TYPE_DEFAULT); | ||
67 | #if defined(ARCH_IS_BIG_ENDIAN) && (!ARCH_IS_BIG_ENDIAN) | ||
68 | png_set_swap(png_ptr); | ||
69 | #endif | ||
70 | break; | ||
71 | case 24: | ||
72 | - info_ptr->bit_depth = 8; | ||
73 | - info_ptr->color_type = PNG_COLOR_TYPE_RGB; | ||
74 | + png_set_IHDR(png_ptr, info_ptr, pdev->width, pdev->height, | ||
75 | + 8, PNG_COLOR_TYPE_RGB, | ||
76 | + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, | ||
77 | + PNG_FILTER_TYPE_DEFAULT); | ||
78 | break; | ||
79 | case 8: | ||
80 | - info_ptr->bit_depth = 8; | ||
81 | - if (gx_device_has_color(pdev)) | ||
82 | - info_ptr->color_type = PNG_COLOR_TYPE_PALETTE; | ||
83 | - else | ||
84 | - info_ptr->color_type = PNG_COLOR_TYPE_GRAY; | ||
85 | + png_set_IHDR(png_ptr, info_ptr, pdev->width, pdev->height, | ||
86 | + 8, gx_device_has_color(pdev) ? | ||
87 | + PNG_COLOR_TYPE_PALETTE : PNG_COLOR_TYPE_GRAY, | ||
88 | + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, | ||
89 | + PNG_FILTER_TYPE_DEFAULT); | ||
90 | break; | ||
91 | case 4: | ||
92 | - info_ptr->bit_depth = 4; | ||
93 | - info_ptr->color_type = PNG_COLOR_TYPE_PALETTE; | ||
94 | + png_set_IHDR(png_ptr, info_ptr, pdev->width, pdev->height, | ||
95 | + 4, PNG_COLOR_TYPE_PALETTE, | ||
96 | + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, | ||
97 | + PNG_FILTER_TYPE_DEFAULT); | ||
98 | break; | ||
99 | case 1: | ||
100 | - info_ptr->bit_depth = 1; | ||
101 | - info_ptr->color_type = PNG_COLOR_TYPE_GRAY; | ||
102 | + png_set_IHDR(png_ptr, info_ptr, pdev->width, pdev->height, | ||
103 | + 1, PNG_COLOR_TYPE_GRAY, | ||
104 | + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, | ||
105 | + PNG_FILTER_TYPE_DEFAULT); | ||
106 | /* invert monocrome pixels */ | ||
107 | png_set_invert_mono(png_ptr); | ||
108 | break; | ||
109 | + default: | ||
110 | + png_error(png_ptr, "invalid bit depth"); | ||
111 | } | ||
112 | |||
113 | + /* resolution is in pixels per meter vs. dpi */ | ||
114 | + png_set_pHYs(png_ptr, info_ptr, | ||
115 | + (png_uint_32) (pdev->HWResolution[0] * (100.0 / 2.54)), | ||
116 | + (png_uint_32) (pdev->HWResolution[1] * (100.0 / 2.54)), | ||
117 | + PNG_RESOLUTION_METER); | ||
118 | + | ||
119 | /* set the palette if there is one */ | ||
120 | - if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { | ||
121 | + if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_PALETTE) { | ||
122 | int i; | ||
123 | int num_colors = 1 << depth; | ||
124 | gx_color_value rgb[3]; | ||
125 | + png_color palette[256]; | ||
126 | + | ||
127 | + if (num_colors > 256) | ||
128 | + num_colors = 256; | ||
129 | |||
130 | - info_ptr->palette = | ||
131 | - (void *)gs_alloc_bytes(mem, 256 * sizeof(png_color), | ||
132 | - "png palette"); | ||
133 | - if (info_ptr->palette == 0) { | ||
134 | - code = gs_note_error(gs_error_VMerror); | ||
135 | - goto done; | ||
136 | - } | ||
137 | - info_ptr->num_palette = num_colors; | ||
138 | - info_ptr->valid |= PNG_INFO_PLTE; | ||
139 | for (i = 0; i < num_colors; i++) { | ||
140 | (*dev_proc(pdev, map_color_rgb)) ((gx_device *) pdev, | ||
141 | (gx_color_index) i, rgb); | ||
142 | - info_ptr->palette[i].red = gx_color_value_to_byte(rgb[0]); | ||
143 | - info_ptr->palette[i].green = gx_color_value_to_byte(rgb[1]); | ||
144 | - info_ptr->palette[i].blue = gx_color_value_to_byte(rgb[2]); | ||
145 | + palette[i].red = gx_color_value_to_byte(rgb[0]); | ||
146 | + palette[i].green = gx_color_value_to_byte(rgb[1]); | ||
147 | + palette[i].blue = gx_color_value_to_byte(rgb[2]); | ||
148 | } | ||
149 | + png_set_PLTE(png_ptr, info_ptr, palette, num_colors); | ||
150 | } | ||
151 | /* add comment */ | ||
152 | strncpy(software_key, "Software", sizeof(software_key)); | ||
153 | @@ -375,15 +382,14 @@ png_print_page(gx_device_printer * pdev, | ||
154 | text_png.key = software_key; | ||
155 | text_png.text = software_text; | ||
156 | text_png.text_length = strlen(software_text); | ||
157 | - info_ptr->text = &text_png; | ||
158 | - info_ptr->num_text = 1; | ||
159 | + png_set_text(png_ptr, info_ptr, &text_png, 1); | ||
160 | |||
161 | /* write the file information */ | ||
162 | png_write_info(png_ptr, info_ptr); | ||
163 | |||
164 | /* don't write the comments twice */ | ||
165 | - info_ptr->num_text = 0; | ||
166 | - info_ptr->text = NULL; | ||
167 | + /*info_ptr->num_text = 0;*/ | ||
168 | + /*info_ptr->text = NULL;*/ | ||
169 | |||
170 | /* Write the contents of the image. */ | ||
171 | for (y = 0; y < height; y++) { | ||
172 | @@ -395,7 +401,7 @@ png_print_page(gx_device_printer * pdev, | ||
173 | png_write_end(png_ptr, info_ptr); | ||
174 | |||
175 | /* if you alloced the palette, free it here */ | ||
176 | - gs_free_object(mem, info_ptr->palette, "png palette"); | ||
177 | + /*gs_free_object(mem, info_ptr->palette, "png palette");*/ | ||
178 | |||
179 | done: | ||
180 | /* free the structures */ | ||
181 | @@ -405,6 +411,7 @@ png_print_page(gx_device_printer * pdev, | ||
182 | return code; | ||
183 | } | ||
184 | |||
185 | +#if 0 /* not required in 1.5 */ | ||
186 | /* | ||
187 | * Patch around a static reference to a never-used procedure. | ||
188 | * This could be avoided if we were willing to edit pngconf.h to | ||
189 | @@ -422,6 +429,7 @@ png_push_fill_buffer(png_structp png_ptr | ||
190 | { | ||
191 | } | ||
192 | #endif | ||
193 | +#endif | ||
194 | |||
195 | static int | ||
196 | pngalpha_open(gx_device * pdev) |