123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- 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
|