| Index: gm/animatedGif.cpp
|
| diff --git a/gm/animatedGif.cpp b/gm/animatedGif.cpp
|
| index 4ec70255628853e9a6c0fa7e55ee9959f407e108..3ee00a5fc4f7b749297564e3c9dfe23e9e625994 100644
|
| --- a/gm/animatedGif.cpp
|
| +++ b/gm/animatedGif.cpp
|
| @@ -33,11 +33,12 @@ namespace {
|
|
|
| class AnimatedGifGM : public skiagm::GM {
|
| private:
|
| - std::unique_ptr<SkCodec> fCodec;
|
| - size_t fFrame;
|
| - double fNextUpdate;
|
| - size_t fTotalFrames;
|
| - std::vector<SkBitmap> fFrames;
|
| + std::unique_ptr<SkCodec> fCodec;
|
| + size_t fFrame;
|
| + double fNextUpdate;
|
| + size_t fTotalFrames;
|
| + std::vector<SkCodec::FrameInfo> fFrameInfos;
|
| + std::vector<SkBitmap> fFrames;
|
|
|
| void drawBounds(SkCanvas* canvas) {
|
| if (!fCodec) {
|
| @@ -62,7 +63,7 @@ private:
|
| SkCodec::MultiFrameOptions multiOpts;
|
| multiOpts.fIndex = frameIndex;
|
| multiOpts.fHasPriorFrame = false;
|
| - const size_t requiredFrame = fCodec->getRequiredFrame(frameIndex);
|
| + const size_t requiredFrame = fFrameInfos[frameIndex].fRequiredFrame;
|
| if (requiredFrame != SkCodec::kIndependentFrame) {
|
| SkASSERT(requiredFrame < fFrames.size());
|
| SkBitmap& requiredBitmap = fFrames[requiredFrame];
|
| @@ -100,7 +101,7 @@ private:
|
| if (this->initCodec()) {
|
| SkISize dim = fCodec->getInfo().dimensions();
|
| // Wide enough to display all the frames.
|
| - dim.fWidth *= fCodec->getFrameCount();
|
| + dim.fWidth *= fTotalFrames;
|
| // Tall enough to show the row of frames plus an animating version.
|
| dim.fHeight *= 2;
|
| return dim;
|
| @@ -142,7 +143,8 @@ private:
|
| }
|
|
|
| fFrame = 0;
|
| - fTotalFrames = fCodec->getFrameCount();
|
| + fFrameInfos = fCodec->getFrameInfo();
|
| + fTotalFrames = fFrameInfos.size();
|
| return true;
|
| }
|
|
|
| @@ -171,7 +173,7 @@ private:
|
| // I'm assuming this gets called *after* onOnceBeforeDraw, so our first frame should
|
| // already have been retrieved.
|
| SkASSERT(fFrame == 0);
|
| - fNextUpdate = secs + fCodec->getFrameDuration(fFrame);
|
| + fNextUpdate = secs + fFrameInfos[fFrame].fDuration;
|
|
|
| return true;
|
| }
|
| @@ -189,7 +191,7 @@ private:
|
|
|
| // Note that we loop here. This is not safe if we need to draw the intermediate frame
|
| // in order to draw correctly.
|
| - fNextUpdate += fCodec->getFrameDuration(fFrame);
|
| + fNextUpdate += fFrameInfos[fFrame].fDuration;
|
| }
|
|
|
| return true;
|
|
|