Skip to content
Permalink
Browse files

metapixel: patch for libpng 1.5+

  • Loading branch information
chrstphrchvz authored and cjones051073 committed Apr 5, 2019
1 parent 10a9055 commit 1a3b6a78dbd211238468cb5f78edb71f7649be7c
Showing with 178 additions and 2 deletions.
  1. +3 −2 graphics/metapixel/Portfile
  2. +175 −0 graphics/metapixel/files/metapixel_1.0.2-libpng1.5.patch
@@ -4,7 +4,7 @@ PortSystem 1.0

name metapixel
version 1.0.2
revision 4
revision 5
categories graphics
platforms darwin
maintainers free.fr:fclaire
@@ -31,7 +31,8 @@ depends_lib port:jpeg \
port:giflib \
port:libpng

patchfiles patch-Makefile.diff \
patchfiles metapixel_1.0.2-libpng1.5.patch \
patch-Makefile.diff \
patch-rwimg-Makefile.diff

use_configure no
@@ -0,0 +1,175 @@
diff -u metapixel-1.0.2/debian/changelog metapixel-1.0.2/debian/changelog
--- rwimg/rwpng.c
+++ rwimg/rwpng.c
@@ -57,19 +57,39 @@
data->end_info = png_create_info_struct(data->png_ptr);
assert(data->end_info != 0);

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ if (setjmp(png_jmpbuf((data->png_ptr))))
+#else
if (setjmp(data->png_ptr->jmpbuf))
+#endif
assert(0);

- png_init_io(data->png_ptr, data->file);
-
+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ png_init_io(data->png_ptr, data->file);
+ png_read_info(data->png_ptr, data->info_ptr);
+#else
+ png_init_io(data->png_ptr, data->file);
png_read_info(data->png_ptr, data->info_ptr);
+#endif

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ *width = png_get_image_width(data->png_ptr, data->info_ptr);
+ *height = png_get_image_height(data->png_ptr, data->info_ptr);
+ {
+ png_byte value = png_get_bit_depth(data->png_ptr, data->info_ptr);
+ assert(value == 8 || value == 16);
+ value = png_get_color_type(data->png_ptr, data->info_ptr);
+ assert(value == PNG_COLOR_TYPE_RGB || value == PNG_COLOR_TYPE_RGB_ALPHA);
+ value = png_get_interlace_type(data->png_ptr, data->info_ptr);
+ assert(value == PNG_INTERLACE_NONE);
+ }
+#else
*width = data->info_ptr->width;
*height = data->info_ptr->height;
-
assert(data->info_ptr->bit_depth == 8 || data->info_ptr->bit_depth == 16);
assert(data->info_ptr->color_type == PNG_COLOR_TYPE_RGB || data->info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA);
assert(data->info_ptr->interlace_type == PNG_INTERLACE_NONE);
+#endif

data->have_read = 0;

@@ -81,32 +101,51 @@
{
png_data_t *data = (png_data_t*)_data;
int i;
- int bps, spp;
+ int bps, spp, width;
unsigned char *row;

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+
+ if (setjmp(png_jmpbuf((data->png_ptr))))
+#else
if (setjmp(data->png_ptr->jmpbuf))
+#endif
assert(0);

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ if(png_get_color_type(data->png_ptr, data->info_ptr) == PNG_COLOR_TYPE_RGB)
+#else
if (data->info_ptr->color_type == PNG_COLOR_TYPE_RGB)
+#endif
spp = 3;
else
spp = 4;

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ if(png_get_bit_depth(data->png_ptr, data->info_ptr) == 16)
+#else
if (data->info_ptr->bit_depth == 16)
+#endif
bps = 2;
else
bps = 1;

- row = (unsigned char*)malloc(data->info_ptr->width * spp * bps);
+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ width = png_get_image_width(data->png_ptr, data->info_ptr);
+#else
+ width = data->info_ptr->width:
+#endif
+
+ row = (unsigned char*)malloc(width * spp * bps);

for (i = 0; i < num_lines; ++i)
{
int j, channel;

png_read_row(data->png_ptr, (png_bytep)row, 0);
- for (j = 0; j < data->info_ptr->width; ++j)
+ for (j = 0; j < width; ++j)
for (channel = 0; channel < 3; ++channel)
- lines[i * data->info_ptr->width * 3 + j * 3 + channel] = row[j * spp * bps + channel * bps];
+ lines[i * width * 3 + j * 3 + channel] = row[j * spp * bps + channel * bps];
}

free(row);
@@ -119,7 +158,11 @@
{
png_data_t *data = (png_data_t*)_data;

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ if (setjmp(png_jmpbuf((data->png_ptr))))
+#else
if (setjmp(data->png_ptr->jmpbuf))
+#endif
assert(0);

if (data->have_read)
@@ -148,7 +191,11 @@
data->info_ptr = png_create_info_struct(data->png_ptr);
assert(data->info_ptr != 0);

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ if (setjmp(png_jmpbuf((data->png_ptr))))
+#else
if (setjmp(data->png_ptr->jmpbuf))
+#endif
assert(0);

if (pixel_stride == 4)
@@ -156,6 +203,16 @@

png_init_io(data->png_ptr, data->file);

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ png_set_IHDR(data->png_ptr, data->info_ptr,
+ width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
+ PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
+
+ /* Maybe does not need following. */
+ png_set_tRNS(data->png_ptr, data->info_ptr, NULL, 0, NULL);
+ png_set_PLTE(data->png_ptr, data->info_ptr, NULL, 0);
+ png_set_invalid(data->png_ptr, data->info_ptr, 0);
+#else
data->info_ptr->width = width;
data->info_ptr->height = height;
data->info_ptr->valid = 0;
@@ -168,6 +225,7 @@
data->info_ptr->compression_type = PNG_COMPRESSION_TYPE_DEFAULT;
data->info_ptr->filter_type = PNG_FILTER_TYPE_DEFAULT;
data->info_ptr->interlace_type = PNG_INTERLACE_NONE;
+#endif

png_write_info(data->png_ptr, data->info_ptr);

@@ -182,7 +240,11 @@
png_data_t *data = (png_data_t*)_data;
int i;

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ if (setjmp(png_jmpbuf((data->png_ptr))))
+#else
if (setjmp(data->png_ptr->jmpbuf))
+#endif
assert(0);

for (i = 0; i < num_lines; ++i)
@@ -194,7 +256,11 @@
{
png_data_t *data = (png_data_t*)_data;

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ if (setjmp(png_jmpbuf((data->png_ptr))))
+#else
if (setjmp(data->png_ptr->jmpbuf))
+#endif
assert(0);

png_write_end(data->png_ptr, data->info_ptr);

0 comments on commit 1a3b6a7

Please sign in to comment.
You can’t perform that action at this time.