From b5fcc90e5d09ccb505feca4615f2d020b9d8977d Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Thu, 7 Sep 2023 14:46:10 +0900 Subject: [PATCH] loader/lottie: fix a wrong precomp time remapping. the remapped frame number should be applied to the only referenced precomp layer. --- src/loaders/lottie/tvgLottieBuilder.cpp | 2 ++ src/loaders/lottie/tvgLottieModel.cpp | 4 +--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index 130d23fc..9a1d4ecb 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -694,6 +694,8 @@ static void _updatePrecomp(LottieLayer* precomp, int32_t frameNo) { if (precomp->children.count == 0) return; + frameNo -= precomp->startFrame; + //TODO: skip if the layer is static. for (auto child = precomp->children.end() - 1; child >= precomp->children.data; --child) { _updateLayer(precomp, static_cast(*child), frameNo); diff --git a/src/loaders/lottie/tvgLottieModel.cpp b/src/loaders/lottie/tvgLottieModel.cpp index 63951d2f..cc91792b 100644 --- a/src/loaders/lottie/tvgLottieModel.cpp +++ b/src/loaders/lottie/tvgLottieModel.cpp @@ -148,9 +148,7 @@ int32_t LottieLayer::remap(int32_t frameNo) if (timeRemap.frames) { frameNo = comp->frameAtTime(timeRemap(frameNo)); } - - if (type == Precomp) return (int32_t)(frameNo / timeStretch) - startFrame; - else return (int32_t)(frameNo / timeStretch); + return (int32_t)(frameNo / timeStretch); }