--- DirectFB-1.4.15/tools/directfb-csource.c.orig 2011-09-29 11:51:21.000000000 +0200 +++ DirectFB-1.4.15/tools/directfb-csource.c 2011-12-31 11:45:40.123082173 +0100 @@ -338,7 +338,7 @@ 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; @@ -406,16 +406,19 @@ switch (src_format) { case DSPF_LUT8: - if (info_ptr->num_palette) { + { + png_colorp png_palette; + int num_palette; + if (png_get_PLTE(png_ptr, info_ptr, &png_palette, &num_palette) && (num_palette > 0)) { 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); @@ -423,6 +426,7 @@ palette[i].a = alpha[i]; } } + } break; case DSPF_RGB32: png_set_filler (png_ptr, 0xFF, --- DirectFB-1.4.15/tools/mkdfiff.c.orig 2011-09-29 11:51:21.000000000 +0200 +++ DirectFB-1.4.15/tools/mkdfiff.c 2011-12-31 11:54:59.336434230 +0100 @@ -97,7 +97,7 @@ 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; --- DirectFB-1.4.15/tools/mkdgifft.cpp.orig 2011-09-29 11:51:21.000000000 +0200 +++ DirectFB-1.4.15/tools/mkdgifft.cpp 2011-12-31 12:04:10.586452688 +0100 @@ -595,7 +595,7 @@ 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; --- DirectFB-1.4.15/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c.orig 2011-09-29 11:51:21.000000000 +0200 +++ DirectFB-1.4.15/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c 2011-12-31 13:45:31.339989628 +0100 @@ -209,7 +209,7 @@ 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; } @@ -294,7 +294,7 @@ 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) @@ -337,7 +337,7 @@ 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 && png_get_bit_depth(data->png_ptr, data->info_ptr) == 8) { /* * Special indexed PNG to LUT8 loading. */ @@ -390,7 +390,7 @@ } else { if (data->color_type == PNG_COLOR_TYPE_GRAY) { - int num = 1 << data->info_ptr->bit_depth; + int num = 1 << png_get_bit_depth(data->png_ptr, data->info_ptr); for (x=0; xinfo_ptr->bit_depth) { + switch (png_get_bit_depth(data->png_ptr, data->info_ptr)) { case 8: for (y=0; yheight; y++) { u8 *S = data->image + data->pitch * y; @@ -454,7 +454,7 @@ default: D_ERROR( "ImageProvider/PNG: Unsupported indexed bit depth %d!\n", - data->info_ptr->bit_depth ); + png_get_bit_depth(data->png_ptr, data->info_ptr) ); } dfb_scale_linear_32( image_argb, data->width, data->height, @@ -616,12 +616,16 @@ /* 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; + png_bytep trans; + png_color_16p trans_color; + int num_palette, num_colors, num_trans; + + png_get_PLTE(data->png_ptr, data->info_ptr, &palette, &num_palette); + png_get_tRNS(data->png_ptr, data->info_ptr, &trans, &num_trans, &trans_color); + num_colors = MIN (MAXCOLORMAPSIZE, num_palette); + { + u8 cmap[3][num_colors]; for (i=0; iinfo_ptr->num_trans; i++) { + for (i=0; i> 16; palette[i].green = (key & 0x00ff00) >> 8; @@ -642,7 +647,10 @@ } else if (data->color_type == PNG_COLOR_TYPE_GRAY) { /* ...or based on trans gray value */ - png_color_16p trans = &data->info_ptr->trans_color; + png_bytep trans_alpha; + png_color_16p trans; + int num_trans; + png_get_tRNS(data->png_ptr, data->info_ptr, &trans_alpha, &num_trans, &trans); switch(data->bpp) { case 1: @@ -675,7 +683,10 @@ } else { /* ...or based on trans rgb value */ - png_color_16p trans = &data->info_ptr->trans_color; + png_bytep trans_alpha; + png_color_16p trans; + int num_trans; + png_get_tRNS(data->png_ptr, data->info_ptr, &trans_alpha, &num_trans, &trans); switch(data->bpp) { case 1: @@ -710,10 +721,14 @@ 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, num_palette, num_colors; + + png_get_PLTE(data->png_ptr, data->info_ptr, &palette, &num_palette); + png_get_tRNS(data->png_ptr, data->info_ptr, &trans, &num_trans, &trans_color); + num_colors = MIN( MAXCOLORMAPSIZE, num_palette ); for (i=0; icolors[i].a = (i < num_trans) ? trans[i] : 0xff; @@ -847,7 +862,10 @@ } } - png_color_16p trans = &data->info_ptr->trans_color; + int num_trans; + png_bytep trans_alpha; + png_color_16p trans; + png_get_tRNS(data->png_ptr, data->info_ptr, &trans_alpha, &num_trans, &trans); u16 *src16 = (u16*)src + src16_initial_offset; u32 *dst32 = (u32*)dst + dst32_initial_offset;