diff options
author | Matt Sarett <msarett@google.com> | 2017-03-23 15:32:25 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-24 13:19:53 +0000 |
commit | cf3f2347c8933596aeba873d4ece597a9339392f (patch) | |
tree | d340f5802bb11ffe902b5f95ea06c6b75c5ccd74 /src/codec/SkCodec.cpp | |
parent | a3bdd44aff94974e720ed04b860fbfe24f8f431e (diff) |
Add SkTransferFunctionBehavior flag: Use in codec and encoder
This is a step towards removing the non-linear blending flag from
SkColorSpace. The flag on SkColorSpace used to control the premul
behavior - now it is controlled by this option.
BUG=skia:
Change-Id: Ia29bd8c2b0596a93c6aa14332dcd9bd39e388a90
Reviewed-on: https://skia-review.googlesource.com/10008
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src/codec/SkCodec.cpp')
-rw-r--r-- | src/codec/SkCodec.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/codec/SkCodec.cpp b/src/codec/SkCodec.cpp index e9eeb4529a..5bdb3e2b59 100644 --- a/src/codec/SkCodec.cpp +++ b/src/codec/SkCodec.cpp @@ -9,7 +9,7 @@ #include "SkCodec.h" #include "SkCodecPriv.h" #include "SkColorSpace.h" -#include "SkColorSpaceXform.h" +#include "SkColorSpaceXform_Base.h" #include "SkData.h" #include "SkGifCodec.h" #include "SkHalf.h" @@ -474,11 +474,14 @@ void SkCodec::fillIncompleteImage(const SkImageInfo& info, void* dst, size_t row } } -bool SkCodec::initializeColorXform(const SkImageInfo& dstInfo) { +bool SkCodec::initializeColorXform(const SkImageInfo& dstInfo, + SkTransferFunctionBehavior premulBehavior) { fColorXform = nullptr; - bool needsPremul = needs_premul(dstInfo, fEncodedInfo); - if (needs_color_xform(dstInfo, fSrcInfo, needsPremul)) { - fColorXform = SkColorSpaceXform::New(fSrcInfo.colorSpace(), dstInfo.colorSpace()); + bool needsColorCorrectPremul = needs_premul(dstInfo, fEncodedInfo) && + SkTransferFunctionBehavior::kRespect == premulBehavior; + if (needs_color_xform(dstInfo, fSrcInfo, needsColorCorrectPremul)) { + fColorXform = SkColorSpaceXform_Base::New(fSrcInfo.colorSpace(), dstInfo.colorSpace(), + premulBehavior); if (!fColorXform) { return false; } |