Backport upstream changes to move from libvpx to libwebp #545956 by Paweł Hajdan...
authorMike Frysinger <vapier@gentoo.org>
Thu, 9 Apr 2015 05:37:21 +0000 (05:37 +0000)
committerMike Frysinger <vapier@gentoo.org>
Thu, 9 Apr 2015 05:37:21 +0000 (05:37 +0000)
Package-Manager: portage-2.2.18/cvs/Linux x86_64
Manifest-Sign-Key: 0xD2E96200

media-libs/gd/ChangeLog
media-libs/gd/Manifest
media-libs/gd/files/gd-2.1.1-webp-pre.patch [new file with mode: 0644]
media-libs/gd/files/gd-2.1.1-webp.patch [new file with mode: 0644]
media-libs/gd/gd-2.1.1-r1.ebuild [new file with mode: 0644]

index 986015b5528c225256b45cd6351f71fe621f7264..ae5d957685faacb11ede139c25b42b58bb92d82a 100644 (file)
@@ -1,6 +1,14 @@
 # ChangeLog for media-libs/gd
 # Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/media-libs/gd/ChangeLog,v 1.108 2015/04/09 05:36:35 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-libs/gd/ChangeLog,v 1.109 2015/04/09 05:37:20 vapier Exp $
+
+*gd-2.1.1-r1 (09 Apr 2015)
+
+  09 Apr 2015; Mike Frysinger <vapier@gentoo.org>
+  +files/gd-2.1.1-webp-pre.patch, +files/gd-2.1.1-webp.patch,
+  +gd-2.1.1-r1.ebuild:
+  Backport upstream changes to move from libvpx to libwebp #545956 by Paweł
+  Hajdan, Jr..
 
   08 Apr 2005; Mike Frysinger <vapier@gentoo.org> gd-2.1.1.ebuild:
   Force older version of libvpx as the API has changed #545956 by Paweł Hajdan,
index 9583e07ce1bedecbfc4aa78ff0fde0549d99b5ee..5906f41121c8588b3ebacc7c213501daed4d7f81 100644 (file)
@@ -6,17 +6,30 @@ AUX gd-2.0.35-libpng-pkg-config.patch 4240 SHA256 26c4f66f6e74de830ab5c7276502e6
 AUX gd-2.0.35-libpng14.patch 347 SHA256 b9f5e121ae652e211c866e1982bc6c37303d43b2a3df420be7069ca5fbb04bc4 SHA512 3ef9e82c09244512b4761a2ab669ae864b822344febfe203fb121cb43b7f99a933c7d5b44aea8b2d8a638010f5280a3ed2ac9d1ea526b25ad6f3d26b2586ba3d WHIRLPOOL 96df4515905928773542c7e3f4e9c3acdccd397b4e832973f33c6d45ab135f8798e3118be04d452da31d0f42e07ae4322efd720d264076fbe81020288ee6425e
 AUX gd-2.0.35-maxcolors.patch 348 SHA256 c5dbbc7c1acd9e602fea8bf893333ca6258e7801761b6c899c7da62cd88cbc3b SHA512 c6474c9b2c3ad80d1a0fc8a345c4dbe86c51a73db3534c690a5d5e255ac6f20b474537f4f84aa8f083fc475a57b4bf0916f2d3120e94066f7729113355ee6aad WHIRLPOOL cd110bcca79501834890d80e19623f8e40dc2ed9fd49aac7109a30cbc9a966347c40502decb922b737acaf5c16a83c64f29e2215498596a419998bb5e6afd8f7
 AUX gd-2.1.1-headers.patch 806 SHA256 6d148f2322398204842b8e2b212130ab91fd3a2402e780b6de0cf5f943ccab7b SHA512 b82bdd717bf7fa2b774331b5ea376252020775132ed124bc4a58873dd3a78e250d4c22c740eff0b10483e102d1521227705a1d2fda476eb9e8388df17a30fc2e WHIRLPOOL b3a46e253b24a34298b94ae7a88fbb23da0e257a184782e20ea657c48935c4457fb302ee2a27c4527d55ec1a81d3e345947198ee8cb53cdc6629ad3a44ad8610
+AUX gd-2.1.1-webp-pre.patch 728 SHA256 61dbf326558ee9591227c8d89006acabd286920dd1ba3ef8d23a7310f8e28b14 SHA512 10ea9828e69a8aa9d8d8eb8f5882c33ca9b345a311da45a16652eeb0d2df0fcbd31a540f64b938d779ddc906489b74940a6040db9b2d81a18c02a4b745d42bc8 WHIRLPOOL 2b60d70eba71d8435d5c3b8aea0405c8317ccdfac81457757b0bf0362ab9fe12b205a84c4ccff8cf183a99c2e4a54c4320b1c237c9213c6908c0aeabdd4fa6f2
+AUX gd-2.1.1-webp.patch 10507 SHA256 42bee351091e741c6b14381c76aacbe15434b0aae84a40c8e09f92b19fc28074 SHA512 249e1ef0488b038047a6c59aa4aea727a27b7fe4a18d5ec41786feba494044370a57d82c7423bf1dd8a257e12c927bfbc4d94ce68e15505b72d14f960e563a94 WHIRLPOOL 95b733c7ef7c88449efe866fffcc55cc9708aca824f8ebac55f588a1cb95c47281d343624a97d596df1bdd2cb41b2980e02dbe79f34ca37f0d2835078c2d2fb1
 DIST gd-2.0.35.tar.bz2 1212730 SHA256 bf222490749d2a9a9ac3593b01eb55aed98461ff81202414707f61b42aa300f9 SHA512 eef8150adc040bed920155337211864a41ae3c4532e852ad443a3a3b9ffdc7fd3130698041b7b19b0b1207e78a80c263c6da26eba7208cdeeff78283c7d0d281 WHIRLPOOL 9eca23a184106652ef5c19ee3b5c18e23d742e21103c66907bf829910b95aa92eea7620c5579bf493c14730bc0327a4d662ffaf9bf9a5538127b8c10cc9c6b84
 DIST libgd-2.1.1.tar.xz 2039132 SHA256 9ada1ed45594abc998ebc942cef12b032fbad672e73efc22bc9ff54f5df2b285 SHA512 48f444402a4b89e412870f9091b92eb26136c5c0d795722262ad973c7d4103476204a2de36133a2634b8f410d6bccdcf60afb829a74ac2fddfb96aff2cd2567b WHIRLPOOL a38cf1f060db35d247b54038e731484e6230cd8a9da263a8c4823aaf6b3ce455c0747bbbde60f131d85a48340e39a5c8d6273fa51366cbe2436530520211a238
 EBUILD gd-2.0.35-r3.ebuild 2178 SHA256 ed123dac454522595faf717457793cab4b5ded7fb461612c0833863bef2313c9 SHA512 179fcb75f4d62e3b6fa025d5ed660698bf677628cd6f14b28a9626f3f79bb3afb18ac60765e46e8a07cc9c149d7c63583ada89bc14bc7cf0b4ef109262614432 WHIRLPOOL 0d419bf2fdd0e00a38d95079eeda90f4300a59f21cfaa2efa766d56a1545acbf81838937d7aabd520108bbf9e5db57f0e28330d3d903372bafad1a73b52a7e1d
 EBUILD gd-2.0.35-r4.ebuild 3571 SHA256 f6e1d679a6f1a979fe22a15fca524dea81c56695af7c7f35eff4a17056318978 SHA512 d361e7599cfe9cb0f03e2bace75d21cbfd0c603542ed425a2de1f90fdd35b31436ffb814e826488f32d596bdc9e2ea53dbd0cee87eb0b3a90110f6dc55710351 WHIRLPOOL e69170a5f0978a0c10e14dd27ff0daad3644e23f9f71f1f46eee4e76514873f8e261145ec254434f426c713ce49ac7018c9626e3aa4ee36b4017e9b0105a4041
-EBUILD gd-2.1.1.ebuild 2081 SHA256 adc8845ff59150f7f4881d5a9ffb22adb6f6fba84d15b72fefadad197e994818 SHA512 532e05fba38eb50825774b7c38a9a20c9f43590b6e21584bbeb5f2ae00ca055cb3c2d34ab14463088507089bf71d447984690ce53ab5fd6aec1489fb9e5ed27b WHIRLPOOL 0c00ae721c3abba910a5d32a419008f881a9e0759cd9daed2a5e417511c2d1ac65f14d76976713d307b33bab72d905807eead01350c2db2a669a51cacfbdb991
-MISC ChangeLog 19534 SHA256 5cb69df576b62f6781e6b1abb7dfff7f5acf0fbbe33b3a72346363d77a3e9899 SHA512 b65f2de9e1b0fc1b4eb925fc26672da6d7dd6fae1b80246af36f41f91c1d84b8b25f15c1ac47483eaa4e7718a1d0ef0f9bdd9ede842b634b7d598ecb5a8ec298 WHIRLPOOL a0ae4ce9b40a6a52432fee8d27ad64ecb02f76fdf74cd1c34461927e1e29bd75e53e556a8a63583295e47fe809559be4fddca6031ec7237bee5681da92f7cd15
+EBUILD gd-2.1.1-r1.ebuild 2207 SHA256 4fde733631cc571474e2818feb8d391021c1e799bb359566066d3b1f7db2d734 SHA512 e13b0ac56be8b36afd7bc2ef5413c95b97b84c8699b030d19b6f3996d4b918d137ed1f849cf03f485158364a8384ce2e850aa585a657314ab57cb0b567a3fc10 WHIRLPOOL 6209aef11a66f0ecc80b1df054787f6ad2055843bef5b86c06127aa30b4679c5b04d33b7ce3dbe91d691692e2a57838e86970236281180287dd4c0b93ada6ee2
+EBUILD gd-2.1.1.ebuild 2094 SHA256 812eb44358104e2e3d16784731a4c657ad3b07c654f84d070ccabd8eadaee357 SHA512 f521a56900d6e347e6a479b1043b81fd656e570c99bb0121fc599c1ca5aa7f9aafd95fb2aef076bb891146e26ae5195a9f8a9a106ce73436c27cf2c836539d98 WHIRLPOOL 77f6dbd279a0734fbc66ed9c9449fd9255bd76321aed3bd7c3a9d7f321745f4d9454ecc4c9130b73e5d5f6329c617beb8eddf8dee02330e3991560c520fc07c6
+MISC ChangeLog 19944 SHA256 bc5f4ceca47021c4b9ad538b12a43d91cb7bce0ed37c9c29952ba61282ca43ee SHA512 9487b850f55ee358535a904bb7f50e85b2ca9b49db12f181b516b781dd808d3fc8942a156fc9c099dd4d133933ce498844c543b156d1c48a433c84c5ed02e0f0 WHIRLPOOL e7f1df54a74acdaed08a3932c7f1fed465a50a8f2e8a841f8965dafcb46be34016a284915383412ffd1e7253e436f5c57edb938f989f05910de8991f914aec17
 MISC metadata.xml 1404 SHA256 464820e152ab174b394ec5cb70eff4d25de5aeb9333a754ace4bed387b80a586 SHA512 c7740d681f3ba8d59da914002c61b9110a2050cf3b5c82ef68a765a2674ce2f2e5f11de9861ddba4ed13b888d072029c63fc9df2a59537ce2b4f2f7dfd4c0a9d WHIRLPOOL 5cbf925c5a258d8089c7601ee8050bdbc02bc423b55b36759a32d83d3476b042c1379bd7cf42a46e5273afb3c67e47aac7b28512cb20c9342b9de225cae19fe3
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
-iEYEAREIAAYFAlUN2UIACgkQX3X2B8XHTonmagCcD17lNJFaZrc3YM6UrpRfQdR+
-1oQAn2SU52UK0odIrvPhprXIU9l2Rc0D
-=05Ma
+iQIcBAEBCAAGBQJVJhARAAoJEPGu1DbS6WIAH5UP/1BRR9R0lOdvn96EnE6FLBa5
+L8c9RO63eFlWO5m10G55X0CZh/AiK0WbAQ/15tvX1Y+Y4h616oojD8FHc888jnlp
+zBUYOIyt4n1zrYTSmS37b31tlJOjliKeu0rxYKxTKt3q93/g61TZ+m2rPAnp5Wwf
+CldkldpuaWTP1haejW149rylQD2fqX2fBoyLclr9r+LlW8SC3V5ZR2drMOILK30Y
+mF+d/9BFzycdezw11gLPf91hAMzyDoH64ZsQ9JR22UWalsAY3m67dZAFS28B7DYT
+mSfbgJ/vnspPhzlgVdnNDTzYW37d6qUXHsXwfiUs1qoJNmGbERfg7A9dkyoqNpRn
+CBH3bM7RGdPJEliUv25kCRzhn2Oe4PqjNH4HpTq5w/S31tR6sOXTG+HwOMvMx5N4
+bYzVvTjLl/4Z1/ElvkFeLXAhMrzHVfvut9F55dfhxZ/KAOGuZiMSDQ+IVJCvsH5D
+t7D6hjnb0ZAGNAZBBC6BgTD7HwxHuGaYqXTly461/30iye45scBUhD1W4oBdIPWw
+k+KK276De0mpkyjnbTI4TF6S12vMwQxcd5Ph9fWqj9qmx1nKLMZJgtIGIxJ31sZG
+2B/qCgMj6TEjrh5Nk73x/cI3dwB5gjFHU8y883oZOV+HF56gyzjwS3Ldmg4lWhB0
+LkyZimzk5M9vX08fV1kk
+=T8Sy
 -----END PGP SIGNATURE-----
diff --git a/media-libs/gd/files/gd-2.1.1-webp-pre.patch b/media-libs/gd/files/gd-2.1.1-webp-pre.patch
new file mode 100644 (file)
index 0000000..766a4cb
--- /dev/null
@@ -0,0 +1,28 @@
+https://bugs.gentoo.org/545956
+
+From c7e5dc617c7466c44935cdefbe7e79de319f98ca Mon Sep 17 00:00:00 2001
+From: Pierre Joye <pierre.php@gmail.com>
+Date: Sat, 17 Jan 2015 08:20:17 +0100
+Subject: [PATCH]  fix #111, invalid default quantization
+
+---
+ src/gd_webp.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/gd_webp.c b/src/gd_webp.c
+index fae3861..a3ae1ac 100644
+--- a/src/gd_webp.c
++++ b/src/gd_webp.c
+@@ -185,6 +185,9 @@ BGD_DECLARE(void) gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quantiza
+               gd_error("gd-webp error: cannot allocate Y buffer");
+               return;
+       }
++      if (quantization == -1) {
++              quantization = 80;
++      }
+       vp8_quality = mapQualityToVP8QP(quantization);
+ 
+       U = Y + width * height;
+-- 
+2.3.5
+
diff --git a/media-libs/gd/files/gd-2.1.1-webp.patch b/media-libs/gd/files/gd-2.1.1-webp.patch
new file mode 100644 (file)
index 0000000..93d9155
--- /dev/null
@@ -0,0 +1,409 @@
+https://bugs.gentoo.org/545956
+
+From a79232c5fa692c3b6e3f5bc95ecfc455424c3f54 Mon Sep 17 00:00:00 2001
+From: Pierre Joye <pierre.php@gmail.com>
+Date: Tue, 20 Jan 2015 04:55:11 +0100
+Subject: [PATCH] fix #129, drop VPX usage in favor of libwebp
+
+---
+ configure.ac          |  80 +++++------------
+ src/gd_webp.c         | 231 +++++++++++++++++++++-----------------------------
+ tests/Makefile.am     |   2 +-
+ tests/webp/bug00111.c |   2 +-
+ 4 files changed, 122 insertions(+), 193 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 1024a3a..8923186 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -317,63 +317,6 @@ if test "$with_xpm" != no; then
+ fi
+ AM_CONDITIONAL([HAVE_LIBXPM], test "$with_xpm" = yes)
+ 
+-dnl check for libvpx by default
+-AC_ARG_WITH(vpx,dnl
+-[  --with-vpx=DIR         where to find the vpx library])
+-
+-case $with_vpx in
+-no) ;;
+-yes|"")
+-  PKG_CHECK_MODULES([LIBVPX], vpx, [with_vpx=yes],
+-  [
+-    PKG_CHECK_MODULES([LIBVPX], libvpx, [with_vpx=yes],
+-    [
+-      if test "$with_vpx" = yes; then
+-        AC_MSG_ERROR([VPX support requested, but not found])
+-      fi
+-      with_vpx=no
+-    ])
+-  ])
+-  ;;
+-*)
+-  save_LIBS="$LIBS"
+-  save_CPPFLAGS="$CPPFLAGS"
+-
+-  if test -d "$with_vpx"; then
+-    LIBVPX_CFLAGS="-I$with_vpx/include"
+-    LIBVPX_LIBS="-L$with_vpx/lib -lvpx"
+-  fi
+-
+-  CPPFLAGS="$CPPFLAGS $LIBVPX_CFLAGS"
+-  LIBS="$LIBS $LIBVPX_LIBS"
+-
+-  AC_CHECK_LIB(vpx,vpx_codec_destroy,
+-    [
+-      if test -z "$LIBVPX_LIBS"; then
+-        LIBVPX_LIBS="-lvpx"
+-      fi
+-      with_vpx=yes
+-    ],[
+-      if test "$with_vpx" != ""; then
+-        AC_MSG_ERROR([vpx support requested, but not found])
+-      else
+-        with_vpx=no
+-      fi
+-    ])
+-
+-  CPPFLAGS="$save_CPPFLAGS"
+-  LIBS="$save_LIBS"
+-  ;;
+-esac
+-
+-if test "$with_vpx" != no; then
+-  CPPFLAGS="$CPPFLAGS $LIBVPX_CFLAGS"
+-  LIBS="$LIBS $LIBVPX_LIBS"
+-  FEATURES="GD_VPX $FEATURES"
+-  AC_DEFINE(HAVE_LIBVPX, 1, [ Define if you have the VPX library. ])
+-fi
+-AM_CONDITIONAL([HAVE_LIBVPX], test "$with_vpx" = yes)
+-
+ dnl check for libtiff by default
+ AC_ARG_WITH(tiff,dnl
+ [  --with-tiff=DIR         where to find the TIFF library])
+@@ -437,6 +380,27 @@ if test "$mingw_cv_win32_host" = yes; then
+ AC_DEFINE([BGDWIN32], [], [Define is you are building for Win32 API])
+ fi
+ 
++
++dnl check for libwebp by default
++AC_ARG_WITH(webp,dnl
++[  --with-webp=DIR         where to find the webp library],
++  [if test -d "$withval"; then
++     LDFLAGS="$LDFLAGS -L$withval/lib"
++     CFLAGS="$CFLAGS -I$withval/include"
++   fi],
++  withval=yes)
++
++if test "$withval" != no; then
++  AC_CHECK_LIB(webp,WebPGetInfo,
++    [LIBS="-lwebp $LIBS" 
++     FEATURES="GD_WEBP $FEATURES"
++     AC_DEFINE(HAVE_LIBWEBP, 1, [ Define if you have the webp library. ])])
++     with_webp=yes
++else
++  with_webp=no
++fi
++AM_CONDITIONAL([HAVE_LIBWEBP], test "$with_webp" = yes)
++
+ dnl report configuration
+ AC_MSG_RESULT([
+ ** Configuration summary for $PACKAGE $VERSION:
+@@ -444,7 +408,7 @@ AC_MSG_RESULT([
+    Support for Zlib:                 $with_zlib
+    Support for PNG library:          $with_png
+    Support for JPEG library:         $ac_cv_lib_jpeg_jpeg_set_defaults
+-   Support for VPX library:          $with_vpx
++   Support for WebP library:         $with_webp
+    Support for TIFF library:         $with_tiff
+    Support for Freetype 2.x library: $with_freetype
+    Support for Fontconfig library:   $with_fontconfig
+diff --git a/src/gd_webp.c b/src/gd_webp.c
+index a3ae1ac..c44bd80 100644
+--- a/src/gd_webp.c
++++ b/src/gd_webp.c
+@@ -2,33 +2,21 @@
+ #include "config.h"
+ #endif /* HAVE_CONFIG_H */
+ 
++
++#ifdef HAVE_LIBWEBP
+ #include <stdio.h>
+ #include <math.h>
+ #include <string.h>
+ #include <stdlib.h>
+ #include "gd.h"
+ #include "gd_errors.h"
+-
+-#ifdef HAVE_LIBVPX
+-#include "webpimg.h"
+ #include "gdhelpers.h"
++#include "webp/decode.h"
++#include "webp/encode.h"
+ 
+-extern void gd_YUV420toRGBA(uint8* Y,
+-                                uint8* U,
+-                                uint8* V,
+-                                gdImagePtr im);
+-
+-extern void gd_RGBAToYUV420(gdImagePtr im2,
+-                                uint8* Y,
+-                                uint8* U,
+-                                uint8* V);
+-
+-const char * gdWebpGetVersionString()
+-{
+-      return "not defined";
+-}
++#define GD_WEBP_ALLOC_STEP (4*1024)
+ 
+-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebp (FILE * inFile)
++gdImagePtr gdImageCreateFromWebp (FILE * inFile)
+ {
+       gdImagePtr im;
+       gdIOCtx *in = gdNewFileCtx(inFile);
+@@ -38,42 +26,16 @@ BGD_DECLARE(gdImagePtr) gdImageCreateFromWebp (FILE * inFile)
+       return im;
+ }
+ 
+-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebpPtr (int size, void *data)
++gdImagePtr gdImageCreateFromWebpCtx (gdIOCtx * infile)
+ {
+-      int     width, height, ret;
+-      unsigned char   *Y = NULL;
+-      unsigned char   *U = NULL;
+-      unsigned char   *V = NULL;
+-      gdImagePtr im;
+-
+-      ret = WebPDecode(data, size, &Y, &U, &V, &width, &height);
+-      if (ret != webp_success) {
+-              if (Y) free(Y);
+-              if (U) free(U);
+-              if (V) free(V);
+-              gd_error("WebP decode: fail to decode input data");
+-              return NULL;
+-      }
+-      im = gdImageCreateTrueColor(width, height);
+-      if (!im) {
+-              return NULL;
+-      }
+-      gd_YUV420toRGBA(Y, U, V, im);
+-      return im;
+-}
+-
+-#define GD_WEBP_ALLOC_STEP (4*1024)
+-
+-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebpCtx (gdIOCtx * infile)
+-{
+-      int     width, height, ret;
+-      unsigned char   *filedata = NULL;
++      int    width, height;
++      uint8_t   *filedata = NULL;
++      uint8_t    *argb = NULL;
+       unsigned char   *read, *temp;
+-      unsigned char   *Y = NULL;
+-      unsigned char   *U = NULL;
+-      unsigned char   *V = NULL;
+       size_t size = 0, n;
+       gdImagePtr im;
++      int x, y;
++      uint8_t *p;
+ 
+       do {
+               temp = gdRealloc(filedata, size+GD_WEBP_ALLOC_STEP);
+@@ -89,23 +51,97 @@ BGD_DECLARE(gdImagePtr) gdImageCreateFromWebpCtx (gdIOCtx * infile)
+               }
+ 
+               n = gdGetBuf(read, GD_WEBP_ALLOC_STEP, infile);
+-              size += n;
+-      } while (n>0);
++              if (n>0 && n!=EOF) {
++                      size += n;
++              }
++      } while (n>0 && n!=EOF);
+ 
+-      ret = WebPDecode(filedata, size, &Y, &U, &V, &width, &height);
+-      gdFree(filedata);
+-      if (ret != webp_success) {
+-              if (Y) free(Y);
+-              if (U) free(U);
+-              if (V) free(V);
+-              gd_error("WebP decode: fail to decode input data");
++      if (WebPGetInfo(filedata,size, &width, &height) == 0) {
++              gd_error("gd-webp cannot get webp info");
+               return NULL;
+       }
++
+       im = gdImageCreateTrueColor(width, height);
+-      gd_YUV420toRGBA(Y, U, V, im);
++      if (!im) {
++              return NULL;
++      }
++      argb = WebPDecodeARGB(filedata, size, &width, &height);
++      if (!argb) {
++              gd_error("gd-webp cannot allocate temporary buffer");
++              gdFree(argb);
++              return NULL;
++      }
++      for (y = 0, p = argb;  y < height; y++) {
++              for (x = 0; x < width; x++) {
++                      register uint8_t a = gdAlphaMax - (*(p++) >> 1);
++                      register uint8_t r = *(p++);
++                      register uint8_t g = *(p++);
++                      register uint8_t b = *(p++);
++                      im->tpixels[y][x] = gdTrueColorAlpha(r, g, b, a);
++              }
++      }
++      gdFree(filedata);
++      free(argb);
++      im->saveAlphaFlag = 1;
+       return im;
+ }
+ 
++void gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quantization)
++{
++      uint8_t *argb;
++      int x, y;
++      uint8_t *p;
++      uint8_t *out;
++      size_t out_size;
++
++      if (im == NULL) {
++              return;
++      }
++
++      if (!gdImageTrueColor(im)) {
++              gd_error("Paletter image not supported by webp");
++              return;
++      }
++
++      if (quantization == -1) {
++              quantization = 80;
++      }
++
++      argb = (uint8_t *)gdMalloc(gdImageSX(im) * 4 * gdImageSY(im));
++      if (!argb) {
++              return;
++      }
++      p = argb;
++      for (y = 0; y < gdImageSY(im); y++) {
++              for (x = 0; x < gdImageSX(im); x++) {
++                      register int c;
++                      register char a;
++                      c = im->tpixels[y][x];
++                      a = gdTrueColorGetAlpha(c);
++                      if (a == 127) {
++                              a = 0;
++                      } else {
++                              a = 255 - ((a << 1) + (a >> 6));
++                      }
++                      *(p++) = gdTrueColorGetRed(c);
++                      *(p++) = gdTrueColorGetGreen(c);
++                      *(p++) = gdTrueColorGetBlue(c); 
++                      *(p++) = a;
++              }
++      }
++      out_size = WebPEncodeRGBA(argb, gdImageSX(im), gdImageSY(im), gdImageSX(im) * 4, quantization, &out);
++      printf("outsize: %i\n", out_size);
++      if (out_size == 0) {
++              gd_error("gd-webp encoding failed");
++              goto freeargb;
++      }
++      gdPutBuf(out, out_size, outfile);
++      free(out);
++
++freeargb:
++      gdFree(argb);
++}
++
+ BGD_DECLARE(void) gdImageWebpEx (gdImagePtr im, FILE * outFile, int quantization)
+ {
+       gdIOCtx *out = gdNewFileCtx(outFile);
+@@ -116,7 +152,7 @@ BGD_DECLARE(void) gdImageWebpEx (gdImagePtr im, FILE * outFile, int quantization
+ BGD_DECLARE(void) gdImageWebp (gdImagePtr im, FILE * outFile)
+ {
+       gdIOCtx *out = gdNewFileCtx(outFile);
+-      gdImageWebpCtx(im, out, -1);
++      gdImageWebpCtx(im, out, -1);
+       out->gd_free(out);
+ }
+ 
+@@ -140,75 +176,4 @@ BGD_DECLARE(void *) gdImageWebpPtrEx (gdImagePtr im, int *size, int quantization
+       out->gd_free(out);
+       return rv;
+ }
+-
+-/*
+- * Maps normalized QP (quality) to VP8 QP
+- */
+-int mapQualityToVP8QP(int quality) {
+-#define MIN_QUALITY 0
+-#define MAX_QUALITY 100
+-#define MIN_VP8QP 1
+-#define MAX_VP8QP 63
+-      const float scale = MAX_VP8QP - MIN_VP8QP;
+-      const float vp8qp =
+-      scale * (MAX_QUALITY - quality) / (MAX_QUALITY - MIN_QUALITY) + MIN_VP8QP;
+-      if (quality < MIN_QUALITY || quality > MAX_QUALITY) {
+-              gd_error("Wrong quality value %d.", quality);
+-              return -1;
+-      }
+-
+-      return (int)(vp8qp + 0.5);
+-}
+-
+-/* This routine is based in part on code from Dale Lutz (Safe Software Inc.)
+- *  and in part on demo code from Chapter 15 of "PNG: The Definitive Guide"
+- *  (http://www.cdrom.com/pub/png/pngbook.html).
+- */
+-BGD_DECLARE(void) gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quantization)
+-{
+-      int width = im->sx;
+-      int height = im->sy;
+-
+-      int  yuv_width, yuv_height, yuv_nbytes, ret;
+-      int vp8_quality;
+-      unsigned char *Y = NULL,
+-                                *U = NULL,
+-                                *V = NULL;
+-      unsigned char *filedata = NULL;
+-
+-      /* Conversion to Y,U,V buffer */
+-      yuv_width = (width + 1) >> 1;
+-      yuv_height = (height + 1) >> 1;
+-      yuv_nbytes = width * height + 2 * yuv_width * yuv_height;
+-
+-      if ((Y = (unsigned char *)gdCalloc(yuv_nbytes, sizeof(unsigned char))) == NULL) {
+-              gd_error("gd-webp error: cannot allocate Y buffer");
+-              return;
+-      }
+-      if (quantization == -1) {
+-              quantization = 80;
+-      }
+-      vp8_quality = mapQualityToVP8QP(quantization);
+-
+-      U = Y + width * height;
+-      V = U + yuv_width * yuv_height;
+-      gd_RGBAToYUV420(im, Y, U, V);
+-
+-      /* Encode Y,U,V and write data to file */
+-      ret = WebPEncode(Y, U, V, width, height, width, yuv_width, yuv_height, yuv_width,
+-                                       vp8_quality, &filedata, &yuv_nbytes, NULL);
+-      gdFree(Y);
+-
+-      if (ret != webp_success) {
+-              if (filedata) {
+-                      free(filedata);
+-              }
+-              gd_error("gd-webp error: WebP Encoder failed");
+-              return;
+-      }
+-
+-      gdPutBuf (filedata, yuv_nbytes, outfile);
+-      free(filedata);
+-}
+-
+-#endif /* HAVE_LIBVPX */
++#endif /* HAVE_LIBWEBP */
+-- 
+2.3.5
+
diff --git a/media-libs/gd/gd-2.1.1-r1.ebuild b/media-libs/gd/gd-2.1.1-r1.ebuild
new file mode 100644 (file)
index 0000000..2ff4100
--- /dev/null
@@ -0,0 +1,62 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-libs/gd/gd-2.1.1-r1.ebuild,v 1.1 2015/04/09 05:37:20 vapier Exp $
+
+EAPI="5"
+
+inherit libtool multilib-minimal eutils autotools
+
+DESCRIPTION="A graphics library for fast image creation"
+HOMEPAGE="http://libgd.org/ http://www.boutell.com/gd/"
+SRC_URI="mirror://bitbucket/libgd/gd-libgd/downloads/lib${P}.tar.xz"
+
+LICENSE="gd IJG HPND BSD"
+SLOT="2/3"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~ppc-aix ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~x86-freebsd ~x86-interix ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris"
+IUSE="fontconfig jpeg png static-libs truetype webp xpm zlib"
+
+# fontconfig has prefixed font paths, details see bug #518970
+REQUIRED_USE="prefix? ( fontconfig )"
+
+RDEPEND="fontconfig? ( >=media-libs/fontconfig-2.10.92[${MULTILIB_USEDEP}] )
+       jpeg? ( >=virtual/jpeg-0-r2:0[${MULTILIB_USEDEP}] )
+       png? ( >=media-libs/libpng-1.6.10:0[${MULTILIB_USEDEP}] )
+       truetype? ( >=media-libs/freetype-2.5.0.1[${MULTILIB_USEDEP}] )
+       webp? ( media-libs/libwebp[${MULTILIB_USEDEP}] )
+       xpm? ( >=x11-libs/libXpm-3.5.10-r1[${MULTILIB_USEDEP}] >=x11-libs/libXt-1.1.4[${MULTILIB_USEDEP}] )
+       zlib? ( >=sys-libs/zlib-1.2.8-r1[${MULTILIB_USEDEP}] )"
+DEPEND="${RDEPEND}
+       >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}]"
+
+S="${WORKDIR}/lib${P}"
+
+src_prepare() {
+       epatch "${FILESDIR}/${P}-headers.patch" #540376
+       epatch "${FILESDIR}/${P}-webp-pre.patch" #545956
+       epatch "${FILESDIR}/${P}-webp.patch" #545956
+
+       #elibtoolize  # for shared library on Solaris
+       eautoreconf
+}
+
+multilib_src_configure() {
+       # we aren't actually {en,dis}abling X here ... the configure
+       # script uses it just to add explicit -I/-L paths which we
+       # don't care about on Gentoo systems.
+       ECONF_SOURCE=${S} \
+       econf \
+               --without-x \
+               $(use_enable static-libs static) \
+               $(use_with fontconfig) \
+               $(use_with png) \
+               $(use_with truetype freetype) \
+               $(use_with jpeg) \
+               $(use_with webp) \
+               $(use_with xpm) \
+               $(use_with zlib)
+}
+
+multilib_src_install_all() {
+       dodoc NEWS README
+       prune_libtool_files
+}