| From 83180b25e90721e717bf37c5332c22713508786e Mon Sep 17 00:00:00 2001 |
| From: Mike Frysinger <vapier@gentoo.org> |
| Date: Sun, 20 Feb 2011 19:18:19 -0500 |
| Subject: [PATCH] png: add support for libpng 1.5.x |
| |
| Signed-off-by: Mike Frysinger <vapier@gentoo.org> |
| --- |
| .../idirectfbimageprovider_png.c | 56 ++++++++++++------- |
| 1 files changed, 35 insertions(+), 21 deletions(-) |
| |
| diff --git a/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c b/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c |
| index 6d65ea3..7d82c5c 100644 |
| --- a/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c |
| +++ b/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c |
| @@ -207,7 +207,7 @@ Construct( IDirectFBImageProvider *thiz, |
| if (!data->png_ptr) |
| goto error; |
| |
| - if (setjmp( data->png_ptr->jmpbuf )) { |
| + if (setjmp( png_jmpbuf( data->png_ptr ))) { |
| D_ERROR( "ImageProvider/PNG: Error reading header!\n" ); |
| goto error; |
| } |
| @@ -292,7 +292,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, |
| rect = dst_data->area.wanted; |
| } |
| |
| - if (setjmp( data->png_ptr->jmpbuf )) { |
| + if (setjmp( png_jmpbuf( data->png_ptr ))) { |
| D_ERROR( "ImageProvider/PNG: Error during decoding!\n" ); |
| |
| if (data->stage < STAGE_IMAGE) |
| @@ -327,6 +327,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, |
| } |
| else { |
| CoreSurfaceBufferLock lock; |
| + png_byte bit_depth = png_get_bit_depth( data->png_ptr, data->info_ptr ); |
| |
| ret = dfb_surface_lock_buffer( dst_surface, CSBR_BACK, CSAID_CPU, CSAF_WRITE, &lock ); |
| if (ret) |
| @@ -334,7 +335,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, |
| |
| switch (data->color_type) { |
| case PNG_COLOR_TYPE_PALETTE: |
| - if (dst_surface->config.format == DSPF_LUT8 && data->info_ptr->bit_depth == 8) { |
| + if (dst_surface->config.format == DSPF_LUT8 && bit_depth == 8) { |
| /* |
| * Special indexed PNG to LUT8 loading. |
| */ |
| @@ -377,7 +378,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, |
| } |
| else { |
| if (data->color_type == PNG_COLOR_TYPE_GRAY) { |
| - int num = 1 << data->info_ptr->bit_depth; |
| + int num = 1 << bit_depth; |
| |
| for (x=0; x<num; x++) { |
| int value = x * 255 / (num - 1); |
| @@ -386,7 +387,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, |
| } |
| } |
| |
| - switch (data->info_ptr->bit_depth) { |
| + switch (bit_depth) { |
| case 8: |
| for (y=0; y<data->height; y++) { |
| u8 *S = data->image + data->pitch * y; |
| @@ -441,7 +442,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz, |
| |
| default: |
| D_ERROR( "ImageProvider/PNG: Unsupported indexed bit depth %d!\n", |
| - data->info_ptr->bit_depth ); |
| + bit_depth ); |
| } |
| |
| dfb_scale_linear_32( image_argb, data->width, data->height, |
| @@ -594,16 +595,26 @@ png_info_callback( png_structp png_read_ptr, |
| NULL, NULL, NULL ); |
| |
| if (png_get_valid( data->png_ptr, data->info_ptr, PNG_INFO_tRNS )) { |
| + png_bytep trans; |
| + png_color_16p trans_color; |
| + int num_trans; |
| + |
| + png_get_tRNS( data->png_ptr, data->info_ptr, &trans, &num_trans, &trans_color ); |
| + |
| data->color_keyed = true; |
| |
| /* generate color key based on palette... */ |
| if (data->color_type == PNG_COLOR_TYPE_PALETTE) { |
| u32 key; |
| - png_colorp palette = data->info_ptr->palette; |
| - png_bytep trans = data->info_ptr->trans_alpha; |
| - int num_colors = MIN( MAXCOLORMAPSIZE, |
| - data->info_ptr->num_palette ); |
| - u8 cmap[3][num_colors]; |
| + png_colorp palette; |
| + int num_colors; |
| + u8 *cmap[3]; |
| + |
| + png_get_PLTE( data->png_ptr, data->info_ptr, &palette, &num_colors ); |
| + num_colors = MIN( MAXCOLORMAPSIZE, num_colors ); |
| + cmap[0] = alloca (num_colors); |
| + cmap[1] = alloca (num_colors); |
| + cmap[2] = alloca (num_colors); |
| |
| for (i=0; i<num_colors; i++) { |
| cmap[0][i] = palette[i].red; |
| @@ -613,7 +624,7 @@ png_info_callback( png_structp png_read_ptr, |
| |
| key = FindColorKey( num_colors, &cmap[0][0] ); |
| |
| - for (i=0; i<data->info_ptr->num_trans; i++) { |
| + for (i=0; i<num_trans; i++) { |
| if (!trans[i]) { |
| palette[i].red = (key & 0xff0000) >> 16; |
| palette[i].green = (key & 0x00ff00) >> 8; |
| @@ -625,20 +636,23 @@ png_info_callback( png_structp png_read_ptr, |
| } |
| else { |
| /* ...or based on trans rgb value */ |
| - png_color_16p trans = &data->info_ptr->trans_color; |
| - |
| - data->color_key = (((trans->red & 0xff00) << 8) | |
| - ((trans->green & 0xff00)) | |
| - ((trans->blue & 0xff00) >> 8)); |
| + data->color_key = (((trans_color->red & 0xff00) << 8) | |
| + ((trans_color->green & 0xff00)) | |
| + ((trans_color->blue & 0xff00) >> 8)); |
| } |
| } |
| |
| switch (data->color_type) { |
| case PNG_COLOR_TYPE_PALETTE: { |
| - png_colorp palette = data->info_ptr->palette; |
| - png_bytep trans = data->info_ptr->trans_alpha; |
| - int num_trans = data->info_ptr->num_trans; |
| - int num_colors = MIN( MAXCOLORMAPSIZE, data->info_ptr->num_palette ); |
| + png_colorp palette; |
| + png_bytep trans; |
| + png_color_16p trans_color; |
| + int num_trans; |
| + int num_colors; |
| + |
| + png_get_PLTE( data->png_ptr, data->info_ptr, &palette, &num_colors ); |
| + num_colors = MIN( MAXCOLORMAPSIZE, num_colors ); |
| + png_get_tRNS( data->png_ptr, data->info_ptr, &trans, &num_trans, &trans_color ); |
| |
| for (i=0; i<num_colors; i++) { |
| data->colors[i].a = (i < num_trans) ? trans[i] : 0xff; |
| -- |
| 1.7.4.1 |
| |
| From 7a2a36fada3ecdd7f48fcfd782a552598477a8f5 Mon Sep 17 00:00:00 2001 |
| From: Mike Frysinger <vapier@gentoo.org> |
| Date: Sun, 20 Feb 2011 19:38:50 -0500 |
| Subject: [PATCH] tools: add support for libpng 1.5.x |
| |
| Signed-off-by: Mike Frysinger <vapier@gentoo.org> |
| --- |
| tools/directfb-csource.c | 20 +++++++++++++------- |
| tools/mkdfiff.c | 2 +- |
| tools/mkdgifft.cpp | 2 +- |
| 3 files changed, 15 insertions(+), 9 deletions(-) |
| |
| diff --git a/tools/directfb-csource.c b/tools/directfb-csource.c |
| index 8f2cbf0..487ea3c 100644 |
| --- a/tools/directfb-csource.c |
| +++ b/tools/directfb-csource.c |
| @@ -338,7 +338,7 @@ static DFBResult load_image (const char *filename, |
| if (!png_ptr) |
| goto cleanup; |
| |
| - if (setjmp (png_ptr->jmpbuf)) { |
| + if (setjmp (png_jmpbuf (png_ptr))) { |
| if (desc->preallocated[0].data) { |
| free (desc->preallocated[0].data); |
| desc->preallocated[0].data = NULL; |
| @@ -405,17 +405,22 @@ static DFBResult load_image (const char *filename, |
| } |
| |
| switch (src_format) { |
| - case DSPF_LUT8: |
| - if (info_ptr->num_palette) { |
| + case DSPF_LUT8: { |
| + png_colorp png_palette; |
| + int num_palette; |
| + |
| + png_get_PLTE( png_ptr, info_ptr, &png_palette, &num_palette ); |
| + |
| + if (num_palette) { |
| png_byte *alpha; |
| int i, num; |
| |
| - *palette_size = MIN (info_ptr->num_palette, 256); |
| + *palette_size = MIN (num_palette, 256); |
| for (i = 0; i < *palette_size; i++) { |
| palette[i].a = 0xFF; |
| - palette[i].r = info_ptr->palette[i].red; |
| - palette[i].g = info_ptr->palette[i].green; |
| - palette[i].b = info_ptr->palette[i].blue; |
| + palette[i].r = png_palette[i].red; |
| + palette[i].g = png_palette[i].green; |
| + palette[i].b = png_palette[i].blue; |
| } |
| if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) { |
| png_get_tRNS (png_ptr, info_ptr, &alpha, &num, NULL); |
| @@ -424,6 +429,7 @@ static DFBResult load_image (const char *filename, |
| } |
| } |
| break; |
| + } |
| case DSPF_RGB32: |
| png_set_filler (png_ptr, 0xFF, |
| #ifdef WORDS_BIGENDIAN |
| diff --git a/tools/mkdfiff.c b/tools/mkdfiff.c |
| index 68a3b4f..edb58a7 100644 |
| --- a/tools/mkdfiff.c |
| +++ b/tools/mkdfiff.c |
| @@ -97,7 +97,7 @@ load_image (const char *filename, |
| if (!png_ptr) |
| goto cleanup; |
| |
| - if (setjmp (png_ptr->jmpbuf)) { |
| + if (setjmp (png_jmpbuf (png_ptr))) { |
| if (desc->preallocated[0].data) { |
| free (desc->preallocated[0].data); |
| desc->preallocated[0].data = NULL; |
| diff --git a/tools/mkdgifft.cpp b/tools/mkdgifft.cpp |
| index 96e4220..d4b6bf4 100644 |
| --- a/tools/mkdgifft.cpp |
| +++ b/tools/mkdgifft.cpp |
| @@ -595,7 +595,7 @@ load_image (const char *filename, |
| if (!png_ptr) |
| goto cleanup; |
| |
| - if (setjmp (png_ptr->jmpbuf)) { |
| + if (setjmp (png_jmpbuf (png_ptr))) { |
| if (desc->preallocated[0].data) { |
| free (desc->preallocated[0].data); |
| desc->preallocated[0].data = NULL; |
| -- |
| 1.7.4.1 |
| |