summaryrefslogtreecommitdiff
path: root/graphics/exact-image/exact-image-libpng15.patch
blob: ba9df19e81c4339dadee5dbafe69f3704b933e63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Description: Fix FTBFS with libpng 1.5
Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Approved: Ralf Treinen <treinen@debian.org>
Bug-Debian: #635745

--- exactimage-0.8.5.orig/codecs/png.cc
+++ exactimage-0.8.5/codecs/png.cc
@@ -17,6 +17,7 @@
 
 #include <stdlib.h>
 #include <png.h>
+#include <zlib.h>
 
 #include <iostream>
 
@@ -58,7 +59,7 @@ int PNGCodec::readImage (std::istream* s
   png_structp png_ptr;
   png_infop info_ptr;
   png_uint_32 width, height;
-  int bit_depth, color_type, interlace_type;
+  int bit_depth, color_type, interlace_type, num_trans;
   
   png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
 				   NULL /*user_error_ptr*/,
@@ -71,7 +72,7 @@ int PNGCodec::readImage (std::istream* s
   /* Allocate/initialize the memory for image information.  REQUIRED. */
   info_ptr = png_create_info_struct(png_ptr);
   if (info_ptr == NULL) {
-    png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
+    png_destroy_read_struct(&png_ptr, NULL, NULL);
     return 0;
   }
   
@@ -82,7 +83,7 @@ int PNGCodec::readImage (std::istream* s
   
   if (setjmp(png_jmpbuf(png_ptr))) {
     /* Free all of the memory associated with the png_ptr and info_ptr */
-    png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);
+    png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
     /* If we get here, we had a problem reading the file */
     return 0;
   }
@@ -99,13 +100,13 @@ int PNGCodec::readImage (std::istream* s
   png_read_info (png_ptr, info_ptr);
   
   png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
-		&interlace_type, int_p_NULL, int_p_NULL);
+		&interlace_type, NULL, NULL);
   
   image.w = width;
   image.h = height;
   image.bps = bit_depth;
-  image.spp = info_ptr->channels;
-  
+  image.spp = png_get_channels(png_ptr, info_ptr);
+
   png_uint_32 res_x, res_y;
   res_x = png_get_x_pixels_per_meter(png_ptr, info_ptr);
   res_y = png_get_y_pixels_per_meter(png_ptr, info_ptr);
@@ -119,11 +120,13 @@ int PNGCodec::readImage (std::istream* s
    * (not useful if you are using png_set_packing). */
   // png_set_packswap(png_ptr);
 
+  png_get_tRNS(png_ptr, info_ptr, NULL, &num_trans, NULL);
+
   /* Expand paletted colors into true RGB triplets */
   if (color_type == PNG_COLOR_TYPE_PALETTE) {
     png_set_palette_to_rgb(png_ptr);
     image.bps = 8;
-    if (info_ptr->num_trans)
+    if (num_trans)
       image.spp = 4;
     else
       image.spp = 3;
@@ -196,11 +199,11 @@ int PNGCodec::readImage (std::istream* s
   for (int pass = 0; pass < number_passes; ++pass)
     for (unsigned int y = 0; y < height; ++y) {
       row_pointers[0] = image.getRawData() + y * stride;
-      png_read_rows(png_ptr, row_pointers, png_bytepp_NULL, 1);
+      png_read_rows(png_ptr, row_pointers, NULL, 1);
     }
   
   /* clean up after the read, and free any memory allocated - REQUIRED */
-  png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);
+  png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
   
   /* that's it */
   return true;
@@ -224,7 +227,7 @@ bool PNGCodec::writeImage (std::ostream*
   /* Allocate/initialize the memory for image information.  REQUIRED. */
   info_ptr = png_create_info_struct(png_ptr);
   if (info_ptr == NULL) {
-    png_destroy_write_struct(&png_ptr, png_infopp_NULL);
+    png_destroy_write_struct(&png_ptr, NULL);
     return false;
   }
   
@@ -244,8 +247,10 @@ bool PNGCodec::writeImage (std::ostream*
   else if (quality > Z_BEST_COMPRESSION) quality = Z_BEST_COMPRESSION;
   png_set_compression_level(png_ptr, quality);
   
+  /* Need?
   png_info_init (info_ptr);
-  
+  */
+
   /* Set up our STL stream output control */ 
   png_set_write_fn (png_ptr, stream, &stdstream_write_data, &stdstream_flush_data);