From cc9c45d2e09fb77e52f5585beb84a5bfedc72454 Mon Sep 17 00:00:00 2001 From: Florin Malita Date: Mon, 20 Aug 2018 10:02:12 -0400 Subject: [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 Commit-Queue: Kevin Lubick Auto-Submit: Florin Malita Reviewed-by: Kevin Lubick --- modules/skottie/include/Skottie.h | 2 +- modules/skottie/src/Skottie.cpp | 30 ++++++++++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) (limited to 'modules') diff --git a/modules/skottie/include/Skottie.h b/modules/skottie/include/Skottie.h index 1a27bd31ea..2375a2e639 100644 --- a/modules/skottie/include/Skottie.h +++ b/modules/skottie/include/Skottie.h @@ -83,7 +83,7 @@ public: 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 04b1caa770..ccc2fedf38 100644 --- a/modules/skottie/src/Skottie.cpp +++ b/modules/skottie/src/Skottie.cpp @@ -1328,14 +1328,18 @@ sk_sp Animation::Make(const char* data, size_t data_len, const auto t1 = SkTime::GetMSecs(); stats->fJsonParseTimeMS = t1 - t0; - const auto version = ParseDefault(json["v"], SkString()); - const auto size = SkSize::Make(ParseDefault(json["w"], 0.0f), - ParseDefault(json["h"], 0.0f)); - const auto fps = ParseDefault(json["fr"], -1.0f); - - 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); + const auto version = ParseDefault(json["v"], SkString()); + const auto size = SkSize::Make(ParseDefault(json["w"], 0.0f), + ParseDefault(json["h"], 0.0f)); + const auto fps = ParseDefault(json["fr"], -1.0f), + inPoint = ParseDefault(json["ip"], 0.0f), + outPoint = SkTMax(ParseDefault(json["op"], SK_ScalarMax), inPoint); + + 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 @@ sk_sp Animation::Make(const char* data, size_t data_len, NullResourceProvider null_provider; const auto anim = sk_sp(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 @@ sk_sp Animation::MakeFromFile(const char path[], const ResourceProvid } 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(json["ip"], 0.0f)) - , fOutPoint(SkTMax(ParseDefault(json["op"], SK_ScalarMax), fInPoint)) { + , fInPoint(in) + , fOutPoint(out) { internal::AssetMap assets; if (const skjson::ArrayValue* jassets = json["assets"]) { -- cgit v1.2.3