4c11945a97
Bug: b/63908092 By default use the repetition count stored in the encoded data (if any). Allow setting the repetition count manually, so that the animation will stop after n+1 total cycles (unless -1 is used for infinite). If the animation is complete, make start reset it. When the animation is not running, make update return max double (i.e. no need to update any time soon). Fix a bug where the first call to update returned -1. Share write_bm with CodecAnimTest, for debugging. Update Sample to check isRunning rather than keeping its own record of whether the animation is running. Change-Id: I883e4d7325f7a7b23a422fa9d756f9ea3018f0f8 Reviewed-on: https://skia-review.googlesource.com/97082 Reviewed-by: Derek Sollenberger <djsollen@google.com> Commit-Queue: Leon Scroggins <scroggo@google.com>
45 lines
1.2 KiB
C++
45 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 CodecPriv_DEFINED
|
|
#define CodecPriv_DEFINED
|
|
|
|
#include "SkBitmap.h"
|
|
#include "SkCodec.h"
|
|
#include "SkCommonFlags.h"
|
|
#include "SkData.h"
|
|
#include "SkEncodedImageFormat.h"
|
|
#include "SkImageEncoder.h"
|
|
#include "SkOSPath.h"
|
|
#include "SkStream.h"
|
|
|
|
inline bool decode_memory(const void* mem, size_t size, SkBitmap* bm) {
|
|
std::unique_ptr<SkCodec> codec(SkCodec::MakeFromData(SkData::MakeWithoutCopy(mem, size)));
|
|
if (!codec) {
|
|
return false;
|
|
}
|
|
|
|
bm->allocPixels(codec->getInfo());
|
|
const SkCodec::Result result = codec->getPixels(codec->getInfo(), bm->getPixels(),
|
|
bm->rowBytes());
|
|
return result == SkCodec::kSuccess || result == SkCodec::kIncompleteInput;
|
|
}
|
|
|
|
inline void write_bm(const char* name, const SkBitmap& bm) {
|
|
if (FLAGS_writePath.isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
SkString filename = SkOSPath::Join(FLAGS_writePath[0], name);
|
|
filename.appendf(".png");
|
|
SkFILEWStream file(filename.c_str());
|
|
if (!SkEncodeImage(&file, bm, SkEncodedImageFormat::kPNG, 100)) {
|
|
SkDebugf("failed to write '%s'\n", filename.c_str());
|
|
}
|
|
}
|
|
|
|
#endif // CodecPriv_DEFINED
|