aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/images
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-03-21 10:06:45 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-21 14:52:28 +0000
commit687b6567e31a737ecdff9e71dd7182b3021a40d4 (patch)
tree98473301d8718ca45cfd83c34c24bcc5f373dba5 /src/images
parent291547d4e76ba7d3e9caace8deb7761632d8be06 (diff)
Compatible use of png_set_iCCP
BUG=skia: Change-Id: Ie37b92fd5e0d2bc92ec7f2bf3e6f56d061bc30a2 Reviewed-on: https://skia-review.googlesource.com/9960 Commit-Queue: Matt Sarett <msarett@google.com> Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Diffstat (limited to 'src/images')
-rw-r--r--src/images/SkPNGImageEncoder.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/images/SkPNGImageEncoder.cpp b/src/images/SkPNGImageEncoder.cpp
index 69a7b0780a..dd4602ad02 100644
--- a/src/images/SkPNGImageEncoder.cpp
+++ b/src/images/SkPNGImageEncoder.cpp
@@ -39,6 +39,17 @@ static void sk_write_fn(png_structp png_ptr, png_bytep data, png_size_t len) {
}
}
+static void set_icc(png_structp png_ptr, png_infop info_ptr, const SkColorSpaceTransferFn& fn,
+ const SkMatrix44& toXYZD50) {
+ sk_sp<SkData> icc = SkICC::WriteToICC(fn, toXYZD50);
+#if PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 5)
+ png_const_bytep iccPtr = icc->bytes();
+#else
+ png_charp iccPtr = (png_charp) icc->writable_data();
+#endif
+ png_set_iCCP(png_ptr, info_ptr, "Skia", 0, iccPtr, icc->size());
+}
+
static transform_scanline_proc choose_proc(const SkImageInfo& info) {
const bool isGammaEncoded = info.gammaCloseToSRGB();
switch (info.colorType()) {
@@ -343,8 +354,7 @@ static bool do_encode(SkWStream* stream, const SkPixmap& pixmap,
} else if (pixmap.colorSpace()->isNumericalTransferFn(&fn) &&
pixmap.colorSpace()->toXYZD50(&toXYZD50))
{
- sk_sp<SkData> icc = SkICC::WriteToICC(fn, toXYZD50);
- png_set_iCCP(png_ptr, info_ptr, "Skia", 0, icc->bytes(), icc->size());
+ set_icc(png_ptr, info_ptr, fn, toXYZD50);
}
// TODO: Should we support writing ICC profiles for additional color spaces?