aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/images/SkJpegEncoder.cpp
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-06-12 13:07:22 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-12 18:08:03 +0000
commit5e819cac114b7286c50c9c3040fca259cd4b06fb (patch)
tree25d4eaf911ee307360907db67f5423dba9ab53d2 /src/images/SkJpegEncoder.cpp
parent390f6cd6f9f9ddd8a53da804cee3eff60cd2e2b4 (diff)
fix f16 encoding
We'll encode F16 .pngs at 16-bit linear, so don't to_srgb them. We'll encode F16 .jpgs and .webps as 8-bit sRGB, so tag them as sRGB. Change-Id: Ibc5b5e2d3aea68cdf1531026cbe8b6191f7e39ea Reviewed-on: https://skia-review.googlesource.com/19498 Reviewed-by: Matt Sarett <msarett@google.com> Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/images/SkJpegEncoder.cpp')
-rw-r--r--src/images/SkJpegEncoder.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/images/SkJpegEncoder.cpp b/src/images/SkJpegEncoder.cpp
index 8b1dd960e2..eaea77e0e0 100644
--- a/src/images/SkJpegEncoder.cpp
+++ b/src/images/SkJpegEncoder.cpp
@@ -10,6 +10,7 @@
#ifdef SK_HAS_JPEG_LIBRARY
#include "SkColorPriv.h"
+#include "SkColorSpace_Base.h"
#include "SkImageEncoderFns.h"
#include "SkImageInfoPriv.h"
#include "SkJpegEncoder.h"
@@ -206,8 +207,15 @@ std::unique_ptr<SkEncoder> SkJpegEncoder::Make(SkWStream* dst, const SkPixmap& s
jpeg_set_quality(encoderMgr->cinfo(), options.fQuality, TRUE);
jpeg_start_compress(encoderMgr->cinfo(), TRUE);
- if (src.colorSpace()) {
- sk_sp<SkData> icc = icc_from_color_space(*src.colorSpace());
+ if (SkColorSpace* cs = src.colorSpace()) {
+ sk_sp<SkColorSpace> owned;
+ if (src.colorType() == kRGBA_F16_SkColorType) {
+ // We'll be converting to 8-bit sRGB, so we'd better tag it that way.
+ owned = as_CSB(src.colorSpace())->makeSRGBGamma();
+ cs = owned.get();
+ }
+
+ sk_sp<SkData> icc = icc_from_color_space(*cs);
if (icc) {
// Create a contiguous block of memory with the icc signature followed by the profile.
sk_sp<SkData> markerData =