Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37477730
en ru br
Репозитории ALT
S:1.1.0-alt7
5.1: 1.1.0-alt3
4.1: 1.1.0-alt2
4.0: 0.9.25.1-alt1
3.0: 0.9.21-alt1.20041024
www.altlinux.org/Changes

Другие репозитории
Upstream:1.1.1

Группа :: Система/Библиотеки
Пакет: directfb

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: directfb-1.1.0-libpng15.patch
Скачать


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/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c b/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c
index 2f01150..c07733a 100644
--- a/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c
+++ b/interfaces/IDirectFBImageProvider/idirectfbimageprovider_png.c
@@ -204,7 +204,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;
      }
@@ -331,7 +331,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)
@@ -350,6 +350,7 @@ IDirectFBImageProvider_PNG_RenderTo( IDirectFBImageProvider *thiz,
      /* actual rendering */
      if (dfb_rectangle_region_intersects( &rect, &clip )) {
           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, CSAF_CPU_WRITE, &lock );
           if (ret)
@@ -357,7 +358,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.
                           */
@@ -400,7 +401,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);
@@ -409,7 +410,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;
@@ -464,7 +465,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,
@@ -630,16 +631,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;
-               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;
@@ -649,7 +660,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;
@@ -661,20 +672,23 @@ png_info_callback( png_structp png_read_ptr,
           }
           else {
                /* ...or based on trans rgb value */
-               png_color_16p trans = &data->info_ptr->trans_values;
-
-               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;
-               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;
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin