From 1793e7bb46c1f9d430c1a699a1c3d3168159b659 Mon Sep 17 00:00:00 2001 From: Leon Scroggins Date: Tue, 5 Dec 2017 15:38:14 +0000 Subject: Revert "Hide SkEncodedInfo" This reverts commit c6f7a4ffa9522159efc42f7c948bba5e66bb8844. Reason for revert: Causing differences in Gold, stemming from the fact that this changes the recommended SkImageInfo for 16 bits-per-component PNG from N32 to F16. - an F16 bitmap already png-encodes to a 16 bits-per-component PNG, but it does not encode a linear colorspace (possibly a bug?). when we decode this PNG using getInfo(), it fails because it has an F16 color type and non-linear colorspace. (In the encode-srgb-png gm, this results in blank results for F16.) We could correct this on the encoder side, but it seems possible that a 16 bits-per-component PNG could be encoded with a different color space. In that case, we'd want SkCodec to recommend F16/SRGBLinear, but I think we'd want the SkCodec to store the encoded SkColorSpace so that we can Xform between the two. Currently SkCodec only stores one color space, so that will require a refactor. - When decoding 16-bits-per-component PNGs, we are now decoding them to F16. This shows differences in Gold. The srgb/gpu results now look more like F16. I think this is fine. Original change's description: > 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, use it to make the same decision that Android > would have made - 16 bits per component means to set the info to F16. Add > a test that computeOutputColorType behaves as expected. > > 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. > > Change-Id: Ie2cf11339bf999ebfd4390c0f448f7edd6feabda > Reviewed-on: https://skia-review.googlesource.com/79260 > Reviewed-by: Mike Reed > Reviewed-by: Mike Klein > Commit-Queue: Leon Scroggins TBR=mtklein@chromium.org,scroggo@google.com,reed@google.com Change-Id: I0c5dd1461e1b70d1e55349a8e7ee6b029c3f556e No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia:7353, skia:6839 Reviewed-on: https://skia-review.googlesource.com/80660 Reviewed-by: Leon Scroggins Commit-Queue: Leon Scroggins --- third_party/gif/SkGifImageReader.cpp | 7 +++---- third_party/gif/SkGifImageReader.h | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'third_party') diff --git a/third_party/gif/SkGifImageReader.cpp b/third_party/gif/SkGifImageReader.cpp index a04f8e11d0..a54fb59d3b 100644 --- a/third_party/gif/SkGifImageReader.cpp +++ b/third_party/gif/SkGifImageReader.cpp @@ -879,16 +879,15 @@ static bool restore_bg(const SkFrame& frame) { return frame.getDisposalMethod() == SkCodecAnimation::DisposalMethod::kRestoreBGColor; } -SkEncodedInfo::Alpha SkGIFFrameContext::onReportedAlpha() const { +bool SkGIFFrameContext::onReportsAlpha() const { // Note: We could correct these after decoding - i.e. some frames may turn out to be // independent and opaque if they do not use the transparent pixel, but that would require // checking whether each pixel used the transparent index. - return is_palette_index_valid(this->transparentPixel()) ? SkEncodedInfo::kBinary_Alpha - : SkEncodedInfo::kOpaque_Alpha; + return is_palette_index_valid(this->transparentPixel()); } void SkFrameHolder::setAlphaAndRequiredFrame(SkFrame* frame) { - const bool reportsAlpha = frame->reportedAlpha() != SkEncodedInfo::kOpaque_Alpha; + const bool reportsAlpha = frame->reportsAlpha(); const auto screenRect = SkIRect::MakeWH(fScreenWidth, fScreenHeight); const auto frameRect = frame_rect_on_screen(frame->frameRect(), screenRect); diff --git a/third_party/gif/SkGifImageReader.h b/third_party/gif/SkGifImageReader.h index 5d8597fccf..b5eca10dfb 100644 --- a/third_party/gif/SkGifImageReader.h +++ b/third_party/gif/SkGifImageReader.h @@ -247,7 +247,7 @@ public: SkGIFColorMap& localColorMap() { return m_localColorMap; } protected: - SkEncodedInfo::Alpha onReportedAlpha() const override; + bool onReportsAlpha() const override; private: int m_transparentPixel; // Index of transparent pixel. Value is kNotFound if there is no transparent pixel. -- cgit v1.2.3