Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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