Magellan Linux

Contents of /trunk/directfb/patches/directfb-1.2.10-libpng15.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1303 - (show annotations) (download)
Fri Mar 11 22:30:57 2011 UTC (13 years, 1 month 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;