diff options
author | Derek Sollenberger <djsollen@google.com> | 2017-03-22 18:54:25 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-22 18:54:30 +0000 |
commit | dda14b9b7ac13dba9214f484fc6270b3ccf4b68b (patch) | |
tree | 04975df7bad9c9c75c9fcf0aa52f2e3dac2a7716 /src/images | |
parent | 70131b97f97f97d6fbcf4545b97827dfe8509654 (diff) |
Revert "Add support for writing icc profiles to the jpeg encoder"
This reverts commit 4ef01482025e2e629e35458aa214436d3b4138e8.
Reason for revert: This breaks the android autoroller.
Original change's description:
> Add support for writing icc profiles to the jpeg encoder
>
> Also, share the impl for skjpeg_error_mgr between the
> jpeg decoder and encoder. They are already identical
> anyway.
>
> BUG=skia:
>
> Change-Id: I4d67f28126388fef3057d62b6e0b203e21ed4afb
> Reviewed-on: https://skia-review.googlesource.com/10011
> Reviewed-by: Leon Scroggins <scroggo@google.com>
> Commit-Queue: Matt Sarett <msarett@google.com>
>
TBR=msarett@google.com,scroggo@google.com,reviews@skia.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Change-Id: Idbb9918370e8384e39d6b7d1c3bcd9545ce4cfd1
Reviewed-on: https://skia-review.googlesource.com/10017
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Derek Sollenberger <djsollen@google.com>
Diffstat (limited to 'src/images')
-rw-r--r-- | src/images/SkJPEGImageEncoder.cpp | 19 | ||||
-rw-r--r-- | src/images/SkJPEGWriteUtility.h | 9 | ||||
-rw-r--r-- | src/images/SkPNGImageEncoder.cpp | 20 | ||||
-rw-r--r-- | src/images/SkWEBPImageEncoder.cpp | 2 | ||||
-rw-r--r-- | src/images/transform_scanline.h (renamed from src/images/SkImageEncoderFns.h) | 20 |
5 files changed, 26 insertions, 44 deletions
diff --git a/src/images/SkJPEGImageEncoder.cpp b/src/images/SkJPEGImageEncoder.cpp index 014a0ae160..1f8f0d6394 100644 --- a/src/images/SkJPEGImageEncoder.cpp +++ b/src/images/SkJPEGImageEncoder.cpp @@ -10,10 +10,10 @@ #ifdef SK_HAS_JPEG_LIBRARY #include "SkColorPriv.h" -#include "SkImageEncoderFns.h" #include "SkJPEGWriteUtility.h" #include "SkStream.h" #include "SkTemplates.h" +#include "transform_scanline.h" #include <stdio.h> @@ -141,23 +141,6 @@ bool SkEncodeImageAsJPEG(SkWStream* stream, const SkPixmap& pixmap, int quality) jpeg_start_compress(&cinfo, TRUE); - if (pixmap.colorSpace()) { - sk_sp<SkData> icc = icc_from_color_space(*pixmap.colorSpace()); - if (icc) { - // Create a contiguous block of memory with the icc signature followed by the profile. - sk_sp<SkData> markerData = - SkData::MakeUninitialized(kICCMarkerHeaderSize + icc->size()); - uint8_t* ptr = (uint8_t*) markerData->writable_data(); - memcpy(ptr, kICCSig, sizeof(kICCSig)); - ptr += sizeof(kICCSig); - *ptr++ = 1; // This is the first marker. - *ptr++ = 1; // Out of one total markers. - memcpy(ptr, icc->data(), icc->size()); - - jpeg_write_marker(&cinfo, kICCMarker, markerData->bytes(), markerData->size()); - } - } - if (proc) { storage.reset(numComponents * pixmap.width()); } diff --git a/src/images/SkJPEGWriteUtility.h b/src/images/SkJPEGWriteUtility.h index 3765e7e674..91d07a3616 100644 --- a/src/images/SkJPEGWriteUtility.h +++ b/src/images/SkJPEGWriteUtility.h @@ -9,7 +9,6 @@ #ifndef SkJpegUtility_DEFINED #define SkJpegUtility_DEFINED -#include "SkJpegPriv.h" #include "SkStream.h" extern "C" { @@ -19,6 +18,14 @@ extern "C" { #include <setjmp.h> +/* Our error-handling struct. + * +*/ +struct skjpeg_error_mgr : jpeg_error_mgr { + jmp_buf fJmpBuf; +}; + + void skjpeg_error_exit(j_common_ptr cinfo); ///////////////////////////////////////////////////////////////////////////// diff --git a/src/images/SkPNGImageEncoder.cpp b/src/images/SkPNGImageEncoder.cpp index e28ae12dc0..2eac91d0ca 100644 --- a/src/images/SkPNGImageEncoder.cpp +++ b/src/images/SkPNGImageEncoder.cpp @@ -12,13 +12,14 @@ #include "SkColor.h" #include "SkColorPriv.h" #include "SkDither.h" -#include "SkImageEncoderFns.h" +#include "SkICC.h" #include "SkMath.h" #include "SkStream.h" #include "SkString.h" #include "SkTemplates.h" #include "SkUnPreMultiply.h" #include "SkUtils.h" +#include "transform_scanline.h" #include "png.h" @@ -39,7 +40,9 @@ 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, sk_sp<SkData> icc) { +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) const char* name = "Skia"; png_const_bytep iccPtr = icc->bytes(); @@ -348,14 +351,17 @@ static bool do_encode(SkWStream* stream, const SkPixmap& pixmap, } if (pixmap.colorSpace()) { + SkColorSpaceTransferFn fn; + SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor); if (pixmap.colorSpace()->isSRGB()) { png_set_sRGB(png_ptr, info_ptr, PNG_sRGB_INTENT_PERCEPTUAL); - } else { - sk_sp<SkData> icc = icc_from_color_space(*pixmap.colorSpace()); - if (icc) { - set_icc(png_ptr, info_ptr, std::move(icc)); - } + } else if (pixmap.colorSpace()->isNumericalTransferFn(&fn) && + pixmap.colorSpace()->toXYZD50(&toXYZD50)) + { + set_icc(png_ptr, info_ptr, fn, toXYZD50); } + + // TODO: Should we support writing ICC profiles for additional color spaces? } png_set_sBIT(png_ptr, info_ptr, &sig_bit); diff --git a/src/images/SkWEBPImageEncoder.cpp b/src/images/SkWEBPImageEncoder.cpp index a9fcc31265..8797ff5925 100644 --- a/src/images/SkWEBPImageEncoder.cpp +++ b/src/images/SkWEBPImageEncoder.cpp @@ -20,11 +20,11 @@ #include "SkBitmap.h" #include "SkColorPriv.h" -#include "SkImageEncoderFns.h" #include "SkStream.h" #include "SkTemplates.h" #include "SkUnPreMultiply.h" #include "SkUtils.h" +#include "transform_scanline.h" // A WebP decoder only, on top of (subset of) libwebp // For more information on WebP image format, and libwebp library, see: diff --git a/src/images/SkImageEncoderFns.h b/src/images/transform_scanline.h index 5120570c48..3c754275e0 100644 --- a/src/images/SkImageEncoderFns.h +++ b/src/images/transform_scanline.h @@ -4,9 +4,8 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ - -#ifndef SkImageEncoderFns_DEFINED -#define SkImageEncoderFns_DEFINED +#ifndef transform_scanline_DEFINED +#define transform_scanline_DEFINED /** * Functions to transform scanlines between packed-pixel formats. @@ -15,7 +14,6 @@ #include "SkBitmap.h" #include "SkColor.h" #include "SkColorPriv.h" -#include "SkICC.h" #include "SkPreConfig.h" #include "SkRasterPipeline.h" #include "SkUnPreMultiply.h" @@ -275,16 +273,4 @@ static inline void transform_scanline_F16_premul_to_8888(char* SK_RESTRICT dst, p.append(SkRasterPipeline::store_8888, (void**) &dst); p.run(0, width); } - -static inline sk_sp<SkData> icc_from_color_space(const SkColorSpace& cs) { - SkColorSpaceTransferFn fn; - SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor); - if (cs.isNumericalTransferFn(&fn) && cs.toXYZD50(&toXYZD50)) { - return SkICC::WriteToICC(fn, toXYZD50); - } - - // TODO: Should we support writing ICC profiles for additional color spaces? - return nullptr; -} - -#endif // SkImageEncoderFns_DEFINED +#endif // transform_scanline_DEFINED |