wasm: optimize TVG saving Logic

Optimized the saving logic for TVG.

Copying the picture is unnecessary;
the logic now directly utilizes the currently held picture.
This commit is contained in:
Hermet Park 2024-03-02 06:24:44 +09:00
parent 06a34a4c65
commit 059939f2ed

View file

@ -22,6 +22,7 @@
#include <thorvg.h> #include <thorvg.h>
#include <emscripten/bind.h> #include <emscripten/bind.h>
#include "tvgPicture.h"
using namespace emscripten; using namespace emscripten;
using namespace std; using namespace std;
@ -236,26 +237,25 @@ public:
if (!animation) return false; if (!animation) return false;
auto duplicate = cast<Picture>(animation->picture()->duplicate());
if (!duplicate) {
errorMsg = "duplicate(), fail";
return false;
}
auto saver = Saver::gen(); auto saver = Saver::gen();
if (!saver) { if (!saver) {
errorMsg = "Invalid saver"; errorMsg = "Invalid saver";
return false; return false;
} }
if (saver->save(std::move(duplicate), "output.tvg") != tvg::Result::Success) { //preserve the picture using the reference counting
PP(animation->picture())->ref();
if (saver->save(tvg::cast<Picture>(animation->picture()), "output.tvg") != tvg::Result::Success) {
PP(animation->picture())->unref();
errorMsg = "save(), fail"; errorMsg = "save(), fail";
return false; return false;
} }
saver->sync(); saver->sync();
PP(animation->picture())->unref();
return true; return true;
} }