diff options
Diffstat (limited to 'src/codec/SkJpegCodec.cpp')
-rw-r--r-- | src/codec/SkJpegCodec.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/codec/SkJpegCodec.cpp b/src/codec/SkJpegCodec.cpp index 995aaa6b96..1ed76a7c4d 100644 --- a/src/codec/SkJpegCodec.cpp +++ b/src/codec/SkJpegCodec.cpp @@ -189,8 +189,8 @@ static sk_sp<SkData> get_icc_profile(jpeg_decompress_struct* dinfo) { return iccData; } -bool SkJpegCodec::ReadHeader(SkStream* stream, SkCodec** codecOut, - JpegDecoderMgr** decoderMgrOut) { +bool SkJpegCodec::ReadHeader(SkStream* stream, SkCodec** codecOut, JpegDecoderMgr** decoderMgrOut, + sk_sp<SkColorSpace> defaultColorSpace) { // Create a JpegDecoderMgr to own all of the decompress information std::unique_ptr<JpegDecoderMgr> decoderMgr(new JpegDecoderMgr(stream)); @@ -251,8 +251,7 @@ bool SkJpegCodec::ReadHeader(SkStream* stream, SkCodec** codecOut, } } if (!colorSpace) { - // Treat unmarked jpegs as sRGB. - colorSpace = SkColorSpace::MakeSRGB(); + colorSpace = defaultColorSpace; } const int width = decoderMgr->dinfo()->image_width; @@ -269,9 +268,13 @@ bool SkJpegCodec::ReadHeader(SkStream* stream, SkCodec** codecOut, } SkCodec* SkJpegCodec::NewFromStream(SkStream* stream) { + return SkJpegCodec::NewFromStream(stream, SkColorSpace::MakeSRGB()); +} + +SkCodec* SkJpegCodec::NewFromStream(SkStream* stream, sk_sp<SkColorSpace> defaultColorSpace) { std::unique_ptr<SkStream> streamDeleter(stream); SkCodec* codec = nullptr; - if (ReadHeader(stream, &codec, nullptr)) { + if (ReadHeader(stream, &codec, nullptr, std::move(defaultColorSpace))) { // Codec has taken ownership of the stream, we do not need to delete it SkASSERT(codec); streamDeleter.release(); @@ -353,7 +356,7 @@ SkISize SkJpegCodec::onGetScaledDimensions(float desiredScale) const { bool SkJpegCodec::onRewind() { JpegDecoderMgr* decoderMgr = nullptr; - if (!ReadHeader(this->stream(), nullptr, &decoderMgr)) { + if (!ReadHeader(this->stream(), nullptr, &decoderMgr, nullptr)) { return fDecoderMgr->returnFalse("onRewind"); } SkASSERT(nullptr != decoderMgr); |