diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index b2bb3235..e37523b1 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -980,7 +980,7 @@ void LottieBuilder::updateSolid(LottieLayer* layer) void LottieBuilder::updateImage(LottieGroup* layer) { auto image = static_cast(layer->children.first()); - layer->scene->push(image->pooling(true)); + layer->scene->push(image->picture); } diff --git a/src/loaders/lottie/tvgLottieModel.cpp b/src/loaders/lottie/tvgLottieModel.cpp index 333c8fb4..3dbe3794 100644 --- a/src/loaders/lottie/tvgLottieModel.cpp +++ b/src/loaders/lottie/tvgLottieModel.cpp @@ -159,7 +159,10 @@ void LottieImage::prepare() { LottieObject::type = LottieObject::Image; - auto picture = Picture::gen(); + if (!picture) { + picture = Picture::gen(); + PP(picture)->ref(); + } //force to load a picture on the same thread TaskScheduler::async(false); @@ -170,10 +173,6 @@ void LottieImage::prepare() TaskScheduler::async(true); picture->size(data.width, data.height); - PP(picture)->ref(); - - pooler.reset(); - pooler.push(picture); } diff --git a/src/loaders/lottie/tvgLottieModel.h b/src/loaders/lottie/tvgLottieModel.h index bb32019e..bb46d92f 100644 --- a/src/loaders/lottie/tvgLottieModel.h +++ b/src/loaders/lottie/tvgLottieModel.h @@ -672,9 +672,15 @@ struct LottieGradientStroke : LottieGradient, LottieStroke }; -struct LottieImage : LottieObject, LottieRenderPooler +struct LottieImage : LottieObject { LottieBitmap data; + Picture* picture = nullptr; + + ~LottieImage() + { + if (PP(picture)->unref() == 0) delete(picture); + } void override(LottieProperty* prop, bool byDefault = false) override {