From a4db9be6a28c3a2c24c31e721ac804aec47ad379 Mon Sep 17 00:00:00 2001 From: Leon Scroggins III Date: Tue, 11 Apr 2017 10:32:02 -0400 Subject: Correct GIF frame dependencies and track alpha Add SkCodec::FrameInfo::fAlphaType. The SkImageInfo for the SkCodec specifies the SkAlphaType for the first frame, but the opacity can vary from frame to frame. When determining the required frame, also compute whether a frame has alpha. Update how we determine the required frame, which had bugs. (Update a test that had an incorrect required frame as a result.) Add new test images covering cases that have been fixed: - randPixelsAnim2.gif It has the following frames: A (keep) B (keep) (subset) C (disposePrevious) (covers B) D (any) (does *not* cover B) B and C depend on A, but D depends on B, since after disposing C, B should be visible again. - alphabetAnim.gif Includes frames which fill the image size, with different disposal methods and transparencies. Change-Id: Ie086167711c4cac4931ed8c4ddaeb9c9b0b91fdb Reviewed-on: https://skia-review.googlesource.com/9810 Commit-Queue: Leon Scroggins Reviewed-by: Mike Reed Reviewed-by: Matt Sarett --- include/codec/SkCodec.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'include/codec') diff --git a/include/codec/SkCodec.h b/include/codec/SkCodec.h index 11d28ea8f2..6d4352214c 100644 --- a/include/codec/SkCodec.h +++ b/include/codec/SkCodec.h @@ -619,6 +619,12 @@ public: * There could be an error in the stream. */ bool fFullyReceived; + + /** + * 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. + */ + SkAlphaType fAlphaType; }; /** -- cgit v1.2.3