summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuli Suominen <ssuominen@gentoo.org>2011-09-15 22:05:48 +0000
committerSamuli Suominen <ssuominen@gentoo.org>2011-09-15 22:05:48 +0000
commit0a1c4d70bd9f71a656dc39d66660331ae725e072 (patch)
treed2fafd6f935c1171bc6e5f0770e8036a70ab64a6 /media-gfx/xv
parentRevbump fixing bug #382879 and bug #383003, thanks to Lars Wendler. Remove old. (diff)
downloadgentoo-2-0a1c4d70bd9f71a656dc39d66660331ae725e072.tar.gz
gentoo-2-0a1c4d70bd9f71a656dc39d66660331ae725e072.tar.bz2
gentoo-2-0a1c4d70bd9f71a656dc39d66660331ae725e072.zip
Enchance -libpng15.patch by _AxS_ from Freenode with some bits also from NetBSD. Restore keywording as libpng15 is about to get unmasked and won't be held back by this package.
(Portage version: 2.2.0_alpha55/cvs/Linux x86_64)
Diffstat (limited to 'media-gfx/xv')
-rw-r--r--media-gfx/xv/ChangeLog8
-rw-r--r--media-gfx/xv/files/xv-3.10a-libpng15.patch334
-rw-r--r--media-gfx/xv/xv-3.10a-r16.ebuild8
3 files changed, 169 insertions, 181 deletions
diff --git a/media-gfx/xv/ChangeLog b/media-gfx/xv/ChangeLog
index e3eb935d031e..c8fc38c1457e 100644
--- a/media-gfx/xv/ChangeLog
+++ b/media-gfx/xv/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for media-gfx/xv
# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/media-gfx/xv/ChangeLog,v 1.104 2011/08/12 21:04:50 lavajoe Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-gfx/xv/ChangeLog,v 1.105 2011/09/15 22:05:48 ssuominen Exp $
+
+ 15 Sep 2011; Samuli Suominen <ssuominen@gentoo.org> xv-3.10a-r16.ebuild,
+ files/xv-3.10a-libpng15.patch:
+ Enchance -libpng15.patch by _AxS_ from Freenode with some bits also from
+ NetBSD. Restore keywording as libpng15 is about to get unmasked and PNG
+ saving is working fine here (see bug #355883)
12 Aug 2011; Joe Peterson <lavajoe@gentoo.org> xv-3.10a-r16.ebuild:
Mask xv-3.10a-r16, since it breaks saving PNG files (see bug #355883)
diff --git a/media-gfx/xv/files/xv-3.10a-libpng15.patch b/media-gfx/xv/files/xv-3.10a-libpng15.patch
index 94502c1528d2..43c51766839c 100644
--- a/media-gfx/xv/files/xv-3.10a-libpng15.patch
+++ b/media-gfx/xv/files/xv-3.10a-libpng15.patch
@@ -1,3 +1,14 @@
+--- xvinfo.c
++++ xvinfo.c
+@@ -26,7 +26,7 @@
+ #define INFOHIGH 270
+
+ /* max length of an Info String */
+-#define ISTRLEN 80
++#define ISTRLEN 256
+
+ /* baseline of top line of text */
+ #define TOPBASE (36 + penn_height/2 + 4 + 8 + ASCENT)
--- xvpng.c
+++ xvpng.c
@@ -31,6 +31,7 @@
@@ -8,41 +19,29 @@
#include "png.h"
/*** Stuff for PNG Dialog box ***/
-@@ -41,7 +42,7 @@
+@@ -41,7 +42,9 @@
#define COMPRESSION 6 /* default zlib compression level, not max
(Z_BEST_COMPRESSION) */
-#define HAVE_tRNS (info_ptr->valid & PNG_INFO_tRNS)
-+#define HAVE_tRNS (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
++/* old
++#define HAVE_tRNS (info_ptr->valid & PNG_INFO_tRNS) */
++#define HAVE_tRNS png_get_valid(png_ptr,info_ptr,PNG_INFO_tRNS)
#define DWIDE 86
#define DHIGH 104
-@@ -435,6 +436,16 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
- {
- png_struct *png_ptr;
- png_info *info_ptr;
-+ struct {
-+ /* IHDR */
-+ png_uint_32 width;
-+ png_uint_32 height;
-+ int bit_depth;
-+ int color_type;
-+ int interlace_type;
-+ /* PLTE */
-+ int use_palette;
-+ } info_tmp;
- png_color palette[256];
- png_textp text;
- byte r1[256], g1[256], b1[256]; /* storage for deduped palette */
-@@ -444,6 +455,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -444,6 +447,10 @@
byte *p, *png_line;
char software[256];
char *savecmnt;
-+ int num_text, max_text;
++ /* for storing values until all are accumulated, so that the image header can be set in full */
++ int _bit_depth,_color_type,_interlace_type,_compression_type,_filter_type;
++ png_uint_32 _width,_height;
++ png_time _mod_time;
if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL,
png_xv_error, png_xv_warning)) == NULL) {
-@@ -458,7 +470,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -458,7 +465,7 @@
FatalError(software);
}
@@ -51,54 +50,52 @@
png_destroy_write_struct(&png_ptr, &info_ptr);
return -1;
}
-@@ -489,8 +501,8 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -489,8 +496,8 @@
png_set_filter(png_ptr, 0, filter);
}
- info_ptr->width = w;
- info_ptr->height = h;
-+ info_tmp.width = w;
-+ info_tmp.height = h;
++ _width = w;
++ _height = h;
if (w <= 0 || h <= 0) {
SetISTR(ISTR_WARNING, "%s: image dimensions out of range (%dx%d)",
fbasename, w, h);
-@@ -498,7 +510,8 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -498,7 +505,7 @@
return -1;
}
- info_ptr->interlace_type = interCB.val ? 1 : 0;
-+ info_tmp.interlace_type =
-+ interCB.val ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE;
++ _interlace_type = interCB.val ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE;
linesize = 0; /* quiet a compiler warning */
-@@ -542,40 +555,40 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -542,40 +549,44 @@
png_destroy_write_struct(&png_ptr, &info_ptr);
return -1;
}
- info_ptr->color_type = PNG_COLOR_TYPE_RGB;
- info_ptr->bit_depth = 8;
-+ info_tmp.color_type = PNG_COLOR_TYPE_RGB;
-+ info_tmp.bit_depth = 8;
-+ info_tmp.use_palette = 0;
++ _color_type = PNG_COLOR_TYPE_RGB;
++ _bit_depth = 8;
} else /* ptype == PIC8 */ {
linesize = w;
- info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
-+ info_tmp.color_type = PNG_COLOR_TYPE_PALETTE;
++ _color_type = PNG_COLOR_TYPE_PALETTE;
if (numuniqcols <= 2)
- info_ptr->bit_depth = 1;
-+ info_tmp.bit_depth = 1;
++ _bit_depth = 1;
else
if (numuniqcols <= 4)
- info_ptr->bit_depth = 2;
-+ info_tmp.bit_depth = 2;
++ _bit_depth = 2;
else
if (numuniqcols <= 16)
- info_ptr->bit_depth = 4;
-+ info_tmp.bit_depth = 4;
++ _bit_depth = 4;
else
- info_ptr->bit_depth = 8;
-+ info_tmp.bit_depth = 8;
++ _bit_depth = 8;
for (i = 0; i < numuniqcols; i++) {
palette[i].red = r1[i];
@@ -107,106 +104,93 @@
}
- info_ptr->num_palette = numuniqcols;
- info_ptr->palette = palette;
-- info_ptr->valid |= PNG_INFO_PLTE;
-+ info_tmp.use_palette = 1;
++/* cannot find a setter for this, unsure if it is necessary anymore...
+ info_ptr->valid |= PNG_INFO_PLTE;
++*/
++ /* set the header just in case it's needed */
++ png_set_IHDR(png_ptr,info_ptr,_width,_height,_bit_depth,_color_type,
++ _interlace_type,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
++ png_set_PLTE(png_ptr,info_ptr,palette,numuniqcols);
}
}
else if (colorType == F_GREYSCALE || colorType == F_BWDITHER) {
- info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
-+ info_tmp.color_type = PNG_COLOR_TYPE_GRAY;
-+ info_tmp.use_palette = 0;
++ _color_type = PNG_COLOR_TYPE_GRAY;
if (colorType == F_BWDITHER) {
/* shouldn't happen */
if (ptype == PIC24) FatalError("PIC24 and B/W Stipple in WritePNG()");
- info_ptr->bit_depth = 1;
-+ info_tmp.bit_depth = 1;
++ _bit_depth = 1;
if (MONO(r1[0], g1[0], b1[0]) > MONO(r1[1], g1[1], b1[1])) {
remap[0] = 1;
remap[1] = 0;
-@@ -595,7 +608,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -595,7 +606,7 @@
png_destroy_write_struct(&png_ptr, &info_ptr);
return -1;
}
- info_ptr->bit_depth = 8;
-+ info_tmp.bit_depth = 8;
++ _bit_depth = 8;
}
else /* ptype == PIC8 */ {
int low_precision;
-@@ -617,7 +630,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -617,7 +628,7 @@
for (; i < 256; i++)
remap[i]=0; /* shouldn't be necessary, but... */
- info_ptr->bit_depth = 8;
-+ info_tmp.bit_depth = 8;
++ _bit_depth = 8;
/* Note that this fails most of the time because of gamma */
/* (and that would be a bug: GRR FIXME) */
-@@ -636,7 +649,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -636,7 +647,7 @@
for (i = 0; i < numuniqcols; i++) {
remap[i] &= 0xf;
}
- info_ptr->bit_depth = 4;
-+ info_tmp.bit_depth = 4;
++ _bit_depth = 4;
/* try to adjust to 2-bit precision grayscale */
-@@ -652,7 +665,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -652,7 +663,7 @@
for (i = 0; i < numuniqcols; i++) {
remap[i] &= 3;
}
- info_ptr->bit_depth = 2;
-+ info_tmp.bit_depth = 2;
++ _bit_depth = 2;
/* try to adjust to 1-bit precision grayscale */
-@@ -668,7 +681,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -668,7 +679,7 @@
for (i = 0; i < numuniqcols; i++) {
remap[i] &= 1;
}
- info_ptr->bit_depth = 1;
-+ info_tmp.bit_depth = 1;
++ _bit_depth = 1;
}
}
}
-@@ -677,6 +690,20 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -677,6 +688,9 @@
else
png_error(png_ptr, "Unknown colorstyle in WritePNG");
-+ png_set_IHDR(png_ptr, info_ptr,
-+ info_tmp.width, info_tmp.height,
-+ info_tmp.bit_depth, info_tmp.color_type,
-+ info_tmp.interlace_type, PNG_COMPRESSION_TYPE_BASE,
-+ PNG_FILTER_TYPE_BASE);
-+ if (info_tmp.use_palette) {
-+ /*
-+ * info_ptr->num_palette = numuniqcols;
-+ * info_ptr->palette = palette;
-+ * info_ptr->valid |= PNG_INFO_PLTE;
-+ */
-+ png_set_PLTE(png_ptr, info_ptr, palette, numuniqcols);
-+ }
++ png_set_IHDR(png_ptr,info_ptr,_width,_height,_bit_depth,_color_type,
++ _interlace_type,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
+
if ((text = (png_textp)malloc(sizeof(png_text)))) {
sprintf(software, "XV %s", REVDATE);
-@@ -684,21 +711,29 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
- text->key = "Software";
+@@ -685,20 +699,22 @@
text->text = software;
text->text_length = strlen(text->text);
-+ text->lang = NULL;
- info_ptr->max_text = 1;
- info_ptr->num_text = 1;
- info_ptr->text = text;
-+ /*
-+ * info_ptr->max_text = 1;
-+ * info_ptr->num_text = 1;
-+ * info_ptr->text = text;
-+ */
-+ png_set_text(png_ptr, info_ptr, text, 1);
-+ num_text = max_text = 1;
++/* max_text seems to be internal only now, do not set
++ info_ptr->max_text = 1; */
++ png_set_text(png_ptr,info_ptr,text,1);
}
Display_Gamma = gDial.val; /* Save the current gamma for loading */
@@ -214,54 +198,58 @@
// GRR FIXME: add .Xdefaults option to omit writing gamma (size, cumulative errors when editing)--alternatively, modify save box to include "omit" checkbox
- info_ptr->gamma = 1.0/gDial.val;
- info_ptr->valid |= PNG_INFO_gAMA;
-+ /*
-+ * info_ptr->gamma = 1.0/gDial.val;
-+ * info_ptr->valid |= PNG_INFO_gAMA;
-+ */
-+ png_set_gAMA(png_ptr, info_ptr, 1.0/gDial.val);
++ png_set_gAMA(png_ptr,info_ptr,1.0/gDial.val);
++/* doesn't seem to be a way to set valid directly anymore, unnecessary maybe..
++ info_ptr->valid |= PNG_INFO_gAMA; */
++/* might need to be png_write_info_before_PLTE() ... */
png_write_info(png_ptr, info_ptr);
- if (info_ptr->bit_depth < 8)
-+ if (info_tmp.bit_depth < 8)
++ if (_bit_depth < 8)
png_set_packing(png_ptr);
pass=png_set_interlace_handling(png_ptr);
-@@ -711,13 +746,13 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -711,13 +727,13 @@
int j;
p = pic;
for (j = 0; j < h; ++j) {
- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY) {
-+ if (info_tmp.color_type == PNG_COLOR_TYPE_GRAY) {
++ if (_color_type == PNG_COLOR_TYPE_GRAY) {
int k;
for (k = 0; k < w; ++k)
png_line[k] = ptype==PIC24 ? MONO(p[k*3], p[k*3+1], p[k*3+2]) :
remap[pc2nc[p[k]]];
png_write_row(png_ptr, png_line);
- } else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) {
-+ } else if (info_tmp.color_type == PNG_COLOR_TYPE_PALETTE) {
++ } else if (_color_type == PNG_COLOR_TYPE_PALETTE) {
int k;
for (k = 0; k < w; ++k)
png_line[k] = pc2nc[p[k]];
-@@ -743,24 +778,26 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -739,28 +755,31 @@
+ (savecmnt = (char *)malloc((strlen(picComments) + 1)*sizeof(char)))) {
+ png_textp tp;
+ char *comment, *key;
++ int nt;
++ int mt;
+
strcpy(savecmnt, picComments);
key = savecmnt;
++ png_get_text(png_ptr,info_ptr,&tp,&mt); /* to get 'max_text' */
tp = text;
- info_ptr->num_text = 0;
-+
-+ png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1);
-+ num_text = 0;
++ nt = 0;
comment = strchr(key, ':');
do {
/* Allocate a larger structure for comments if necessary */
- if (info_ptr->num_text >= info_ptr->max_text)
-+ if (num_text >= max_text)
++ if (nt >= mt)
{
if ((tp =
- realloc(text, (info_ptr->num_text + 2)*sizeof(png_text))) == NULL)
-+ realloc(text, (num_text + 2)*sizeof(png_text))) == NULL)
++ realloc(text, (nt + 2)*sizeof(png_text))) == NULL)
{
break;
}
@@ -270,46 +258,44 @@
text = tp;
- tp = &text[info_ptr->num_text];
- info_ptr->max_text += 2;
-+ tp = &text[num_text];
-+ max_text += 2;
++ tp = &text[nt];
++ mt += 2;
}
}
-@@ -810,7 +847,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -810,7 +829,7 @@
}
tp->compression = tp->text_length > 640 ? 0 : -1;
- info_ptr->num_text++;
-+ num_text++;
++ nt++;
tp++;
}
}
-@@ -834,27 +871,29 @@ int WritePNG(fp, pic, ptype, w, h, rmap,
+@@ -834,27 +853,29 @@
tp->text = key;
tp->text_length = q - key;
tp->compression = tp->text_length > 750 ? 0 : -1;
- info_ptr->num_text++;
-+ num_text++;
++ nt++;
key = NULL;
}
} while (key && *key);
-+ png_set_text(png_ptr, info_ptr, text, num_text);
++ png_set_text(png_ptr,info_ptr,text,nt);
}
else {
- info_ptr->num_text = 0;
-+ png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1);
++ png_set_text(png_ptr,info_ptr,text,0);
}
}
- info_ptr->text = text;
- png_convert_from_time_t(&(info_ptr->mod_time), time(NULL));
- info_ptr->valid |= PNG_INFO_tIME;
-+ {
-+ png_time mod_time;
-+
-+ png_convert_from_time_t(&mod_time, time(NULL));
-+ png_set_tIME(png_ptr, info_ptr, &mod_time);
-+ }
++ png_convert_from_time_t(&_mod_time, time(NULL));
++ png_set_tIME(png_ptr,info_ptr,&_mod_time);
++/* dunno how to set validity
++ info_ptr->valid |= PNG_INFO_tIME; */
png_write_end(png_ptr, info_ptr);
fflush(fp); /* just in case we core-dump before finishing... */
@@ -318,19 +304,27 @@
free(text);
- /* must do this or png_destroy_write_struct() 0.97+ will free text again: */
- info_ptr->text = (png_textp)NULL;
++ /* must do this or png_destroy_write_struct() 0.97+ will free text again:
++ info_ptr->text = (png_textp)NULL; */
if (savecmnt)
{
free(savecmnt);
-@@ -886,6 +925,8 @@ int LoadPNG(fname, pinfo)
+@@ -886,6 +907,14 @@
int pass;
int gray_to_rgb;
size_t commentsize;
-+ png_textp text;
-+ int num_text;
++ /* temp storage vars for libpng15 migration */
++ int _bit_depth,_color_type,_interlace_type,_compression_type,_filter_type,_num_text,_num_palette;
++ png_uint_32 _width,_height;
++ png_timep _mod_time;
++ double _gamma;
++ png_textp _text;
++ png_colorp _palette;
++ png_color_16p _background;
fbasename = BaseName(fname);
-@@ -921,7 +962,7 @@ int LoadPNG(fname, pinfo)
+@@ -921,7 +950,7 @@
FatalError("malloc failure in LoadPNG");
}
@@ -339,178 +333,166 @@
fclose(fp);
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
if (!read_anything) {
-@@ -945,8 +986,8 @@ int LoadPNG(fname, pinfo)
+@@ -945,8 +974,10 @@
#endif
png_read_info(png_ptr, info_ptr);
- pinfo->w = pinfo->normw = info_ptr->width;
- pinfo->h = pinfo->normh = info_ptr->height;
-+ pinfo->w = pinfo->normw = png_get_image_width(png_ptr, info_ptr);
-+ pinfo->h = pinfo->normh = png_get_image_height(png_ptr, info_ptr);
++ png_get_IHDR(png_ptr,info_ptr,&_width,&_height,&_bit_depth,&_color_type,&_interlace_type,NULL,NULL);
++
++ pinfo->w = pinfo->normw = _width;
++ pinfo->h = pinfo->normh = _height;
if (pinfo->w <= 0 || pinfo->h <= 0) {
SetISTR(ISTR_WARNING, "%s: image dimensions out of range (%dx%d)",
fbasename, pinfo->w, pinfo->h);
-@@ -957,9 +998,9 @@ int LoadPNG(fname, pinfo)
+@@ -957,9 +988,9 @@
pinfo->frmType = F_PNG;
sprintf(pinfo->fullInfo, "PNG, %d bit ",
- info_ptr->bit_depth * info_ptr->channels);
-+ png_get_bit_depth(png_ptr,info_ptr) * png_get_channels(png_ptr, info_ptr));
++ _bit_depth * png_get_channels(png_ptr,info_ptr));
- switch(info_ptr->color_type) {
-+ switch(png_get_color_type(png_ptr, info_ptr)) {
++ switch(_color_type) {
case PNG_COLOR_TYPE_PALETTE:
strcat(pinfo->fullInfo, "palette color");
break;
-@@ -983,15 +1024,20 @@ int LoadPNG(fname, pinfo)
+@@ -983,15 +1014,17 @@
sprintf(pinfo->fullInfo + strlen(pinfo->fullInfo),
", %sinterlaced. (%d bytes)",
- info_ptr->interlace_type ? "" : "non-", filesize);
-+ png_get_interlace_type(png_ptr, info_ptr) ? "" : "non-", filesize);
++ _interlace_type ? "" : "non-", filesize);
- sprintf(pinfo->shrtInfo, "%lux%lu PNG", info_ptr->width, info_ptr->height);
-+ sprintf(pinfo->shrtInfo, "%lux%lu PNG",
-+ png_get_image_width(png_ptr, info_ptr),
-+ png_get_image_height(png_ptr, info_ptr));
++ sprintf(pinfo->shrtInfo, "%lux%lu PNG", _width, _height);
- if (info_ptr->bit_depth < 8)
-+ if (png_get_bit_depth(png_ptr, info_ptr) < 8)
++ if (_bit_depth < 8)
png_set_packing(png_ptr);
- if (info_ptr->valid & PNG_INFO_gAMA)
- png_set_gamma(png_ptr, Display_Gamma, info_ptr->gamma);
-+ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_gAMA)) {
-+ double gamma;
-+ png_get_gAMA(png_ptr, info_ptr, &gamma);
-+ png_set_gamma(png_ptr, Display_Gamma, gamma);
++ if (png_get_valid(png_ptr,info_ptr,PNG_INFO_gAMA)) {
++ png_get_gAMA(png_ptr,info_ptr,&_gamma);
++ png_set_gamma(png_ptr, Display_Gamma, _gamma);
+ }
/*
*else
* png_set_gamma(png_ptr, Display_Gamma, 0.45);
-@@ -1000,7 +1046,7 @@ int LoadPNG(fname, pinfo)
+@@ -1000,7 +1033,7 @@
gray_to_rgb = 0; /* quiet a compiler warning */
if (have_imagebg) {
- if (info_ptr->bit_depth == 16) {
-+ if (png_get_bit_depth(png_ptr, info_ptr) == 16) {
++ if (_bit_depth == 16) {
my_background.red = imagebgR;
my_background.green = imagebgG;
my_background.blue = imagebgB;
-@@ -1013,8 +1059,8 @@ int LoadPNG(fname, pinfo)
+@@ -1013,8 +1046,8 @@
}
png_set_background(png_ptr, &my_background, PNG_BACKGROUND_GAMMA_SCREEN,
0, Display_Gamma);
- if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
- (info_ptr->color_type == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) &&
-+ if ((png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA ||
-+ (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) &&
++ if ((_color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
++ (_color_type == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) &&
(imagebgR != imagebgG || imagebgR != imagebgB)) /* i.e., colored bg */
{
png_set_gray_to_rgb(png_ptr);
-@@ -1022,8 +1068,10 @@ int LoadPNG(fname, pinfo)
+@@ -1022,8 +1055,9 @@
gray_to_rgb = 1;
}
} else {
- if (info_ptr->valid & PNG_INFO_bKGD) {
- png_set_background(png_ptr, &info_ptr->background,
-+ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_bKGD)) {
-+ png_color_16p background;
-+ png_get_bKGD(png_ptr, info_ptr, &background);
-+ png_set_background(png_ptr, background,
++ if (png_get_valid(png_ptr,info_ptr,PNG_INFO_bKGD)) {
++ png_get_bKGD(png_ptr,info_ptr,&_background);
++ png_set_background(png_ptr, _background,
PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
} else {
my_background.red = my_background.green = my_background.blue =
-@@ -1033,13 +1081,13 @@ int LoadPNG(fname, pinfo)
+@@ -1033,13 +1067,13 @@
}
}
- if (info_ptr->bit_depth == 16)
-+ if (png_get_bit_depth(png_ptr, info_ptr) == 16)
++ if (_bit_depth == 16)
png_set_strip_16(png_ptr);
- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
- info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-+ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY ||
-+ png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA)
++ if (_color_type == PNG_COLOR_TYPE_GRAY ||
++ _color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
{
- if (info_ptr->bit_depth == 1)
-+ if (png_get_bit_depth(png_ptr, info_ptr) == 1)
++ if (_bit_depth == 1)
pinfo->colType = F_BWDITHER;
else
pinfo->colType = F_GREYSCALE;
-@@ -1050,8 +1098,8 @@ int LoadPNG(fname, pinfo)
+@@ -1049,9 +1083,11 @@
+ pass=png_set_interlace_handling(png_ptr);
png_read_update_info(png_ptr, info_ptr);
++ /* get HIDR again just in case the info_ptr changed */
++ png_get_IHDR(png_ptr,info_ptr,&_width,&_height,&_bit_depth,&_color_type,&_interlace_type,NULL,NULL);
- if (info_ptr->color_type == PNG_COLOR_TYPE_RGB ||
- info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb)
-+ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB ||
-+ png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb)
++ if (_color_type == PNG_COLOR_TYPE_RGB ||
++ _color_type == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb)
{
linesize = 3 * pinfo->w;
if (linesize/3 < pinfo->w) { /* know pinfo->w > 0 (see above) */
-@@ -1065,16 +1113,20 @@ int LoadPNG(fname, pinfo)
+@@ -1065,16 +1101,17 @@
} else {
linesize = pinfo->w;
pinfo->type = PIC8;
- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
- info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
-+ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY ||
-+ png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA) {
++ if (_color_type == PNG_COLOR_TYPE_GRAY ||
++ _color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
for (i = 0; i < 256; i++)
pinfo->r[i] = pinfo->g[i] = pinfo->b[i] = i;
} else {
-+ png_colorp palette;
-+ int num_palette;
-+
-+ png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette);
pinfo->colType = F_FULLCOLOR;
- for (i = 0; i < info_ptr->num_palette; i++) {
- pinfo->r[i] = info_ptr->palette[i].red;
- pinfo->g[i] = info_ptr->palette[i].green;
- pinfo->b[i] = info_ptr->palette[i].blue;
-+ for (i = 0; i < num_palette; i++) {
-+ pinfo->r[i] = palette[i].red;
-+ pinfo->g[i] = palette[i].green;
-+ pinfo->b[i] = palette[i].blue;
++ png_get_PLTE(png_ptr,info_ptr,&_palette,&_num_palette);
++ for (i = 0; i < _num_palette; i++) {
++ pinfo->r[i] = _palette[i].red;
++ pinfo->g[i] = _palette[i].green;
++ pinfo->b[i] = _palette[i].blue;
}
}
}
-@@ -1092,7 +1144,17 @@ int LoadPNG(fname, pinfo)
+@@ -1092,7 +1129,7 @@
png_error(png_ptr, "can't allocate space for PNG image");
}
- png_start_read_image(png_ptr);
-+ /*
-+ * In png 1.5 (or at least 1.5.1beta06) calling this after calling
-+ * png_read_update_info() does nothing besides issue a misleading
-+ * warning message. The png docs are not at all clear on what an
-+ * application is *supposed* to do, so I'm not sure if this is a
-+ * problem with xv or with libpng. However, for now I'll comment
-+ * this out as according to the png source that should be harmless
-+ * and we don't want to see the warning message every time someone
-+ * opens a png.
-+ */
-+ /*png_start_read_image(png_ptr);*/
++ /*png_start_read_image(png_ptr); -- causes a warning and seems to be unnecessary */
for (i = 0; i < pass; i++) {
byte *p = pinfo->pic;
-@@ -1106,22 +1168,23 @@ int LoadPNG(fname, pinfo)
+@@ -1106,22 +1143,23 @@
png_read_end(png_ptr, info_ptr);
- if (info_ptr->num_text > 0) {
-+ png_get_text(png_ptr, info_ptr, &text, &num_text);
-+ if (num_text > 0) {
++ png_get_text(png_ptr,info_ptr,&_text,&_num_text);
++ if (_num_text > 0) {
commentsize = 1;
- for (i = 0; i < info_ptr->num_text; i++)
- commentsize += strlen(info_ptr->text[i].key) + 1 +
- info_ptr->text[i].text_length + 2;
-+ for (i = 0; i < num_text; i++)
-+ commentsize += strlen(text[i].key) + 1 +
-+ text[i].text_length + 2;
++ for (i = 0; i < _num_text; i++)
++ commentsize += strlen(_text[i].key) + 1 +
++ _text[i].text_length + 2;
if ((pinfo->comment = malloc(commentsize)) == NULL) {
png_warning(png_ptr,"can't allocate comment string");
@@ -519,15 +501,15 @@
pinfo->comment[0] = '\0';
- for (i = 0; i < info_ptr->num_text; i++) {
- strcat(pinfo->comment, info_ptr->text[i].key);
-+ for (i = 0; i < num_text; i++) {
-+ strcat(pinfo->comment, text[i].key);
++ for (i = 0; i < _num_text; i++) {
++ strcat(pinfo->comment, _text[i].key);
strcat(pinfo->comment, "::");
- strcat(pinfo->comment, info_ptr->text[i].text);
-+ strcat(pinfo->comment, text[i].text);
++ strcat(pinfo->comment, _text[i].text);
strcat(pinfo->comment, "\n");
}
}
-@@ -1143,7 +1206,7 @@ png_xv_error(png_ptr, message)
+@@ -1143,7 +1181,7 @@
{
SetISTR(ISTR_WARNING,"%s: libpng error: %s", fbasename, message);
diff --git a/media-gfx/xv/xv-3.10a-r16.ebuild b/media-gfx/xv/xv-3.10a-r16.ebuild
index 866900b22b4c..65af48a69fc4 100644
--- a/media-gfx/xv/xv-3.10a-r16.ebuild
+++ b/media-gfx/xv/xv-3.10a-r16.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/media-gfx/xv/xv-3.10a-r16.ebuild,v 1.2 2011/08/12 21:04:50 lavajoe Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-gfx/xv/xv-3.10a-r16.ebuild,v 1.3 2011/09/15 22:05:48 ssuominen Exp $
EAPI=2
inherit eutils flag-o-matic
@@ -12,13 +12,13 @@ SRC_URI="mirror://sourceforge/png-mng/${P}-jumbo-patches-${JUMBOV}.tar.gz ftp://
LICENSE="xv"
SLOT="0"
-#KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
IUSE="jpeg tiff png"
DEPEND="x11-libs/libXt
jpeg? ( virtual/jpeg )
- tiff? ( >=media-libs/tiff-3.6.1-r2 )
- png? ( >=media-libs/libpng-1.2 >=sys-libs/zlib-1.1.4 )"
+ tiff? ( media-libs/tiff )
+ png? ( >=media-libs/libpng-1.4 sys-libs/zlib )"
RDEPEND="${DEPEND}"
src_prepare() {