Contents of /trunk/directfb/patches/directfb-1.4.11-libpng15.patch
Parent Directory | Revision Log
Revision 1302 -
(show 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 | 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 |