diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index 63f5b6fd..ec75c4ce 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -978,7 +978,7 @@ void LottieBuilder::updateSolid(LottieLayer* layer) void LottieBuilder::updateImage(LottieGroup* layer) { auto image = static_cast(layer->children.first()); - layer->scene->push(tvg::cast(image->pooling(true))); + layer->scene->push(tvg::cast(image->picture)); } diff --git a/src/loaders/lottie/tvgLottieModel.cpp b/src/loaders/lottie/tvgLottieModel.cpp index 4c828b9d..cc23a62d 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().release(); + if (!picture) { + picture = Picture::gen().release(); + 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 8c165595..516881bd 100644 --- a/src/loaders/lottie/tvgLottieModel.h +++ b/src/loaders/lottie/tvgLottieModel.h @@ -656,9 +656,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 {