Contents of /trunk/directfb/patches/directfb-1.2.10-libpng15.patch
Parent Directory | Revision Log
Revision 1303 -
(show annotations)
(download)
Fri Mar 11 22:30:57 2011 UTC (13 years, 6 months ago) by niro
File size: 8876 byte(s)
Fri Mar 11 22:30:57 2011 UTC (13 years, 6 months ago) by niro
File size: 8876 byte(s)
libpng15 patch for directfb-1.2.10
1 | diff -Naur DirectFB-1.2.10/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c DirectFB-1.2.10-magellan/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c |
2 | --- DirectFB-1.2.10/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c 2009-08-27 21:54:18.000000000 +0200 |
3 | +++ DirectFB-1.2.10-magellan/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c 2011-03-11 23:43:18.000000000 +0100 |
4 | @@ -204,7 +204,7 @@ |
5 | if (!data->png_ptr) |
6 | goto error; |
7 | |
8 | - if (setjmp( data->png_ptr->jmpbuf )) { |
9 | + if (png_jmpbuf( data->png_ptr )) { |
10 | D_ERROR( "ImageProvider/PNG: Error reading header!\n" ); |
11 | goto error; |
12 | } |
13 | @@ -331,7 +331,7 @@ |
14 | rect = dst_data->area.wanted; |
15 | } |
16 | |
17 | - if (setjmp( data->png_ptr->jmpbuf )) { |
18 | + if (png_jmpbuf( data->png_ptr )) { |
19 | D_ERROR( "ImageProvider/PNG: Error during decoding!\n" ); |
20 | |
21 | if (data->stage < STAGE_IMAGE) |
22 | @@ -350,6 +350,7 @@ |
23 | /* actual rendering */ |
24 | if (dfb_rectangle_region_intersects( &rect, &clip )) { |
25 | CoreSurfaceBufferLock lock; |
26 | + png_byte bit_depth = png_get_bit_depth( data->png_ptr, data->info_ptr ); |
27 | |
28 | ret = dfb_surface_lock_buffer( dst_surface, CSBR_BACK, CSAF_CPU_WRITE, &lock ); |
29 | if (ret) |
30 | @@ -357,7 +358,7 @@ |
31 | |
32 | switch (data->color_type) { |
33 | case PNG_COLOR_TYPE_PALETTE: |
34 | - if (dst_surface->config.format == DSPF_LUT8 && data->info_ptr->bit_depth == 8) { |
35 | + if (dst_surface->config.format == DSPF_LUT8 && bit_depth == 8) { |
36 | /* |
37 | * Special indexed PNG to LUT8 loading. |
38 | */ |
39 | @@ -400,7 +401,7 @@ |
40 | } |
41 | else { |
42 | if (data->color_type == PNG_COLOR_TYPE_GRAY) { |
43 | - int num = 1 << data->info_ptr->bit_depth; |
44 | + int num = 1 << bit_depth; |
45 | |
46 | for (x=0; x<num; x++) { |
47 | int value = x * 255 / (num - 1); |
48 | @@ -409,7 +410,7 @@ |
49 | } |
50 | } |
51 | |
52 | - switch (data->info_ptr->bit_depth) { |
53 | + switch (bit_depth) { |
54 | case 8: |
55 | for (y=0; y<data->height; y++) { |
56 | u8 *S = data->image + data->pitch * y; |
57 | @@ -464,8 +465,8 @@ |
58 | |
59 | default: |
60 | D_ERROR( "ImageProvider/PNG: Unsupported indexed bit depth %d!\n", |
61 | - data->info_ptr->bit_depth ); |
62 | - } |
63 | + bit_depth ); |
64 | + |
65 | |
66 | dfb_scale_linear_32( image_argb, data->width, data->height, |
67 | lock.addr, lock.pitch, &rect, dst_surface, &clip ); |
68 | @@ -630,17 +631,26 @@ |
69 | NULL, NULL, NULL ); |
70 | |
71 | if (png_get_valid( data->png_ptr, data->info_ptr, PNG_INFO_tRNS )) { |
72 | + png_bytep trans; |
73 | + png_color_16p trans_color; |
74 | + int num_trans; |
75 | + |
76 | + png_get_tRNS( data->png_ptr, data->info_ptr, &trans, &num_trans, &trans_color ); |
77 | + |
78 | data->color_keyed = true; |
79 | |
80 | /* generate color key based on palette... */ |
81 | if (data->color_type == PNG_COLOR_TYPE_PALETTE) { |
82 | u32 key; |
83 | - png_colorp palette = data->info_ptr->palette; |
84 | - png_bytep trans = data->info_ptr->trans; |
85 | - int num_colors = MIN( MAXCOLORMAPSIZE, |
86 | - data->info_ptr->num_palette ); |
87 | - u8 cmap[3][num_colors]; |
88 | - |
89 | + png_colorp palette; |
90 | + int num_colors; |
91 | + u8 *cmap[3]; |
92 | + |
93 | + png_get_PLTE( data->png_ptr, data->info_ptr, &palette, &num_colors ); |
94 | + num_colors = MIN( MAXCOLORMAPSIZE, num_colors ); |
95 | + cmap[0] = alloca (num_colors); |
96 | + cmap[1] = alloca (num_colors); |
97 | + cmap[2] = alloca (num_colors); |
98 | for (i=0; i<num_colors; i++) { |
99 | cmap[0][i] = palette[i].red; |
100 | cmap[1][i] = palette[i].green; |
101 | @@ -649,7 +659,7 @@ |
102 | |
103 | key = FindColorKey( num_colors, &cmap[0][0] ); |
104 | |
105 | - for (i=0; i<data->info_ptr->num_trans; i++) { |
106 | + for (i=0; i<num_trans; i++) { |
107 | if (!trans[i]) { |
108 | palette[i].red = (key & 0xff0000) >> 16; |
109 | palette[i].green = (key & 0x00ff00) >> 8; |
110 | @@ -661,20 +671,23 @@ |
111 | } |
112 | else { |
113 | /* ...or based on trans rgb value */ |
114 | - png_color_16p trans = &data->info_ptr->trans_values; |
115 | - |
116 | - data->color_key = (((trans->red & 0xff00) << 8) | |
117 | - ((trans->green & 0xff00)) | |
118 | - ((trans->blue & 0xff00) >> 8)); |
119 | + data->color_key = (((trans_color->red & 0xff00) << 8) | |
120 | + ((trans_color->green & 0xff00)) | |
121 | + ((trans_color->blue & 0xff00) >> 8)); |
122 | } |
123 | } |
124 | |
125 | switch (data->color_type) { |
126 | case PNG_COLOR_TYPE_PALETTE: { |
127 | - png_colorp palette = data->info_ptr->palette; |
128 | - png_bytep trans = data->info_ptr->trans; |
129 | - int num_trans = data->info_ptr->num_trans; |
130 | - int num_colors = MIN( MAXCOLORMAPSIZE, data->info_ptr->num_palette ); |
131 | + png_colorp palette; |
132 | + png_bytep trans; |
133 | + png_color_16p trans_color; |
134 | + int num_trans; |
135 | + int num_colors; |
136 | + |
137 | + png_get_PLTE( data->png_ptr, data->info_ptr, &palette, &num_colors ); |
138 | + num_colors = MIN( MAXCOLORMAPSIZE, num_colors ); |
139 | + png_get_tRNS( data->png_ptr, data->info_ptr, &trans, &num_trans, &trans_color ); |
140 | |
141 | for (i=0; i<num_colors; i++) { |
142 | data->colors[i].a = (i < num_trans) ? trans[i] : 0xff; |
143 | diff -Naur DirectFB-1.2.10/tools/directfb-csource.c DirectFB-1.2.10-magellan/tools/directfb-csource.c |
144 | --- DirectFB-1.2.10/tools/directfb-csource.c 2009-08-27 21:54:18.000000000 +0200 |
145 | +++ DirectFB-1.2.10-magellan/tools/directfb-csource.c 2011-03-11 23:45:22.000000000 +0100 |
146 | @@ -300,7 +300,7 @@ |
147 | if (!png_ptr) |
148 | goto cleanup; |
149 | |
150 | - if (setjmp (png_ptr->jmpbuf)) { |
151 | + if (setjmp (png_jmpbuf (png_ptr))) { |
152 | if (desc->preallocated[0].data) { |
153 | free (desc->preallocated[0].data); |
154 | desc->preallocated[0].data = NULL; |
155 | @@ -367,17 +367,22 @@ |
156 | } |
157 | |
158 | switch (src_format) { |
159 | - case DSPF_LUT8: |
160 | - if (info_ptr->num_palette) { |
161 | + case DSPF_LUT8: { |
162 | + png_colorp png_palette; |
163 | + int num_palette; |
164 | + |
165 | + png_get_PLTE( png_ptr, info_ptr, &png_palette, &num_palette ); |
166 | + |
167 | + if (num_palette) { |
168 | png_byte *alpha; |
169 | int i, num; |
170 | |
171 | - *palette_size = MIN (info_ptr->num_palette, 256); |
172 | + *palette_size = MIN (num_palette, 256); |
173 | for (i = 0; i < *palette_size; i++) { |
174 | palette[i].a = 0xFF; |
175 | - palette[i].r = info_ptr->palette[i].red; |
176 | - palette[i].g = info_ptr->palette[i].green; |
177 | - palette[i].b = info_ptr->palette[i].blue; |
178 | + palette[i].r = png_palette[i].red; |
179 | + palette[i].g = png_palette[i].green; |
180 | + palette[i].b = png_palette[i].blue; |
181 | } |
182 | if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) { |
183 | png_get_tRNS (png_ptr, info_ptr, &alpha, &num, NULL); |
184 | @@ -386,6 +391,7 @@ |
185 | } |
186 | } |
187 | break; |
188 | + } |
189 | case DSPF_RGB32: |
190 | png_set_filler (png_ptr, 0xFF, |
191 | #ifdef WORDS_BIGENDIAN |
192 | diff -Naur DirectFB-1.2.10/tools/mkdfiff.c DirectFB-1.2.10-magellan/tools/mkdfiff.c |
193 | --- DirectFB-1.2.10/tools/mkdfiff.c 2009-08-27 21:54:18.000000000 +0200 |
194 | +++ DirectFB-1.2.10-magellan/tools/mkdfiff.c 2011-03-11 23:46:10.000000000 +0100 |
195 | @@ -97,7 +97,7 @@ |
196 | if (!png_ptr) |
197 | goto cleanup; |
198 | |
199 | - if (setjmp (png_ptr->jmpbuf)) { |
200 | + if (setjmp (png_jmpbuf (png_ptr))) { |
201 | if (desc->preallocated[0].data) { |
202 | free (desc->preallocated[0].data); |
203 | desc->preallocated[0].data = NULL; |