mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-13 07:34:50 +00:00
Properly support png 1.5
Obtained from: Gentoo
This commit is contained in:
parent
974f313603
commit
0bf639a081
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=375443
@ -29,6 +29,7 @@ USES= gmake libtool ncurses pathfix perl5 pkgconfig
|
||||
USE_LDCONFIG= yes
|
||||
USE_PERL5= build
|
||||
PORTDOCS= *
|
||||
EXTRA_PATCHES= ${FILESDIR}/extra-libpng15:-p1
|
||||
|
||||
DIRECTFB_SHLIB= 5.0.8 # LT_BINARY.LT_AGE.LT_REVISION
|
||||
DIRECTFB_BIN= 5 # LT_BINARY
|
||||
|
244
devel/directfb/files/extra-libpng15
Normal file
244
devel/directfb/files/extra-libpng15
Normal file
@ -0,0 +1,244 @@
|
||||
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
|
||||
|
@ -1,28 +0,0 @@
|
||||
--- interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c.orig 2011-05-05 20:00:29.000000000 +0200
|
||||
+++ interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c 2012-05-01 09:15:37.000000000 +0200
|
||||
@@ -33,6 +33,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <png.h>
|
||||
+#include <pngpriv.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
@@ -207,7 +207,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;
|
||||
}
|
||||
@@ -292,7 +292,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)
|
@ -1,19 +0,0 @@
|
||||
--- tools/directfb-csource.c.orig 2011-05-05 20:00:29.000000000 +0200
|
||||
+++ tools/directfb-csource.c 2012-04-29 06:09:30.000000000 +0200
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <png.h>
|
||||
+#include <pngpriv.h>
|
||||
|
||||
#include <directfb.h>
|
||||
|
||||
@@ -338,7 +339,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;
|
@ -1,11 +0,0 @@
|
||||
--- tools/mkdfiff.c.orig 2010-10-31 09:49:49.000000000 +0100
|
||||
+++ tools/mkdfiff.c 2012-04-30 06:43:17.000000000 +0200
|
||||
@@ -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;
|
@ -1,11 +0,0 @@
|
||||
--- tools/mkdgifft.cpp.orig 2011-05-05 20:00:29.000000000 +0200
|
||||
+++ tools/mkdgifft.cpp 2012-05-01 08:58:04.000000000 +0200
|
||||
@@ -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;
|
Loading…
Reference in New Issue
Block a user