diff options
author | Leon Scroggins III <scroggo@google.com> | 2017-12-05 13:55:24 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-12-05 19:28:08 +0000 |
commit | c8037dc5edda42cacd839df4e1c7d8cfd0953309 (patch) | |
tree | c40be4cadc3ed50a129b05c553c37f69a3310306 /include | |
parent | 89662e698163dbc5a23a7838ce7142cdb1494c88 (diff) |
Reland "Hide SkEncodedInfo"
This partially reverts commit
1793e7bb46c1f9d430c1a699a1c3d3168159b659.
Hide SkEncodedInfo
Bug: skia:7353
Bug: skia:6839
This contains information that is not necessary for clients to know. The
Color enum tells the number of components in the input, but this is only
interesting internally (to the SkSwizzler).
Similarly, the Alpha enum differs from SkAlphaType in that it has
kBinary instead of kPremul. This is useful information only internally
for determining whether the SkColorSpaceXform needs to premultiply.
The bitsPerComponent is potentially useful for a client; Android (in
SkAndroidCodec) uses it to determine the SkColorType. Rather than
exposing bitsPerComponent, make SkAndroidCodec a friend so it can
access the SkEncodedInfo. A future change will change SkCodec to
recommend F16 for bitsPerComponent > 8, but that will be more involved;
it was the reason for the revert of this CL.
Switch conversionSupported to use an SkColorType, which is enough info.
Replace the SkEncodedInfo::Alpha field on SkCodec::FrameInfo with an
SkAlphaType.
SkCodec still needs an SkEncodedInfo, so move its header (which is
already not SK_API) to include/private.
TBR=mtklein@chromium.org,reed@google.com
Change-Id: I928b1f55317602cb37d29da63b53026c8d139cee
Reviewed-on: https://skia-review.googlesource.com/80860
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/codec/SkAndroidCodec.h | 2 | ||||
-rw-r--r-- | include/codec/SkCodec.h | 11 | ||||
-rw-r--r-- | include/private/SkEncodedInfo.h (renamed from include/codec/SkEncodedInfo.h) | 39 |
3 files changed, 11 insertions, 41 deletions
diff --git a/include/codec/SkAndroidCodec.h b/include/codec/SkAndroidCodec.h index 8dfa8ba5fe..0d6cc185d9 100644 --- a/include/codec/SkAndroidCodec.h +++ b/include/codec/SkAndroidCodec.h @@ -43,8 +43,6 @@ public: virtual ~SkAndroidCodec(); - const SkEncodedInfo& getEncodedInfo() const; - const SkImageInfo& getInfo() const { return fInfo; } /** diff --git a/include/codec/SkCodec.h b/include/codec/SkCodec.h index d3035a7a71..43f0176081 100644 --- a/include/codec/SkCodec.h +++ b/include/codec/SkCodec.h @@ -9,11 +9,11 @@ #define SkCodec_DEFINED #include "../private/SkTemplates.h" +#include "../private/SkEncodedInfo.h" #include "SkCodecAnimation.h" #include "SkColor.h" #include "SkColorSpaceXform.h" #include "SkEncodedImageFormat.h" -#include "SkEncodedInfo.h" #include "SkEncodedOrigin.h" #include "SkImageInfo.h" #include "SkPixmap.h" @@ -169,8 +169,6 @@ public: */ const SkImageInfo& getInfo() const { return fSrcInfo; } - const SkEncodedInfo& getEncodedInfo() const { return fEncodedInfo; } - /** * Returns the image orientation stored in the EXIF data. * If there is no EXIF data, or if we cannot read the EXIF data, returns kTopLeft. @@ -612,7 +610,7 @@ public: * This is conservative; it will still return non-opaque if e.g. a * color index-based frame has a color with alpha but does not use it. */ - SkEncodedInfo::Alpha fAlpha; + SkAlphaType fAlphaType; /** * How this frame should be modified before decoding the next one. @@ -662,6 +660,8 @@ public: } protected: + const SkEncodedInfo& getEncodedInfo() const { return fEncodedInfo; } + using XformFormat = SkColorSpaceXform::ColorFormat; SkCodec(int width, @@ -847,7 +847,7 @@ private: * * Will be called for the appropriate frame, prior to initializing the colorXform. */ - virtual bool conversionSupported(const SkImageInfo& dst, SkEncodedInfo::Color srcColor, + virtual bool conversionSupported(const SkImageInfo& dst, SkColorType srcColor, bool srcIsOpaque, const SkColorSpace* srcCS) const; /** * Return whether these dimensions are supported as a scale. @@ -924,5 +924,6 @@ private: friend class DM::CodecSrc; // for fillIncompleteImage friend class SkSampledCodec; friend class SkIcoCodec; + friend class SkAndroidCodec; // for fEncodedInfo }; #endif // SkCodec_DEFINED diff --git a/include/codec/SkEncodedInfo.h b/include/private/SkEncodedInfo.h index dce88cadc1..217b859ed8 100644 --- a/include/codec/SkEncodedInfo.h +++ b/include/private/SkEncodedInfo.h @@ -118,40 +118,11 @@ public: * closest possible match to the encoded info. */ SkImageInfo makeImageInfo(int width, int height, sk_sp<SkColorSpace> colorSpace) const { - switch (fColor) { - case kGray_Color: - SkASSERT(kOpaque_Alpha == fAlpha); - return SkImageInfo::Make(width, height, kGray_8_SkColorType, - kOpaque_SkAlphaType, colorSpace); - case kGrayAlpha_Color: - SkASSERT(kOpaque_Alpha != fAlpha); - return SkImageInfo::Make(width, height, kN32_SkColorType, - kUnpremul_SkAlphaType, colorSpace); - case kPalette_Color: { - SkAlphaType alphaType = (kOpaque_Alpha == fAlpha) ? kOpaque_SkAlphaType : - kUnpremul_SkAlphaType; - return SkImageInfo::Make(width, height, kN32_SkColorType, - alphaType, colorSpace); - } - case kRGB_Color: - case kBGR_Color: - case kBGRX_Color: - case kYUV_Color: - case kInvertedCMYK_Color: - case kYCCK_Color: - SkASSERT(kOpaque_Alpha == fAlpha); - return SkImageInfo::Make(width, height, kN32_SkColorType, - kOpaque_SkAlphaType, colorSpace); - case kRGBA_Color: - case kBGRA_Color: - case kYUVA_Color: - SkASSERT(kOpaque_Alpha != fAlpha); - return SkImageInfo::Make(width, height, kN32_SkColorType, - kUnpremul_SkAlphaType, std::move(colorSpace)); - default: - SkASSERT(false); - return SkImageInfo::MakeUnknown(); - } + auto ct = kGray_Color == fColor ? kGray_8_SkColorType : + kN32_SkColorType ; + auto alpha = kOpaque_Alpha == fAlpha ? kOpaque_SkAlphaType + : kUnpremul_SkAlphaType; + return SkImageInfo::Make(width, height, ct, alpha, std::move(colorSpace)); } Color color() const { return fColor; } |