svn commit: r375443 - in head/devel/directfb: . files

Baptiste Daroussin bapt at FreeBSD.org
Wed Dec 24 12:03:03 UTC 2014


Author: bapt
Date: Wed Dec 24 12:03:01 2014
New Revision: 375443
URL: https://svnweb.freebsd.org/changeset/ports/375443
QAT: https://qat.redports.org/buildarchive/r375443/

Log:
  Properly support png 1.5
  
  Obtained from:	Gentoo

Added:
  head/devel/directfb/files/extra-libpng15   (contents, props changed)
Deleted:
  head/devel/directfb/files/patch-interfaces-IDirectFBImageProvider-idirectfbimageprovider_png.c
  head/devel/directfb/files/patch-tools-directfb-csource.c
  head/devel/directfb/files/patch-tools-mkdfiff.c
  head/devel/directfb/files/patch-tools-mkdgifft.cpp
Modified:
  head/devel/directfb/Makefile

Modified: head/devel/directfb/Makefile
==============================================================================
--- head/devel/directfb/Makefile	Wed Dec 24 11:59:18 2014	(r375442)
+++ head/devel/directfb/Makefile	Wed Dec 24 12:03:01 2014	(r375443)
@@ -29,6 +29,7 @@ USES=		gmake libtool ncurses pathfix per
 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

Added: head/devel/directfb/files/extra-libpng15
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/directfb/files/extra-libpng15	Wed Dec 24 12:03:01 2014	(r375443)
@@ -0,0 +1,244 @@
+From 83180b25e90721e717bf37c5332c22713508786e Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier at 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 at 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 at 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 at 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
+


More information about the svn-ports-head mailing list