Rename SkCodec::kNone to SkCodec::kNoFrame
Add a SK_LEGACY_SKCODEC_NONE_ENUM #define'able to ease transition.
Also rename another internal "kNone" enum in SkWebpCodec.cpp.
The "kNone" name is overloaded:
- include/core/SkImageGenerator.h defines its own kNone.
- include/encode/SkPngEncoder.h defines its own kNone.
- include/private/GrTypesPriv.h defines multiple kNone's.
Bug: skia:
Change-Id: I18c03a74f2f1b0237016e0eef53dcd4478b82609
Reviewed-on: https://skia-review.googlesource.com/146020
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 93877c1..57827e0 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -501,18 +501,18 @@
// Used to cache a frame that future frames will depend on.
SkAutoMalloc priorFramePixels;
- int cachedFrame = SkCodec::kNone;
+ int cachedFrame = SkCodec::kNoFrame;
for (int i = 0; static_cast<size_t>(i) < frameInfos.size(); i++) {
options.fFrameIndex = i;
// Check for a prior frame
const int reqFrame = frameInfos[i].fRequiredFrame;
- if (reqFrame != SkCodec::kNone && reqFrame == cachedFrame
+ if (reqFrame != SkCodec::kNoFrame && reqFrame == cachedFrame
&& priorFramePixels.get()) {
// Copy into pixels
memcpy(pixels.get(), priorFramePixels.get(), safeSize);
options.fPriorFrame = reqFrame;
} else {
- options.fPriorFrame = SkCodec::kNone;
+ options.fPriorFrame = SkCodec::kNoFrame;
}
SkCodec::Result result = codec->getPixels(decodeInfo, pixels.get(),
rowBytes, &options);
diff --git a/gm/animatedGif.cpp b/gm/animatedGif.cpp
index 8b92e94..6e9789e 100644
--- a/gm/animatedGif.cpp
+++ b/gm/animatedGif.cpp
@@ -54,7 +54,7 @@
SkCodec::Options opts;
opts.fFrameIndex = frameIndex;
const int requiredFrame = fFrameInfos[frameIndex].fRequiredFrame;
- if (requiredFrame != SkCodec::kNone) {
+ if (requiredFrame != SkCodec::kNoFrame) {
SkASSERT(requiredFrame >= 0
&& static_cast<size_t>(requiredFrame) < fFrames.size());
SkBitmap& requiredBitmap = fFrames[requiredFrame];
diff --git a/include/codec/SkCodec.h b/include/codec/SkCodec.h
index 986544a..ecb762e 100644
--- a/include/codec/SkCodec.h
+++ b/include/codec/SkCodec.h
@@ -252,7 +252,7 @@
: fZeroInitialized(kNo_ZeroInitialized)
, fSubset(nullptr)
, fFrameIndex(0)
- , fPriorFrame(kNone)
+ , fPriorFrame(kNoFrame)
{}
ZeroInitialized fZeroInitialized;
@@ -283,7 +283,7 @@
int fFrameIndex;
/**
- * If not kNone, the dst already contains the prior frame at this index.
+ * If not kNoFrame, the dst already contains the prior frame at this index.
*
* Only meaningful for multi-frame images.
*
@@ -293,7 +293,7 @@
* indicate that that frame is already in the dst. Options.fZeroInitialized
* is ignored in this case.
*
- * If set to kNone, the codec will decode any necessary required frame(s) first.
+ * If set to kNoFrame, the codec will decode any necessary required frame(s) first.
*/
int fPriorFrame;
};
@@ -571,9 +571,17 @@
return this->onGetFrameCount();
}
- // The required frame for an independent frame is marked as
- // kNone.
- static constexpr int kNone = -1;
+ // Sentinel value used when a frame index implies "no frame":
+ // - FrameInfo::fRequiredFrame set to this value means the frame
+ // is independent.
+ // - Options::fPriorFrame set to this value means no (relevant) prior frame
+ // is residing in dst's memory.
+ static constexpr int kNoFrame = -1;
+
+ // This transitional definition was added in August 2018, and will eventually be removed.
+#ifdef SK_LEGACY_SKCODEC_NONE_ENUM
+ static constexpr int kNone = kNoFrame;
+#endif
/**
* Information about individual frames in a multi-framed image.
@@ -581,7 +589,7 @@
struct FrameInfo {
/**
* The frame that this frame needs to be blended with, or
- * kNone if this frame is independent.
+ * kNoFrame if this frame is independent.
*
* Note that this is the *earliest* frame that can be used
* for blending. Any frame from [fRequiredFrame, i) can be
diff --git a/src/android/SkAnimatedImage.cpp b/src/android/SkAnimatedImage.cpp
index 6bbea6b..d03040c 100644
--- a/src/android/SkAnimatedImage.cpp
+++ b/src/android/SkAnimatedImage.cpp
@@ -96,7 +96,7 @@
}
SkAnimatedImage::Frame::Frame()
- : fIndex(SkCodec::kNone)
+ : fIndex(SkCodec::kNoFrame)
{}
bool SkAnimatedImage::Frame::init(const SkImageInfo& info, OnInit onInit) {
@@ -140,7 +140,7 @@
fFinished = false;
fRepetitionsCompleted = 0;
if (fDisplayFrame.fIndex != 0) {
- fDisplayFrame.fIndex = SkCodec::kNone;
+ fDisplayFrame.fIndex = SkCodec::kNoFrame;
this->decodeNextFrame();
}
}
@@ -193,7 +193,7 @@
animationEnded = true;
if (0 == frameToDecode) {
// Static image. This is okay.
- frameInfo.fRequiredFrame = SkCodec::kNone;
+ frameInfo.fRequiredFrame = SkCodec::kNoFrame;
frameInfo.fAlphaType = fCodec->getInfo().alphaType();
frameInfo.fDisposalMethod = SkCodecAnimation::DisposalMethod::kKeep;
// These fields won't be read.
@@ -233,12 +233,12 @@
// entire dependency chain.
SkCodec::Options options;
options.fFrameIndex = frameToDecode;
- if (frameInfo.fRequiredFrame == SkCodec::kNone) {
+ if (frameInfo.fRequiredFrame == SkCodec::kNoFrame) {
if (is_restore_previous(frameInfo.fDisposalMethod)) {
// frameToDecode will be discarded immediately after drawing, so
// do not overwrite a frame which could possibly be used in the
// future.
- if (fDecodingFrame.fIndex != SkCodec::kNone &&
+ if (fDecodingFrame.fIndex != SkCodec::kNoFrame &&
!is_restore_previous(fDecodingFrame.fDisposalMethod)) {
using std::swap;
swap(fDecodingFrame, fRestoreFrame);
@@ -246,7 +246,8 @@
}
} else {
auto validPriorFrame = [&frameInfo, &frameToDecode](const Frame& frame) {
- if (SkCodec::kNone == frame.fIndex || is_restore_previous(frame.fDisposalMethod)) {
+ if (SkCodec::kNoFrame == frame.fIndex ||
+ is_restore_previous(frame.fDisposalMethod)) {
return false;
}
diff --git a/src/codec/SkCodec.cpp b/src/codec/SkCodec.cpp
index 8bfaae8..5564e89 100644
--- a/src/codec/SkCodec.cpp
+++ b/src/codec/SkCodec.cpp
@@ -280,8 +280,8 @@
}
const int requiredFrame = frame->getRequiredFrame();
- if (requiredFrame != kNone) {
- if (options.fPriorFrame != kNone) {
+ if (requiredFrame != kNoFrame) {
+ if (options.fPriorFrame != kNoFrame) {
// Check for a valid frame as a starting point. Alternatively, we could
// treat an invalid frame as not providing one, but rejecting it will
// make it easier to catch the mistake.
@@ -728,7 +728,7 @@
}
static bool independent(const SkFrame& frame) {
- return frame.getRequiredFrame() == SkCodec::kNone;
+ return frame.getRequiredFrame() == SkCodec::kNoFrame;
}
static bool restore_bg(const SkFrame& frame) {
@@ -743,7 +743,7 @@
const int i = frame->frameId();
if (0 == i) {
frame->setHasAlpha(reportsAlpha || frameRect != screenRect);
- frame->setRequiredFrame(SkCodec::kNone);
+ frame->setRequiredFrame(SkCodec::kNoFrame);
return;
}
@@ -751,7 +751,7 @@
const bool blendWithPrevFrame = frame->getBlend() == SkCodecAnimation::Blend::kPriorFrame;
if ((!reportsAlpha || !blendWithPrevFrame) && frameRect == screenRect) {
frame->setHasAlpha(reportsAlpha);
- frame->setRequiredFrame(SkCodec::kNone);
+ frame->setRequiredFrame(SkCodec::kNoFrame);
return;
}
@@ -760,7 +760,7 @@
const int prevId = prevFrame->frameId();
if (0 == prevId) {
frame->setHasAlpha(true);
- frame->setRequiredFrame(SkCodec::kNone);
+ frame->setRequiredFrame(SkCodec::kNoFrame);
return;
}
@@ -773,7 +773,7 @@
if (clearPrevFrame) {
if (prevFrameRect == screenRect || independent(*prevFrame)) {
frame->setHasAlpha(true);
- frame->setRequiredFrame(SkCodec::kNone);
+ frame->setRequiredFrame(SkCodec::kNoFrame);
return;
}
}
@@ -790,8 +790,8 @@
while (frameRect.contains(prevFrameRect)) {
const int prevRequiredFrame = prevFrame->getRequiredFrame();
- if (prevRequiredFrame == SkCodec::kNone) {
- frame->setRequiredFrame(SkCodec::kNone);
+ if (prevRequiredFrame == SkCodec::kNoFrame) {
+ frame->setRequiredFrame(SkCodec::kNoFrame);
frame->setHasAlpha(true);
return;
}
@@ -803,7 +803,7 @@
if (restore_bg(*prevFrame)) {
frame->setHasAlpha(true);
if (prevFrameRect == screenRect || independent(*prevFrame)) {
- frame->setRequiredFrame(SkCodec::kNone);
+ frame->setRequiredFrame(SkCodec::kNoFrame);
} else {
// Note: As above, frame could still be independent, e.g. if
// prevFrame covers its required frame and that frame is
diff --git a/src/codec/SkGifCodec.cpp b/src/codec/SkGifCodec.cpp
index 036ee0b..3ac5ed3 100644
--- a/src/codec/SkGifCodec.cpp
+++ b/src/codec/SkGifCodec.cpp
@@ -343,7 +343,7 @@
// (or it is already filled for us), so we report rowsDecoded to be the full
// height.
bool filledBackground = false;
- if (frameContext->getRequiredFrame() == kNone) {
+ if (frameContext->getRequiredFrame() == kNoFrame) {
// We may need to clear to transparent for one of the following reasons:
// - The frameRect does not cover the full bounds. haveDecodedRow will
// only draw inside the frameRect, so we need to clear the rest.
diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp
index 0d12dad..a9c0c32 100644
--- a/src/codec/SkWebpCodec.cpp
+++ b/src/codec/SkWebpCodec.cpp
@@ -435,7 +435,7 @@
SkAssertResult(WebPDemuxGetFrame(fDemux, index + 1, &frame));
const bool independent = index == 0 ? true :
- (fFrameHolder.frame(index)->getRequiredFrame() == kNone);
+ (fFrameHolder.frame(index)->getRequiredFrame() == kNoFrame);
// Get the frameRect. libwebp will have already signaled an error if this is not fully
// contained by the canvas.
auto frameRect = SkIRect::MakeXYWH(frame.x_offset, frame.y_offset, frame.width, frame.height);
@@ -545,7 +545,7 @@
// Choose the step when we will perform premultiplication.
enum {
- kNone,
+ kNoPremul,
kBlendLine,
kColorXform,
kLibwebp,
@@ -553,7 +553,7 @@
auto choose_premul_step = [&]() {
if (!frame.has_alpha) {
// None necessary.
- return kNone;
+ return kNoPremul;
}
if (blendWithPrevFrame) {
// Premultiply in blend_line, in a linear space.
@@ -562,7 +562,7 @@
if (dstInfo.alphaType() != kPremul_SkAlphaType) {
// No blending is necessary, so we only need to premultiply if the
// client requested it.
- return kNone;
+ return kNoPremul;
}
if (this->colorXform()) {
// Premultiply in the colorXform, in a linear space.
diff --git a/tests/AnimatedImageTest.cpp b/tests/AnimatedImageTest.cpp
index 6532b58..fd1438a 100644
--- a/tests/AnimatedImageTest.cpp
+++ b/tests/AnimatedImageTest.cpp
@@ -213,14 +213,14 @@
SkCodec::Options options;
options.fFrameIndex = (int) i;
options.fPriorFrame = frameInfos[i].fRequiredFrame;
- if (options.fPriorFrame == SkCodec::kNone) {
+ if (options.fPriorFrame == SkCodec::kNoFrame) {
bm.allocPixels(info);
bm.eraseColor(0);
} else {
const SkBitmap& priorFrame = frames[options.fPriorFrame];
if (!sk_tool_utils::copy_to(&bm, priorFrame.colorType(), priorFrame)) {
ERRORF(r, "Failed to copy %s frame %i", file, options.fPriorFrame);
- options.fPriorFrame = SkCodec::kNone;
+ options.fPriorFrame = SkCodec::kNoFrame;
}
REPORTER_ASSERT(r, bm.setAlphaType(frameInfos[i].fAlphaType));
}
diff --git a/tests/CodecAnimTest.cpp b/tests/CodecAnimTest.cpp
index 4e069c1..6944d25 100644
--- a/tests/CodecAnimTest.cpp
+++ b/tests/CodecAnimTest.cpp
@@ -48,7 +48,7 @@
SkCodec::Options options;
options.fFrameIndex = 1;
- options.fPriorFrame = SkCodec::kNone;
+ options.fPriorFrame = SkCodec::kNoFrame;
const auto result = codec->getPixels(info, bm.getPixels(), bm.rowBytes(),
&options);
@@ -60,11 +60,16 @@
}
DEF_TEST(Codec_frames, r) {
- #define kOpaque kOpaque_SkAlphaType
- #define kUnpremul kUnpremul_SkAlphaType
- #define kKeep SkCodecAnimation::DisposalMethod::kKeep
- #define kRestoreBG SkCodecAnimation::DisposalMethod::kRestoreBGColor
- #define kRestorePrev SkCodecAnimation::DisposalMethod::kRestorePrevious
+ constexpr int kNoFrame = SkCodec::kNoFrame;
+ constexpr SkAlphaType kOpaque = kOpaque_SkAlphaType;
+ constexpr SkAlphaType kUnpremul = kUnpremul_SkAlphaType;
+ constexpr SkCodecAnimation::DisposalMethod kKeep =
+ SkCodecAnimation::DisposalMethod::kKeep;
+ constexpr SkCodecAnimation::DisposalMethod kRestoreBG =
+ SkCodecAnimation::DisposalMethod::kRestoreBGColor;
+ constexpr SkCodecAnimation::DisposalMethod kRestorePrev =
+ SkCodecAnimation::DisposalMethod::kRestorePrevious;
+
static const struct {
const char* fName;
int fFrameCount;
@@ -86,8 +91,7 @@
0,
{ kKeep, kRestoreBG, kKeep, kKeep, kKeep, kRestoreBG, kKeep } },
{ "images/alphabetAnim.gif", 13,
- { SkCodec::kNone, 0, 0, 0, 0, 5, 6, SkCodec::kNone,
- SkCodec::kNone, 9, 10, 11 },
+ { kNoFrame, 0, 0, 0, 0, 5, 6, kNoFrame, kNoFrame, 9, 10, 11 },
{ kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul,
kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul, kUnpremul },
{ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 },
@@ -139,23 +143,18 @@
{ "images/webp-animated.webp", 3, { 0, 1 }, { kOpaque, kOpaque },
{ 1000, 500, 1000 }, SkCodec::kRepetitionCountInfinite,
{ kKeep, kKeep, kKeep } },
- { "images/blendBG.webp", 7, { 0, SkCodec::kNone, SkCodec::kNone, SkCodec::kNone,
- 4, 4 },
+ { "images/blendBG.webp", 7,
+ { 0, kNoFrame, kNoFrame, kNoFrame, 4, 4 },
{ kOpaque, kOpaque, kUnpremul, kOpaque, kUnpremul, kUnpremul },
{ 525, 500, 525, 437, 609, 729, 444 }, 7,
{ kKeep, kKeep, kKeep, kKeep, kKeep, kKeep, kKeep } },
{ "images/required.webp", 7,
- { 0, 1, 1, SkCodec::kNone, 4, 4 },
+ { 0, 1, 1, kNoFrame, 4, 4 },
{ kOpaque, kUnpremul, kUnpremul, kOpaque, kOpaque, kOpaque },
{ 100, 100, 100, 100, 100, 100, 100 },
1,
{ kKeep, kRestoreBG, kKeep, kKeep, kKeep, kRestoreBG, kKeep } },
};
- #undef kOpaque
- #undef kUnpremul
- #undef kKeep
- #undef kRestorePrev
- #undef kRestoreBG
for (const auto& rec : gRecs) {
sk_sp<SkData> data(GetResourceAsData(rec.fName));
@@ -281,7 +280,7 @@
}
if (0 == i) {
- REPORTER_ASSERT(r, frameInfo.fRequiredFrame == SkCodec::kNone);
+ REPORTER_ASSERT(r, frameInfo.fRequiredFrame == SkCodec::kNoFrame);
} else if (rec.fRequiredFrames[i-1] != frameInfo.fRequiredFrame) {
ERRORF(r, "%s's frame %i has wrong dependency! expected: %i\tactual: %i",
rec.fName, i, rec.fRequiredFrames[i-1], frameInfo.fRequiredFrame);
@@ -311,7 +310,7 @@
decodeInfo = info.makeAlphaType(frameInfos[index].fAlphaType);
}
bm->allocPixels(decodeInfo);
- if (cachedIndex != SkCodec::kNone) {
+ if (cachedIndex != SkCodec::kNoFrame) {
// First copy the pixels from the cached frame
const bool success = sk_tool_utils::copy_to(bm, kN32_SkColorType,
cachedFrames[cachedIndex]);
@@ -322,7 +321,8 @@
opts.fPriorFrame = cachedIndex;
const auto result = codec->getPixels(decodeInfo, bm->getPixels(), bm->rowBytes(),
&opts);
- if (cachedIndex != SkCodec::kNone && restore_previous(frameInfos[cachedIndex])) {
+ if (cachedIndex != SkCodec::kNoFrame &&
+ restore_previous(frameInfos[cachedIndex])) {
if (result == SkCodec::kInvalidParameters) {
return true;
}
@@ -338,11 +338,11 @@
for (int i = 0; i < frameCount; i++) {
SkBitmap& cachedFrame = cachedFrames[i];
- if (!decode(&cachedFrame, i, SkCodec::kNone)) {
+ if (!decode(&cachedFrame, i, SkCodec::kNoFrame)) {
continue;
}
const auto reqFrame = frameInfos[i].fRequiredFrame;
- if (reqFrame == SkCodec::kNone) {
+ if (reqFrame == SkCodec::kNoFrame) {
// Nothing to compare against.
continue;
}
@@ -430,7 +430,7 @@
SkBitmap bm2;
bm2.allocPixels(info);
- options.fPriorFrame = SkCodec::kNone;
+ options.fPriorFrame = SkCodec::kNoFrame;
result = codec->codec()->getPixels(info, bm2.getPixels(), bm2.rowBytes(),
&options);
REPORTER_ASSERT(r, result == SkCodec::kSuccess);
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp
index 742436d..9bbadc6 100644
--- a/tests/CodecTest.cpp
+++ b/tests/CodecTest.cpp
@@ -1443,7 +1443,7 @@
for (int i = 0; static_cast<size_t>(i) < frameInfos.size(); i++) {
opts.fFrameIndex = i;
const auto reqFrame = frameInfos[i].fRequiredFrame;
- opts.fPriorFrame = reqFrame == i - 1 ? reqFrame : SkCodec::kNone;
+ opts.fPriorFrame = reqFrame == i - 1 ? reqFrame : SkCodec::kNoFrame;
auto result = codec->startIncrementalDecode(info, bm.getPixels(), bm.rowBytes(), &opts);
if (result != SkCodec::kSuccess) {
ERRORF(r, "Failed to start decoding frame %i (out of %i) with error %i\n", i,
diff --git a/third_party/gif/SkGifImageReader.cpp b/third_party/gif/SkGifImageReader.cpp
index c62b788..0cb77ba 100644
--- a/third_party/gif/SkGifImageReader.cpp
+++ b/third_party/gif/SkGifImageReader.cpp
@@ -157,7 +157,8 @@
return;
// CALLBACK: Let the client know we have decoded a row.
- const bool writeTransparentPixels = (SkCodec::kNone == m_frameContext->getRequiredFrame());
+ const bool writeTransparentPixels =
+ SkCodec::kNoFrame == m_frameContext->getRequiredFrame();
m_client->haveDecodedRow(m_frameContext->frameId(), rowBegin,
drowStart, drowEnd - drowStart + 1, writeTransparentPixels);