aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/codec/SkCodec.cpp
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-03-23 15:32:25 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-24 13:19:53 +0000
commitcf3f2347c8933596aeba873d4ece597a9339392f (patch)
treed340f5802bb11ffe902b5f95ea06c6b75c5ccd74 /src/codec/SkCodec.cpp
parenta3bdd44aff94974e720ed04b860fbfe24f8f431e (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.cpp13
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;
}