Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1302 - (hide annotations) (download)
Fri Mar 11 21:50:03 2011 UTC (13 years, 2 months ago) by niro
File size: 10456 byte(s)
added libpng15 patch
1 niro 1302 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