| Index: third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
|
| diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
|
| index b8b87a52a3eed2acce651642937d42664e2d7cf9..04a5ccbb9b1b84da553a721c4dc74c330729f01b 100644
|
| --- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
|
| +++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
|
| @@ -86,7 +86,22 @@ class PLATFORM_EXPORT ImageDecoder {
|
|
|
| enum AlphaOption { AlphaPremultiplied, AlphaNotPremultiplied };
|
|
|
| - enum ColorSpaceOption { ColorSpaceApplied, ColorSpaceIgnored };
|
| + enum ColorSpaceOption {
|
| + // The embedded color profile is ignored entirely. The hasEmbeddedColorSpace
|
| + // method will always return false. No transformations are applied to the
|
| + // pixel data. SkImages created will have no assocated SkColorSpace.
|
| + ColorSpaceIgnored,
|
| + // The image will be transformed to the specified target color space. The
|
| + // hasEmbeddedColorSpace method will return the truth. SkImages created by
|
| + // this decoder will have no associated SkColorSpace.
|
| + // TODO(ccameron): This transform is applied only if the image has an
|
| + // embedded color profile, but should be applied always.
|
| + ColorSpaceTransformed,
|
| + // The image will not be transformed (to the extent possible). SkImages
|
| + // created by this decoder will have the SkColorSpace of the embedded
|
| + // color profile (or sRGB if there was no embedded color profile).
|
| + ColorSpaceTagged,
|
| + };
|
|
|
| virtual ~ImageDecoder() {}
|
|
|
| @@ -97,13 +112,16 @@ class PLATFORM_EXPORT ImageDecoder {
|
| static std::unique_ptr<ImageDecoder> create(PassRefPtr<SegmentReader> data,
|
| bool dataComplete,
|
| AlphaOption,
|
| - ColorSpaceOption);
|
| - static std::unique_ptr<ImageDecoder> create(PassRefPtr<SharedBuffer> data,
|
| - bool dataComplete,
|
| - AlphaOption alphaoption,
|
| - ColorSpaceOption colorOptions) {
|
| + ColorSpaceOption,
|
| + sk_sp<SkColorSpace>);
|
| + static std::unique_ptr<ImageDecoder> create(
|
| + PassRefPtr<SharedBuffer> data,
|
| + bool dataComplete,
|
| + AlphaOption alphaoption,
|
| + ColorSpaceOption colorOptions,
|
| + sk_sp<SkColorSpace> targetColorSpace) {
|
| return create(SegmentReader::createFromSharedBuffer(std::move(data)),
|
| - dataComplete, alphaoption, colorOptions);
|
| + dataComplete, alphaoption, colorOptions, targetColorSpace);
|
| }
|
|
|
| virtual String filenameExtension() const = 0;
|
| @@ -206,7 +224,11 @@ class PLATFORM_EXPORT ImageDecoder {
|
|
|
| ImageOrientation orientation() const { return m_orientation; }
|
|
|
| - bool ignoresColorSpace() const { return m_ignoreColorSpace; }
|
| + bool ignoresColorSpace() const {
|
| + return m_colorSpaceOption == ColorSpaceIgnored;
|
| + }
|
| + ColorSpaceOption colorSpaceOption() const { return m_colorSpaceOption; }
|
| + sk_sp<SkColorSpace> targetColorSpace() const { return m_targetColorSpace; }
|
|
|
| // Set the target color profile into which all images with embedded color
|
| // profiles should be converted. Note that only the first call to this
|
| @@ -214,10 +236,13 @@ class PLATFORM_EXPORT ImageDecoder {
|
| static void setGlobalTargetColorProfile(const WebVector<char>&);
|
| static sk_sp<SkColorSpace> globalTargetColorSpace();
|
|
|
| - // This returns the color space of this image. If the image had no embedded
|
| - // color profile, this will return sRGB. Returns nullptr if color correct
|
| - // rendering is not enabled.
|
| - sk_sp<SkColorSpace> colorSpace() const;
|
| + // A target color space to be used by tests.
|
| + static sk_sp<SkColorSpace> targetColorSpaceForTesting();
|
| +
|
| + // This returns the color space that will be included in the SkImageInfo of
|
| + // SkImages created from this decoder. This will be nullptr unless the
|
| + // decoder was created with the option ColorSpaceTagged.
|
| + sk_sp<SkColorSpace> colorSpaceForSkImages() const;
|
|
|
| // This returns whether or not the image included a not-ignored embedded
|
| // color space. This is independent of whether or not that space's transform
|
| @@ -269,9 +294,11 @@ class PLATFORM_EXPORT ImageDecoder {
|
| protected:
|
| ImageDecoder(AlphaOption alphaOption,
|
| ColorSpaceOption colorOptions,
|
| + sk_sp<SkColorSpace> targetColorSpace,
|
| size_t maxDecodedBytes)
|
| : m_premultiplyAlpha(alphaOption == AlphaPremultiplied),
|
| - m_ignoreColorSpace(colorOptions == ColorSpaceIgnored),
|
| + m_colorSpaceOption(colorOptions),
|
| + m_targetColorSpace(std::move(targetColorSpace)),
|
| m_maxDecodedBytes(maxDecodedBytes),
|
| m_purgeAggressively(false) {}
|
|
|
| @@ -335,7 +362,8 @@ class PLATFORM_EXPORT ImageDecoder {
|
| RefPtr<SegmentReader> m_data; // The encoded data.
|
| Vector<ImageFrame, 1> m_frameBufferCache;
|
| const bool m_premultiplyAlpha;
|
| - const bool m_ignoreColorSpace;
|
| + const ColorSpaceOption m_colorSpaceOption;
|
| + const sk_sp<SkColorSpace> m_targetColorSpace;
|
| ImageOrientation m_orientation;
|
|
|
| // The maximum amount of memory a decoded image should require. Ideally,
|
| @@ -380,7 +408,6 @@ class PLATFORM_EXPORT ImageDecoder {
|
| bool m_failed = false;
|
| bool m_hasHistogrammedColorSpace = false;
|
|
|
| - sk_sp<SkColorSpace> m_targetColorSpace = nullptr;
|
| sk_sp<SkColorSpace> m_embeddedColorSpace = nullptr;
|
| bool m_sourceToTargetColorTransformNeedsUpdate = false;
|
| std::unique_ptr<SkColorSpaceXform> m_sourceToTargetColorTransform;
|
|
|