[skottie] Pre-flight animation in-point, out-point
Bug: skia:8264
Change-Id: Icde0e9d76f51e96f7e5246f1f87e5fa6f32d0a14
Reviewed-on: https://skia-review.googlesource.com/148020
Commit-Queue: Florin Malita <fmalita@chromium.org>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Auto-Submit: Florin Malita <fmalita@chromium.org>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
diff --git a/modules/skottie/include/Skottie.h b/modules/skottie/include/Skottie.h
index 1a27bd3..2375a2e 100644
--- a/modules/skottie/include/Skottie.h
+++ b/modules/skottie/include/Skottie.h
@@ -83,7 +83,7 @@
private:
Animation(const ResourceProvider&, SkString ver, const SkSize& size, SkScalar fps,
- const skjson::ObjectValue&, Stats*);
+ SkScalar in, SkScalar out, const skjson::ObjectValue&, Stats*);
SkString fVersion;
SkSize fSize;
diff --git a/modules/skottie/src/Skottie.cpp b/modules/skottie/src/Skottie.cpp
index 04b1caa..ccc2fed 100644
--- a/modules/skottie/src/Skottie.cpp
+++ b/modules/skottie/src/Skottie.cpp
@@ -1328,14 +1328,18 @@
const auto t1 = SkTime::GetMSecs();
stats->fJsonParseTimeMS = t1 - t0;
- const auto version = ParseDefault<SkString>(json["v"], SkString());
- const auto size = SkSize::Make(ParseDefault<float>(json["w"], 0.0f),
- ParseDefault<float>(json["h"], 0.0f));
- const auto fps = ParseDefault<float>(json["fr"], -1.0f);
+ const auto version = ParseDefault<SkString>(json["v"], SkString());
+ const auto size = SkSize::Make(ParseDefault<float>(json["w"], 0.0f),
+ ParseDefault<float>(json["h"], 0.0f));
+ const auto fps = ParseDefault<float>(json["fr"], -1.0f),
+ inPoint = ParseDefault<float>(json["ip"], 0.0f),
+ outPoint = SkTMax(ParseDefault<float>(json["op"], SK_ScalarMax), inPoint);
- if (size.isEmpty() || version.isEmpty() || fps <= 0) {
- LOG("!! invalid animation params (version: %s, size: [%f %f], frame rate: %f)",
- version.c_str(), size.width(), size.height(), fps);
+ if (size.isEmpty() || version.isEmpty() || fps <= 0 ||
+ !SkScalarIsFinite(inPoint) || !SkScalarIsFinite(outPoint)) {
+ LOG("!! invalid animation params (version: %s, size: [%f %f], frame rate: %f, "
+ "in-point: %f, out-point: %f)\n",
+ version.c_str(), size.width(), size.height(), fps, inPoint, outPoint);
return nullptr;
}
@@ -1345,7 +1349,8 @@
NullResourceProvider null_provider;
const auto anim = sk_sp<Animation>(new Animation(provider ? *provider : null_provider,
- std::move(version), size, fps, json, stats));
+ std::move(version), size, fps,
+ inPoint, outPoint, json, stats));
const auto t2 = SkTime::GetMSecs();
stats->fSceneParseTimeMS = t2 - t1;
stats->fTotalLoadTimeMS = t2 - t0;
@@ -1383,13 +1388,14 @@
}
Animation::Animation(const ResourceProvider& resources,
- SkString version, const SkSize& size, SkScalar fps,
+ SkString version, const SkSize& size,
+ SkScalar fps, SkScalar in, SkScalar out,
const skjson::ObjectValue& json, Stats* stats)
: fVersion(std::move(version))
, fSize(size)
, fFrameRate(fps)
- , fInPoint(ParseDefault<float>(json["ip"], 0.0f))
- , fOutPoint(SkTMax(ParseDefault<float>(json["op"], SK_ScalarMax), fInPoint)) {
+ , fInPoint(in)
+ , fOutPoint(out) {
internal::AssetMap assets;
if (const skjson::ArrayValue* jassets = json["assets"]) {