Annotation of /trunk/directfb/patches/directfb-1.4.11-libpng15.patch
Parent Directory | Revision Log
Revision 1302 -
(hide annotations)
(download)
Fri Mar 11 21:50:03 2011 UTC (13 years, 6 months ago) by niro
File size: 10456 byte(s)
Fri Mar 11 21:50:03 2011 UTC (13 years, 6 months ago) by niro
File size: 10456 byte(s)
added libpng15 patch
1 | niro | 1302 | From 83180b25e90721e717bf37c5332c22713508786e Mon Sep 17 00:00:00 2001 |
2 | From: Mike Frysinger <vapier@gentoo.org> | ||
3 | Date: Sun, 20 Feb 2011 19:18:19 -0500 | ||
4 | Subject: [PATCH] png: add support for libpng 1.5.x | ||
5 | |||
6 | Signed-off-by: Mike Frysinger <vapier@gentoo.org> | ||
7 | --- | ||
8 | .../idirectfbimageprovider_png.c | 56 ++++++++++++------- | ||
9 | 1 files changed, 35 insertions(+), 21 deletions(-) | ||
10 | |||
11 | diff --git a/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c b/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c | ||
12 | index 6d65ea3..7d82c5c 100644 | ||
13 | --- a/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c | ||
14 | +++ b/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c | ||
15 | @@ -207,7 +207,7 @@ Construct( IDirectFBImageProvider *thiz, | ||
16 | if (!data->png_ptr) | ||
17 | goto error; | ||
18 | |||
19 | - if (setjmp( data->png_ptr->jmpbuf )) { | ||
20 | + if (png_jmpbuf( data->png_ptr )) { | ||
21 | D_ERROR( "ImageProvider/PNG: Error reading header!\n" ); | ||
22 | goto error; | ||
23 | } | ||
24 | @@ -292,7 +292,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, | ||
25 | rect = dst_data->area.wanted; | ||
26 | } | ||
27 | |||
28 | - if (setjmp( data->png_ptr->jmpbuf )) { | ||
29 | + if (png_jmpbuf( data->png_ptr )) { | ||
30 | D_ERROR( "ImageProvider/PNG: Error during decoding!\n" ); | ||
31 | |||
32 | if (data->stage < STAGE_IMAGE) | ||
33 | @@ -327,6 +327,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, | ||
34 | } | ||
35 | else { | ||
36 | CoreSurfaceBufferLock lock; | ||
37 | + png_byte bit_depth = png_get_bit_depth( data->png_ptr, data->info_ptr ); | ||
38 | |||
39 | ret = dfb_surface_lock_buffer( dst_surface, CSBR_BACK, CSAID_CPU, CSAF_WRITE, &lock ); | ||
40 | if (ret) | ||
41 | @@ -334,7 +335,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, | ||
42 | |||
43 | switch (data->color_type) { | ||
44 | case PNG_COLOR_TYPE_PALETTE: | ||
45 | - if (dst_surface->config.format == DSPF_LUT8 && data->info_ptr->bit_depth == 8) { | ||
46 | + if (dst_surface->config.format == DSPF_LUT8 && bit_depth == 8) { | ||
47 | /* | ||
48 | * Special indexed PNG to LUT8 loading. | ||
49 | */ | ||
50 | @@ -377,7 +378,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, | ||
51 | } | ||
52 | else { | ||
53 | if (data->color_type == PNG_COLOR_TYPE_GRAY) { | ||
54 | - int num = 1 << data->info_ptr->bit_depth; | ||
55 | + int num = 1 << bit_depth; | ||
56 | |||
57 | for (x=0; x<num; x++) { | ||
58 | int value = x * 255 / (num - 1); | ||
59 | @@ -386,7 +387,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, | ||
60 | } | ||
61 | } | ||
62 | |||
63 | - switch (data->info_ptr->bit_depth) { | ||
64 | + switch (bit_depth) { | ||
65 | case 8: | ||
66 | for (y=0; y<data->height; y++) { | ||
67 | u8 *S = data->image + data->pitch * y; | ||
68 | @@ -441,7 +442,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, | ||
69 | |||
70 | default: | ||
71 | D_ERROR( "ImageProvider/PNG: Unsupported indexed bit depth %d!\n", | ||
72 | - data->info_ptr->bit_depth ); | ||
73 | + bit_depth ); | ||
74 | } | ||
75 | |||
76 | dfb_scale_linear_32( image_argb, data->width, data->height, | ||
77 | @@ -594,16 +595,26 @@ png_info_callback( png_structp png_read_ptr, | ||
78 | NULL, NULL, NULL ); | ||
79 | |||
80 | if (png_get_valid( data->png_ptr, data->info_ptr, PNG_INFO_tRNS )) { | ||
81 | + png_bytep trans; | ||
82 | + png_color_16p trans_color; | ||
83 | + int num_trans; | ||
84 | + | ||
85 | + png_get_tRNS( data->png_ptr, data->info_ptr, &trans, &num_trans, &trans_color ); | ||
86 | + | ||
87 | data->color_keyed = true; | ||
88 | |||
89 | /* generate color key based on palette... */ | ||
90 | if (data->color_type == PNG_COLOR_TYPE_PALETTE) { | ||
91 | u32 key; | ||
92 | - png_colorp palette = data->info_ptr->palette; | ||
93 | - png_bytep trans = data->info_ptr->trans_alpha; | ||
94 | - int num_colors = MIN( MAXCOLORMAPSIZE, | ||
95 | - data->info_ptr->num_palette ); | ||
96 | - u8 cmap[3][num_colors]; | ||
97 | + png_colorp palette; | ||
98 | + int num_colors; | ||
99 | + u8 *cmap[3]; | ||
100 | + | ||
101 | + png_get_PLTE( data->png_ptr, data->info_ptr, &palette, &num_colors ); | ||
102 | + num_colors = MIN( MAXCOLORMAPSIZE, num_colors ); | ||
103 | + cmap[0] = alloca (num_colors); | ||
104 | + cmap[1] = alloca (num_colors); | ||
105 | + cmap[2] = alloca (num_colors); | ||
106 | |||
107 | for (i=0; i<num_colors; i++) { | ||
108 | cmap[0][i] = palette[i].red; | ||
109 | @@ -613,7 +624,7 @@ png_info_callback( png_structp png_read_ptr, | ||
110 | |||
111 | key = FindColorKey( num_colors, &cmap[0][0] ); | ||
112 | |||
113 | - for (i=0; i<data->info_ptr->num_trans; i++) { | ||
114 | + for (i=0; i<num_trans; i++) { | ||
115 | if (!trans[i]) { | ||
116 | palette[i].red = (key & 0xff0000) >> 16; | ||
117 | palette[i].green = (key & 0x00ff00) >> 8; | ||
118 | @@ -625,20 +636,23 @@ png_info_callback( png_structp png_read_ptr, | ||
119 | } | ||
120 | else { | ||
121 | /* ...or based on trans rgb value */ | ||
122 | - png_color_16p trans = &data->info_ptr->trans_color; | ||
123 | - | ||
124 | - data->color_key = (((trans->red & 0xff00) << 8) | | ||
125 | - ((trans->green & 0xff00)) | | ||
126 | - ((trans->blue & 0xff00) >> 8)); | ||
127 | + data->color_key = (((trans_color->red & 0xff00) << 8) | | ||
128 | + ((trans_color->green & 0xff00)) | | ||
129 | + ((trans_color->blue & 0xff00) >> 8)); | ||
130 | } | ||
131 | } | ||
132 | |||
133 | switch (data->color_type) { | ||
134 | case PNG_COLOR_TYPE_PALETTE: { | ||
135 | - png_colorp palette = data->info_ptr->palette; | ||
136 | - png_bytep trans = data->info_ptr->trans_alpha; | ||
137 | - int num_trans = data->info_ptr->num_trans; | ||
138 | - int num_colors = MIN( MAXCOLORMAPSIZE, data->info_ptr->num_palette ); | ||
139 | + png_colorp palette; | ||
140 | + png_bytep trans; | ||
141 | + png_color_16p trans_color; | ||
142 | + int num_trans; | ||
143 | + int num_colors; | ||
144 | + | ||
145 | + png_get_PLTE( data->png_ptr, data->info_ptr, &palette, &num_colors ); | ||
146 | + num_colors = MIN( MAXCOLORMAPSIZE, num_colors ); | ||
147 | + png_get_tRNS( data->png_ptr, data->info_ptr, &trans, &num_trans, &trans_color ); | ||
148 | |||
149 | for (i=0; i<num_colors; i++) { | ||
150 | data->colors[i].a = (i < num_trans) ? trans[i] : 0xff; | ||
151 | -- | ||
152 | 1.7.4.1 | ||
153 | |||
154 | From 7a2a36fada3ecdd7f48fcfd782a552598477a8f5 Mon Sep 17 00:00:00 2001 | ||
155 | From: Mike Frysinger <vapier@gentoo.org> | ||
156 | Date: Sun, 20 Feb 2011 19:38:50 -0500 | ||
157 | Subject: [PATCH] tools: add support for libpng 1.5.x | ||
158 | |||
159 | Signed-off-by: Mike Frysinger <vapier@gentoo.org> | ||
160 | --- | ||
161 | tools/directfb-csource.c | 20 +++++++++++++------- | ||
162 | tools/mkdfiff.c | 2 +- | ||
163 | tools/mkdgifft.cpp | 2 +- | ||
164 | 3 files changed, 15 insertions(+), 9 deletions(-) | ||
165 | |||
166 | diff --git a/tools/directfb-csource.c b/tools/directfb-csource.c | ||
167 | index 8f2cbf0..487ea3c 100644 | ||
168 | --- a/tools/directfb-csource.c | ||
169 | +++ b/tools/directfb-csource.c | ||
170 | @@ -338,7 +338,7 @@ static DFBResult load_image (const char *filename, | ||
171 | if (!png_ptr) | ||
172 | goto cleanup; | ||
173 | |||
174 | - if (setjmp (png_ptr->jmpbuf)) { | ||
175 | + if (setjmp (png_jmpbuf (png_ptr))) { | ||
176 | if (desc->preallocated[0].data) { | ||
177 | free (desc->preallocated[0].data); | ||
178 | desc->preallocated[0].data = NULL; | ||
179 | @@ -405,17 +405,22 @@ static DFBResult load_image (const char *filename, | ||
180 | } | ||
181 | |||
182 | switch (src_format) { | ||
183 | - case DSPF_LUT8: | ||
184 | - if (info_ptr->num_palette) { | ||
185 | + case DSPF_LUT8: { | ||
186 | + png_colorp png_palette; | ||
187 | + int num_palette; | ||
188 | + | ||
189 | + png_get_PLTE( png_ptr, info_ptr, &png_palette, &num_palette ); | ||
190 | + | ||
191 | + if (num_palette) { | ||
192 | png_byte *alpha; | ||
193 | int i, num; | ||
194 | |||
195 | - *palette_size = MIN (info_ptr->num_palette, 256); | ||
196 | + *palette_size = MIN (num_palette, 256); | ||
197 | for (i = 0; i < *palette_size; i++) { | ||
198 | palette[i].a = 0xFF; | ||
199 | - palette[i].r = info_ptr->palette[i].red; | ||
200 | - palette[i].g = info_ptr->palette[i].green; | ||
201 | - palette[i].b = info_ptr->palette[i].blue; | ||
202 | + palette[i].r = png_palette[i].red; | ||
203 | + palette[i].g = png_palette[i].green; | ||
204 | + palette[i].b = png_palette[i].blue; | ||
205 | } | ||
206 | if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) { | ||
207 | png_get_tRNS (png_ptr, info_ptr, &alpha, &num, NULL); | ||
208 | @@ -424,6 +429,7 @@ static DFBResult load_image (const char *filename, | ||
209 | } | ||
210 | } | ||
211 | break; | ||
212 | + } | ||
213 | case DSPF_RGB32: | ||
214 | png_set_filler (png_ptr, 0xFF, | ||
215 | #ifdef WORDS_BIGENDIAN | ||
216 | diff --git a/tools/mkdfiff.c b/tools/mkdfiff.c | ||
217 | index 68a3b4f..edb58a7 100644 | ||
218 | --- a/tools/mkdfiff.c | ||
219 | +++ b/tools/mkdfiff.c | ||
220 | @@ -97,7 +97,7 @@ load_image (const char *filename, | ||
221 | if (!png_ptr) | ||
222 | goto cleanup; | ||
223 | |||
224 | - if (setjmp (png_ptr->jmpbuf)) { | ||
225 | + if (setjmp (png_jmpbuf (png_ptr))) { | ||
226 | if (desc->preallocated[0].data) { | ||
227 | free (desc->preallocated[0].data); | ||
228 | desc->preallocated[0].data = NULL; | ||
229 | diff --git a/tools/mkdgifft.cpp b/tools/mkdgifft.cpp | ||
230 | index 96e4220..d4b6bf4 100644 | ||
231 | --- a/tools/mkdgifft.cpp | ||
232 | +++ b/tools/mkdgifft.cpp | ||
233 | @@ -595,7 +595,7 @@ load_image (const char *filename, | ||
234 | if (!png_ptr) | ||
235 | goto cleanup; | ||
236 | |||
237 | - if (setjmp (png_ptr->jmpbuf)) { | ||
238 | + if (setjmp (png_jmpbuf (png_ptr))) { | ||
239 | if (desc->preallocated[0].data) { | ||
240 | free (desc->preallocated[0].data); | ||
241 | desc->preallocated[0].data = NULL; | ||
242 | -- | ||
243 | 1.7.4.1 | ||
244 |