From e71b1a1496738ebce4a8cac4ffa5ee1413996542 Mon Sep 17 00:00:00 2001 From: scroggo Date: Tue, 1 Nov 2016 08:28:28 -0700 Subject: Report repetition count in SkCodec Add a new accessor to retrieve the repetition count. Remove constants (and corresponding copyright) in SkCodecAnimation. These may make sense for the calling code, but are not needed here. kRepetitionCountInfinite corresponds to Blink's kAnimationLoopInfinite. Move cLoopCountNotSeen to private. It is used to determine whether we still need to parse. Add a new enum to the parse query - only parse enough to determine the repetition count. Unlike Chromium, SkGifCodec does not account for deleting the reader (which SkGifCodec does not do) or failed decodes. Add a test. GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2447863002 Review-Url: https://codereview.chromium.org/2447863002 --- include/codec/SkCodec.h | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/codec/SkCodec.h b/include/codec/SkCodec.h index c2519cb840..f2a717c716 100644 --- a/include/codec/SkCodec.h +++ b/include/codec/SkCodec.h @@ -607,8 +607,8 @@ public: /** * Return info about the frames in the image. * - * May require reading through the stream to determine the number of - * frames. + * May require reading through the stream to determine info about the + * frames (including the count). * * As such, future decoding calls may require a rewind. * @@ -618,6 +618,21 @@ public: return this->onGetFrameInfo(); } + static constexpr int kRepetitionCountInfinite = -1; + + /** + * Return the number of times to repeat, if this image is animated. + * + * May require reading the stream to find the repetition count. + * + * As such, future decoding calls may require a rewind. + * + * For single-frame images, this will return 0. + */ + int getRepetitionCount() { + return this->onGetRepetitionCount(); + } + protected: /** * Takes ownership of SkStream* @@ -766,6 +781,10 @@ protected: return {}; } + virtual int onGetRepetitionCount() { + return 0; + } + /** * Used for testing with qcms. * FIXME: Remove this when we are done comparing with qcms. -- cgit v1.2.3