33deb7ed4d
SkCodec sets fRequiredFrame to be the earliest possible frame that a given frame can depend on. e.g. - Frame A fills the screen, Keep - Frame B does not cover A, Keep - Frame C covers B but not A, and is opaque Frame C can depend on either A or B. SkCodec already reports that C depends on A. This CL allows a client of SkCodec to use either A or B to create C. Also expose the DisposalMethod. Since any frame between A and C can be used to create C except for DisposePrevious frames, the client needs to be able to know the disposal method so they do not try to use such a frame to create C. Further, the disposal method can be used to give the client a better idea whether they will continue to need a frame. (e.g. if frame i is DisposePrevious and depends on i-1, the client may not want to steal i-1 to create i, since i+1 may also depend on i-1.) TODO: Share code for decoding prior frames between GIF and WEBP Change-Id: I91a5ae22ba3d8dfbe0bde833fa67ae3da0d81ed6 Reviewed-on: https://skia-review.googlesource.com/13722 Reviewed-by: Mike Reed <reed@google.com> Reviewed-by: Chris Blume <cblume@chromium.org> Reviewed-by: Matt Sarett <msarett@google.com> Commit-Queue: Leon Scroggins <scroggo@google.com>
44 lines
1.2 KiB
C++
44 lines
1.2 KiB
C++
/*
|
|
* Copyright 2016 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef SkCodecAnimation_DEFINED
|
|
#define SkCodecAnimation_DEFINED
|
|
|
|
namespace SkCodecAnimation {
|
|
/**
|
|
* This specifies how the next frame is based on this frame.
|
|
*
|
|
* Names are based on the GIF 89a spec.
|
|
*
|
|
* The numbers correspond to values in a GIF.
|
|
*/
|
|
enum class DisposalMethod {
|
|
/**
|
|
* The next frame should be drawn on top of this one.
|
|
*
|
|
* In a GIF, a value of 0 (not specified) is also treated as Keep.
|
|
*/
|
|
kKeep = 1,
|
|
|
|
/**
|
|
* Similar to Keep, except the area inside this frame's rectangle
|
|
* should be cleared to the BackGround color (transparent) before
|
|
* drawing the next frame.
|
|
*/
|
|
kRestoreBGColor = 2,
|
|
|
|
/**
|
|
* The next frame should be drawn on top of the previous frame - i.e.
|
|
* disregarding this one.
|
|
*
|
|
* In a GIF, a value of 4 is also treated as RestorePrevious.
|
|
*/
|
|
kRestorePrevious = 3,
|
|
};
|
|
};
|
|
#endif // SkCodecAnimation_DEFINED
|