Annotation of /trunk/directfb/patches/directfb-1.2.10-libpng15.patch
Parent Directory | Revision Log
Revision 1303 -
(hide 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 | niro | 1303 | 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; |