123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SkAnimCodecPlayer_DEFINED
- #define SkAnimCodecPlayer_DEFINED
- #include "SkCodec.h"
- class SkImage;
- class SkAnimCodecPlayer {
- public:
- SkAnimCodecPlayer(std::unique_ptr<SkCodec> codec);
- ~SkAnimCodecPlayer();
- /**
- * Returns the current frame of the animation. This defaults to the first frame for
- * animated codecs (i.e. msec = 0). Calling this multiple times (without calling seek())
- * will always return the same image object (or null if there was an error).
- */
- sk_sp<SkImage> getFrame();
- /**
- * Return the size of the image(s) that will be returned by getFrame().
- */
- SkISize dimensions();
- /**
- * Returns the total duration of the animation in milliseconds. Returns 0 for a single-frame
- * image.
- */
- uint32_t duration() { return fTotalDuration; }
- /**
- * Finds the closest frame associated with the time code (in milliseconds) and sets that
- * to be the current frame (call getFrame() to retrieve that image).
- * Returns true iff this call to seek() changed the "current frame" for the animation.
- * Thus if seek() returns false, then getFrame() will return the same image as it did
- * before this call to seek().
- */
- bool seek(uint32_t msec);
- private:
- std::unique_ptr<SkCodec> fCodec;
- SkImageInfo fImageInfo;
- std::vector<SkCodec::FrameInfo> fFrameInfos;
- std::vector<sk_sp<SkImage> > fImages;
- int fCurrIndex = 0;
- uint32_t fTotalDuration;
- sk_sp<SkImage> getFrameAt(int index);
- };
- #endif
|